重构条件解析函数;优化参数传递
parent
637f40a0e7
commit
b5330c859c
2
index.js
2
index.js
|
@ -73,6 +73,8 @@ class Mysqli {
|
||||||
}
|
}
|
||||||
defer.resolve(conn)
|
defer.resolve(conn)
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
defer.resolve(conn)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return new Method(defer.promise)
|
return new Method(defer.promise)
|
||||||
|
|
|
@ -22,7 +22,6 @@ class Method {
|
||||||
return defer.reject('SHOW databases ' + err)
|
return defer.reject('SHOW databases ' + err)
|
||||||
}
|
}
|
||||||
defer.resolve(row.map(it => it.Database))
|
defer.resolve(row.map(it => it.Database))
|
||||||
// conn.release()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return defer.promise
|
return defer.promise
|
||||||
|
@ -39,7 +38,6 @@ class Method {
|
||||||
return defer.reject('SHOW tables ' + err)
|
return defer.reject('SHOW tables ' + err)
|
||||||
}
|
}
|
||||||
defer.resolve(row.map(it => Object.values(it)[0]))
|
defer.resolve(row.map(it => Object.values(it)[0]))
|
||||||
// conn.release()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return defer.promise
|
return defer.promise
|
||||||
|
@ -61,9 +59,7 @@ class Method {
|
||||||
|
|
||||||
conn.query(sql, (err, result) => {
|
conn.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return defer.reject(
|
return defer.reject(`Query ${err}; \nLast exec SQL:「${sql}」`)
|
||||||
`Query ${err}; \nLast exec SQL:「${this.lastSql}」`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
defer.resolve(result)
|
defer.resolve(result)
|
||||||
})
|
})
|
||||||
|
@ -107,9 +103,7 @@ class Method {
|
||||||
|
|
||||||
conn.query(sql, (err, result) => {
|
conn.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return defer.reject(
|
return defer.reject(`Filter ${err}; \nLast exec SQL:「${sql}」`)
|
||||||
`Filter ${err}; \nLast exec SQL:「${this.lastSql}」`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
defer.resolve(result)
|
defer.resolve(result)
|
||||||
})
|
})
|
||||||
|
@ -151,7 +145,7 @@ class Method {
|
||||||
|
|
||||||
conn.query(sql, (err, result) => {
|
conn.query(sql, (err, result) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return defer.reject(`Insert ${err}; Last exec SQL: ${sql}`)
|
return defer.reject(`Insert ${err}; \nLast exec SQL: ${sql}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer.resolve(result.insertId)
|
defer.resolve(result.insertId)
|
||||||
|
@ -166,11 +160,17 @@ class Method {
|
||||||
return Promise.reject('Update Error: empty table')
|
return Promise.reject('Update Error: empty table')
|
||||||
}
|
}
|
||||||
|
|
||||||
let sql = `UPDATE \`${table}\` SET `
|
let sql = `UPDATE ${table} SET `
|
||||||
|
|
||||||
let fields = [] //要更新的字段
|
let fields = [] //要更新的字段
|
||||||
for (let i in doc) {
|
for (let i in doc) {
|
||||||
fields.push(i + ' = ' + escape(doc[i]))
|
let val = doc[i]
|
||||||
|
if (typeof val === 'object' && val.$sql) {
|
||||||
|
val = `(${val.$sql})`
|
||||||
|
} else {
|
||||||
|
val = escape(val)
|
||||||
|
}
|
||||||
|
fields.push(i + ' = ' + val)
|
||||||
}
|
}
|
||||||
sql += fields.join(',')
|
sql += fields.join(',')
|
||||||
sql += parser.where(where)
|
sql += parser.where(where)
|
||||||
|
@ -179,7 +179,7 @@ class Method {
|
||||||
const defer = Promise.defer()
|
const defer = Promise.defer()
|
||||||
conn.query(sql, (err, res) => {
|
conn.query(sql, (err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return defer.reject(`Update ${err}; Last exec SQL: ${sql}`)
|
return defer.reject(`Update ${err}; \nLast exec SQL: ${sql}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer.resolve(res.affectedRows)
|
defer.resolve(res.affectedRows)
|
||||||
|
@ -203,7 +203,7 @@ class Method {
|
||||||
const defer = Promise.defer()
|
const defer = Promise.defer()
|
||||||
conn.query(sql, (err, res) => {
|
conn.query(sql, (err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return defer.reject(`Remove ${err}; Last exec SQL: ${sql}`)
|
return defer.reject(`Remove ${err}; \nLast exec SQL: ${sql}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer.resolve(res.affectedRows)
|
defer.resolve(res.affectedRows)
|
||||||
|
|
|
@ -11,7 +11,7 @@ const { escape } = require('mysql')
|
||||||
* @param [array] arr [条件数组]
|
* @param [array] arr [条件数组]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function parseWhere(arr) {
|
/*function parseWhere(arr) {
|
||||||
if (typeof arr === 'string' && !!arr) {
|
if (typeof arr === 'string' && !!arr) {
|
||||||
return ' WHERE ' + arr
|
return ' WHERE ' + arr
|
||||||
} else if (Array.isArray(arr) && arr.length > 0) {
|
} else if (Array.isArray(arr) && arr.length > 0) {
|
||||||
|
@ -36,13 +36,82 @@ function parseWhere(arr) {
|
||||||
} else {
|
} else {
|
||||||
return ' '
|
return ' '
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
function getType(val) {
|
||||||
|
if (val === null) {
|
||||||
|
return String(val)
|
||||||
|
}
|
||||||
|
return Object.prototype.toString
|
||||||
|
.call(val)
|
||||||
|
.slice(8, -1)
|
||||||
|
.toLowerCase()
|
||||||
|
}
|
||||||
|
function parse$or(arr) {
|
||||||
|
let sql = ''
|
||||||
|
for (let it of arr) {
|
||||||
|
sql += '('
|
||||||
|
if (it.$and) {
|
||||||
|
sql += parse$and(it.$and)
|
||||||
|
} else {
|
||||||
|
sql += parse$opt(it)
|
||||||
|
}
|
||||||
|
sql += ') OR '
|
||||||
|
}
|
||||||
|
sql = sql.slice(0, -3)
|
||||||
|
return sql
|
||||||
|
}
|
||||||
|
function parse$and(arr) {
|
||||||
|
let sql = ''
|
||||||
|
for (let it of arr) {
|
||||||
|
sql += '('
|
||||||
|
if (it.$or) {
|
||||||
|
sql += parse$or(it.$or)
|
||||||
|
} else {
|
||||||
|
sql += parse$opt(it)
|
||||||
|
}
|
||||||
|
sql += ') AND '
|
||||||
|
}
|
||||||
|
sql = sql.slice(0, -4)
|
||||||
|
return sql
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse$opt(opt) {
|
||||||
|
let sql = ''
|
||||||
|
for (let k in opt) {
|
||||||
|
let tmp = opt[k]
|
||||||
|
switch (getType(tmp)) {
|
||||||
|
case 'object':
|
||||||
|
if (tmp.$like) {
|
||||||
|
sql += ` ${k} LIKE ${escape(tmp.$like)} `
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (tmp.$sql) {
|
||||||
|
sql += ` ${k} IN ${tmp.$sql} `
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmp.$in) {
|
||||||
|
let list = tmp.$in.map(it => {
|
||||||
|
return escape(it)
|
||||||
|
})
|
||||||
|
sql += ` ${k} IN (${list.join(',')}) `
|
||||||
|
break
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
sql += ` ${k} = ${escape(tmp)}`
|
||||||
|
}
|
||||||
|
sql += ' AND '
|
||||||
|
}
|
||||||
|
sql = sql.slice(0, -4)
|
||||||
|
return sql
|
||||||
}
|
}
|
||||||
|
|
||||||
const Parser = {
|
const Parser = {
|
||||||
leftJoin(tables) {
|
leftJoin(tables) {
|
||||||
let sql = ''
|
let sql = ''
|
||||||
for (let it of tables) {
|
for (let it of tables) {
|
||||||
sql += ` LEFT JOIN ${it[0]} ON ${it[1]} `
|
sql += ` LEFT JOIN ${it.table} ON ${it.on} `
|
||||||
}
|
}
|
||||||
return sql
|
return sql
|
||||||
},
|
},
|
||||||
|
@ -50,7 +119,7 @@ const Parser = {
|
||||||
rightJoin(tables) {
|
rightJoin(tables) {
|
||||||
let sql = ''
|
let sql = ''
|
||||||
for (let it of tables) {
|
for (let it of tables) {
|
||||||
sql += ` RIGHT JOIN ${it[0]} ON ${it[1]} `
|
sql += ` RIGHT JOIN ${it.table} ON ${it.on} `
|
||||||
}
|
}
|
||||||
return sql
|
return sql
|
||||||
},
|
},
|
||||||
|
@ -58,13 +127,28 @@ const Parser = {
|
||||||
join(tables) {
|
join(tables) {
|
||||||
let sql = ''
|
let sql = ''
|
||||||
for (let it of tables) {
|
for (let it of tables) {
|
||||||
sql += ` JOIN ${it[0]} ON ${it[1]} `
|
sql += ` JOIN ${it[0]} ON ${it.on} `
|
||||||
}
|
}
|
||||||
return sql
|
return sql
|
||||||
},
|
},
|
||||||
|
|
||||||
where(where = '') {
|
where(opt) {
|
||||||
return parseWhere(where)
|
if (typeof opt === 'string') {
|
||||||
|
return ` WHERE ${opt} `
|
||||||
|
}
|
||||||
|
if (typeof opt === 'function') {
|
||||||
|
return ` WHERE ${opt()} `
|
||||||
|
}
|
||||||
|
if (typeof opt === 'object') {
|
||||||
|
if (opt.$and) {
|
||||||
|
return parse$and(opt.$and)
|
||||||
|
} else if (opt.$or) {
|
||||||
|
return parse$or(opt.$or)
|
||||||
|
}
|
||||||
|
return parse$opt(opt)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ' '
|
||||||
},
|
},
|
||||||
|
|
||||||
select(arr = ['*']) {
|
select(arr = ['*']) {
|
||||||
|
|
Loading…
Reference in New Issue