From fc0f9feaaaed51d5e1336e92859c712d1fe0e415 Mon Sep 17 00:00:00 2001 From: Rune Halvorsen Date: Tue, 21 Oct 2014 00:41:33 +0200 Subject: [PATCH] Added sqlite3 dialect version of whereRaw/andWhereRaw * SQLite uses integers, not booleans * whereIn/whereNotIn with empty array uses a boolean * Closes #477 --- lib/dialects/sqlite3/query.js | 16 ++++++++++++++++ test/unit/query/builder.js | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/dialects/sqlite3/query.js b/lib/dialects/sqlite3/query.js index 51634682a..61e76b827 100644 --- a/lib/dialects/sqlite3/query.js +++ b/lib/dialects/sqlite3/query.js @@ -7,6 +7,7 @@ module.exports = function(client) { var _ = require('lodash'); var inherits = require('inherits'); +var Raw = require('../../raw'); var QueryBuilder = require('../../query/builder'); var QueryCompiler = require('../../query/compiler'); @@ -18,6 +19,21 @@ function QueryBuilder_SQLite3() { } inherits(QueryBuilder_SQLite3, QueryBuilder); +// Adds a raw `where` clause to the query. +QueryBuilder_SQLite3.prototype.whereRaw = +QueryBuilder_SQLite3.prototype.andWhereRaw = function(sql, bindings) { + // sqlite uses ints for bools, so cast true/false to 1/0 + if (typeof sql === 'boolean') { sql = Number(sql); } + var raw = (sql instanceof Raw ? sql : new Raw(sql, bindings)); + this._statements.push({ + grouping: 'where', + type: 'whereRaw', + value: raw, + bool: this._bool() + }); + return this; +}; + // Query Compiler // ------- function QueryCompiler_SQLite3() { diff --git a/test/unit/query/builder.js b/test/unit/query/builder.js index 55c7d0ad8..76cef876d 100644 --- a/test/unit/query/builder.js +++ b/test/unit/query/builder.js @@ -129,6 +129,7 @@ module.exports = function(qb, clientName, aliasName) { it('where bool', function() { testquery(qb().select('*').from('users').where(true), { mysql: 'select * from `users` where true', + sqlite3: 'select * from "users" where 1', default: 'select * from "users" where true' }); }); @@ -347,6 +348,10 @@ module.exports = function(qb, clientName, aliasName) { sql: 'select * from `users` where false', bindings: [] }, + sqlite3: { + sql: 'select * from "users" where 0', + bindings: [] + }, default: { sql: 'select * from "users" where false', bindings: [] @@ -360,6 +365,10 @@ module.exports = function(qb, clientName, aliasName) { sql: 'select * from `users` where true', bindings: [] }, + sqlite3: { + sql: 'select * from "users" where 1', + bindings: [] + }, default: { sql: 'select * from "users" where true', bindings: []