Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,27 @@ SQLParamString.prototype.calcBlr = function(blr) {

//------------------------------------------------------

function SQLParamStringBuffer(value) {
this.value = value;
}

SQLParamStringBuffer.prototype.encode = function(data) {
if (this.value != null) {
data.addBuffer(this.value);
data.addInt(0);
} else {
data.addInt(1);
}
};

SQLParamStringBuffer.prototype.calcBlr = function(blr) {
blr.addByte(blr_text);
var len = this.value ? Buffer.byteLength(this.value) : 0;
blr.addWord(len);
};

//------------------------------------------------------

function SQLParamQuad(value) {
this.value = value;
}
Expand Down Expand Up @@ -3757,9 +3778,13 @@ Connection.prototype.executeStatement = function(transaction, statement, params,
ret[i] = new SQLParamBool(value);
break;
default:
if (Buffer.isBuffer(value)) {
ret[i] = new SQLParamStringBuffer(value);
} else {
//throw new Error('Unexpected parametter: ' + JSON.stringify(params) + ' - ' + JSON.stringify(input));
ret[i] = new SQLParamString(value.toString());
break;
}
break;
}
done();
}
Expand Down
8 changes: 8 additions & 0 deletions lib/serialize.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,14 @@ XdrWriter.prototype.addText = function(s, encoding) {
this.pos += alen;
};

XdrWriter.prototype.addBuffer = function(b) {
var len = Buffer.byteLength(b)
var alen = align(len);
this.ensure(alen);
b.copy(this.buffer, this.pos);
this.pos += alen;
};

XdrWriter.prototype.addBlr = function(blr) {
var alen = align(blr.pos);
this.ensure(alen + 4);
Expand Down
37 changes: 23 additions & 14 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,15 @@ describe('Database', function () {
});
});

it('should insert with string from buffer', function (done) {
db.query('INSERT INTO test (ID, NAME, CREATED) VALUES(?, ?, ?) RETURNING ID', [5, Buffer.from('Firebird 5'), '14.12.2014T12:12:12'], function (err, row) {
//db.query('INSERT INTO test (ID, NAME, CREATED) VALUES(?, ?, ?) RETURNING ID', [5, 'Firebird 5', '14.12.2014T12:12:12'], function (err, row) {
assert.ok(!err, err);
assert.equal(row['id'], 5);
done();
});
});

describe('verify', function () {
it('should select data from inserts', function (done) {
db.query('SELECT * FROM test', function (err, rows) {
Expand Down Expand Up @@ -282,8 +291,8 @@ describe('Database', function () {
db.execute('SELECT COUNT(*), SUM(ID) FROM test', function (err, rows) {
assert.ok(!err, err);
var row = rows[0];
assert.equal(row[0], 4);
assert.equal(row[1], 10);
assert.equal(row[0], 5);
assert.equal(row[1], 15);
done();
});
});
Expand All @@ -292,8 +301,8 @@ describe('Database', function () {
db.query('SELECT COUNT(*), SUM(ID) FROM test', function (err, rows) {
assert.ok(!err, err);
var row = rows[0];
assert.equal(row.count, 4);
assert.equal(row.sum, 10);
assert.equal(row.count, 5);
assert.equal(row.sum, 15);
done();
});
});
Expand All @@ -303,7 +312,7 @@ describe('Database', function () {
db.sequentially('SELECT Id FROM test', function (row) {
sum += row[0];
}, function () {
assert.equal(sum, 10);
assert.equal(sum, 15);
done();
}, true);
});
Expand All @@ -313,7 +322,7 @@ describe('Database', function () {
db.sequentially('SELECT Id FROM test', function (row) {
sum += row.id;
}, function () {
assert.equal(sum, 10);
assert.equal(sum, 15);
done();
});
});
Expand All @@ -324,15 +333,15 @@ describe('Database', function () {
it('should rollback', function (done) {
db.transaction(function (err, transaction) {
assert(!err, err);
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [5, 'Transaction 1'], function (err) {
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [6, 'Transaction 1'], function (err) {
assert.ok(!err, err);
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [6, 'Transaction 2'], function (err) {
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [7, 'Transaction 2'], function (err) {
assert.ok(!err, err);
transaction.query('INSERT INTO test_fail (ID, NAME) VALUES(?, ?)', [7, 'Transaction 3'], function (err) {
transaction.query('INSERT INTO test_fail (ID, NAME) VALUES(?, ?)', [8, 'Transaction 3'], function (err) {
assert.ok(err);
transaction.rollback(function (err) {
assert.ok(!err, err);
verify(done, 4);
verify(done, 5);
});
});
});
Expand All @@ -343,15 +352,15 @@ describe('Database', function () {
it('should commit', function (done) {
db.transaction(function (err, transaction) {
assert(!err, err);
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [5, 'Transaction 1'], function (err) {
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [6, 'Transaction 1'], function (err) {
assert.ok(!err, err);
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [6, 'Transaction 2'], function (err) {
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [7, 'Transaction 2'], function (err) {
assert.ok(!err, err);
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [7, 'Transaction 3'], function (err) {
transaction.query('INSERT INTO test (ID, NAME) VALUES(?, ?)', [8, 'Transaction 3'], function (err) {
assert.ok(!err, err);
transaction.commit(function (err) {
assert.ok(!err, err);
verify(done, 7);
verify(done, 8);
});
});
});
Expand Down