Fix handling of functions in a select clause
This commit is contained in:
parent
490ec86bf7
commit
873bfbc9eb
@ -6,10 +6,10 @@ A node query builder for various SQL databases, based on CodeIgniter's query bui
|
||||
|
||||
var nodeQuery = require('node-query');
|
||||
|
||||
var mysql = ... // Database module connection
|
||||
var connection = ... // Database module connection
|
||||
|
||||
// Three arguments: database type, database connection, database connection library
|
||||
var query = nodeQuery('mysql', mysql, 'mysql2');
|
||||
var query = nodeQuery('mysql', connection, 'mysql2');
|
||||
|
||||
query.select('foo')
|
||||
.from('bar')
|
||||
|
@ -177,6 +177,7 @@ var d = {
|
||||
*/
|
||||
quoteIdentifiers: function(str) {
|
||||
var hiers, raw;
|
||||
var pattern = new RegExp(d.identifierChar + '(' + '([a-zA-Z0-9_]+)' + '(\((.*?)\))' + ')' + d.identifierChar, 'ig');
|
||||
|
||||
// Recurse for arrays of identifiiers
|
||||
if (Array.isArray(str))
|
||||
@ -191,7 +192,19 @@ var d = {
|
||||
hiers = str.split('.').map(d._quote);
|
||||
raw = hiers.join('.');
|
||||
|
||||
// TODO: fix functions
|
||||
// Fix functions
|
||||
if (raw.contains('(') && raw.contains(')'))
|
||||
{
|
||||
var funcs = pattern.exec(raw);
|
||||
console.log(funcs);
|
||||
|
||||
// Unquote the function
|
||||
raw = raw.replace(funcs[0], funcs[1]);
|
||||
|
||||
// Quote the identifiers inside of the parens
|
||||
var inParens = funcs[3].substring(1, funcs[3].length -1);
|
||||
raw = raw.replace(inParens, d.quoteIdentifiers(inParens));
|
||||
}
|
||||
|
||||
return raw;
|
||||
}
|
||||
|
@ -91,10 +91,10 @@
|
||||
<article><h1>Node-query</h1><p>A node query builder for various SQL databases, based on CodeIgniter's query builder.</p>
|
||||
<h3>Basic use</h3><pre class="prettyprint source"><code>var nodeQuery = require('node-query');
|
||||
|
||||
var mysql = ... // Database module connection
|
||||
var connection = ... // Database module connection
|
||||
|
||||
// Three arguments: database type, database connection, database connection library
|
||||
var query = nodeQuery('mysql', mysql, 'mysql2');
|
||||
var query = nodeQuery('mysql', connection, 'mysql2');
|
||||
|
||||
query.select('foo')
|
||||
.from('bar')
|
||||
|
@ -106,6 +106,7 @@ var d = {
|
||||
*/
|
||||
quoteIdentifiers: function(str) {
|
||||
var hiers, raw;
|
||||
var pattern = new RegExp(d.identifierChar + '(' + '([a-zA-Z0-9_]+)' + '(\((.*?)\))' + ')' + d.identifierChar, 'ig');
|
||||
|
||||
// Recurse for arrays of identifiiers
|
||||
if (Array.isArray(str))
|
||||
@ -120,7 +121,19 @@ var d = {
|
||||
hiers = str.split('.').map(d._quote);
|
||||
raw = hiers.join('.');
|
||||
|
||||
// TODO: fix functions
|
||||
// Fix functions
|
||||
if (raw.contains('(') && raw.contains(')'))
|
||||
{
|
||||
var funcs = pattern.exec(raw);
|
||||
console.log(funcs);
|
||||
|
||||
// Unquote the function
|
||||
raw = raw.replace(funcs[0], funcs[1]);
|
||||
|
||||
// Quote the identifiers inside of the parens
|
||||
var inParens = funcs[3].substring(1, funcs[3].length -1);
|
||||
raw = raw.replace(inParens, d.quoteIdentifiers(inParens));
|
||||
}
|
||||
|
||||
return raw;
|
||||
}
|
||||
|
@ -20,6 +20,14 @@ module.exports = (function() {
|
||||
*/
|
||||
base.tests = {
|
||||
'Get tests' : {
|
||||
'Get with function': function(test) {
|
||||
base.qb.select('id, COUNT(id) as count')
|
||||
.from('create_test')
|
||||
.groupBy('id')
|
||||
.get(base.testCallback.bind(test, test));
|
||||
|
||||
test.done();
|
||||
},
|
||||
'Basic select all get': function(test) {
|
||||
base.qb.get('create_test', base.testCallback.bind(test, test));
|
||||
test.done();
|
||||
|
Loading…
Reference in New Issue
Block a user