Comparing version 0.10.0 to 0.11.0
@@ -16,3 +16,7 @@ 'use strict'; | ||
Postgres.prototype.getQuery = function(queryNode) { | ||
this.visitQuery(queryNode); | ||
//passed in a table, not a query | ||
if(queryNode.name) { | ||
queryNode = queryNode.select(queryNode.star()); | ||
} | ||
this.output = this.visit(queryNode); | ||
return { text: this.output.join(' '), values: this.params }; | ||
@@ -258,3 +262,3 @@ }; | ||
//implicit 'from' | ||
return this; | ||
return this.output; | ||
}; | ||
@@ -261,0 +265,0 @@ |
@@ -21,2 +21,7 @@ 'use strict'; | ||
Node.prototype.toQuery = function() { | ||
var Dialect = require(__dirname + '/../').dialect; | ||
return new Dialect().getQuery(this); | ||
}; | ||
Node.prototype.addAll = function(nodes) { | ||
@@ -23,0 +28,0 @@ for(var i = 0, len = nodes.length; i < len; i++) { |
@@ -215,6 +215,2 @@ 'use strict'; | ||
return this; | ||
}, | ||
toQuery: function() { | ||
var Dialect = require(__dirname + '/../').dialect; | ||
return new Dialect().getQuery(this); | ||
} | ||
@@ -221,0 +217,0 @@ }); |
@@ -5,3 +5,3 @@ { | ||
"description": "sql builder", | ||
"version": "0.10.0", | ||
"version": "0.11.0", | ||
"homepage": "https://github.com/brianc/node-sql", | ||
@@ -14,3 +14,3 @@ "repository": { | ||
"scripts": { | ||
"test": "node test/" | ||
"test": "./node_modules/.bin/mocha" | ||
}, | ||
@@ -24,5 +24,4 @@ "engines": { | ||
"devDependencies": { | ||
"test-dir": "*", | ||
"tap": "*" | ||
"mocha": "*" | ||
} | ||
} |
'use strict'; | ||
var test = require('tap').test; | ||
var assert = require('assert'); | ||
var Table = require(__dirname + '/../lib/table'); | ||
@@ -11,15 +10,14 @@ | ||
test('operators', function(t) { | ||
t.equal(Foo.baz.equals(1).operator, '='); | ||
t.equal(Foo.baz.equal(1).operator, '='); | ||
t.equal(Foo.baz.notEqual(1).operator, '<>'); | ||
t.equal(Foo.baz.notEquals(1).operator, '<>'); | ||
t.equal(Foo.baz.like('asdf').operator, 'LIKE'); | ||
t.equal(Foo.baz.isNull().operator, 'IS NULL'); | ||
t.equal(Foo.baz.isNotNull().operator, 'IS NOT NULL'); | ||
t.equal(Foo.baz.gt(1).operator, '>'); | ||
t.equal(Foo.baz.gte(1).operator, '>='); | ||
t.equal(Foo.baz.lt(1).operator, '<'); | ||
t.equal(Foo.baz.lte(1).operator, '<='); | ||
t.end(); | ||
test('operators', function() { | ||
assert.equal(Foo.baz.equals(1).operator, '='); | ||
assert.equal(Foo.baz.equal(1).operator, '='); | ||
assert.equal(Foo.baz.notEqual(1).operator, '<>'); | ||
assert.equal(Foo.baz.notEquals(1).operator, '<>'); | ||
assert.equal(Foo.baz.like('asdf').operator, 'LIKE'); | ||
assert.equal(Foo.baz.isNull().operator, 'IS NULL'); | ||
assert.equal(Foo.baz.isNotNull().operator, 'IS NOT NULL'); | ||
assert.equal(Foo.baz.gt(1).operator, '>'); | ||
assert.equal(Foo.baz.gte(1).operator, '>='); | ||
assert.equal(Foo.baz.lt(1).operator, '<'); | ||
assert.equal(Foo.baz.lte(1).operator, '<='); | ||
}); |
'use strict'; | ||
var assert = require('assert'); | ||
var test = require('tap').test; | ||
var Node = require(__dirname + '/../lib/node/'); | ||
console.log('node definition'); | ||
var Bang = Node.define({ | ||
@@ -18,16 +17,15 @@ type: 'SELECT' | ||
test('clause definition', function(t) { | ||
test('clause definition', function() { | ||
var select = new Bang(); | ||
t.equal(select.type, 'SELECT'); | ||
t.equal(select.nodes.length, 0); | ||
assert.equal(select.type, 'SELECT'); | ||
assert.equal(select.nodes.length, 0); | ||
var q = new Boom('hai'); | ||
t.equal(q.nodes.length, 0); | ||
assert.equal(q.nodes.length, 0); | ||
var q2 = new Boom('bai'); | ||
q.nodes.push(1); | ||
t.equal(q.nodes.length, 1); | ||
t.equal(q.name, 'hai'); | ||
t.equal(q2.nodes.length, 0); | ||
t.equal(q2.name, 'bai'); | ||
t.end(); | ||
assert.equal(q.nodes.length, 1); | ||
assert.equal(q.name, 'hai'); | ||
assert.equal(q2.nodes.length, 0); | ||
assert.equal(q2.name, 'bai'); | ||
}); |
@@ -16,2 +16,9 @@ 'use strict'; | ||
Harness.test({ | ||
query : user.join(post).on(user.id.equals(post.userId)), | ||
pg : '"user" INNER JOIN "post" ON ("user"."id" = "post"."userId")', | ||
sqlite: '"user" INNER JOIN "post" ON ("user"."id" = "post"."userId")', | ||
mysql : '`user` INNER JOIN `post` ON (`user`.`id` = `post`.`userId`)' | ||
}); | ||
Harness.test({ | ||
query : user | ||
@@ -18,0 +25,0 @@ .select(user.name, post.content, comment.text) |
'use strict'; | ||
var assert = require('assert'); | ||
var tap = require('tap').test; | ||
var Table = require(__dirname + '/../../lib/table'); | ||
@@ -23,3 +23,3 @@ | ||
var title = dialect+': '+(expected.title || expected[dialect].text || expected[dialect]); | ||
tap(title, function(t) { | ||
test(title, function() { | ||
@@ -29,3 +29,3 @@ // check if this query is expected to throw | ||
t.throws(function() { | ||
assert.throws(function() { | ||
new DialectClass().getQuery(expected.query); | ||
@@ -41,3 +41,3 @@ }); | ||
var expectedText = expected[dialect].text || expected[dialect]; | ||
t.equal(compiledQuery.text, expectedText,'query result'); | ||
assert.equal(compiledQuery.text, expectedText,'query result'); | ||
@@ -47,5 +47,5 @@ // if params are specified then test these are correct | ||
if(expectedParams) { | ||
t.equal(expectedParams.length, compiledQuery.values.length, 'params length'); | ||
assert.equal(expectedParams.length, compiledQuery.values.length, 'params length'); | ||
for(var i = 0; i < expectedParams.length; i++) { | ||
t.equal(expectedParams[i], compiledQuery.values[i], 'param '+(i+1)); | ||
assert.equal(expectedParams[i], compiledQuery.values[i], 'param '+(i+1)); | ||
} | ||
@@ -55,3 +55,2 @@ } | ||
} | ||
t.end(); | ||
}); | ||
@@ -58,0 +57,0 @@ |
'use strict'; | ||
var assert = require('assert'); | ||
var test = require('tap').test; | ||
var sql = require(__dirname + '/../lib'); | ||
@@ -11,24 +11,22 @@ | ||
test('unknown dialect', function(t) { | ||
console.log('unknown dialect throws exception'); | ||
t.throws(function() { | ||
sql.setDialect('asdf'); | ||
suite('index', function() { | ||
test('unknown dialect throws exception', function() { | ||
assert.throws(function() { | ||
sql.setDialect('asdf'); | ||
}); | ||
}); | ||
t.end(); | ||
}); | ||
test('throws before dialect is set', function(t) { | ||
t.throws(function() { | ||
var query = sql.select(user.id).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery(); | ||
test('throws before dialect is set', function() { | ||
assert.throws(function() { | ||
var query = sql.select(user.id).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery(); | ||
}); | ||
}); | ||
t.end(); | ||
}); | ||
test('setting dialect to postgres works', function(t) { | ||
sql.setDialect('postgres'); | ||
var query = sql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery(); | ||
t.equal(query.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = $1)'); | ||
t.equal(query.values[0], 'brian.m.carlson@gmail.com'); | ||
t.end(); | ||
test('setting dialect to postgres works', function() { | ||
sql.setDialect('postgres'); | ||
var query = sql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery(); | ||
assert.equal(query.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = $1)'); | ||
assert.equal(query.values[0], 'brian.m.carlson@gmail.com'); | ||
}); | ||
}); |
@@ -6,6 +6,5 @@ 'use strict'; | ||
var testDir = path.dirname(require.main.filename); | ||
var testDir = __dirname; | ||
var directories = [ | ||
testDir, | ||
testDir + '/dialects' | ||
@@ -19,5 +18,4 @@ ]; | ||
var filePath = path.join(d, file); | ||
console.log(filePath); | ||
require(filePath); | ||
} | ||
}); |
@@ -7,2 +7,9 @@ 'use strict'; | ||
var select = new Select(); | ||
assert.equal(select.type, 'SELECT'); | ||
test('has SELECT type', function() { | ||
assert.equal(select.type, 'SELECT'); | ||
}); | ||
test('can go toQuery', function() { | ||
assert.equal(select.toQuery().text, 'SELECT '); | ||
}); |
'use strict'; | ||
var assert = require('assert'); | ||
var test = require('tap').test; | ||
var Table = require(__dirname + '/../lib/table'); | ||
var Column = require(__dirname + '/../lib/column'); | ||
test('table', function(t) { | ||
suite('table', function() { | ||
var table = new Table({ | ||
@@ -12,38 +12,46 @@ name: 'bang' | ||
t.equal(table.getName(), 'bang'); | ||
t.equal(table.columns.length, 0); | ||
test('has name', function() { | ||
assert.equal(table.getName(), 'bang'); | ||
}); | ||
var col = new Column({ | ||
table: table, | ||
name: 'boom' | ||
test('has no columns', function() { | ||
assert.equal(table.columns.length, 0); | ||
}); | ||
t.equal(col.name, 'boom'); | ||
t.equal(col.table.getName(), 'bang'); | ||
test('can add column', function() { | ||
var col = new Column({ | ||
table: table, | ||
name: 'boom' | ||
}); | ||
table.addColumn(col); | ||
t.equal(table.columns.length, 1); | ||
t.equal(table.boom, col); | ||
assert.equal(col.name, 'boom'); | ||
assert.equal(col.table.getName(), 'bang'); | ||
console.log('table creates query node'); | ||
var sel = table.select(table.boom); | ||
t.equal(sel.type, 'QUERY'); | ||
table.addColumn(col); | ||
assert.equal(table.columns.length, 1); | ||
assert.equal(table.boom, col); | ||
}) | ||
console.log('table can be defined'); | ||
var user = Table.define({ | ||
name: 'user', | ||
columns: ['id', 'name'] | ||
test('creates query node', function() { | ||
var sel = table.select(table.boom); | ||
assert.equal(sel.type, 'QUERY'); | ||
}); | ||
t.equal(user.getName(), 'user'); | ||
t.equal(user.columns.length, 2); | ||
t.equal(user.columns[0].name, 'id'); | ||
t.equal(user.columns[1].name, 'name'); | ||
t.equal(user.columns[0].name, user.id.name); | ||
t.equal(user.id.table, user); | ||
t.equal(user.name.table, user); | ||
t.end(); | ||
test('can be defined', function() { | ||
var user = Table.define({ | ||
name: 'user', | ||
columns: ['id', 'name'] | ||
}); | ||
assert.equal(user.getName(), 'user'); | ||
assert.equal(user.columns.length, 2); | ||
assert.equal(user.columns[0].name, 'id'); | ||
assert.equal(user.columns[1].name, 'name'); | ||
assert.equal(user.columns[0].name, user.id.name); | ||
assert.equal(user.id.table, user); | ||
assert.equal(user.name.table, user); | ||
}); | ||
}); | ||
test('table with fancier column definitions', function(t) { | ||
test('table with fancier column definitions', function() { | ||
var table = Table.define({ | ||
@@ -65,15 +73,14 @@ name: 'blah', | ||
var cols = table.columns; | ||
t.equals(cols.length, 2); | ||
assert.equal(cols.length, 2); | ||
var id = cols[0]; | ||
t.equals(id.name, 'id'); | ||
t.equals(id.type, 'serial'); | ||
t.equals(id.notNull, true); | ||
t.equals(id.primaryKey, true); | ||
assert.equal(id.name, 'id'); | ||
assert.equal(id.type, 'serial'); | ||
assert.equal(id.notNull, true); | ||
assert.equal(id.primaryKey, true); | ||
var email = cols[1]; | ||
t.equals(email.name, 'email'); | ||
t.equals(email.type, 'text'); | ||
t.equals(email.notNull, true); | ||
t.equals(email.unique, true); | ||
t.equals(email.anythingYouWant, 'awesome'); | ||
t.end(); | ||
assert.equal(email.name, 'email'); | ||
assert.equal(email.type, 'text'); | ||
assert.equal(email.notNull, true); | ||
assert.equal(email.unique, true); | ||
assert.equal(email.anythingYouWant, 'awesome'); | ||
}); |
87913
1
66
2339