Merge branch 'bugfix/make_raw_backwards_compatible' of https://github.com/wubzz/knex into wubzz-bugfix/make_raw_backwards_compatible

This commit is contained in:
Rhys van der Waerden 2016-02-06 14:08:30 +11:00
commit 5ebbeb07b4
3 changed files with 56 additions and 1 deletions

View File

@ -2155,6 +2155,21 @@ knex('users')
}))
</pre>
<p>For simpler queries where one only has a single binding, <tt>.raw</tt> can accept said binding as its second parameter.</p>
<pre class="display">
knex('users')
.where(
knex.raw('LOWER("login") = ?', 'knex')
)
.orWhere(
knex.raw('accesslevel = ?', 1)
)
.orWhere(
knex.raw('updtime = ?', new Date())
)
</pre>
<p>
To prevent replacement of <tt>?</tt> one can use escape sequence <tt>\\?</tt>.
</p>

View File

@ -6,6 +6,7 @@ var EventEmitter = require('events').EventEmitter
var assign = require('lodash/object/assign')
var reduce = require('lodash/collection/reduce')
var isPlainObject = require('lodash/lang/isPlainObject')
var _ = require('lodash');
function Raw(client) {
this.client = client
@ -26,7 +27,8 @@ assign(Raw.prototype, {
set: function(sql, bindings) {
this._cached = undefined
this.sql = sql
this.bindings = bindings
this.bindings = (_.isObject(bindings) || _.isUndefined(bindings)) ? bindings : [bindings]
return this
},

View File

@ -3131,4 +3131,42 @@ describe("QueryBuilder", function() {
}
});
});
it('#965 - .raw accepts Array and Non-Array bindings', function() {
var expected = function(fieldName, expectedBindings) {
return {
mysql: {
sql: 'select * from `users` where ' + fieldName + ' = ?',
bindings: expectedBindings
},
mssql: {
sql: 'select * from [users] where ' + fieldName + ' = ?',
bindings: expectedBindings
},
default: {
sql: 'select * from "users" where ' + fieldName + ' = ?',
bindings: expectedBindings
}
};
};
//String
testsql(qb().select('*').from('users').where(raw('username = ?', 'knex')), expected('username', ['knex']));
testsql(qb().select('*').from('users').where(raw('username = ?', ['knex'])), expected('username', ['knex']));
//Number
testsql(qb().select('*').from('users').where(raw('isadmin = ?', 0)), expected('isadmin', [0]));
testsql(qb().select('*').from('users').where(raw('isadmin = ?', [1])), expected('isadmin', [1]));
//Date
var date = new Date(2016, 0, 5, 10, 19, 30, 599);
var sqlUpdTime = '2016-01-05 10:19:30.599';
testsql(qb().select('*').from('users').where(raw('updtime = ?', date)), expected('updtime', [date]));
testsql(qb().select('*').from('users').where(raw('updtime = ?', [date])), expected('updtime', [date]));
testquery(qb().select('*').from('users').where(raw('updtime = ?', date)), {
mysql: 'select * from `users` where updtime = \'' + sqlUpdTime + '\'',
default: 'select * from "users" where updtime = \'' + sqlUpdTime + '\''
});
});
});