1
1
import DataArrays: NAtype
2
2
import JSON
3
- import Compat: Libc, unsafe_convert, parse, @compat
3
+ import Compat: Libc, unsafe_convert, parse, @compat , String, unsafe_string
4
4
5
5
abstract AbstractPostgresType
6
6
type PostgresType{Name} <: AbstractPostgresType end
@@ -9,7 +9,30 @@ abstract AbstractOID
9
9
type OID{N} <: AbstractOID end
10
10
11
11
oid {T<:AbstractPostgresType} (t:: Type{T} ) = convert (OID, t)
12
- pgtype (t:: Type ) = convert (PostgresType, t)
12
+
13
+ if VERSION < v " 0.5-dev+4194"
14
+ import Compat
15
+
16
+ function pgtype (t:: Type )
17
+ if t <: Compat.ASCIIString
18
+ convert (PostgresType, String)
19
+ elseif t <: Vector{Compat.ASCIIString}
20
+ convert (PostgresType, Vector{String})
21
+ else
22
+ convert (PostgresType, t)
23
+ end
24
+ end
25
+
26
+ function pgdata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} , data:: Vector{Compat.ASCIIString} )
27
+ ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
28
+ end
29
+
30
+ function pgdata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} , data:: Vector{Compat.ASCIIString} )
31
+ ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
32
+ end
33
+ else
34
+ pgtype (t:: Type ) = convert (PostgresType, t)
35
+ end
13
36
14
37
Base. convert {T} (:: Type{Oid} , :: Type{OID{T}} ) = convert (Oid, T)
15
38
@@ -18,6 +41,7 @@ function newpgtype(pgtypename, oid, jltypes)
18
41
Base. convert (:: Type{PostgresType} , :: Type{OID{oid}} ) = PostgresType{pgtypename}
19
42
20
43
for t in jltypes
44
+ pgtypename in [:jsonb , :_text ] && continue
21
45
Base. convert (:: Type{PostgresType} , :: Type{t} ) = PostgresType{pgtypename}
22
46
end
23
47
end
@@ -33,7 +57,7 @@ newpgtype(:int2, 21, (Int16,))
33
57
newpgtype (:float8 , 701 , (Float64,))
34
58
newpgtype (:float4 , 700 , (Float32,))
35
59
newpgtype (:bpchar , 1042 , ())
36
- newpgtype (:varchar , 1043 , (ASCIIString,UTF8String ))
60
+ newpgtype (:varchar , 1043 , (String, ))
37
61
newpgtype (:text , 25 , ())
38
62
newpgtype (:numeric , 1700 , (BigInt,BigFloat))
39
63
newpgtype (:date , 1082 , ())
@@ -50,8 +74,8 @@ newpgtype(:_int4, 1007, (Vector{Int32},))
50
74
newpgtype (:_int2 , 1005 , (Vector{Int16},))
51
75
newpgtype (:_float8 , 1022 , (Vector{Float64},))
52
76
newpgtype (:_float4 , 1021 , (Vector{Float32},))
53
- newpgtype (:_varchar , 1015 , (Vector{ASCIIString}, Vector{UTF8String} ))
54
- newpgtype (:_text , 1009 , (Vector{ASCIIString}, Vector{UTF8String} ))
77
+ newpgtype (:_varchar , 1015 , (Vector{String}, ))
78
+ newpgtype (:_text , 1009 , (Vector{String}, ))
55
79
56
80
57
81
typealias PGStringTypes Union{Type{PostgresType{:bpchar }},
@@ -74,54 +98,54 @@ function decode_bytea_hex(s::AbstractString)
74
98
return hex2bytes (s[3 : end ])
75
99
end
76
100
77
- jldata (:: Type{PostgresType{:date}} , ptr:: Ptr{UInt8} ) = bytestring (ptr)
101
+ jldata (:: Type{PostgresType{:date}} , ptr:: Ptr{UInt8} ) = unsafe_string (ptr)
78
102
79
- jldata (:: Type{PostgresType{:timestamp}} , ptr:: Ptr{UInt8} ) = bytestring (ptr)
103
+ jldata (:: Type{PostgresType{:timestamp}} , ptr:: Ptr{UInt8} ) = unsafe_string (ptr)
80
104
81
- jldata (:: Type{PostgresType{:timestamptz}} , ptr:: Ptr{UInt8} ) = bytestring (ptr)
105
+ jldata (:: Type{PostgresType{:timestamptz}} , ptr:: Ptr{UInt8} ) = unsafe_string (ptr)
82
106
83
- jldata (:: Type{PostgresType{:bool}} , ptr:: Ptr{UInt8} ) = bytestring (ptr) != " f"
107
+ jldata (:: Type{PostgresType{:bool}} , ptr:: Ptr{UInt8} ) = unsafe_string (ptr) != " f"
84
108
85
- jldata (:: Type{PostgresType{:int8}} , ptr:: Ptr{UInt8} ) = parse (Int64, bytestring (ptr))
109
+ jldata (:: Type{PostgresType{:int8}} , ptr:: Ptr{UInt8} ) = parse (Int64, unsafe_string (ptr))
86
110
87
- jldata (:: Type{PostgresType{:int4}} , ptr:: Ptr{UInt8} ) = parse (Int32, bytestring (ptr))
111
+ jldata (:: Type{PostgresType{:int4}} , ptr:: Ptr{UInt8} ) = parse (Int32, unsafe_string (ptr))
88
112
89
- jldata (:: Type{PostgresType{:int2}} , ptr:: Ptr{UInt8} ) = parse (Int16, bytestring (ptr))
113
+ jldata (:: Type{PostgresType{:int2}} , ptr:: Ptr{UInt8} ) = parse (Int16, unsafe_string (ptr))
90
114
91
- jldata (:: Type{PostgresType{:float8}} , ptr:: Ptr{UInt8} ) = parse (Float64, bytestring (ptr))
115
+ jldata (:: Type{PostgresType{:float8}} , ptr:: Ptr{UInt8} ) = parse (Float64, unsafe_string (ptr))
92
116
93
- jldata (:: Type{PostgresType{:float4}} , ptr:: Ptr{UInt8} ) = parse (Float32, bytestring (ptr))
117
+ jldata (:: Type{PostgresType{:float4}} , ptr:: Ptr{UInt8} ) = parse (Float32, unsafe_string (ptr))
94
118
95
119
function jldata (:: Type{PostgresType{:numeric}} , ptr:: Ptr{UInt8} )
96
- s = bytestring (ptr)
120
+ s = unsafe_string (ptr)
97
121
return parse (search (s, ' .' ) == 0 ? BigInt : BigFloat, s)
98
122
end
99
123
100
- jldata (:: PGStringTypes , ptr:: Ptr{UInt8} ) = bytestring (ptr)
124
+ jldata (:: PGStringTypes , ptr:: Ptr{UInt8} ) = unsafe_string (ptr)
101
125
102
- jldata (:: Type{PostgresType{:bytea}} , ptr:: Ptr{UInt8} ) = bytestring (ptr) |> decode_bytea_hex
126
+ jldata (:: Type{PostgresType{:bytea}} , ptr:: Ptr{UInt8} ) = unsafe_string (ptr) |> decode_bytea_hex
103
127
104
128
jldata (:: Type{PostgresType{:unknown}} , ptr:: Ptr{UInt8} ) = Union{}
105
129
106
- jldata (:: Type{PostgresType{:json}} , ptr:: Ptr{UInt8} ) = JSON. parse (bytestring (ptr))
130
+ jldata (:: Type{PostgresType{:json}} , ptr:: Ptr{UInt8} ) = JSON. parse (unsafe_string (ptr))
107
131
108
- jldata (:: Type{PostgresType{:jsonb}} , ptr:: Ptr{UInt8} ) = JSON. parse (bytestring (ptr))
132
+ jldata (:: Type{PostgresType{:jsonb}} , ptr:: Ptr{UInt8} ) = JSON. parse (unsafe_string (ptr))
109
133
110
- jldata (:: Type{PostgresType{:_bool}} , ptr:: Ptr{UInt8} ) = map (x -> x != " f" , split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
134
+ jldata (:: Type{PostgresType{:_bool}} , ptr:: Ptr{UInt8} ) = map (x -> x != " f" , split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
111
135
112
- jldata (:: Type{PostgresType{:_int8}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int64, x), split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
136
+ jldata (:: Type{PostgresType{:_int8}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int64, x), split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
113
137
114
- jldata (:: Type{PostgresType{:_int4}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int32, x), split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
138
+ jldata (:: Type{PostgresType{:_int4}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int32, x), split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
115
139
116
- jldata (:: Type{PostgresType{:_int2}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int16, x), split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
140
+ jldata (:: Type{PostgresType{:_int2}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Int16, x), split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
117
141
118
- jldata (:: Type{PostgresType{:_float8}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Float64, x), split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
142
+ jldata (:: Type{PostgresType{:_float8}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Float64, x), split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
119
143
120
- jldata (:: Type{PostgresType{:_float4}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Float32, x), split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
144
+ jldata (:: Type{PostgresType{:_float4}} , ptr:: Ptr{UInt8} ) = map (x -> parse (Float32, x), split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
121
145
122
- jldata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} ) = convert (Vector{AbstractString}, split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
146
+ jldata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} ) = convert (Vector{AbstractString}, split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
123
147
124
- jldata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} ) = convert (Vector{AbstractString}, split (bytestring (ptr)[2 : end - 1 ], ' ,' ))
148
+ jldata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} ) = convert (Vector{AbstractString}, split (unsafe_string (ptr)[2 : end - 1 ], ' ,' ))
125
149
126
150
function pgdata (:: Type{PostgresType{:bool}} , ptr:: Ptr{UInt8} , data:: Bool )
127
151
ptr = data ? storestring! (ptr, " TRUE" ) : storestring! (ptr, " FALSE" )
@@ -151,41 +175,37 @@ function pgdata(::Type{PostgresType{:numeric}}, ptr::Ptr{UInt8}, data::Number)
151
175
ptr = storestring! (ptr, string (data))
152
176
end
153
177
154
- function pgdata (:: PGStringTypes , ptr:: Ptr{UInt8} , data:: ByteString )
155
- ptr = storestring! (ptr, data)
156
- end
157
-
158
178
function pgdata (:: PGStringTypes , ptr:: Ptr{UInt8} , data:: AbstractString )
159
- ptr = storestring! (ptr, bytestring ( data) )
179
+ ptr = storestring! (ptr, data)
160
180
end
161
181
162
182
function pgdata (:: PostgresType{:date} , ptr:: Ptr{UInt8} , data:: AbstractString )
163
- ptr = storestring! (ptr, bytestring ( data) )
183
+ ptr = storestring! (ptr, data)
164
184
ptr = Dates. DateFormat (ptr)
165
185
end
166
186
167
187
function pgdata (:: PostgresType{:timestamp} , ptr:: Ptr{UInt8} , data:: AbstractString )
168
- ptr = storestring! (ptr, bytestring ( data) )
188
+ ptr = storestring! (ptr, data)
169
189
end
170
190
171
191
function pgdata (:: PostgresType{:timestamptz} , ptr:: Ptr{UInt8} , data:: AbstractString )
172
- ptr = storestring! (ptr, bytestring ( data) )
192
+ ptr = storestring! (ptr, data)
173
193
end
174
194
175
195
function pgdata (:: Type{PostgresType{:bytea}} , ptr:: Ptr{UInt8} , data:: Vector{UInt8} )
176
- ptr = storestring! (ptr, bytestring (" \\ x" , bytes2hex (data)))
196
+ ptr = storestring! (ptr, string (" \\ x" , bytes2hex (data)))
177
197
end
178
198
179
199
function pgdata (:: Type{PostgresType{:unknown}} , ptr:: Ptr{UInt8} , data)
180
200
ptr = storestring! (ptr, string (data))
181
201
end
182
202
183
203
function pgdata {T<:AbstractString} (:: Type{PostgresType{:json}} , ptr:: Ptr{UInt8} , data:: Dict{T,Any} )
184
- ptr = storestring! (ptr, bytestring ( JSON. json (data) ))
204
+ ptr = storestring! (ptr, JSON. json (data))
185
205
end
186
206
187
207
function pgdata {T<:AbstractString} (:: Type{PostgresType{:jsonb}} , ptr:: Ptr{UInt8} , data:: Dict{T,Any} )
188
- ptr = storestring! (ptr, bytestring ( JSON. json (data) ))
208
+ ptr = storestring! (ptr, JSON. json (data))
189
209
end
190
210
191
211
function pgdata (:: Type{PostgresType{:_bool}} , ptr:: Ptr{UInt8} , data:: Vector{Bool} )
@@ -212,19 +232,11 @@ function pgdata(::Type{PostgresType{:_float4}}, ptr::Ptr{UInt8}, data::Vector{Fl
212
232
ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
213
233
end
214
234
215
- function pgdata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} , data:: Vector{ASCIIString} )
216
- ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
217
- end
218
-
219
- function pgdata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} , data:: Vector{UTF8String} )
220
- ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
221
- end
222
-
223
- function pgdata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} , data:: Vector{ASCIIString} )
235
+ function pgdata (:: Type{PostgresType{:_varchar}} , ptr:: Ptr{UInt8} , data:: Vector{String} )
224
236
ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
225
237
end
226
238
227
- function pgdata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} , data:: Vector{UTF8String } )
239
+ function pgdata (:: Type{PostgresType{:_text}} , ptr:: Ptr{UInt8} , data:: Vector{String } )
228
240
ptr = storestring! (ptr, string (" {" , join (data, ' ,' ), " }" ))
229
241
end
230
242
0 commit comments