Created
October 27, 2016 06:06
-
-
Save danneu/eb60a6889dc7542131b15a57f7211c24 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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