Skip to content

Rewrite named-placeholders to support template function #4

Description

@gajus

The current implementation of named-placeholders is flawed. It is assumes that parameter values is known in advance, i.e. the only possible use case is:

var mysql = require('mysql');
var toUnnamed = require('named-placeholders')();

var q = toUnnamed('select 1+:test', { test: 123});
mysl.createConnection().query(q[0], q[1]);

As a result, it is not possible to implement prepared statements using this implementation.

My suggestion is to reimplement named-placeholders API as:

const {
    parser,
    mapValues
} = require('named-placeholders');

// Used to control LRU.
const parseNamedPlaceholder = parser();

const inputQuery = 'SELECT :foo, :foo, :bar';

const queryTemplate = parseNamedPlaceholder(inputQuery);
// {
//     statement: 'SELECT ?, ?, ?',
//     parameterMap: {
//         0: 'foo',
//         1: 'foo',
//         2: 'bar'
//     }
// }

mapValues(queryTemplate.parameterMap, {
    foo: 'A',
    bar: 'B'
});
// {
//     0: 'A',
//     1: 'A',
//     2: 'B'
// }

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions