From 83797e51325771a2734d8b86b11023fd5aa889bc Mon Sep 17 00:00:00 2001 From: welefen Date: Wed, 2 Jul 2014 11:51:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8D=95=E5=85=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=92=8C=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- lib/Lib/Core/Db.js | 66 ++-- lib/Lib/Core/Model.js | 3 + test/test/model.js | 685 +++++++++++++++++++++++++++++++++++++++++- 4 files changed, 733 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 2ce80d85..a9f87247 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -TESTS = test/test/*.js +TESTS = test/test/model.js REPORTER = spec TIMEOUT = 10000 MOCHA_OPTS = diff --git a/lib/Lib/Core/Db.js b/lib/Lib/Core/Db.js index 1bfd87f7..264f1c2b 100644 --- a/lib/Lib/Core/Db.js +++ b/lib/Lib/Core/Db.js @@ -221,7 +221,17 @@ var Db = module.exports = Class(function(){ * @return {[type]} [description] */ parseWhereItem: function(key, val){ - if (!isArray(val)) { + if (isObject(val)) { // {id: {'<': 10, '>': 1}} + var logic = (val._logic || 'AND').toUpperCase(); + delete val._logic; + var result = []; + for(var opr in val){ + var nop = opr.toUpperCase(); + nop = comparison[nop] || nop; + result.push(key + ' ' + nop + ' ' + this.parseValue(val[opr])); + } + return result.join(' ' + logic + ' '); + }else if (!isArray(val)) { //对字符串类型字段采用模糊匹配 if (C('db_like_fields').indexOf(key) > -1) { return key + ' LIKE ' + this.parseValue('%' + val + '%'); @@ -237,13 +247,14 @@ var Db = module.exports = Class(function(){ if (/^(=|!=|>|>=|<|<=)$/.test(val0)) { // 比较运算 whereStr += key + ' ' + val0 + ' ' + this.parseValue(val[1]); }else if (/^(NOT\s+LIKE|LIKE)$/.test(val0)) { // 模糊查找 - if (isArray(val[1])) { - var likeLogic = (val[2] ? val[2] : 'OR').toUpperCase(); + if (isArray(val[1])) { //多个like + var likeLogic = (val[2] || 'OR').toUpperCase(); var likesLogic = ['AND','OR','XOR']; + var self = this; if (likesLogic.indexOf(likeLogic) > -1) { var like = val[1].map(function(item){ - return key + ' ' + val0 + ' ' + this.parseValue(item); - }).join(likeLogic); + return key + ' ' + val0 + ' ' + self.parseValue(item); + }).join(' ' + likeLogic + ' '); whereStr += '(' + like + ')'; } }else{ @@ -258,6 +269,10 @@ var Db = module.exports = Class(function(){ if (isString(val[1])) { val[1] = val[1].split(','); } + //如果不是数组,自动转为数组 + if (!isArray(val[1])) { + val[1] = [val[1]]; + } val[1] = this.parseValue(val[1]); //如果只有一个值,那么变成=或者!= if (val[1].length === 1) { @@ -279,19 +294,20 @@ var Db = module.exports = Class(function(){ } }else{ var length = val.length; - var rule = val[val.length - 1] || ''; - if (rule && ['AND','OR','XOR'].indexOf(rule) > -1) { - length = length - 1; - }else{ - rule = 'AND'; + var rule = 'AND'; + var last = (val[length - 1] || '').toUpperCase(); + if (last && ['AND', 'OR', 'XOR'].indexOf(last) > -1) { + rule = last; + length--; } for(var i = 0; i < length; i++){ - data = isArray(val[i]) ? val[i][1] : val[i]; - var exp = ((isArray(val[i]) && val[i][0]) + '').toLowerCase(); - if (exp === 'exp') { + var isArr = isArray(val[i]); + data = isArr ? val[i][1] : val[i]; + var exp = ((isArr ? val[i][0] : '') + '').toUpperCase(); + if (exp === 'EXP') { whereStr += '(' + key + ' ' + data + ') ' + rule + ' '; }else{ - var op = isArray(val[i]) ? comparison[val[i][0].toUpperCase()] : '='; + var op = isArr ? comparison[val[i][0].toUpperCase()] : '='; whereStr += '(' + key + ' ' + op + ' ' + this.parseValue(data) + ') ' + rule + ' '; } } @@ -388,11 +404,25 @@ var Db = module.exports = Class(function(){ if (item.as) { joinStr += ' AS ' + item.as; } - if (isString(item.on)) { - item.on = item.on.split(/\s*,\s*/); + //ON条件 + if (item.on) { + var mTable = options.alias || options.table; + var jTable = item.as || table; + //多个=条件 + if (isObject(item.on)) { + var where = []; + for(var key in item.on){ + where.push(mTable + '.`' + key + '`' + '=' + jTable + '.`' + item.on[key] + '`'); + } + joinStr += ' ON (' + where.join(' AND ') + ')'; + }else{ + if (isString(item.on)) { + item.on = item.on.split(/\s*,\s*/); + } + joinStr += ' ON ' + mTable + '.`' + item.on[0] + '`'; + joinStr += '=' + jTable + '.`' + item.on[1] + '`'; + } } - joinStr += ' ON ' + (options.alias || options.table) + '.`' + item.on[0] + '`'; - joinStr += '=' + (item.as || table) + '.`' + item.on[1] + '`'; }) } }); diff --git a/lib/Lib/Core/Model.js b/lib/Lib/Core/Model.js index e1161a6c..60a00d56 100644 --- a/lib/Lib/Core/Model.js +++ b/lib/Lib/Core/Model.js @@ -331,6 +331,9 @@ var Model = module.exports = Class(function(){ * @return {[type]} [description] */ where: function(where){ + if (!where) { + return this; + } if (isString(where)) { where = {_string: where}; } diff --git a/test/test/model.js b/test/test/model.js index 15c133e3..5525c784 100644 --- a/test/test/model.js +++ b/test/test/model.js @@ -201,9 +201,6 @@ describe('Model', function(){ }) }) - describe('where', function(){ - - }) describe('union', function(){ var model = D('Pic1'); @@ -233,7 +230,7 @@ describe('Model', function(){ done(); }) }) - it('union all2', function(done){ + it('union all3', function(done){ model.union({ table: 'meinv_pic2', }, true).union('select * from meinv_pic3').select().then(function(){ @@ -262,6 +259,14 @@ describe('Model', function(){ done(); }) }) + it('join on arr', function(done){ + model.join(['meinv_xxx ON meinv_group.id = meinv_xxx.group_id', 'meinv_xxx ON meinv_group.id = meinv_xxx.group_id']).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` LEFT JOIN meinv_xxx ON meinv_group.id = meinv_xxx.group_id LEFT JOIN meinv_xxx ON meinv_group.id = meinv_xxx.group_id') + done(); + }) + }) it('right join on', function(done){ model.join('RIGHT JOIN meinv_xxx ON meinv_group.id = meinv_xxx.group_id').select().then(function(){ var sql = model.getLastSql().trim(); @@ -270,6 +275,14 @@ describe('Model', function(){ done(); }) }) + it('inner join on', function(done){ + model.join('INNER JOIN meinv_xxx ON meinv_group.id = meinv_xxx.group_id').select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` INNER JOIN meinv_xxx ON meinv_group.id = meinv_xxx.group_id') + done(); + }) + }) it('join on', function(done){ model.join({ table: 'cate', @@ -281,6 +294,18 @@ describe('Model', function(){ done(); }) }) + it('join on multi condition', function(done){ + model.join({ + table: 'cate', + as: 'c', + on: {id: 'id', title: 'name'} + }).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` LEFT JOIN `meinv_cate` AS c ON (meinv_group.`id`=c.`id` AND meinv_group.`title`=c.`name`)') + done(); + }) + }) it('right join on1', function(done){ model.alias('a').join({ table: 'cate', @@ -426,6 +451,28 @@ describe('Model', function(){ }) }) + it('multi join6', function(done){ + model.join({ + cate: { + on: 'id, id' + }, + group_tag: { + on: ['id', 'group_id'] + }, + tag: { + on: { + id: 'id', + title: 'name' + } + } + }).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` LEFT JOIN `meinv_cate` ON meinv_group.`id`=meinv_cate.`id` LEFT JOIN `meinv_group_tag` ON meinv_group.`id`=meinv_group_tag.`group_id` LEFT JOIN `meinv_tag` ON (meinv_group.`id`=meinv_tag.`id` AND meinv_group.`title`=meinv_tag.`name`)') + done(); + }) + }) + }) describe('table', function(){ @@ -607,6 +654,636 @@ describe('Model', function(){ }) }) + describe('where', function(){ + it('empty where', function(done){ + model.where().select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group`') + done(); + }) + }) + it('empty where1', function(done){ + model.where('').select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group`') + done(); + }) + }) + it('empty where2', function(done){ + model.where({}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group`') + done(); + }) + }) + it('where1', function(done){ + model.where({id: 10}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` = 10 )') + done(); + }) + }) + it('where =', function(done){ + model.where({id: ['=', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` = 10 )') + done(); + }) + }) + it('where EQ', function(done){ + model.where({id: ['EQ', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` = 10 )') + done(); + }) + }) + it('where eq', function(done){ + model.where({id: ['eq', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` = 10 )') + done(); + }) + }) + it('where field not exist', function(done){ + model.where({idxxx: 10}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group`') + done(); + }) + }) + it('where field with table alias', function(done){ + model.alias('c').where({'c.id': 10}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM meinv_group AS c WHERE ( c.id = 10 )') + done(); + }) + }) + it('where !=', function(done){ + model.where({id: ['!=', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` != 10 )') + done(); + }) + }) + it('where NEQ', function(done){ + model.where({id: ['NEQ', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` != 10 )') + done(); + }) + }) + it('where neq', function(done){ + model.where({id: ['neq', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` != 10 )') + done(); + }) + }) + it('where <>', function(done){ + model.where({id: ['<>', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` != 10 )') + done(); + }) + }) + + it('where >', function(done){ + model.where({id: ['>', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` > 10 )') + done(); + }) + }) + it('where GT', function(done){ + model.where({id: ['GT', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` > 10 )') + done(); + }) + }) + it('where gt', function(done){ + model.where({id: ['gt', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` > 10 )') + done(); + }) + }) + it('where >=', function(done){ + model.where({id: ['>=', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` >= 10 )') + done(); + }) + }) + it('where EGT', function(done){ + model.where({id: ['EGT', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` >= 10 )') + done(); + }) + }) + it('where egt', function(done){ + model.where({id: ['egt', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` >= 10 )') + done(); + }) + }) + + it('where <', function(done){ + model.where({id: ['<', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` < 10 )') + done(); + }) + }) + it('where LT', function(done){ + model.where({id: ['LT', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` < 10 )') + done(); + }) + }) + it('where lt', function(done){ + model.where({id: ['lt', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` < 10 )') + done(); + }) + }) + it('where <=', function(done){ + model.where({id: ['<=', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` <= 10 )') + done(); + }) + }) + it('where ELT', function(done){ + model.where({id: ['ELT', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` <= 10 )') + done(); + }) + }) + it('where elt', function(done){ + model.where({id: ['elt', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, 'SELECT * FROM `meinv_group` WHERE ( `id` <= 10 )') + done(); + }) + }) + it('where NOTLIKE', function(done){ + model.where({title: ['NOTLIKE', 'welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE 'welefen' )") + done(); + }) + }) + it('where NOT LIKE', function(done){ + model.where({title: ['NOT LIKE', 'welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE 'welefen' )") + done(); + }) + }) + it('where not like', function(done){ + model.where({title: ['not like', 'welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE 'welefen' )") + done(); + }) + }) + it('where not like with left %', function(done){ + model.where({title: ['not like', '%welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE '%welefen' )") + done(); + }) + }) + it('where not like with right %', function(done){ + model.where({title: ['not like', 'welefen%']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE 'welefen%' )") + done(); + }) + }) + it('where not like with both %', function(done){ + model.where({title: ['not like', '%welefen%']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` NOT LIKE '%welefen%' )") + done(); + }) + }) + it('where LIKE', function(done){ + model.where({title: ['LIKE', 'welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` LIKE 'welefen' )") + done(); + }) + }) + it('where like', function(done){ + model.where({title: ['like', 'welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` LIKE 'welefen' )") + done(); + }) + }) + it('where like with left %', function(done){ + model.where({title: ['like', '%welefen']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` LIKE '%welefen' )") + done(); + }) + }) + it('where like with right %', function(done){ + model.where({title: ['like', 'welefen%']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` LIKE 'welefen%' )") + done(); + }) + }) + it('where like with both %', function(done){ + model.where({title: ['like', '%welefen%']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `title` LIKE '%welefen%' )") + done(); + }) + }) + it('where multi like', function(done){ + model.where({title: ['like', ['welefen']]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen') )") + done(); + }) + }) + it('where multi like1', function(done){ + model.where({title: ['like', ['welefen', 'suredy']]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen' OR `title` LIKE 'suredy') )") + done(); + }) + }) + it('where multi like2', function(done){ + model.where({title: ['like', ['welefen', '%suredy']]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen' OR `title` LIKE '%suredy') )") + done(); + }) + }) + it('where multi like3', function(done){ + model.where({title: ['like', ['%welefen', '%suredy%']]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE '%welefen' OR `title` LIKE '%suredy%') )") + done(); + }) + }) + it('where multi like with AND logic', function(done){ + model.where({title: ['like', ['welefen', 'suredy'], 'AND']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen' AND `title` LIKE 'suredy') )") + done(); + }) + }) + it('where multi like with XOR logic', function(done){ + model.where({title: ['like', ['welefen', 'suredy'], 'XOR']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen' XOR `title` LIKE 'suredy') )") + done(); + }) + }) + it('where multi like with xor logic', function(done){ + model.where({title: ['like', ['welefen', 'suredy'], 'xor']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`title` LIKE 'welefen' XOR `title` LIKE 'suredy') )") + done(); + }) + }) + + + + + it('where IN single value', function(done){ + model.where({id: ['IN', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 )") + done(); + }) + }) + it('where IN string value', function(done){ + model.where({id: ['IN', '10,20']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` IN ('10','20') )") + done(); + }) + }) + it('where in string value', function(done){ + model.where({id: ['in', '10,20']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` IN ('10','20') )") + done(); + }) + }) + it('where IN arr value', function(done){ + model.where({id: ['IN', [10, 20]]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` IN (10,20) )") + done(); + }) + }) + it('where IN exp', function(done){ + model.where({id: ['IN', '(10,20)', 'exp']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` IN (10,20) )") + done(); + }) + }) + + it('where NOT IN single value', function(done){ + model.where({id: ['NOT IN', 10]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` != 10 )") + done(); + }) + }) + it('where NOT IN string value', function(done){ + model.where({id: ['NOT IN', '10,20']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` NOT IN ('10','20') )") + done(); + }) + }) + it('where not in string value', function(done){ + model.where({id: ['not in', '10,20']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` NOT IN ('10','20') )") + done(); + }) + }) + it('where NOT IN arr value', function(done){ + model.where({id: ['NOTIN', [10, 20]]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` NOT IN (10,20) )") + done(); + }) + }) + it('where NOT IN exp', function(done){ + model.where({id: ['notin', '(10,20)', 'exp']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` NOT IN (10,20) )") + done(); + }) + }) + + it('where exp', function(done){ + model.where({id: ['exp', '=10']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` =10) )") + done(); + }) + }) + it('where EXP', function(done){ + model.where({id: ['exp', '=10']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` =10) )") + done(); + }) + }) + + + + it('where multi condition', function(done){ + model.where({id: 10, title: "www"}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 ) AND ( `title` = 'www' )") + done(); + }) + }) + it('where multi condition with OR logic', function(done){ + model.where({id: 10, title: "www", _logic: 'OR'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 ) OR ( `title` = 'www' )") + done(); + }) + }) + it('where multi condition with or logic', function(done){ + model.where({id: 10, title: "www", _logic: 'or'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 ) OR ( `title` = 'www' )") + done(); + }) + }) + it('where multi condition with XOR logic', function(done){ + model.where({id: 10, title: "www", _logic: 'XOR'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 ) XOR ( `title` = 'www' )") + done(); + }) + }) + it('where multi condition with xor logic', function(done){ + model.where({id: 10, title: "www", _logic: 'xor'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` = 10 ) XOR ( `title` = 'www' )") + done(); + }) + }) + it('where string', function(done){ + model.where('id=10').select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( id=10 )") + done(); + }) + }) + it('where string override', function(done){ + model.where('id=10').where('id=20').select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( id=20 )") + done(); + }) + }) + it('where key has |', function(done){ + model.where({ + 'id|title': 10 + }).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` = 10) OR (`title` = 10) )") + done(); + }) + }) + it('where key has &', function(done){ + model.where({ + 'id&title': 10 + }).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` = 10) AND (`title` = 10) )") + done(); + }) + }) + + it('where BETWEEN', function(done){ + model.where({id: ['BETWEEN', 1, 2]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` BETWEEN 1 AND 2) )") + done(); + }) + }) + it('where between', function(done){ + model.where({id: ['between', 1, 2]}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` BETWEEN 1 AND 2) )") + done(); + }) + }) + it('where between string', function(done){ + model.where({id: ['between', '1,2']}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( (`id` BETWEEN '1' AND '2') )") + done(); + }) + }) + + + + it('where obj for key value', function(done){ + model.where({id: { + '>': 10, + '<': 20 + }}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 AND `id` < 20 )") + done(); + }) + }) + it('where obj for key value 1', function(done){ + model.where({id: { + 'GT': 10, + 'LT': 20 + }}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 AND `id` < 20 )") + done(); + }) + }) + it('where obj for key value 2', function(done){ + model.where({id: { + 'GT': 10, + '<=': 20 + }}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 AND `id` <= 20 )") + done(); + }) + }) + it('where obj for key value 3', function(done){ + model.where({id: { + 'GT': 10, + '<=': 20 + }, title: 'welefen'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 AND `id` <= 20 ) AND ( `title` = 'welefen' )") + done(); + }) + }) + it('where obj for key value with OR logic', function(done){ + model.where({id: { + 'GT': 10, + 'LT': 20, + _logic: 'OR' + }}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 OR `id` < 20 )") + done(); + }) + }) + it('where obj for key value with OR logic', function(done){ + model.where({id: { + 'GT': 10, + 'LT': 20, + _logic: 'OR' + }, title: 'welefen'}).select().then(function(){ + var sql = model.getLastSql().trim(); + //console.log(sql) + assert.equal(sql, "SELECT * FROM `meinv_group` WHERE ( `id` > 10 OR `id` < 20 ) AND ( `title` = 'welefen' )") + done(); + }) + }) + + + + + }) + }) }); afterEach(function(){