beedi 9 years ago
parent
commit
9a0fb98cf9
  1. 4
      lib/dialect/postgres.js
  2. 6
      lib/node/query.js
  3. 2
      package.json
  4. 6
      test/column-tests.js
  5. 27
      test/dialects/subquery-tests.js

4
lib/dialect/postgres.js

@ -689,7 +689,7 @@ Postgres.prototype.visitTable = function(tableNode) {
txt += '.';
}
txt += this.quote(table.getName());
if(table.alias) {
if(typeof table.alias === 'string') {
txt += this._aliasText + this.quote(table.alias);
}
return [txt];
@ -729,7 +729,7 @@ Postgres.prototype.visitColumn = function(columnNode) {
}
}
if(!inInsertUpdateClause && !this.visitingReturning && !this._visitingCreate && !this._visitingAlter && !columnNode.subfieldContainer) {
if(table.alias) {
if(typeof table.alias === 'string') {
txt.push(this.quote(table.alias));
} else {
if(table.getSchema()) {

6
lib/node/query.js

@ -40,6 +40,7 @@ var CreateIndex = require('./createIndex');
var DropIndex = require('./dropIndex');
var Table = require('./table');
var CreateView = require('./createView');
var JoinNode = require('./join');
var Modifier = Node.define({
constructor: function(table, type, count) {
@ -128,6 +129,11 @@ var Query = Node.define({
return this;
},
leftJoin: function(other) {
assert(this.type === 'SUBQUERY', 'leftJoin() can only be used on a subQuery');
return new JoinNode('LEFT', this, other.toNode());
},
where: function(node) {
if (arguments.length > 1) {
// allow multiple where clause arguments

2
package.json

@ -2,7 +2,7 @@
"author": "brianc <brian.m.carlson@gmail.com>",
"name": "sql",
"description": "sql builder",
"version": "0.63.1",
"version": "0.64.1",
"homepage": "https://github.com/brianc/node-sql",
"license": "MIT",
"repository": {

6
test/column-tests.js

@ -6,7 +6,7 @@ var sql = require(__dirname + '/../lib');
describe('column', function() {
var table = sql.define({
name: 'user',
columns: ['id', 'created']
columns: ['id', 'created', 'alias']
});
it('can be accessed by property and array', function() {
@ -18,6 +18,10 @@ describe('column', function() {
assert.equal(table.id.toQuery().text, '"user"."id"');
});
it('works with a column name of "alias"', function() {
assert.equal(table.alias.toQuery().text, '"user"."alias"');
});
it('respects AS rename', function() {
assert.equal(table.id.as('userId').toQuery().text, '"user"."id" AS "userId"');
});

27
test/dialects/subquery-tests.js

@ -192,3 +192,30 @@ Harness.test({
},
params: []
});
var limitUsers = user.subQuery('limit-users').select(user.id, user.name).from(user).order(user.name).limit(10).offset(10);
Harness.test({
query: Sql.select(limitUsers.name, post.tags).from(limitUsers.leftJoin(post).on(post.userId.equals(limitUsers.id))),
pg: {
text : 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" LIMIT 10 OFFSET 10) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")',
string: 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" LIMIT 10 OFFSET 10) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")'
},
sqlite: {
text : 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" LIMIT 10 OFFSET 10) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")',
string: 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" LIMIT 10 OFFSET 10) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")'
},
mysql: {
text : 'SELECT `limit-users`.`name`, `post`.`tags` FROM (SELECT `user`.`id`, `user`.`name` FROM `user` ORDER BY `user`.`name` LIMIT 10 OFFSET 10) `limit-users` LEFT JOIN `post` ON (`post`.`userId` = `limit-users`.`id`)',
string: 'SELECT `limit-users`.`name`, `post`.`tags` FROM (SELECT `user`.`id`, `user`.`name` FROM `user` ORDER BY `user`.`name` LIMIT 10 OFFSET 10) `limit-users` LEFT JOIN `post` ON (`post`.`userId` = `limit-users`.`id`)'
},
mssql: {
text : 'SELECT [limit-users].[name], [post].[tags] FROM (SELECT [user].[id], [user].[name] FROM [user] ORDER BY [user].[name] OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY) [limit-users] LEFT JOIN [post] ON ([post].[userId] = [limit-users].[id])',
string: 'SELECT [limit-users].[name], [post].[tags] FROM (SELECT [user].[id], [user].[name] FROM [user] ORDER BY [user].[name] OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY) [limit-users] LEFT JOIN [post] ON ([post].[userId] = [limit-users].[id])'
},
oracle: {
text : 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")',
string: 'SELECT "limit-users"."name", "post"."tags" FROM (SELECT "user"."id", "user"."name" FROM "user" ORDER BY "user"."name" OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY) "limit-users" LEFT JOIN "post" ON ("post"."userId" = "limit-users"."id")'
},
params: []
});

Loading…
Cancel
Save