mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
initial work on dates
This commit is contained in:
parent
0f926ca62e
commit
074779b5ff
@ -221,32 +221,51 @@ p.onDataRow = function(msg) {
|
||||
this.emit('row', msg);
|
||||
};
|
||||
|
||||
var dateParser = function(isoDate) {
|
||||
//TODO find some regexp help
|
||||
//this method works but it's ooglay
|
||||
var split = isoDate.split(' ');
|
||||
var date = split[0];
|
||||
var time = split[1];
|
||||
var splitDate = date.split('-');
|
||||
var year = (splitDate[0]);
|
||||
var month = parseInt(splitDate[1])-1;
|
||||
var day = (splitDate[2]);
|
||||
var splitTime = time.split(':');
|
||||
var hour = parseInt(splitTime[0]);
|
||||
var min = splitTime[1];
|
||||
var end = splitTime[2];
|
||||
var seconds = /(\d{2})/.exec(end);
|
||||
seconds = (seconds ? seconds[1] : 0);
|
||||
var mili = /\.(\d{1,})/.exec(end);
|
||||
mili = mili ? mili[1].slice(0,3) : 0;
|
||||
var tZone = /([Z|+\-])(\d{2})?(\d{2})?/.exec(end);
|
||||
//minutes to adjust for timezone
|
||||
var tzAdjust = 0;
|
||||
if(tZone) {
|
||||
var type = tZone[1];
|
||||
switch(type) {
|
||||
case 'Z': break;
|
||||
case '-':
|
||||
tzAdjust = -(((parseInt(tZone[2])*60)+(parseInt(tZone[3]||0))));
|
||||
break;
|
||||
case '+':
|
||||
tzAdjust = (((parseInt(tZone[2])*60)+(parseInt(tZone[3]||0))));
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unidentifed tZone part " + type);
|
||||
}
|
||||
}
|
||||
console.log("tzAdjust " + tzAdjust);
|
||||
var utcOffset = Date.UTC(year, month, day, hour, min, seconds, mili);
|
||||
var date = new Date(utcOffset+(tzAdjust*1000*60));
|
||||
|
||||
|
||||
// var intParser = {
|
||||
// fromDbValue: parseInt
|
||||
// };
|
||||
|
||||
// var floatParser = {
|
||||
// fromDbValue: parseFloat
|
||||
// };
|
||||
|
||||
// var timeParser = {
|
||||
// fromDbValue: function(isoTime) {
|
||||
// var when = new Date();
|
||||
// var split = isoTime.split(':');
|
||||
// when.setHours(split[0]);
|
||||
// when.setMinutes(split[1]);
|
||||
// when.setSeconds(split[2].split('-') [0]);
|
||||
// return when;
|
||||
// }
|
||||
// };
|
||||
|
||||
// var dateParser = {
|
||||
// fromDbValue: function(isoDate) {
|
||||
// return Date.parse(isoDate);
|
||||
// }
|
||||
// };
|
||||
console.log(isoDate);
|
||||
console.log(date);
|
||||
console.log("");
|
||||
return isoDate;
|
||||
};
|
||||
|
||||
Client.dataTypeParser = {
|
||||
20: parseInt,
|
||||
@ -256,32 +275,14 @@ Client.dataTypeParser = {
|
||||
1700: parseFloat,
|
||||
700: parseFloat,
|
||||
701: parseFloat,
|
||||
16: function(dbVal) {
|
||||
16: function(dbVal) { //boolean
|
||||
return dbVal === 't';
|
||||
}
|
||||
},
|
||||
// 1083: timeParser,
|
||||
// 1266: timeParser,
|
||||
// 1114: dateParser,
|
||||
// 1184: dateParser
|
||||
1114: dateParser,
|
||||
1184: dateParser
|
||||
};
|
||||
|
||||
// p.processRowDescription = function(description) {
|
||||
// this.fields = description.fields;
|
||||
// };
|
||||
|
||||
// p.processDataRow = function(dataRow) {
|
||||
// var row = dataRow.fields;
|
||||
// var fields = this.fields || [];
|
||||
// var field, dataType;
|
||||
// for(var i = 0, len = row.length; i < len; i++) {
|
||||
// field = fields[i] || 0
|
||||
// var dataType = Client.dataTypes[field.dataTypeID];
|
||||
// if(dataType) {
|
||||
// row[i] = dataType.fromDbValue(row[i]);
|
||||
// }
|
||||
// }
|
||||
// this.emit('row',row);
|
||||
// };
|
||||
|
||||
//end parsing methods
|
||||
module.exports = Client;
|
||||
|
||||
@ -36,7 +36,6 @@ var testForTypeCoercion = function(type){
|
||||
});
|
||||
};
|
||||
|
||||
//TODO test for nulls
|
||||
var types = [{
|
||||
name: 'integer',
|
||||
values: [1, -1, null]
|
||||
|
||||
@ -63,6 +63,34 @@ test('typed results', function() {
|
||||
dataTypeID: 16,
|
||||
actual: null,
|
||||
expected: null
|
||||
},{
|
||||
name: 'timestamptz with minutes in timezone',
|
||||
dataTypeID: 1184,
|
||||
actual: '2010-10-31 14:54:13.74-0530',
|
||||
expected: function(val) {
|
||||
return false;
|
||||
}
|
||||
},{
|
||||
name: 'timestampz with huge miliseconds in UTC',
|
||||
dataTypeID: 1184,
|
||||
actual: '2010-10-30 14:11:12.730838Z',
|
||||
expected: function(val) {
|
||||
return false;
|
||||
}
|
||||
},{
|
||||
name: 'timestampz with no miliseconds',
|
||||
dataTypeID: 1184,
|
||||
actual: '2010-10-30 13:10:01+05',
|
||||
expected: function(val) {
|
||||
return false;
|
||||
}
|
||||
},{
|
||||
name: 'timestamp',
|
||||
dataTypeID: 1114,
|
||||
actual: '2010-10-31 00:00:00',
|
||||
expected: function(val) {
|
||||
return false;
|
||||
}
|
||||
}];
|
||||
|
||||
|
||||
@ -74,7 +102,12 @@ test('typed results', function() {
|
||||
assert.emits(query, 'row', function(row) {
|
||||
for(var i = 0; i < tests.length; i++) {
|
||||
test('parses ' + tests[i].name, function() {
|
||||
assert.strictEqual(row.fields[i], tests[i].expected);
|
||||
var expected = tests[i].expected;
|
||||
if(typeof expected === 'function') {
|
||||
return expected(row.fields[i]);
|
||||
}
|
||||
assert.strictEqual(row.fields[i], expected);
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user