@@ -111,6 +111,39 @@ Base.convert(::Type{String}, pqv::PQValue) = String(pqv)
111
111
Base. length (pqv:: PQValue ) = length (string_view (pqv))
112
112
Base. lastindex (pqv:: PQValue ) = lastindex (string_view (pqv))
113
113
114
+
115
+ # Julia bug override, see https://github.com/iamed2/LibPQ.jl/issues/265
116
+ # and https://github.com/iamed2/LibPQ.jl/pull/248 for more details
117
+ function _tryparse (:: Type{T} , str, timeformat) where T
118
+ @static if v " 1.6.6" <= VERSION < v " 1.7.0" || VERSION > v " 1.7.2"
119
+ return tryparse (T, str, timeformat)
120
+ else
121
+ try
122
+ return tryparse (T, str, timeformat)
123
+ catch err
124
+ if ! (err isa InexactError)
125
+ rethrow (err)
126
+ end
127
+ end
128
+ return nothing
129
+ end
130
+ end
131
+
132
+ function _tryparse (:: Type{T} , str) where T
133
+ @static if v " 1.6.6" <= VERSION < v " 1.7.0" || VERSION > v " 1.7.2"
134
+ return tryparse (T, str)
135
+ else
136
+ try
137
+ return tryparse (T, str)
138
+ catch err
139
+ if ! (err isa InexactError)
140
+ rethrow (err)
141
+ end
142
+ end
143
+ return nothing
144
+ end
145
+ end
146
+
114
147
# Fallback, because Base requires string iteration state to be indices into the string.
115
148
# In an ideal world, PQValue would be an AbstractString and this particular method would
116
149
# not be necessary.
@@ -259,23 +292,11 @@ function pqparse(::Type{DateTime}, str::AbstractString)
259
292
parsed = _tryparse_datetime_inf (DateTime, str)
260
293
isnothing (parsed) || return parsed
261
294
262
- # Please, do not remove @static, see https://github.com/iamed2/LibPQ.jl/issues/265
263
- # for more details
264
- @static if v " 1.6.6" <= VERSION < v " 1.7.0" || VERSION > v " 1.7.2"
265
- parsed = tryparse (DateTime, str, TIMESTAMP_FORMAT)
266
- isnothing (parsed) || return parsed
295
+ parsed = _tryparse (DateTime, str, TIMESTAMP_FORMAT)
296
+ isnothing (parsed) || return parsed
267
297
268
- return parse (DateTime, _trunc_seconds (str), TIMESTAMP_FORMAT)
269
- else
270
- try
271
- return parse (DateTime, str, TIMESTAMP_FORMAT)
272
- catch err
273
- if ! (err isa InexactError)
274
- rethrow (err)
275
- end
276
- end
277
- return parse (DateTime, _trunc_seconds (str), TIMESTAMP_FORMAT)
278
- end
298
+ # If there's an error we want to see it here
299
+ return parse (DateTime, _trunc_seconds (str), TIMESTAMP_FORMAT)
279
300
end
280
301
281
302
# ISO, YMD
@@ -292,10 +313,11 @@ function pqparse(::Type{ZonedDateTime}, str::AbstractString)
292
313
isnothing (parsed) || return parsed
293
314
294
315
for fmt in TIMESTAMPTZ_FORMATS[1 : (end - 1 )]
295
- parsed = tryparse (ZonedDateTime, str, fmt)
316
+ parsed = _tryparse (ZonedDateTime, str, fmt)
296
317
isnothing (parsed) || return parsed
297
318
end
298
319
320
+ # If there's an error we want to see it here
299
321
return parse (ZonedDateTime, _trunc_seconds (str), TIMESTAMPTZ_FORMATS[end ])
300
322
end
301
323
@@ -307,9 +329,10 @@ function pqparse(::Type{UTCDateTime}, str::AbstractString)
307
329
# which is the default
308
330
str = replace (str, " +00" => " " )
309
331
310
- parsed = tryparse (UTCDateTime, str, TIMESTAMP_FORMAT)
332
+ parsed = _tryparse (UTCDateTime, str, TIMESTAMP_FORMAT)
311
333
isnothing (parsed) || return parsed
312
334
335
+ # If there's an error we want to see it here
313
336
return parse (UTCDateTime, _trunc_seconds (str), TIMESTAMP_FORMAT)
314
337
end
315
338
@@ -328,20 +351,11 @@ end
328
351
329
352
_DEFAULT_TYPE_MAP[:time ] = Time
330
353
function pqparse (:: Type{Time} , str:: AbstractString )
331
- @static if v " 1.6.6" <= VERSION < v " 1.7.0" || VERSION > v " 1.7.2"
332
- result = tryparse (Time, str)
333
- # If there's an error we want to see it here
334
- return isnothing (result) ? parse (Time, _trunc_seconds (str)) : result
335
- else
336
- try
337
- return parse (Time, str)
338
- catch err
339
- if ! (err isa InexactError)
340
- rethrow (err)
341
- end
342
- end
343
- return parse (Time, _trunc_seconds (str))
344
- end
354
+ parsed = _tryparse (Time, str)
355
+ isnothing (parsed) || return parsed
356
+
357
+ # If there's an error we want to see it here
358
+ return parse (Time, _trunc_seconds (str))
345
359
end
346
360
347
361
# InfExtendedTime support for Dates.TimeType
0 commit comments