jsql
- Turn SQL queries into javascript functions
- Allow named parameters
- Compatible with mysql, postgres & sqlite any-db adapters
Usage
- jsql.loadSync(str[, opts]): load a query or queryfile synchronously
- jsql.load(str[, opts], callback): load a query or queryfile asynchronously
parameters
- str: a single SQL query, or a path to a query file
- opts:
- db: an any-db adapter
- promisify: a promisifier
- postgres: set to true to enable postgres style parameters
Examples
Simple (no parameters, no promise or event)
var db = ;var opts = db: db;var query = jsql;;
With named parameters
var db = ;var opts = db: db;var query = jsql;;
With promises
var db = ;var opts = db: db promisify: Bluebirdpromisify;var query = jsql;;
With events
var db = ;var opts = db: db;var query = jsql;
(events are defined by the underlying any-db adapter)
With several db adapters
var dbOne = ;var dbTwo = ;var query = jsql;; // uses default db, dbOne; // uses dbTwo
Named parameters
Named parameters (such as :foobar
) are turned into positional parameters (?
) or numbered parameters ($1,$2,...
) depending on db type. Parameters can they be passed as a javascript object at query time. Since named parameters are merely positional/numbered parameters they cannot be used on column or table names.
Query files
Queries can also be loaded from a file.
Single query
var db = ;var opts = db: db;var query = jsql;
Multiple queries
Multiple queries can be added to the same query file. Queries must be named using valid javascript names ([a-z_$][a-z0-9_$]*
) and delimited using a special delimiter: /*: valid_javascript_name */
.
/*: my_first_query */SELECT * FROM foo WHERE id = :id/*: my_second_query */SELECT * FROM bar WHERE id = :id
var db = ;var opts = db: db promisify: Bluebirdpromisify;var queries = jsql;queries;queries;
Nested query names
If the query name contains a dot, it will be nested in the resulting object
/*: foo.one */SELECT * FROM foo/*: foo.two */SELECT * FROM bar
var db = ;var opts = db: db promisify: Bluebirdpromisify;var queries = jsql;queriesfoo;queriesfoo;
Load a query file asynchronously
var db = ;var opts = db: db;jsql;
postgres support
var db = ;jsql;/* ... */
postgres & non-postgres queries can be contained in the same query file, but adapters should either be omitted at load time or overloaded at call time.