Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@ node_js:
- "4.2"
- "0.10"
- "0.11"

matrix:
allow_failures:
- node_js: "0.10"
- node_js: "0.11"
15 changes: 14 additions & 1 deletion lib/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
'use strict';

var _ = require('lodash');
var Column = require("./column");
var Column = require("./column");
var FunctionCall = require('./node/functionCall');
var ArrayCall = require('./node/arrayCall');
var functions = require('./functions');
var getDialect = require('./dialect');
var JoinNode = require('./node/join');
var Query = require('./node/query');
var sliced = require('sliced');
var Table = require('./table');
Expand Down Expand Up @@ -52,6 +53,18 @@ Sql.prototype.select = function() {
return query;
};

// Returns a subQuery clause
Sql.prototype.subQuery = function(alias) {
// create the query and pass it off
var query = new Query(this);
query.type = 'SUBQUERY';
query.alias = alias;
query.join = function(other) {
return new JoinNode('INNER', this.toNode(), other.toNode(), other);
};
return query;
};

// Returns an interval clause
Sql.prototype.interval = function() {
var interval = new Interval(sliced(arguments));
Expand Down
52 changes: 52 additions & 0 deletions test/dialects/subquery-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -219,3 +219,55 @@ Harness.test({
params: []
});

// Top-level subQuery
Harness.test({
query: Sql.subQuery().select(user.id).from(user),
pg: {
text : '(SELECT "user"."id" FROM "user")',
string: '(SELECT "user"."id" FROM "user")'
},
sqlite: {
text : '(SELECT "user"."id" FROM "user")',
string: '(SELECT "user"."id" FROM "user")'
},
mysql: {
text : '(SELECT `user`.`id` FROM `user`)',
string: '(SELECT `user`.`id` FROM `user`)'
},
mssql: {
text : '(SELECT [user].[id] FROM [user])',
string: '(SELECT [user].[id] FROM [user])'
},
oracle: {
text : '(SELECT "user"."id" FROM "user")',
string: '(SELECT "user"."id" FROM "user")'
},
params: []
});

// Top-level subQuery with alias
Harness.test({
query: Sql.subQuery("x").select(user.id).from(user),
pg: {
text : '(SELECT "user"."id" FROM "user") "x"',
string: '(SELECT "user"."id" FROM "user") "x"'
},
sqlite: {
text : '(SELECT "user"."id" FROM "user") "x"',
string: '(SELECT "user"."id" FROM "user") "x"'
},
mysql: {
text : '(SELECT `user`.`id` FROM `user`) `x`',
string: '(SELECT `user`.`id` FROM `user`) `x`'
},
mssql: {
text : '(SELECT [user].[id] FROM [user]) [x]',
string: '(SELECT [user].[id] FROM [user]) [x]'
},
oracle: {
text : '(SELECT "user"."id" FROM "user") "x"',
string: '(SELECT "user"."id" FROM "user") "x"'
},
params: []
});