Skip to content

Commit 3553fd2

Browse files
committed
Fix booleans and objects
1 parent 3b850e8 commit 3553fd2

4 files changed

Lines changed: 63 additions & 6 deletions

File tree

lib/dialect/postgres.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ Postgres.prototype._getParameterValue = function(value) {
5151
value = this._getParameterValue('\\x' + value.toString('hex'));
5252
} else {
5353
// rich object represent with string
54-
value = this._getParameterValue(value.toString());
54+
var strValue = value.toString();
55+
value = strValue === '[object Object]' ? this._getParameterValue(JSON.stringify(value)) : this._getParameterValue(strValue);
5556
}
5657
} else {
5758
throw new Error('Unable to use ' + value + ' in query');

lib/dialect/sqlite.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
var _ = require('lodash');
34
var util = require('util');
45
var assert = require('assert');
56

@@ -23,6 +24,10 @@ Sqlite.prototype._getParameterValue = function(value) {
2324
value = 'x' + this._getParameterValue(value.toString('hex'));
2425
} else if (value instanceof Date && this.config.dateTimeMillis) {
2526
value = value.getTime();
27+
} else if('boolean' === typeof value) {
28+
value = value ? 1 : 0;
29+
} else if(_.isArray(value)) {
30+
value = Postgres.prototype._getParameterValue.call(this, JSON.stringify(value));
2631
} else {
2732
value = Postgres.prototype._getParameterValue.call(this, value);
2833
}

test/dialects/case-tests.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Harness.test({
1212
},
1313
sqlite: {
1414
text : 'SELECT (CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE $5 END) FROM "customer"',
15-
string: 'SELECT (CASE WHEN TRUE THEN 0 WHEN FALSE THEN 1 ELSE 2 END) FROM "customer"'
15+
string: 'SELECT (CASE WHEN 1 THEN 0 WHEN 0 THEN 1 ELSE 2 END) FROM "customer"'
1616
},
1717
mysql: {
1818
text : 'SELECT (CASE WHEN ? THEN ? WHEN ? THEN ? ELSE ? END) FROM `customer`',
@@ -40,7 +40,7 @@ Harness.test({
4040
},
4141
sqlite: {
4242
text : 'SELECT ("customer"."age" + (CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE $5 END)) FROM "customer"',
43-
string: 'SELECT ("customer"."age" + (CASE WHEN TRUE THEN 0 WHEN FALSE THEN 1 ELSE 2 END)) FROM "customer"'
43+
string: 'SELECT ("customer"."age" + (CASE WHEN 1 THEN 0 WHEN 0 THEN 1 ELSE 2 END)) FROM "customer"'
4444
},
4545
mysql: {
4646
text : 'SELECT (`customer`.`age` + (CASE WHEN ? THEN ? WHEN ? THEN ? ELSE ? END)) FROM `customer`',
@@ -68,7 +68,7 @@ Harness.test({
6868
},
6969
sqlite: {
7070
text : 'SELECT ((CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE $5 END) + $6) FROM "customer"',
71-
string: 'SELECT ((CASE WHEN TRUE THEN 0 WHEN FALSE THEN 1 ELSE 2 END) + 3) FROM "customer"'
71+
string: 'SELECT ((CASE WHEN 1 THEN 0 WHEN 0 THEN 1 ELSE 2 END) + 3) FROM "customer"'
7272
},
7373
mysql: {
7474
text : 'SELECT ((CASE WHEN ? THEN ? WHEN ? THEN ? ELSE ? END) + ?) FROM `customer`',
@@ -96,7 +96,7 @@ Harness.test({
9696
},
9797
sqlite: {
9898
text : 'SELECT (CASE WHEN $1 THEN $2 WHEN $3 THEN $4 ELSE ("customer"."age" BETWEEN $5 AND $6) END) FROM "customer"',
99-
string: 'SELECT (CASE WHEN TRUE THEN 0 WHEN FALSE THEN 1 ELSE ("customer"."age" BETWEEN 10 AND 20) END) FROM "customer"'
99+
string: 'SELECT (CASE WHEN 1 THEN 0 WHEN 0 THEN 1 ELSE ("customer"."age" BETWEEN 10 AND 20) END) FROM "customer"'
100100
},
101101
mysql: {
102102
text : 'SELECT (CASE WHEN ? THEN ? WHEN ? THEN ? ELSE (`customer`.`age` BETWEEN ? AND ?) END) FROM `customer`',
@@ -124,7 +124,7 @@ Harness.test({
124124
},
125125
sqlite: {
126126
text : 'SELECT (CASE WHEN $1 THEN $2 WHEN $3 THEN $4 END) FROM "customer"',
127-
string: 'SELECT (CASE WHEN TRUE THEN 0 WHEN FALSE THEN 1 END) FROM "customer"'
127+
string: 'SELECT (CASE WHEN 1 THEN 0 WHEN 0 THEN 1 END) FROM "customer"'
128128
},
129129
mysql: {
130130
text : 'SELECT (CASE WHEN ? THEN ? WHEN ? THEN ? END) FROM `customer`',

test/dialects/update-tests.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var Harness = require('./support');
44
var post = Harness.definePostTable();
55
var user = Harness.defineUserTable();
6+
var variable = Harness.defineVariableTable();
67

78
Harness.test({
89
query: post.update({
@@ -193,3 +194,53 @@ Harness.test({
193194
},
194195
params: [new Buffer('test')]
195196
});
197+
198+
// Boolean updates
199+
Harness.test({
200+
query: variable.update({
201+
a: true,
202+
b: false
203+
}),
204+
pg: {
205+
text : 'UPDATE "variable" SET "a" = $1, "b" = $2',
206+
string: 'UPDATE "variable" SET "a" = TRUE, "b" = FALSE'
207+
},
208+
sqlite: {
209+
text : 'UPDATE "variable" SET "a" = $1, "b" = $2',
210+
string: 'UPDATE "variable" SET "a" = 1, "b" = 0'
211+
},
212+
mysql: {
213+
text : 'UPDATE `variable` SET `a` = ?, `b` = ?',
214+
string: 'UPDATE `variable` SET `a` = TRUE, `b` = FALSE'
215+
},
216+
oracle: {
217+
text : 'UPDATE "variable" SET "a" = :1, "b" = :2',
218+
string: 'UPDATE "variable" SET "a" = TRUE, "b" = FALSE'
219+
},
220+
params: [true, false]
221+
});
222+
223+
// Object updates
224+
Harness.test({
225+
query: variable.update({
226+
a: {"id": 1, "value": 2},
227+
b: [{"id": 2, "value": 3}, {"id": 3, "value": 4}]
228+
}),
229+
pg: {
230+
text : 'UPDATE "variable" SET "a" = $1, "b" = $2',
231+
string: 'UPDATE "variable" SET "a" = \'{"id":1,"value":2}\', "b" = (\'{"id":2,"value":3}\', \'{"id":3,"value":4}\')'
232+
},
233+
sqlite: {
234+
text : 'UPDATE "variable" SET "a" = $1, "b" = $2',
235+
string: 'UPDATE "variable" SET "a" = \'{"id":1,"value":2}\', "b" = \'[{"id":2,"value":3},{"id":3,"value":4}]\''
236+
},
237+
mysql: {
238+
text : 'UPDATE `variable` SET `a` = ?, `b` = ?',
239+
string: 'UPDATE `variable` SET `a` = \'{"id":1,"value":2}\', `b` = (\'{"id":2,"value":3}\', \'{"id":3,"value":4}\')'
240+
},
241+
oracle: {
242+
text : 'UPDATE "variable" SET "a" = :1, "b" = :2',
243+
string: 'UPDATE "variable" SET "a" = \'{"id":1,"value":2}\', "b" = (\'{"id":2,"value":3}\', \'{"id":3,"value":4}\')'
244+
},
245+
params: [{"id": 1, "value": 2}, [{"id": 2, "value": 3}, {"id": 3, "value": 4}]]
246+
});

0 commit comments

Comments
 (0)