Skip to content

Commit d0c1562

Browse files
committed
Allow passing plain query as subquery.
1 parent 761ebd4 commit d0c1562

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

lib/dialect/postgres.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ Postgres.prototype.visitOverlap = function(overlap) {
542542
};
543543

544544
Postgres.prototype.visitQuery = function(queryNode) {
545+
if (this._queryNode) return this.visitSubquery(queryNode);
545546
this._queryNode = queryNode;
546547
// need to sort the top level query nodes on visitation priority
547548
// so select/insert/update/delete comes before from comes before where

test/dialects/subquery-tests.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,34 @@
33
var Harness = require('./support');
44
var customer = Harness.defineCustomerTable();
55
var user = Harness.defineUserTable();
6+
var post = Harness.definePostTable();
67
var Sql = require('../../lib');
78

9+
Harness.test({
10+
query: user.select(user.name).where(user.id.in(post.select(post.userId))),
11+
pg: {
12+
text: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))',
13+
string: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))'
14+
},
15+
sqlite: {
16+
text: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))',
17+
string: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))'
18+
},
19+
mysql: {
20+
text: 'SELECT `user`.`name` FROM `user` WHERE (`user`.`id` IN (SELECT `post`.`userId` FROM `post`))',
21+
string: 'SELECT `user`.`name` FROM `user` WHERE (`user`.`id` IN (SELECT `post`.`userId` FROM `post`))'
22+
},
23+
mssql: {
24+
text: 'SELECT [user].[name] FROM [user] WHERE ([user].[id] IN (SELECT [post].[userId] FROM [post]))',
25+
string: 'SELECT [user].[name] FROM [user] WHERE ([user].[id] IN (SELECT [post].[userId] FROM [post]))',
26+
},
27+
oracle: {
28+
text: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))',
29+
string: 'SELECT "user"."name" FROM "user" WHERE ("user"."id" IN (SELECT "post"."userId" FROM "post"))'
30+
},
31+
params: []
32+
})
33+
834
Harness.test({
935
query: user.name.in(
1036
customer.subQuery().select(customer.name).where(

0 commit comments

Comments
 (0)