Skip to content

Commit

Permalink
fixes #75, test for #76
Browse files Browse the repository at this point in the history
  • Loading branch information
xdenser committed Feb 7, 2017
1 parent 2fcd701 commit df653ee
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 21 deletions.
30 changes: 11 additions & 19 deletions src/fb-bindings-statement.cc
Original file line number Diff line number Diff line change
Expand Up @@ -164,25 +164,17 @@ void FBStatement::EIO_After_Exec(uv_work_t *req)
}
else
{
if(!fb_stmt->sqldap->sqld)
{
argc = 1;
event = Nan::New("result").ToLocalChecked();
argv[0] = Nan::Null();
}
else
{
argv[0] = Nan::Null();
argc = 1;
event = Nan::New("result").ToLocalChecked();

if(fb_stmt->statement_type != isc_info_sql_stmt_select)
{
argv[1] = fb_stmt->getCurrentRow(true);
argc = 2;
}
}

argv[0] = Nan::Null();
argc = 1;
event = Nan::New("result").ToLocalChecked();
if (fb_stmt->sqldap->sqld) {
fb_stmt->retres = true;
if (fb_stmt->statement_type != isc_info_sql_stmt_select)
{
argv[1] = fb_stmt->getCurrentRow(true);
argc = 2;
}
}
}
((FBEventEmitter*) fb_stmt)->Emit(event,argc,argv);
fb_stmt->stop_async();
Expand Down
101 changes: 99 additions & 2 deletions tests/def/test-prepared-stmt.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,103 @@ module.exports = testCase({
stmt.execInTransSync("someThing");
}, 'transaction expected as first argument');
test.done();
}

},
reuseAsync: function(test) {
var data = [
[1,'string 1'],
[2,'string 2'],
[3,'string 3'],
[4,null]
];

test.expect(3+data.length*2);
var stmt = this.conn.prepareSync('insert into PREPARED_TEST_TABLE (test_field1, test_field2) values (?,?)');
test.ok(stmt, 'statement returned');
var i;
for(i=0;i<data.length;i++)
{
stmt.execSync.apply(stmt,data[i]);
}
this.conn.commitSync();

if(!this.conn.inTransaction) this.conn.startTransactionSync();
var stmt = this.conn.prepareSync('select test_field2 from PREPARED_TEST_TABLE where test_field1=?');
stmt.on('error', function(err){ console.log('Error: ',e)});

test.ok(stmt, 'statement returned');

test.ok(this.conn.inTransaction, 'inTransaction');

function query(param, expected, cb) {
//console.log('exec stmt', param, expected);
try {
stmt.exec(param);
}
catch(e) {
console.log('Error in exec ', e);
}
stmt.once('result', function(err) {
//console.log('result ', err);
try {
var row = stmt.fetchSync("all",true);
} catch(e) {
console.log('Error in fetch sync ', e);
}
// console.log('row ', row);
test.ok(row, 'row returned');
test.equal(expected,row[0].TEST_FIELD2,'test_field2 equal');
if(cb) {
cb();
}
});

}
!function doCall(i) {
if(!data[i]) {
return test.done();
}
query(data[i][0], data[i][1], function() {
doCall(i+1) ;
});
}(0);


},
test76: function(test) {
var data = [
[1,'string 1'],
[2,'string 2'],
[3,'string 3'],
[4,null]
];

test.expect(4);
var stmt = this.conn.prepareSync('insert into PREPARED_TEST_TABLE (test_field1, test_field2) values (?,?)');
test.ok(stmt, 'statement returned');
var i;
for(i=0;i<data.length;i++)
{
stmt.execSync.apply(stmt,data[i]);
}
this.conn.commitSync();

var statement = this.conn.prepareSync('select test_field2 from PREPARED_TEST_TABLE where test_field1=?');

var transaction = this.conn.startNewTransactionSync();
if (!transaction.inTransaction) { transaction.startSync(); }
statement.execInTransSync(transaction, 1);
var row = statement.fetchSync("all",true);
test.equal(row.length, 1, 'one row rturned');
transaction.rollbackSync();

transaction = this.conn.startNewTransactionSync();
if (!transaction.inTransaction) { transaction.startSync(); }
statement.execInTransSync(transaction, 2);
row = statement.fetchSync("all",true);
test.equal(row.length, 1, 'one row rturned');
transaction.rollbackSync();

test.ok(true);
test.done();
}
});

0 comments on commit df653ee

Please sign in to comment.