mysql-composer
Version:
A simple nodejs mysql syntax composer for insert and update syntax.
87 lines (76 loc) • 3.42 kB
JavaScript
var utils = require('./utils')
function Composer(connection){
if(!connection)throw new Error('A mysql connection should be provided when instantiating Composer')
this.connection = connection
}
Composer.prototype.insert = function(config,callback,inspect){
var tableName = config.table
if(!tableName)throw new Error('Table should not be empty.')
tableName = utils.polishTableName(tableName)
var data = config.data
if(!data || Object.keys(data).length===0) throw new Error('Data should not be empty.')
var onDuplicateKeyUpdate = config.onDuplicateKeyUpdate
if(!onDuplicateKeyUpdate || Object.keys(onDuplicateKeyUpdate).length===0){
var updateClause = ''
}else{
if(!utils.isSubArray(Object.keys(onDuplicateKeyUpdate),Object.keys(data))) throw new Error('onDuplicateKeyUpdate key elements not match keys in data')
var str = utils.composeUpdateString(this.connection,onDuplicateKeyUpdate)
updateClause = ' on duplicate key update '+str
}
var ignore = config.ignore!== false
var insertString = utils.composeInsertString(this.connection,data)
var sql = 'insert '+(ignore?'ignore':'')+' into '+tableName+insertString+updateClause
inspect&&inspect(sql)
if(callback)return this.connection.query(sql,callback)
return utils.queryPromise(this.connection,sql)
}
Composer.prototype.update = function(config,callback,inspect){
var tableName = config.table
if(!tableName)throw new Error('Table should not be empty.')
tableName = utils.polishTableName(tableName)
var data = config.data
if(!data || Object.keys(data).length===0)throw new Error('Data should be a none empty object.')
if(!config.where)throw new Error('where clause must be set, if you want to update all rows, it should explicitly be set to 1')
var whereClause = ' where '+config.where
var updateStr = utils.composeUpdateString(this.connection,data)
var sql = 'update '+tableName+" set "+updateStr+whereClause
inspect&&inspect(sql)
if(callback)return this.connection.query(sql,callback)
return utils.queryPromise(this.connection,sql)
}
Composer.prototype.query = function(sql,callback,inspect){
inspect&&inspect(sql)
if(callback)return this.connection.query(sql,callback)
return utils.queryPromise(this.connection,sql)
}
Composer.prototype.beginTransaction = function(callback){
if(callback)return this.connection.beginTransaction(callback)
var connection = this.connection
return new Promise(function(resolve,reject){
connection.beginTransaction(function(err){
if(err)return reject(err)
resolve()
})
})
}
Composer.prototype.rollback = function(callback){
if(callback)return this.connection.rollback(callback)
var connection = this.connection
return new Promise(function(resolve,reject){
connection.rollback(function(err){
if(err)return reject(err)
resolve()
})
})
}
Composer.prototype.commit = function(callback){
if(callback)return this.connection.commit(callback)
var connection = this.connection
return new Promise(function(resolve,reject){
connection.commit(function(err){
if(err)return reject(err)
resolve()
})
})
}
module.exports = Composer