initial work on dates

This commit is contained in:
brianc 2010-10-31 17:12:13 -05:00
parent 0f926ca62e
commit 074779b5ff
3 changed files with 81 additions and 48 deletions

View File

@ -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;

View File

@ -36,7 +36,6 @@ var testForTypeCoercion = function(type){
});
};
//TODO test for nulls
var types = [{
name: 'integer',
values: [1, -1, null]

View File

@ -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);
});
}
});