@@ -18,6 +18,7 @@ var getStringTypeParser = function(oid) {
18
18
return typeParsers [ oid ] || noParse ;
19
19
} ;
20
20
21
+
21
22
//parses PostgreSQL server formatted date strings into javascript date objects
22
23
var parseDate = function ( isoDate ) {
23
24
//TODO this could do w/ a refactor
@@ -86,6 +87,33 @@ var parseStringArray = function(val) {
86
87
} ) ;
87
88
} ;
88
89
90
+
91
+ var NUM = '([+-]?\\d+)' ;
92
+ var YEAR = NUM + '\\s+years?' ;
93
+ var MON = NUM + '\\s+mons?' ;
94
+ var DAY = NUM + '\\s+days?' ;
95
+ var TIME = '([+-])?(\\d\\d):(\\d\\d):(\\d\\d)' ;
96
+ var INTERVAL = [ YEAR , MON , DAY , TIME ] . map ( function ( p ) { return "(" + p + ")?" } ) . join ( '\\s*' ) ;
97
+
98
+
99
+ var parseInterval = function ( val ) {
100
+ if ( ! val ) return { } ;
101
+ var m = new RegExp ( INTERVAL ) . exec ( val ) ;
102
+ var i = { } ;
103
+ if ( m [ 2 ] ) i . years = parseInt ( m [ 2 ] ) ;
104
+ if ( m [ 4 ] ) i . months = parseInt ( m [ 4 ] ) ;
105
+ if ( m [ 6 ] ) i . days = parseInt ( m [ 6 ] ) ;
106
+ if ( m [ 9 ] ) i . hours = parseInt ( m [ 9 ] ) ;
107
+ if ( m [ 10 ] ) i . minutes = parseInt ( m [ 10 ] ) ;
108
+ if ( m [ 11 ] ) i . seconds = parseInt ( m [ 11 ] ) ;
109
+ if ( m [ 8 ] == '-' ) {
110
+ if ( i . hours ) i . hours *= - 1 ;
111
+ if ( i . minutes ) i . minutes *= - 1 ;
112
+ if ( i . seconds ) i . seconds *= - 1 ;
113
+ }
114
+ return i ;
115
+ } ;
116
+
89
117
//default string type parser registrations
90
118
registerStringTypeParser ( 20 , parseInt ) ;
91
119
registerStringTypeParser ( 21 , parseInt ) ;
@@ -99,8 +127,9 @@ registerStringTypeParser(1114, parseDate);
99
127
registerStringTypeParser ( 1184 , parseDate ) ;
100
128
registerStringTypeParser ( 1007 , parseIntegerArray ) ;
101
129
registerStringTypeParser ( 1009 , parseStringArray ) ;
130
+ registerStringTypeParser ( 1186 , parseInterval ) ;
102
131
103
132
module . exports = {
104
133
registerStringTypeParser : registerStringTypeParser ,
105
- getStringTypeParser : getStringTypeParser
134
+ getStringTypeParser : getStringTypeParser ,
106
135
}
0 commit comments