@@ -18,6 +18,7 @@ var getStringTypeParser = function(oid) {
1818 return typeParsers [ oid ] || noParse ;
1919} ;
2020
21+
2122//parses PostgreSQL server formatted date strings into javascript date objects
2223var parseDate = function ( isoDate ) {
2324 //TODO this could do w/ a refactor
@@ -86,6 +87,37 @@ var parseStringArray = function(val) {
8687 } ) ;
8788} ;
8889
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+ for ( field in i ) {
115+ if ( i [ field ] == 0 )
116+ delete i [ field ] ;
117+ }
118+ return i ;
119+ } ;
120+
89121//default string type parser registrations
90122registerStringTypeParser ( 20 , parseInt ) ;
91123registerStringTypeParser ( 21 , parseInt ) ;
@@ -99,8 +131,9 @@ registerStringTypeParser(1114, parseDate);
99131registerStringTypeParser ( 1184 , parseDate ) ;
100132registerStringTypeParser ( 1007 , parseIntegerArray ) ;
101133registerStringTypeParser ( 1009 , parseStringArray ) ;
134+ registerStringTypeParser ( 1186 , parseInterval ) ;
102135
103136module . exports = {
104137 registerStringTypeParser : registerStringTypeParser ,
105- getStringTypeParser : getStringTypeParser
138+ getStringTypeParser : getStringTypeParser ,
106139}
0 commit comments