diff --git a/lib/dialect/clickhouse.js b/lib/dialect/clickhouse.js index 59419c5d..c30e2032 100644 --- a/lib/dialect/clickhouse.js +++ b/lib/dialect/clickhouse.js @@ -231,14 +231,37 @@ Clickhouse.prototype.visitArrayCall = function(arrayCall) { return [txt]; }; -Clickhouse.prototype.visitJoin = function(join) { +Clickhouse.prototype.visitFrom = function(from) { var result = []; + if (from.skipFromStatement) { + result.push(','); + } else { + result.push('FROM'); + } + for(var i = 0; i < from.nodes.length; i++) { + // Currently clickhouse only support single table, but anyway + result = result.concat(this.visit(from.nodes[i], {"parentIsFrom": true})); + } + return result; +}; + +Clickhouse.prototype.visitJoin = function(join, config) { + var result = []; + var parentIsFrom = config && config.parentIsFrom; this._visitingJoin = true; - result = result.concat(this.visit(join.from)); + if (parentIsFrom) { + result = result.concat('('); + } + + result = result.concat(this.visit(join.from, {"joinFromQuery": true})); result = result.concat('ALL ' + join.subType + ' JOIN'); result = result.concat(this.visit(join.to)); result = result.concat('USING'); result = result.concat(this.visit(join.on)); + if (parentIsFrom) { + result = result.concat(')'); + } + return result; }; diff --git a/lib/dialect/postgres.js b/lib/dialect/postgres.js index 0949b75b..260a7dd4 100644 --- a/lib/dialect/postgres.js +++ b/lib/dialect/postgres.js @@ -156,7 +156,7 @@ Postgres.prototype.visit = function(node, config) { case 'TABLE' : return this.visitTable(node); case 'COLUMN' : return this.visitColumn(node); case 'FOREIGN KEY' : return this.visitForeignKey(node); - case 'JOIN' : return this.visitJoin(node); + case 'JOIN' : return this.visitJoin(node, config); case 'LITERAL' : return this.visitLiteral(node); case 'TEXT' : return node.text; case 'PARAMETER' : return this.visitParameter(node); @@ -1028,7 +1028,7 @@ Postgres.prototype.visitForShare = function() { Postgres.prototype.visitJoin = function(join) { var result = []; this._visitingJoin = true; - result = result.concat(this.visit(join.from, {"joinFromQuery": true})); + result = result.concat(this.visit(join.from)); result = result.concat(join.subType + ' JOIN'); result = result.concat(this.visit(join.to)); result = result.concat('ON');