branch: elpa/pg
commit 4bd877173912b0e663710f14e1f658955b59fbdd
Author: Eric Marsden <[email protected]>
Commit: Eric Marsden <[email protected]>
Add basic parsing support for arrays of time-related objects.
New parsers for _time, _timetz, _reltime, _timespan, _tinterval objects,
that are simply parsed as
strings.
---
pg.el | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/pg.el b/pg.el
index 081b7747541..d2c99dc8731 100644
--- a/pg.el
+++ b/pg.el
@@ -2997,12 +2997,34 @@ Uses text encoding ENCODING."
(pg-register-parser "timestamptz" #'pg-isodate-with-timezone-parser)
(pg-register-parser "datetime" #'pg-isodate-with-timezone-parser)
+;; FIXME TODO _timestamp _timestamptz _datetime
+
(pg-register-parser "time" #'pg-text-parser) ; preparsed "15:32:45"
(pg-register-parser "timetz" #'pg-text-parser)
(pg-register-parser "reltime" #'pg-text-parser) ; don't know how to parse
these
(pg-register-parser "timespan" #'pg-text-parser)
(pg-register-parser "tinterval" #'pg-text-parser)
+;; This is usable for time, timespan etc. types that we currently parse as
strings.
+(defun pg-timearr-parser (str _encoding)
+ "Parse PostgreSQL value STR as an array of time or date values."
+ (let ((len (length str)))
+ (unless (and (eql (aref str 0) ?{)
+ (eql (aref str (1- len)) ?}))
+ (signal 'pg-protocol-error (list "Unexpected format for array")))
+ (let ((maybe-items (cl-subseq str 1 (- len 1))))
+ (if (zerop (length maybe-items))
+ (vector)
+ (let ((items (split-string maybe-items ",")))
+ (apply #'vector (mapcar (lambda (x) (pg-text-parser x nil))
items)))))))
+
+(pg-register-parser "_time" #'pg-timearr-parser)
+(pg-register-parser "_timetz" 'pg-timearr-parser)
+(pg-register-parser "_reltime" 'pg-timearr-parser)
+(pg-register-parser "_timespan" 'pg-timearr-parser)
+(pg-register-parser "_tinterval" 'pg-timearr-parser)
+
+
;; A tsvector is a type used by PostgreSQL to support full-text search in
documents.
;;
;; Possible input formats: