|
|
@ -10,9 +10,11 @@ Postgres.prototype.getQuery = function(queryNode) { |
|
|
|
return { text: this.output.join(' '), values: this.params }; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Postgres.prototype.visit = function(node) { |
|
|
|
switch(node.type) { |
|
|
|
case 'QUERY': return this.visitQuery(node); |
|
|
|
case 'SUBQUERY': return this.visitSubquery(node); |
|
|
|
case 'SELECT': return this.visitSelect(node); |
|
|
|
case 'INSERT': return this.visitInsert(node); |
|
|
|
case 'UPDATE': return this.visitUpdate(node); |
|
|
@ -136,6 +138,24 @@ Postgres.prototype.visitQuery = function(queryNode) { |
|
|
|
return this; |
|
|
|
} |
|
|
|
|
|
|
|
Postgres.prototype.visitSubquery = function(queryNode) { |
|
|
|
var result = []; |
|
|
|
for(var i = 0; i < queryNode.nodes.length; i ++) { |
|
|
|
var res = this.visit(queryNode.nodes[i]); |
|
|
|
result = result.concat(res); |
|
|
|
} |
|
|
|
//implicit 'from'
|
|
|
|
if(!this._visitedFrom) { |
|
|
|
var select = result.slice(0, this._selectOrDeleteEndIndex); |
|
|
|
var from = this.visitFrom(new From().add(queryNode.table.toNode())); |
|
|
|
var rest = result.slice(this._selectOrDeleteEndIndex); |
|
|
|
result = select.concat(from).concat(rest); |
|
|
|
} |
|
|
|
result[0] = '('+result[0]; |
|
|
|
result[result.length-1] = result[result.length-1] + ') ' + queryNode.alias; |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
Postgres.prototype.visitTable = function(tableNode) { |
|
|
|
var table = tableNode.table; |
|
|
|
var txt=""; |
|
|
|