mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-18 14:26:56 +00:00
move transaction to base db adapter
This commit is contained in:
parent
d64b505654
commit
91e8aee7ba
@ -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 {} []
|
||||
|
||||
@ -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 []
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user