diff --git a/src/adapter/db/base.js b/src/adapter/db/base.js index ec268d80..49566587 100644 --- a/src/adapter/db/base.js +++ b/src/adapter/db/base.js @@ -17,6 +17,7 @@ export default class extends Parse { this.sql = ''; this.lastInsertId = 0; this._socket = null; + this.transTimes = 0; //transaction times } /** * get socket instance, override by sub class @@ -231,6 +232,40 @@ export default class extends Parse { return data.affectedRows || 0; }); } + /** + * start transaction + * @return {Promise} [] + */ + startTrans(){ + if (this.transTimes === 0) { + this.transTimes++; + return this.execute('START TRANSACTION'); + } + this.transTimes++; + return Promise.resolve(); + } + /** + * commit + * @return {Promise} [] + */ + commit(){ + if (this.transTimes > 0) { + this.transTimes = 0; + return this.execute('COMMIT'); + } + return Promise.resolve(); + } + /** + * rollback + * @return {Promise} [] + */ + rollback(){ + if (this.transTimes > 0) { + this.transTimes = 0; + return this.execute('ROLLBACK'); + } + return Promise.resolve(); + } /** * close connect * @return {} [] diff --git a/src/adapter/db/mysql.js b/src/adapter/db/mysql.js index cb92c632..d6143f1f 100644 --- a/src/adapter/db/mysql.js +++ b/src/adapter/db/mysql.js @@ -6,15 +6,6 @@ let MysqlSocket = think.adapter('socket', 'mysql'); * @type {Class} */ export default class extends think.adapter.db { - /** - * init - * @param {Object} config [] - * @return {} [] - */ - init(config){ - super.init(config); - this.transTimes = 0; //transaction times - } /** * get mysql socket instance * @param {Object} config [] @@ -48,40 +39,6 @@ export default class extends think.adapter.db { }); return ret; } - /** - * start transaction - * @return {Promise} [] - */ - startTrans(){ - if (this.transTimes === 0) { - this.transTimes++; - return this.execute('START TRANSACTION'); - } - this.transTimes++; - return Promise.resolve(); - } - /** - * commit - * @return {Promise} [] - */ - commit(){ - if (this.transTimes > 0) { - this.transTimes = 0; - return this.execute('COMMIT'); - } - return Promise.resolve(); - } - /** - * rollback - * @return {Promise} [] - */ - rollback(){ - if (this.transTimes > 0) { - this.transTimes = 0; - return this.execute('ROLLBACK'); - } - return Promise.resolve(); - } /** * parse key * @param {String} key [] diff --git a/src/adapter/db/sqlite.js b/src/adapter/db/sqlite.js index 8eb1d594..864ab6cd 100644 --- a/src/adapter/db/sqlite.js +++ b/src/adapter/db/sqlite.js @@ -25,6 +25,7 @@ export default class extends think.adapter.db { async getFields(table){ let data = await this.query(`PRAGMA table_info( ${table} )`); let ret = {}; + console.log(data); data.forEach(item => { ret[item.name] = { name: item.name, @@ -35,10 +36,10 @@ export default class extends think.adapter.db { auto_increment: false }; }); - if(data.length === 0){ - let msg = new Error(think.local('TABLE_NO_COLUMNS', table)); - return think.reject(msg); - } + // if(data.length === 0){ + // let msg = new Error(think.local('TABLE_NO_COLUMNS', table)); + // return think.reject(msg); + // } return ret; } /** @@ -55,11 +56,11 @@ export default class extends think.adapter.db { * @return {String} [] */ parseLimit(limit){ - if (!limit) { + if (think.isEmpty(limit)) { return ''; } if(think.isString(limit)){ - limit = limit.split(','); + limit = limit.split(/\s*,\s*/); } if(limit[1]){ return ' LIMIT ' + (limit[1] | 0) + ' OFFSET ' + (limit[0] | 0); diff --git a/test/adapter/db/base.js b/test/adapter/db/base.js index 8c3e842b..a5f48228 100644 --- a/test/adapter/db/base.js +++ b/test/adapter/db/base.js @@ -20,6 +20,7 @@ describe('adapter/db/base.js', function(){ assert.equal(instance.sql, ''); assert.equal(instance.lastInsertId, 0); assert.equal(instance._socket, null); + assert.equal(instance.transTimes, 0); }) it('socket is function', function(){ var instance = new Base(); @@ -394,4 +395,91 @@ describe('adapter/db/base.js', function(){ instance.close(); assert.equal(flag, false); }) + it('startTrans', function(done){ + var instance = new Base(); + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'START TRANSACTION'); + flag = true; + return Promise.resolve(); + } + instance.startTrans().then(function(data){ + assert.equal(flag, true); + instance.transTimes = 1; + done(); + }) + }) + it('startTrans, is started', function(done){ + var instance = new Base(); + instance.transTimes = 1; + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'START TRANSACTION'); + flag = true; + return Promise.resolve(); + } + instance.startTrans().then(function(data){ + assert.equal(flag, false); + instance.transTimes = 1; + done(); + }) + }) + it('commit, not start', function(done){ + var instance = new Base(); + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'ROLLBACK'); + flag = true; + return Promise.resolve(); + } + instance.commit().then(function(data){ + assert.equal(flag, false); + instance.transTimes = 0; + done(); + }) + }) + it('commit', function(done){ + var instance = new Base(); + instance.transTimes = 1; + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'COMMIT'); + flag = true; + return Promise.resolve(); + } + instance.commit().then(function(data){ + assert.equal(flag, true); + instance.transTimes = 0; + done(); + }) + }) + it('rollback, not start', function(done){ + var instance = new Base(); + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'ROLLBACK'); + flag = true; + return Promise.resolve(); + } + instance.rollback().then(function(data){ + assert.equal(flag, false); + instance.transTimes = 0; + done(); + }) + }) + it('rollback', function(done){ + var instance = new Base(); + instance.transTimes = 1; + var flag = false; + instance.execute = function(sql){ + assert.equal(sql, 'ROLLBACK'); + flag = true; + return Promise.resolve(); + } + instance.rollback().then(function(data){ + assert.equal(flag, true); + instance.transTimes = 0; + done(); + }) + }) }) \ No newline at end of file diff --git a/test/adapter/db/mysql.js b/test/adapter/db/mysql.js index 593214fb..3f870b4a 100644 --- a/test/adapter/db/mysql.js +++ b/test/adapter/db/mysql.js @@ -43,93 +43,6 @@ describe('adapter/db/mysql.js', function(){ done(); }) }) - it('startTrans', function(done){ - var instance = new Mysql(); - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'START TRANSACTION'); - flag = true; - return Promise.resolve(); - } - instance.startTrans().then(function(data){ - assert.equal(flag, true); - instance.transTimes = 1; - done(); - }) - }) - it('startTrans, is started', function(done){ - var instance = new Mysql(); - instance.transTimes = 1; - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'START TRANSACTION'); - flag = true; - return Promise.resolve(); - } - instance.startTrans().then(function(data){ - assert.equal(flag, false); - instance.transTimes = 1; - done(); - }) - }) - it('commit, not start', function(done){ - var instance = new Mysql(); - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'ROLLBACK'); - flag = true; - return Promise.resolve(); - } - instance.commit().then(function(data){ - assert.equal(flag, false); - instance.transTimes = 0; - done(); - }) - }) - it('commit', function(done){ - var instance = new Mysql(); - instance.transTimes = 1; - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'COMMIT'); - flag = true; - return Promise.resolve(); - } - instance.commit().then(function(data){ - assert.equal(flag, true); - instance.transTimes = 0; - done(); - }) - }) - it('rollback, not start', function(done){ - var instance = new Mysql(); - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'ROLLBACK'); - flag = true; - return Promise.resolve(); - } - instance.rollback().then(function(data){ - assert.equal(flag, false); - instance.transTimes = 0; - done(); - }) - }) - it('rollback', function(done){ - var instance = new Mysql(); - instance.transTimes = 1; - var flag = false; - instance.execute = function(sql){ - assert.equal(sql, 'ROLLBACK'); - flag = true; - return Promise.resolve(); - } - instance.rollback().then(function(data){ - assert.equal(flag, true); - instance.transTimes = 0; - done(); - }) - }) it('parseKey, empty', function(){ var instance = new Mysql(); var data = instance.parseKey();