Skip to content

Instantly share code, notes, and snippets.

@danneu
Created October 27, 2016 06:06
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 danneu/eb60a6889dc7542131b15a57f7211c24 to your computer and use it in GitHub Desktop.
Save danneu/eb60a6889dc7542131b15a57f7211c24 to your computer and use it in GitHub Desktop.
const $generated = Symbol('$generated')
function sql (strings, ...values) {
let query = ''
strings.forEach((string, i) => {
query += string + (i < values.length ? '$' + (i + 1) : '')
})
query = query.replace(/^\s+/mg, '').trim()
return [$generated, query, values]
}
function query ([safety, sql, params]) {
if (safety !== $generated) {
throw new Error('Must pass a sql-tagged string into query()')
}
// ...
}
// Works
query(sql`
SELECT *
FROM users
WHERE email = lower(${'a'}) OR uname = ${'b'}
`)
// SELECT *
// FROM users
// WHERE email = $1 OR uname = $2
// , ['a', 'b']
// If you forget tag the query...
// Error: Must pass a sql-tagged string into query()
query(`
SELECT *
FROM users
WHERE email = lower(${'a'}) OR uname = ${'b'}
`)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment