diff --git a/Readme.md b/Readme.md index 244cf734c..685588a2d 100644 --- a/Readme.md +++ b/Readme.md @@ -490,9 +490,13 @@ Alternatively, you can use `??` characters as placeholders for identifiers you w like to have escaped like this: ```js -connection.query('SELECT * FROM ?? WHERE id = ?', ['users', userId], function(err, results) { +var userId = 1; +var columns = ['username', 'email']; +var query = connection.query('SELECT ?? FROM ?? WHERE id = ?', [columns, 'users', userId], function(err, results) { // ... }); + +console.log(query.sql); // SELECT `username`, `email` FROM `users` WHERE id = 1 ``` **Please note that this last character sequence is experimental and syntax might change** diff --git a/lib/protocol/SqlString.js b/lib/protocol/SqlString.js index 5717ac84e..34a93a1d2 100644 --- a/lib/protocol/SqlString.js +++ b/lib/protocol/SqlString.js @@ -1,6 +1,12 @@ var SqlString = exports; SqlString.escapeId = function (val, forbidQualified) { + if (Array.isArray(val)) { + return val.map(function(v) { + return SqlString.escapeId(v, forbidQualified); + }).join(', '); + } + if (forbidQualified) { return '`' + val.replace(/`/g, '``') + '`'; } diff --git a/test/unit/protocol/test-SqlString.js b/test/unit/protocol/test-SqlString.js index 343dda6cf..a3d11e6c0 100644 --- a/test/unit/protocol/test-SqlString.js +++ b/test/unit/protocol/test-SqlString.js @@ -3,6 +3,16 @@ var test = require('utest'); var assert = require('assert'); var SqlString = require(common.lib + '/protocol/SqlString'); +test('SqlString.escapeId', { + 'arrays are turned into lists': function() { + assert.equal(SqlString.escapeId(['a', 'b', 't.c']), "`a`, `b`, `t`.`c`"); + }, + + 'nested arrays are flattened': function() { + assert.equal(SqlString.escapeId(['a', ['b', ['t.c']]]), "`a`, `b`, `t`.`c`"); + }, +}); + test('SqlString.escape', { 'undefined -> NULL': function() { assert.equal(SqlString.escape(undefined), 'NULL');