Skip to content

Instantly share code, notes, and snippets.

@bramblex
Created July 30, 2018 01:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bramblex/7209f9e9898f641527d86db10ced1ca6 to your computer and use it in GitHub Desktop.
Save bramblex/7209f9e9898f641527d86db10ced1ca6 to your computer and use it in GitHub Desktop.
sql generator for js
const { escape } = require('mysql')
function escapeValue(value) { return escape(value) }
function escapeName(name) { return '`' + name + '`'; }
// ================ export ================
function $limit(nu) {
return `LIMIT ${escapeValue(nu)}`
}
function $offset(nu) {
return `OFFSET ${escapeValue(nu)}`
}
function $orderBy(columns, order = 'ASC') {
const columns_content = typeof columns === 'string'
? escapeName(columns)
: columns.map(escapeName).join(', ')
return `ORDER BY ${columns_content} ${order}`
}
function $asc(columns) {
return $orderBy(columns, 'ASC')
}
function $desc(columns) {
return $orderBy(columns, 'DESC')
}
function $pagination(per, nu) {
return `${$limit(per)} ${$offset(per * (Math.max(nu, 1) - 1))}`
}
function $eq(column, value) {
return `${escapeName(column)} = ${escapeValue(value)}`
}
function $neq(column, value) {
return `${escapeName(column)} != ${escapeValue(value)}`
}
function $gt(column, value) {
return `${escapeName(column)} > ${escapeValue(value)}`
}
function $gte(column, value) {
return `${escapeName(column)} >= ${escapeValue(value)}`
}
function $lt(column, value) {
return `${escapeName(column)} < ${escapeValue(value)}`
}
function $lte(column, value) {
return `${escapeName(column)} <= ${escapeValue(value)}`
}
function $like(column, value) {
return `${escapeName(column)} LIKE ${escapeValue(value)}`
}
function $in(column, values) {
return `${escapeName(column)} IN (${values.map(escapeValue).join(', ')})`
}
function $and(...cons) {
return cons.map(con => `(${con})`).join(' AND ')
}
function $or(...cons) {
return cons.map(con => `(${con})`).join(' OR ')
}
function $where(conditions) {
return `WHERE ${conditions}`
}
function $join(table, [l_col, r_col], type = 'INNER') {
return `JOIN ${escapeName(table)} ON ${escapeName(l_col)} = ${escapeName(r_col)}`
}
function $leftJoin(table, con) { return $join(table, con, 'LEFT') }
function $rightJoin(table, con) { return $join(table, con, 'RIGHT') }
function $select(columns, table, ...others) {
const columns_content = typeof columns === 'string'
? escapeName(columns)
: columns.map(escapeName).join(', ')
return `SELECT ${columns_content} FROM ${escapeName(table)} ${others.join(' ')};`
}
function $insert(table, values, ...others) {
return `INSERT INTO ${escapeName(table)} (${Object.keys(values).map(escapeName).join(', ')}) VALUES (${Object.values(values).map(escapeValue).join(', ')}) ${others.join(' ')};`
}
function $insertOrReplace(table, values, ...others) {
return `INSERT OR REPLACE INTO ${Object.keys(values).map(escapeName).join(', ')} VALUES (${Object.values(values).map(escapeValue).join(', ')}) INTO ${escapeName(table)} ${others.join(' ')};`
}
function $update(table, values, ...others) {
return `UPDATE ${escapeName(table)} SET ${Object.entries(values).map(([col, v]) => `${escapeName(col)} = ${escapeValue(v)}`).join()} ${others.join(' ')};`
}
function $delete(table, ...others) {
return `DELETE FROM ${escapeName(table)} ${others.join(' ')};`
}
module.exports = {
$limit, $offset, $pagination,
$eq, $neq, $gt, $gte, $lt, $lte, $like, $in, $and, $or,
$orderBy, $asc, $desc,
$where, $join, $leftJoin, $rightJoin,
$select, $insert, $insertOrReplace, $update, $delete
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment