Browse Source

Merge pull request #47 from HughePaul/master

Allow plain text expressions in where(), and() and or()
auto-join
Brian C 12 years ago
parent
commit
26998b1b90
  1. 2
      lib/node/query.js
  2. 8
      lib/node/where.js
  3. 25
      test/dialects/table-tests.js

2
lib/node/query.js

@ -70,7 +70,7 @@ var Query = Node.define({
//calling #where twice functions like calling #where & then #and
if(this.whereClause) return this.and(node);
this.whereClause = new Where();
this.whereClause.add(node);
this.whereClause.add( this.whereClause.expr(node) );
return this.add(this.whereClause);
},
_whereObject: function(node) {

8
lib/node/where.js

@ -1,20 +1,24 @@
'use strict';
var BinaryNode = require(__dirname + '/binary');
var TextNode = require(__dirname + '/text');
module.exports = require(__dirname).define({
type: 'WHERE',
expr: function(other) {
return typeof other === 'string' ? new TextNode('('+other+')') : other;
},
or: function(other) {
return this.nodes.push(new BinaryNode({
left: this.nodes.pop(),
operator: 'OR',
right: other
right: this.expr(other)
}));
},
and: function(other) {
return this.nodes.push(new BinaryNode({
left: this.nodes.pop(),
operator: 'AND',
right: other
right: this.expr(other)
}));
}
});

25
test/dialects/table-tests.js

@ -120,24 +120,33 @@ Harness.test({
Harness.test({
query : user.select('name').from('user').where('name <> NULL'),
pg : 'SELECT name FROM user WHERE name <> NULL',
sqlite: 'SELECT name FROM user WHERE name <> NULL',
mysql : 'SELECT name FROM user WHERE name <> NULL',
pg : 'SELECT name FROM user WHERE (name <> NULL)',
sqlite: 'SELECT name FROM user WHERE (name <> NULL)',
mysql : 'SELECT name FROM user WHERE (name <> NULL)',
params: []
});
Harness.test({
query : user.select('name,id').from('user').where('name <> NULL'),
pg : 'SELECT name,id FROM user WHERE name <> NULL',
sqlite: 'SELECT name,id FROM user WHERE name <> NULL',
mysql : 'SELECT name,id FROM user WHERE name <> NULL',
pg : 'SELECT name,id FROM user WHERE (name <> NULL)',
sqlite: 'SELECT name,id FROM user WHERE (name <> NULL)',
mysql : 'SELECT name,id FROM user WHERE (name <> NULL)',
params: []
});
Harness.test({
query : user.select('name','id').from('user').where('name <> NULL'),
pg : 'SELECT name, id FROM user WHERE name <> NULL',
mysql : 'SELECT name, id FROM user WHERE name <> NULL',
pg : 'SELECT name, id FROM user WHERE (name <> NULL)',
sqlite: 'SELECT name, id FROM user WHERE (name <> NULL)',
mysql : 'SELECT name, id FROM user WHERE (name <> NULL)',
params: []
});
Harness.test({
query : user.select('name','id').from('user').where('name <> NULL').and('id <> NULL'),
pg : 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))',
sqlite: 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))',
mysql : 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))',
params: []
});

Loading…
Cancel
Save