From 6f8517d45849761cd20ba790bdc86f20224cea52 Mon Sep 17 00:00:00 2001 From: Ben Ng Date: Sun, 4 May 2014 01:32:56 -0500 Subject: [PATCH] Fix breakage on empty query via .getAssn of a hasMany/through relationship --- lib/adapters/transformers/sql.js | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/adapters/transformers/sql.js b/lib/adapters/transformers/sql.js index 837d72af..de0bc210 100644 --- a/lib/adapters/transformers/sql.js +++ b/lib/adapters/transformers/sql.js @@ -54,11 +54,17 @@ var sql = utils.mixin(new BaseTransformer(), new (function () { return sql; }; + /* + * Note: please return null on empty operations. + * returning empty strings leads to weirdness like + * `WHERE ()` appearing in queries, which breaks + * postgresql (and possibly others) + */ this.transformOperation = function (op) { var self = this , ops = []; if (op.isEmpty()) { - return ''; + return null; } else { if (op.type == 'not') { @@ -66,14 +72,26 @@ var sql = utils.mixin(new BaseTransformer(), new (function () { } else { op.forEach(function (o) { + var temp; if (o instanceof operation.OperationBase) { - ops.push(self.transformOperation(o)); + temp = self.transformOperation(o); + + if(temp) + ops.push(temp); } else { - ops.push(self.transformComparison(o)); + temp = self.transformComparison(o); + + if(temp) + ops.push(self.transformComparison(o)); } }); - return '(' + ops.join(' ' + op.type.toUpperCase() + ' ') + ')'; + + if(ops.length) + return '(' + ops.join(' ' + op.type.toUpperCase() + ' ') + ')'; + else + return null; + } } };