不要怂,就是干,撸起袖子干!

You need to sign in or sign up before continuing.
Commit 42a44f10 by terraflubb

MySQL: Outgoing booleans are turned into ints

In the MySQL dialect, values used to generate insert, bulk insert, and update queries are now checked for boolean-ness and will be turned into an int.

There was already duplicated logic applied to outgoing values to check if the value was a Date or not. I factored out value processing to a single function and added a check for typeof boolean.

The new function also escapes the return value since that was also being done everywhere.

Fixes #607
1 parent 5e8eac2a
Showing with 16 additions and 10 deletions
...@@ -2,6 +2,16 @@ var Utils = require("../../utils") ...@@ -2,6 +2,16 @@ var Utils = require("../../utils")
, DataTypes = require("../../data-types") , DataTypes = require("../../data-types")
, util = require("util") , util = require("util")
var processAndEscapeValue = function(value) {
var processedValue = value
if (value instanceof Date) {
processedValue = Utils.toSqlDate(value)
} else if (typeof value === 'boolean') {
processedValue = value ? 1 : 0
}
return Utils.escape(processedValue)
}
module.exports = (function() { module.exports = (function() {
var QueryGenerator = { var QueryGenerator = {
addSchema: function(opts) { addSchema: function(opts) {
...@@ -234,9 +244,7 @@ module.exports = (function() { ...@@ -234,9 +244,7 @@ module.exports = (function() {
var table = QueryGenerator.addQuotes(tableName) var table = QueryGenerator.addQuotes(tableName)
var attributes = Object.keys(attrValueHash).map(function(attr){return QueryGenerator.addQuotes(attr)}).join(",") var attributes = Object.keys(attrValueHash).map(function(attr){return QueryGenerator.addQuotes(attr)}).join(",")
var values = Utils._.values(attrValueHash).map(function(value){ var values = Utils._.values(attrValueHash).map(processAndEscapeValue).join(",")
return Utils.escape((value instanceof Date) ? Utils.toSqlDate(value) : value)
}).join(",")
var query = "INSERT INTO " + table + " (" + attributes + ") VALUES (" + values + ");" var query = "INSERT INTO " + table + " (" + attributes + ") VALUES (" + values + ");"
...@@ -248,9 +256,7 @@ module.exports = (function() { ...@@ -248,9 +256,7 @@ module.exports = (function() {
Utils._.forEach(attrValueHashes, function(attrValueHash) { Utils._.forEach(attrValueHashes, function(attrValueHash) {
tuples.push("(" + tuples.push("(" +
Utils._.values(attrValueHash).map(function(value){ Utils._.values(attrValueHash).map(processAndEscapeValue).join(",") +
return Utils.escape((value instanceof Date) ? Utils.toSqlDate(value) : value)
}).join(",") +
")") ")")
}) })
...@@ -269,9 +275,9 @@ module.exports = (function() { ...@@ -269,9 +275,9 @@ module.exports = (function() {
for (var key in attrValueHash) { for (var key in attrValueHash) {
var value = attrValueHash[key] var value = attrValueHash[key]
, _value = (value instanceof Date) ? Utils.toSqlDate(value) : value , _value = processAndEscapeValue(value)
values.push(QueryGenerator.addQuotes(key) + "=" + Utils.escape(_value)) values.push(QueryGenerator.addQuotes(key) + "=" + _value)
} }
var query = "UPDATE " + QueryGenerator.addQuotes(tableName) + var query = "UPDATE " + QueryGenerator.addQuotes(tableName) +
...@@ -319,9 +325,9 @@ module.exports = (function() { ...@@ -319,9 +325,9 @@ module.exports = (function() {
for (var key in attrValueHash) { for (var key in attrValueHash) {
var value = attrValueHash[key] var value = attrValueHash[key]
, _value = (value instanceof Date) ? Utils.toSqlDate(value) : value , _value = processAndEscapeValue(value)
values.push(QueryGenerator.addQuotes(key) + "=" + QueryGenerator.addQuotes(key) + " + " +Utils.escape(_value)) values.push(QueryGenerator.addQuotes(key) + "=" + QueryGenerator.addQuotes(key) + " + " + _value)
} }
var table = QueryGenerator.addQuotes(tableName) var table = QueryGenerator.addQuotes(tableName)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!