diff --git a/mysql/commands.js b/mysql/commands.js index 65946b4..519566a 100644 --- a/mysql/commands.js +++ b/mysql/commands.js @@ -157,6 +157,14 @@ function cmd(handlers) { this.connection.write_packet(packet,pnum); } + + this.store_column = function(r,f,v) + { + if (this.connection.row_as_hash) + r[f.name] = v; + else + r.push(v); + } } function auth(db, user, password) @@ -235,13 +243,14 @@ function query(sql) { if (r.isEOFpacket()) return 'done'; - var row = []; + + var row = this.connection.row_as_hash ? {} : []; var field_index = 0; while (!r.eof()) { var field = this.fields[field_index]; - var value = r.lcstring(); - row.push(string2type(value, field.type)); + var value = string2type(r.lcstring(), field.type); // todo: move to serialiser unpackString + this.store_column(row, field, value) field_index++; } this.emit('row', row, this.fields); @@ -393,13 +402,16 @@ function execute(sql, parameters) bitmap_byte = r.num(1); } } - var row = []; + var row = this.connection.row_as_hash ? {} : []; for (var f=0; f < this.ps.field_count; ++f) { + var field = this.ps.fields[f]; if (!null_bit_map[f]) { - var field = this.ps.fields[f]; - row.push(r.unpackBinary(field.type, field.flags & field_flags.UNSIGNED)); + var value = r.unpackBinary(field.type, field.flags & field_flags.UNSIGNED); + this.store_column(row, field, value); + } else { + this.store_column(row, field, null); } } this.emit('row', row); diff --git a/test_execute.js b/test_execute.js index a4b2c88..1c9bf01 100755 --- a/test_execute.js +++ b/test_execute.js @@ -5,5 +5,5 @@ var db = require("mysql/client").createTCPClient(); db.auth("test", "testuser", "testpass"); db.prepare(process.argv[2]); -db.execute(process.argv[2]).addListener('binrow', function(r) { sys.puts("binrow received: " + sys.inspect(r)); } ); +db.execute(process.argv[2]).addListener('row', function(r) { sys.puts("binrow received: " + sys.inspect(r)); } ); db.close(); diff --git a/test_stmt_parameters.js b/test_stmt_parameters.js index d79c703..440ccb7 100755 --- a/test_stmt_parameters.js +++ b/test_stmt_parameters.js @@ -7,6 +7,7 @@ db.auth("test", "testuser", "testpass"); //var sql = "select null,null,2,null,1,null,null"; var sql = process.argv[2]; db.prepare(sql); +db.row_as_hash = true; db.execute(sql, process.argv.slice(3)) .addListener('field', function(f) { sys.puts( "field: " + sys.inspect(f)); }) .addListener('row', function(r) { sys.puts("row: " + sys.inspect(r)); } );