增加单元测试和优化代码

This commit is contained in:
welefen 2014-07-02 11:51:10 +08:00
parent 9df931502a
commit 83797e5132
4 changed files with 733 additions and 23 deletions

View File

@ -1,4 +1,4 @@
TESTS = test/test/*.js
TESTS = test/test/model.js
REPORTER = spec
TIMEOUT = 10000
MOCHA_OPTS =

View File

@ -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] + '`';
})
}
});

View File

@ -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};
}

View File

@ -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(){