diff --git a/lib/native.js b/lib/native.js index 55147e5f..a4b4cd00 100644 --- a/lib/native.js +++ b/lib/native.js @@ -136,7 +136,24 @@ var NativeQuery = function(text, values, callback) { sys.inherits(NativeQuery, EventEmitter); var p = NativeQuery.prototype; -p.handleRow = function(row) { +//maps from native rowdata into api compatible row object +var mapRowData = function(row) { + var result = {}; + for(var i = 0, len = row.length; i < len; i++) { + var item = row[i]; + switch(item.type) { + case 23: + result[item.name] = parseInt(item.value); + break; + default: + result[item.name] = item.value; + } + } + return result; +} + +p.handleRow = function(rowData) { + var row = mapRowData(rowData); if(this.callback) { this.rows.push(row); } diff --git a/src/binding.cc b/src/binding.cc index 6eadfc14..c5894a0d 100644 --- a/src/binding.cc +++ b/src/binding.cc @@ -330,11 +330,18 @@ protected: int rowCount = PQntuples(result); for(int rowNumber = 0; rowNumber < rowCount; rowNumber++) { //create result object for this row - Local row = Object::New(); + Local row = Array::New(); int fieldCount = PQnfields(result); for(int fieldNumber = 0; fieldNumber < fieldCount; fieldNumber++) { + Local field = Object::New(); char* fieldName = PQfname(result, fieldNumber); - row->Set(String::New(fieldName), WrapFieldValue(result, rowNumber, fieldNumber)); + int fieldType = PQftype(result, fieldNumber); + char* fieldValue = PQgetvalue(result, rowNumber, fieldNumber); + //TODO use symbols here + field->Set(String::New("name"), String::New(fieldName)); + field->Set(String::New("value"), String::New(fieldValue)); + field->Set(String::New("type"), Integer::New(fieldType)); + row->Set(Integer::New(fieldNumber), field); } //not sure about what to dealloc or scope#Close here diff --git a/test/cli.js b/test/cli.js index f2eb651c..b781f5b6 100644 --- a/test/cli.js +++ b/test/cli.js @@ -38,8 +38,8 @@ for(var i = 0; i < args.length; i++) { case '-t': case '--test': config.test = args[++i]; - case '--libpq': - config.libpq = (args[++i] == "true"); + case '--native': + config.native = (args[++i] == "true"); default: break; } diff --git a/test/integration/client/api-tests.js b/test/integration/client/api-tests.js index b126a29b..7427f671 100644 --- a/test/integration/client/api-tests.js +++ b/test/integration/client/api-tests.js @@ -1,5 +1,10 @@ var helper = require(__dirname + '/../test-helper'); var pg = require(__dirname + '/../../../lib'); + +if(helper.args.native) { + pg = require(__dirname + '/../../../lib/native') +} + if(helper.args.libpq) { pg = require(__dirname + "/../../../lib/binding"); } diff --git a/wscript b/wscript index 74c25244..2a340d5b 100644 --- a/wscript +++ b/wscript @@ -1,6 +1,6 @@ import Options, Utils from os import unlink, symlink, popen -from os.path import exists +from os.path import exists srcdir = '.' blddir = 'build'