thinkjs/test/Lib/Core/Model_Db.js
2015-04-14 11:29:39 +08:00

1998 lines
79 KiB
JavaScript

var should = require('should');
var assert = require('assert');
var muk = require('muk');
var path = require('path');
var fs = require('fs')
global.APP_PATH = path.normalize(__dirname + '/../../App');
global.RESOURCE_PATH = path.normalize(__dirname + '/../../www')
process.execArgv.push('--no-app');
require(path.normalize(__dirname + '/../../../index.js'));
var MysqlSocket = thinkRequire('MysqlSocket');
var Db = thinkRequire('Db');
var clearRequireCache = function(){
for(var name in require.cache){
delete require.cache[name];
}
}
describe('before', function(){
it('before', function(){
muk(MysqlSocket.prototype, 'query', function(sql){
if (sql === 'SHOW COLUMNS FROM `think_friend`') {
var data = [{"Field":"id","Type":"int(11) unsigned", "Default":null,"Extra":""},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
return getPromise(data);
}else if (sql === 'SHOW COLUMNS FROM `think_cate`') {
var data = [{"Field":"wid","Type":"int(11) unsigned", "Null":"NO","Key":"PRI", "Default":null,"Extra":""},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
return getPromise(data);
}else if (sql === 'SHOW COLUMNS FROM `think_tag`') {
var data = [{"Field":"wid","Type":"int(11) unsigned", "Extra":""},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
return getPromise(data);
}else if(sql.indexOf('SHOW COLUMNS ') > -1){
var data = [{"Field":"id","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":"auto_increment"},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
return getPromise(data);
}
var data = [{"id":7565,"title":"米兰达·可儿干练服装写真大片","cate_id":1,"cate_no":0,"md5":"27e562c50195153d89c52072bd4c8d5a","width":936,"height":1177,"pic_nums":11,"view_nums":1965,"content":"","date":20140526,"is_hide":0,"is_safe":0},{"id":7564,"title":"[Beautyleg]2014.05.21 No.977 Cindy","cate_id":2,"cate_no":977,"md5":"e31b3202f3cefe9944fb0e086064694f","width":1600,"height":2400,"pic_nums":30,"view_nums":1558,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7563,"title":"[DISI第四印象]2014.05.21 NO.281","cate_id":7,"cate_no":281,"md5":"ea455be2cab6813964543662b462a550","width":960,"height":640,"pic_nums":30,"view_nums":2335,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7562,"title":"[PANS写真]2014-05-20 NO.242 小倩 套图","cate_id":6,"cate_no":242,"md5":"de775e0785c379ad853b2a299e4736cd","width":1600,"height":2397,"pic_nums":30,"view_nums":2013,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7561,"title":"[ROSI写真]2014.05.20 NO.896","cate_id":3,"cate_no":896,"md5":"65e4a012a123190184a07d87c21e9dec","width":1600,"height":1067,"pic_nums":30,"view_nums":1425,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7560,"title":"[ROSI写真]2014.05.21 NO.897","cate_id":3,"cate_no":897,"md5":"51477ddac8a1d67d30f83da66e0b9ff5","width":1600,"height":1067,"pic_nums":22,"view_nums":1433,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7559,"title":"[ROSI写真]2014.05.22 NO.898","cate_id":3,"cate_no":898,"md5":"a74d4a187ae126b1446503da309b56c9","width":796,"height":531,"pic_nums":30,"view_nums":1994,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7558,"title":"[ru1mm写真] 2014-05-20 NO.151","cate_id":17,"cate_no":151,"md5":"4818e310b0c983e17ae87414a808879d","width":1200,"height":1800,"pic_nums":30,"view_nums":2035,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7557,"title":"[ru1mm写真] 2014-05-22 NO.152","cate_id":17,"cate_no":152,"md5":"af8b033373b1526bd8a28053f065359f","width":1600,"height":1067,"pic_nums":30,"view_nums":1118,"content":"","date":20140524,"is_hide":0,"is_safe":0}]
return getPromise(data);
})
})
})
describe('Model_Db', function(){
C('db_prefix', 'think_');
var model = D('Group');
describe('init', function(){
it('undefined name', function(){
var model = D();
assert.equal(model.name, "");
})
it('config is string', function(){
var model = D('Group', 'test_');
assert.equal(model.tablePrefix, 'test_');
})
it('prototype tablePrefix is set', function(){
thinkRequire('Model').__prop.tablePrefix = 'think_';
var model = D('Group');
assert.equal(model.tablePrefix, 'think_');
})
})
describe('initDb', function(){
var model = D('Group');
it('configKey', function(){
var db = model.initDb();
assert.equal(db !== null, true);
assert.equal(model.configKey, '99914b932bd37a50b983c5e7c90ae93b');
})
})
describe('getModelName', function(){
it('this.name', function(){
assert.equal(model.getModelName(), 'Group');
})
it('this.__filename', function(){
var model = D();
assert.equal(model.getModelName(), '')
})
it('__filename', function(){
var model = D();
model.__filename = '';
model.name = '';
assert.equal(model.getModelName(), '')
})
})
describe('getTableName', function(){
it('getTableName', function(){
assert.equal(model.getTableName(), 'think_group');
assert.equal(model.getTableName(), 'think_group');
})
it('getTableName 1', function(){
var model = D('Group');
model.tablePrefix = '';
assert.equal(model.getTableName(), 'group')
})
})
describe('getTableFields', function(){
it('getTableFields', function(done){
model.getTableFields().then(function(fields){
assert.deepEqual(fields, [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ]);
done();
})
})
it('getTableFields cache', function(done){
model.fields = {};
model.getTableFields().then(function(fields){
assert.deepEqual(fields, [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ]);
done();
})
})
it('getTableFields 1', function(done){
model.getTableFields(true).then(function(fields){
//console.log(fields)
assert.deepEqual(fields, { _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: true, _unique: [ 'title' ], _pk: 'id', _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
it('getTableFields 2', function(done){
model.fields = {};
model.getTableFields(true).then(function(fields){
//console.log(fields)
assert.deepEqual(fields, { _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: true, _unique: [ 'title' ], _pk: 'id', _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
it('getTableFields 3', function(done){
var model = D('Group');
thinkRequire('Model').clearTableFieldsCache();
model.getTableFields(true).then(function(fields){
//console.log(fields)
assert.deepEqual(fields, { _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: true, _unique: [ 'title' ], _pk: 'id', _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
it('getTableFields 4', function(done){
var model = D('Group');
thinkRequire('Model').clearTableFieldsCache();
C('db_fields_cache', false)
model.getTableFields(true).then(function(fields){
//console.log(fields)
assert.deepEqual(fields, { _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: true, _unique: [ 'title' ], _pk: 'id', _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
})
describe('flushFields', function(){
it('flushFields', function(done){
model.flushFields().then(function(fields){
assert.deepEqual(fields, { _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: true, _unique: [ 'title' ], _pk: 'id', _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
it('flushFields no primary', function(done){
D('Friend').flushFields().then(function(fields){
//console.log(fields)
assert.deepEqual(fields,{ _field: [ 'id', 'title', 'cate_id', 'cate_no', 'md5', 'width', 'height', 'pic_nums', 'view_nums', 'content', 'date', 'is_hide', 'is_safe' ], _autoinc: false, _unique: [ 'title' ], _type: { id: 'int(11) unsigned', title: 'varchar(255)', cate_id: 'tinyint(255)', cate_no: 'int(11)', md5: 'varchar(255)', width: 'int(11)', height: 'int(11)', pic_nums: 'int(11)', view_nums: 'int(11)', content: 'text', date: 'int(11)', is_hide: 'tinyint(11)', is_safe: 'tinyint(11)' } });
done();
})
})
})
describe('getPk', function(){
it('getPk cate', function(done){
D('Cate').getPk().then(function(pk){
assert.equal(pk, 'wid');
done();
})
})
it('getPk tag', function(done){
D('Tag').getPk().then(function(pk){
assert.equal(pk, 'id');
done();
})
})
it('getPk tag 1', function(done){
var model = D('Tag')
model.getPk().then(function(){
assert.equal(model.getPk(), 'id');
done();
})
})
})
describe('select', function(){
describe('common', function(){
it('select all', function(done){
model.select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group`')
done();
})
})
it('find one', function(done){
model.find().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 1')
done();
})
})
})
describe('field', function(){
it('sql with empty field', function(done){
model.field().select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group`');
done();
})
})
it('sql with string field', function(done){
model.field('id, title').select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT `id`,`title` FROM `think_group`');
done();
})
})
it('sql with array field', function(done){
model.field(['id', 'title']).select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT `id`,`title` FROM `think_group`');
done();
})
})
it('sql with reverse field', function(done){
model.field(['id', 'title'], true).select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT `cate_id`,`cate_no`,`md5`,`width`,`height`,`pic_nums`,`view_nums`,`content`,`date`,`is_hide`,`is_safe` FROM `think_group`');
done();
})
})
})
describe('limit', function(){
it('sql with limit', function(done){
model.limit(10).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 10');
done();
})
})
it('sql with limit, length', function(done){
model.limit(10, 20).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 10,20');
done();
})
})
it('sql with error limit', function(done){
model.limit('10xx').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0');
done();
})
})
it('sql with error limit1', function(done){
model.limit('10', '').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 10,0');
done();
})
})
})
describe('page', function(){
it('sql with empty page', function(done){
model.page().select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group`')
done();
})
})
it('sql with page 0', function(done){
model.page(0).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0,20')
done();
})
})
it('sql with page 1', function(done){
model.page(1).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0,20')
done();
})
})
it('sql with page, listRows', function(done){
model.page(1, 10).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0,10')
done();
})
})
it('sql with page, listRows1', function(done){
model.page(2, 10).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 10,10')
done();
})
})
it('sql with error page', function(done){
model.page('www').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0,20')
done();
})
})
it('sql with error page,listRows', function(done){
model.page('www', 'www').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LIMIT 0,20')
done();
})
})
})
describe('union', function(){
var model = D('Pic1');
it('union 1', function(done){
model.union('select * from think_pic2').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_pic1` UNION (select * from think_pic2)')
done();
})
})
it('union all', function(done){
model.union('select * from think_pic2', true).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_pic1` UNION ALL (select * from think_pic2)')
done();
})
})
it('union all2', function(done){
model.union({
table: 'think_pic2'
}, true).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_pic1` UNION ALL (SELECT * FROM `think_pic2`)')
done();
})
})
it('union all3', function(done){
model.union({
table: 'think_pic2',
}, true).union('select * from think_pic3').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_pic1` UNION ALL (SELECT * FROM `think_pic2`) UNION (select * from think_pic3)')
done();
})
})
})
describe('join', function(){
it('join', function(done){
model.join('xxx').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN xxx')
done();
})
})
it('join on', function(done){
model.join('think_xxx ON think_group.id = think_xxx.group_id').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN think_xxx ON think_group.id = think_xxx.group_id')
done();
})
})
it('join on arr', function(done){
model.join(['think_xxx ON think_group.id = think_xxx.group_id', 'think_xxx ON think_group.id = think_xxx.group_id']).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN think_xxx ON think_group.id = think_xxx.group_id LEFT JOIN think_xxx ON think_group.id = think_xxx.group_id')
done();
})
})
it('right join on', function(done){
model.join('RIGHT JOIN think_xxx ON think_group.id = think_xxx.group_id').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` RIGHT JOIN think_xxx ON think_group.id = think_xxx.group_id')
done();
})
})
it('inner join on', function(done){
model.join('INNER JOIN think_xxx ON think_group.id = think_xxx.group_id').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` INNER JOIN think_xxx ON think_group.id = think_xxx.group_id')
done();
})
})
it('join on', function(done){
model.join({
table: 'cate',
as: 'c',
on: ['id', 'id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` AS c ON think_group.`id`=c.`id`')
done();
})
})
it('join with table on', function(done){
model.alias('a').join({
table: 'cate',
as: 'c',
on: ['a.id', 'c.id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN `think_cate` AS c ON a.id=c.id')
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 `think_group` LEFT JOIN `think_cate` AS c ON (think_group.`id`=c.`id` AND think_group.`title`=c.`name`)')
done();
})
})
it('right join on1', function(done){
model.alias('a').join({
table: 'cate',
join: 'right',
as: 'c',
on: ['id', 'id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a RIGHT JOIN `think_cate` AS c ON a.`id`=c.`id`')
done();
})
})
it('inner join', function(done){
model.alias('a').join({
table: 'cate',
join: 'inner',
as: 'c',
on: ['id', 'id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a INNER JOIN `think_cate` AS c ON a.`id`=c.`id`')
done();
})
})
it('multi join', function(done){
model.alias('a').join({
table: 'cate',
join: 'left',
as: 'c',
on: ['id', 'id']
}).join({
table: 'group_tag',
join: 'left',
as: 'd',
on: ['id', 'group_id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN `think_cate` AS c ON a.`id`=c.`id` LEFT JOIN `think_group_tag` AS d ON a.`id`=d.`group_id`')
done();
})
})
it('multi join1', function(done){
model.alias('a').join({
cate: {
join: 'left',
as: 'c',
on: ['id', 'id']
},
group_tag: {
join: 'left',
as: 'd',
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN `think_cate` AS c ON a.`id`=c.`id` LEFT JOIN `think_group_tag` AS d ON a.`id`=d.`group_id`')
done();
})
})
it('multi join1 with table on', function(done){
model.alias('a').join({
cate: {
join: 'left',
as: 'c',
on: ['id', 'id']
},
group_tag: {
join: 'left',
as: 'd',
on: ['c.id', 'd.group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN `think_cate` AS c ON a.`id`=c.`id` LEFT JOIN `think_group_tag` AS d ON c.id=d.group_id')
done();
})
})
it('multi join2', function(done){
model.join({
cate: {
join: 'left',
as: 'c',
on: ['id', 'id']
},
group_tag: {
join: 'left',
as: 'd',
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` AS c ON think_group.`id`=c.`id` LEFT JOIN `think_group_tag` AS d ON think_group.`id`=d.`group_id`')
done();
})
})
it('multi join2', function(done){
model.join({
cate: {
as: 'c',
on: ['id', 'id']
},
group_tag: {
as: 'd',
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` AS c ON think_group.`id`=c.`id` LEFT JOIN `think_group_tag` AS d ON think_group.`id`=d.`group_id`')
done();
})
})
it('multi join3', function(done){
model.join({
cate: {
on: ['id', 'id']
},
group_tag: {
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` ON think_group.`id`=think_cate.`id` LEFT JOIN `think_group_tag` ON think_group.`id`=think_group_tag.`group_id`')
done();
})
})
it('multi join4', function(done){
model.join({
cate: {
on: 'id,id'
},
group_tag: {
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` ON think_group.`id`=think_cate.`id` LEFT JOIN `think_group_tag` ON think_group.`id`=think_group_tag.`group_id`')
done();
})
})
it('multi join5', function(done){
model.join({
cate: {
on: 'id, id'
},
group_tag: {
on: ['id', 'group_id']
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` LEFT JOIN `think_cate` ON think_group.`id`=think_cate.`id` LEFT JOIN `think_group_tag` ON think_group.`id`=think_group_tag.`group_id`')
done();
})
})
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 `think_group` LEFT JOIN `think_cate` ON think_group.`id`=think_cate.`id` LEFT JOIN `think_group_tag` ON think_group.`id`=think_group_tag.`group_id` LEFT JOIN `think_tag` ON (think_group.`id`=think_tag.`id` AND think_group.`title`=think_tag.`name`)')
done();
})
})
// table 子查询表连接
it('buildSql join', function(done){
model.alias('a').join({
table: 'select * from think_group',
join: 'left',
as: 'b',
on: ['id', 'id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN (select * from think_group) AS b ON a.`id`=b.`id`')
done();
})
})
it('buildSql join with bracet', function(done){
model.alias('a').join({
table: ' (select * from think_group) ',
join: 'left',
as: 'b',
on: ['id', 'id']
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a LEFT JOIN (select * from think_group) AS b ON a.`id`=b.`id`')
done();
})
})
})
describe('table', function(){
it('table', function(done){
model.table('xxx').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_xxx`')
done();
})
})
it('table', function(done){
assert.equal(model.table(), model);
done();
})
it('table arr', function(done){
model.table('xxx', true).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `xxx`')
done();
})
})
})
describe('order', function(){
it('order by id', function(done){
model.order('id').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id')
done();
})
})
it('order by id ASC', function(done){
model.order('id ASC').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id ASC')
done();
})
})
it('order by id DESC', function(done){
model.order('id DESC').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id DESC')
done();
})
})
it('order by id DESC,title ASC', function(done){
model.order('id DESC,title ASC').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id DESC,title ASC')
done();
})
})
it('order by arr', function(done){
model.order(['id ASC']).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id ASC')
done();
})
})
it('order by arr', function(done){
model.order(['id ASC', 'title DESC']).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY id ASC,title DESC')
done();
})
})
it('order by obj', function(done){
model.order({id: 'ASC'}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY `id` ASC')
done();
})
})
it('order by obj1', function(done){
model.order({id: 'ASC', title: 'DESC'}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` ORDER BY `id` ASC,`title` DESC')
done();
})
})
})
describe('alias', function(){
it('table alias', function(done){
model.alias('a').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM think_group AS a')
done();
})
})
})
describe('having', function(){
it('having', function(done){
model.having('view_nums > 1000').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` HAVING view_nums > 1000')
done();
})
})
it('having and', function(done){
model.having('view_nums > 1000 AND view_nums < 2000').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` HAVING view_nums > 1000 AND view_nums < 2000')
done();
})
})
})
describe('group', function(){
it('group by title', function(done){
model.group('title').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` GROUP BY `title`')
done();
})
})
it('group by view_nums', function(done){
model.group('view_nums').select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` GROUP BY `view_nums`')
done();
})
})
it('group by view_nums has alias', function(done){
model.group('c.view_nums').select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` GROUP BY c.`view_nums`')
done();
})
})
it('group by multi', function(done){
model.group('id,view_nums').select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` GROUP BY `id`,`view_nums`')
done();
})
})
it('group by multi alias', function(done){
model.group('c.id,c.view_nums').select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` GROUP BY c.`id`,c.`view_nums`')
done();
})
})
})
describe('lock', function(){
it('lock true', function(done){
model.lock(true).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group` FOR UPDATE')
done();
})
})
it('lock false', function(done){
model.lock(false).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT * FROM `think_group`')
done();
})
})
})
describe('distinct', function(){
it('distinct:view_nums', function(done){
model.distinct('view_nums').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT Distinct `view_nums` FROM `think_group`')
done();
})
})
it('distinct:title', function(done){
model.distinct('title').select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT Distinct `title` FROM `think_group`')
done();
})
})
})
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 `think_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 `think_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 `think_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 `think_group` WHERE ( `id` = 10 )')
done();
})
})
it('where value undefined', function(done){
model.where({id: undefined}).select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` WHERE ( `id` = 0 )')
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 `think_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 `think_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 `think_group` WHERE ( `id` = 10 )')
done();
})
})
it('where field not exist', function(done){
model.where({idxxx: 10}).select().catch(function(err){
assert.equal(err.message, 'field `idxxx` in where condition is not valid');
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 think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_group` WHERE ( `title` LIKE '%welefen%' )")
done();
})
})
it('where like with both %', function(done){
model.where({'title|content': ['like', '%welefen%']}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( (`title` LIKE '%welefen%') OR (`content` LIKE '%welefen%') )")
done();
})
})
it('where like with both %', function(done){
model.where({'title&content': ['like', '%welefen%']}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( (`title` LIKE '%welefen%') AND (`content` 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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_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 `think_group` WHERE ( `id` > 10 OR `id` < 20 ) AND ( `title` = 'welefen' )")
done();
})
})
it('where extra', function(done){
model.where({id: [['exp', '= 10 '], ['>', 10], ['<', 20]]}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( (`id` = 10 ) AND (`id` > 10) AND (`id` < 20) )")
done();
})
})
it('where mixed', function(done){
model.where({id: {
'>=': 10,
'<=': 20
}, 'title': ['like', '%welefen%'], date: ['>', '2014-08-12'], _logic: 'OR'}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( `id` >= 10 AND `id` <= 20 ) OR ( `title` LIKE '%welefen%' ) OR ( `date` > '2014-08-12' )")
done();
})
})
it('where _complex', function(done){
model.where({
_complex: {
id: ['IN', [1, 2, 3]]
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( ( `id` IN (1,2,3) ) )")
done();
})
})
it('where _complex 2', function(done){
model.where({
title: 'test',
_complex: {
id: ['IN', [1, 2, 3]],
content: 'www',
_logic: 'or'
}
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( `title` = 'test' ) AND ( ( `id` IN (1,2,3) ) OR ( `content` = 'www' ) )")
done();
})
})
it('where _complex 3', function(done){
model.where({
title: 'test',
_complex: {
id: ['IN', [1, 2, 3]],
content: 'www'
},
_logic: 'or'
}).select().then(function(){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "SELECT * FROM `think_group` WHERE ( `title` = 'test' ) OR ( ( `id` IN (1,2,3) ) AND ( `content` = 'www' ) )")
done();
})
})
it('where build sql', function(done){
D('Cate').field('id').buildSql().then(function(sql){
model.where({
id: ['IN', sql, 'exp']
}).select().then(function(){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT * FROM `think_group` WHERE ( `id` IN ( SELECT `id` FROM `think_cate` ) )')
})
done();
})
})
})
describe('count', function(){
var model = D('Group');
it('count id', function(done){
model.count('id').then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT COUNT(id) AS thinkjs_count FROM `think_group` LIMIT 1')
done();
})
})
it('count', function(done){
model.count().then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT COUNT(id) AS thinkjs_count FROM `think_group` LIMIT 1')
done();
})
})
})
describe('sum', function(){
var model = D('Group');
it('sum view_nums', function(done){
model.sum('view_nums').then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT SUM(view_nums) AS thinkjs_sum FROM `think_group` LIMIT 1')
done();
})
})
it('sum', function(done){
model.sum().then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT SUM(id) AS thinkjs_sum FROM `think_group` LIMIT 1')
done();
})
})
})
describe('min', function(){
var model = D('Group');
it('min view_nums', function(done){
model.min('view_nums').then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT MIN(view_nums) AS thinkjs_min FROM `think_group` LIMIT 1')
done();
})
})
it('min', function(done){
model.min().then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT MIN(id) AS thinkjs_min FROM `think_group` LIMIT 1')
done();
})
})
})
describe('max', function(){
var model = D('Group');
it('max view_nums', function(done){
model.max('view_nums').then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT MAX(view_nums) AS thinkjs_max FROM `think_group` LIMIT 1')
done();
})
})
it('max', function(done){
model.max().then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT MAX(id) AS thinkjs_max FROM `think_group` LIMIT 1')
done();
})
})
})
describe('avg', function(){
var model = D('Group');
it('avg view_nums', function(done){
model.avg('view_nums').then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT AVG(view_nums) AS thinkjs_avg FROM `think_group` LIMIT 1')
done();
})
})
it('avg', function(done){
model.avg().then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, 'SELECT AVG(id) AS thinkjs_avg FROM `think_group` LIMIT 1')
done();
})
})
})
describe('add', function(){
var model = D('Group');
it('add single field data', function(done){
model.add({title: 'xxx'}).then(function(sql){
var sql = model.getLastSql().trim();
assert.equal(sql, "INSERT INTO `think_group` (`title`) VALUES('xxx')")
done();
})
})
it('add multi field data', function(done){
model.add({title: 'xxx', content: "fasdf'suredyf\n"}).then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "INSERT INTO `think_group` (`title`,`content`) VALUES('xxx','fasdf\\'suredyf\\n')")
done();
})
})
it('add empty data', function(done){
model.add().catch(function(error){
assert.equal(error.message, '_DATA_TYPE_INVALID_');
done()
})
})
})
describe('addAll', function(){
var model = D('Group');
it('add single field data', function(done){
model.addAll([{title: 'xxx'}]).then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "INSERT INTO `think_group`(`title`) VALUES ('xxx')")
done();
})
})
it('add single field data 1', function(done){
model.addAll([{title: 'xxx'}, {title: 'yyyy'}]).then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "INSERT INTO `think_group`(`title`) VALUES ('xxx'),('yyyy')")
done();
})
})
it('add multi field data', function(done){
model.addAll([{title: 'xxx', content: "fasdf'suredyf\n"}]).then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "INSERT INTO `think_group`(`title`,`content`) VALUES ('xxx','fasdf\\'suredyf\\n')")
done();
})
})
it('add multi field data 1', function(done){
model.addAll([{title: 'xxx', content: "fasdf'suredyf\n"}, {title: 'www', content: 'yyy'}]).then(function(sql){
var sql = model.getLastSql().trim();
//console.log(sql)
assert.equal(sql, "INSERT INTO `think_group`(`title`,`content`) VALUES ('xxx','fasdf\\'suredyf\\n'),('www','yyy')")
done();
})
})
it('add empty data', function(done){
model.addAll().catch(function(error){
assert.equal(error.message, '_DATA_TYPE_INVALID_');
done()
})
})
it('add empty data1', function(done){
model.addAll({title: "xxx"}).catch(function(error){
assert.equal(error.message, '_DATA_TYPE_INVALID_');
done()
})
})
})
describe('delete', function(){
var model = D('Group');
it('delete empty where', function(done){
model.delete().then(function(error){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, 'DELETE FROM `think_group`')
done();
})
})
it('delete with where', function(done){
model.where({
id: ['<', 10]
}).delete().then(function(error){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, 'DELETE FROM `think_group` WHERE ( `id` < 10 )')
done();
})
})
it('delete with options', function(done){
model.delete({where: {
id: ['<', 10]
}}).then(function(error){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, 'DELETE FROM `think_group` WHERE ( `id` < 10 )')
done();
})
})
})
describe('update', function(){
var model = D('Group');
it('update empty data', function(done){
model.update().catch(function(error){
//var sql = model.getLastSql().trim();
//console.log(error);
assert.equal(error.message, '_DATA_TYPE_INVALID_')
done();
})
})
it('update with data', function(done){
model.update({title: 'wwww'}).catch(function(error){
//var sql = model.getLastSql().trim();
//console.log(error);
assert.equal(error.message, '_OPERATION_WRONG_')
done();
})
})
it('update with data, has where', function(done){
model.where({id: 10}).update({title: 'wwww'}).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `title`='wwww' WHERE ( `id` = 10 )")
done();
})
})
it('update with data, has options', function(done){
model.update({title: 'wwww'}, {where: {id: 10}}).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `title`='wwww' WHERE ( `id` = 10 )")
done();
})
})
})
describe('updateAll', function(){
var model = D('Group');
it('update empty data', function(done){
model.updateAll().catch(function(error){
//var sql = model.getLastSql().trim();
//console.log(error);
assert.equal(error.message, '_DATA_TYPE_INVALID_')
done();
})
})
it('update with single data', function(done){
model.updateAll({title: 'wwww'}).catch(function(error){
//var sql = model.getLastSql().trim();
//console.log(error);
assert.equal(error.message, '_DATA_TYPE_INVALID_')
done();
})
})
it('update with single data 1', function(done){
model.updateAll([{title: 'wwww', id: 10}]).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `title`='wwww' WHERE ( `id` = 10 )")
done();
})
})
it('update with single data 2', function(done){
model.updateAll([{title: 'wwww', id: 10}, {title: 'yyy'}]).catch(function(err){
//var sql = model.getLastSql().trim();
//console.log(err);
assert.equal(err.message, "_OPERATION_WRONG_")
done();
})
})
})
describe('updateField', function(){
var model = D('Group');
it('update title error', function(done){
model.updateField('title', 'welefen').catch(function(error){
assert.equal(error.message, '_OPERATION_WRONG_');
done();
})
})
it('update title', function(done){
model.where({id: 10}).updateField('title', 'welefen').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `title`='welefen' WHERE ( `id` = 10 )");
done();
})
})
})
describe('updateInc', function(){
var model = D('Group');
it('update view_nums', function(done){
model.where({id: 10}).updateInc('view_nums').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + 10', function(done){
model.where({id: 10}).updateInc('view_nums', 10).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + 10A', function(done){
model.where({id: 10}).updateInc('view_nums', '10A').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + xxx', function(done){
model.where({id: 10}).updateInc('view_nums', 'xxx').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )");
done();
})
})
})
describe('updateDec', function(){
var model = D('Group');
it('update view_nums', function(done){
model.where({id: 10}).updateDec('view_nums').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - 10', function(done){
model.where({id: 10}).updateDec('view_nums', 10).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - 10A', function(done){
model.where({id: 10}).updateDec('view_nums', '10A').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - xxx', function(done){
model.where({id: 10}).updateDec('view_nums', 'xxx').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `think_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )");
done();
})
})
})
describe('getField', function(){
var model = D('Group');
it('get id field', function(done){
model.getField('id').then(function(data){
assert.equal(JSON.stringify(data), '[7565,7564,7563,7562,7561,7560,7559,7558,7557]')
done();
})
})
it('get id field limit 5', function(done){
model.getField('id', 5).then(function(data){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT `id` FROM `think_group` LIMIT 5')
done();
})
})
it('get id field by one', function(done){
model.getField('id', true).then(function(data){
var sql = model.getLastSql().trim();
assert.equal(data, 7565);
assert.equal(sql, 'SELECT `id` FROM `think_group` LIMIT 1')
done();
})
})
it('get multi field', function(done){
model.getField('id,view_nums').then(function(data){
var sql = model.getLastSql().trim();
assert.equal(JSON.stringify(data), '{"id":[7565,7564,7563,7562,7561,7560,7559,7558,7557],"view_nums":[1965,1558,2335,2013,1425,1433,1994,2035,1118]}');
assert.equal(sql, 'SELECT `id`,`view_nums` FROM `think_group`')
done();
})
})
})
})
});
describe('after', function(){
it('after', function(){
muk.restore();
})
})