example.md
2.8 KB
given input query with named parameters
it should build corresponding query with ?
placeholders and fill array of parameters from input object
var compile = require('..')();
var query = 'Select users.json,EXISTS(Select 1 from moderators where moderators.id = :id) as is_moderator from users where users.id = :id and users.status = :status and users.complete_status = :complete_status';
compile(query, {id: 123, status: 'Yes!', complete_status: 'No!'})
.should.eql([ 'Select users.json,EXISTS(Select 1 from moderators where moderators.id = ?) as is_moderator from users where users.id = ? and users.status = ? and users.complete_status = ?',
[ 123, 123, 'Yes!', 'No!' ] ]);
// from https://github.com/sidorares/named-placeholders/issues/2
query = 'SELECT * FROM items WHERE id = :id AND deleted = "0000-00-00 00:00:00"';
compile(query, { id: Number(123) })
.should.eql([ 'SELECT * FROM items WHERE id = ? AND deleted = "0000-00-00 00:00:00"',
[ 123 ] ]);
query = 'SELECT * FROM items WHERE deleted = "0000-00-00 00:00:00" AND id = :id';
compile(query, { id: Number(123) })
.should.eql([ 'SELECT * FROM items WHERE deleted = "0000-00-00 00:00:00" AND id = ?',
[ 123 ] ]);
it should throw error when query contains placeholders but parameters object not passed
var compile = require('..')();
var assert = require('assert');
query = 'test ::p2 test :p1';
assert.throws(
function() {
compile(query);
},
/Named query contains placeholders, but parameters object is undefined/
);
it should replace ::name style placeholders with ??
placeholders
var compile = require('..')();
var query = 'normal placeholder :p1 and double semicolon ::p2';
compile(query, {p1: 'test1', p2: 'test2'})
.should.eql([ 'normal placeholder ? and double semicolon ??', [ 'test1', 'test2' ] ]);
query = 'normal placeholder ::p1 and double semicolon :p2';
compile(query, {p1: 'test1', p2: 'test2'})
.should.eql([ 'normal placeholder ?? and double semicolon ?', [ 'test1', 'test2' ] ]);
query = 'normal placeholder ::p2 and double semicolon :p1';
compile(query, {p1: 'test1', p2: 'test2'})
.should.eql([ 'normal placeholder ?? and double semicolon ?', [ 'test2', 'test1' ] ]);
query = 'normal placeholder :p1 and double semicolon ::p2 test';
compile(query, {p1: 'test1', p2: 'test2'})
.should.eql([ 'normal placeholder ? and double semicolon ?? test', [ 'test1', 'test2' ] ]);
postgres-style toNumbered conversion
basic test
var toNumbered = require('..').toNumbered;
var query = 'SELECT usr.p_pause_stop_track(:doc_dtl_id, :plan_id, :wc_id, 20, :time_from)';
toNumbered(query, {
doc_dtl_id: 123,
time_from: 345,
plan_id: 456,
wc_id: 678
}).should.eql([ 'SELECT usr.p_pause_stop_track($1, $2, $3, 20, $4)', [ 123, 456, 678, 345 ]]);