Comparing version 0.7.1 to 0.8.0
@@ -6,2 +6,3 @@ 'use strict'; | ||
var From = require(__dirname + '/../node/from'); | ||
var Select = require(__dirname + '/../node/select'); | ||
var Parameter = require(__dirname + '/../node/parameter'); | ||
@@ -74,3 +75,2 @@ var Postgres = function() { | ||
var self = this; | ||
this._visitedFrom = true; | ||
//don't use table.column for inserts | ||
@@ -103,3 +103,2 @@ this._visitedInsert = true; | ||
//don't auto-generate from clause | ||
this._visitedFrom = true; | ||
var params = []; | ||
@@ -130,3 +129,2 @@ /*jshint boss: true */ | ||
//don't auto-generate from clause | ||
this._visitedFrom = true; | ||
var table = this._queryNode.table; | ||
@@ -145,3 +143,2 @@ var col_nodes = table.columns.map(function(col) { return col.toNode(); }); | ||
//don't auto-generate from clause | ||
this._visitedFrom = true; | ||
var result = ['DROP TABLE']; | ||
@@ -156,3 +153,2 @@ result = result.concat(drop.nodes.map(this.visit.bind(this))); | ||
//don't auto-generate from clause | ||
this._visitedFrom = true; | ||
var table = this._queryNode.table; | ||
@@ -170,3 +166,2 @@ var col_nodes = table.columns.map(function(col) { return col.toNode(); }); | ||
Postgres.prototype.visitFrom = function(from) { | ||
this._visitedFrom = true; | ||
var result = []; | ||
@@ -224,13 +219,49 @@ result.push('FROM'); | ||
this._queryNode = queryNode; | ||
for(var i = 0; i < queryNode.nodes.length; i ++) { | ||
var res = this.visit(queryNode.nodes[i]); | ||
//need to sort the top level query nodes on visitation priority | ||
//so select/insert/update/delete comes before from comes before where | ||
var sortedNodes = []; | ||
var missingFrom = true; | ||
var actions = []; | ||
var targets = []; | ||
var filters = []; | ||
for(var i = 0; i < queryNode.nodes.length; i++) { | ||
var node = queryNode.nodes[i]; | ||
switch(node.type) { | ||
case "SELECT": | ||
case "DELETE": | ||
actions.push(node); | ||
break; | ||
case "INSERT": | ||
case "UPDATE": | ||
case "CREATE": | ||
case "DROP": | ||
case "ALTER": | ||
actions.push(node); | ||
missingFrom = false; | ||
break; | ||
case "FROM": | ||
missingFrom = false; | ||
targets.push(node); | ||
break; | ||
default: | ||
filters.push(node); | ||
break; | ||
} | ||
} | ||
if(!actions.length) { | ||
console.log('missing select') | ||
//if no actions are given, guess it's a select | ||
actions.push(new Select().add('*')); | ||
} | ||
if(missingFrom) { | ||
console.log('missing from') | ||
targets.push(new From().add(queryNode.table)); | ||
} | ||
//lazy-man sorting | ||
var sortedNodes = actions.concat(targets).concat(filters); | ||
for(var i = 0; i < sortedNodes.length; i++) { | ||
var res = this.visit(sortedNodes[i]); | ||
this.output = this.output.concat(res); | ||
} | ||
//implicit 'from' | ||
if(!this._visitedFrom) { | ||
var select = this.output.slice(0, this._selectOrDeleteEndIndex); | ||
var from = this.visitFrom(new From().add(queryNode.table.toNode())); | ||
var rest = this.output.slice(this._selectOrDeleteEndIndex); | ||
this.output = select.concat(from).concat(rest); | ||
} | ||
return this; | ||
@@ -237,0 +268,0 @@ }; |
@@ -73,2 +73,8 @@ 'use strict'; | ||
Table.prototype.from = function() { | ||
var query = new Query(this); | ||
query.from.apply(query, arguments); | ||
return query; | ||
} | ||
Table.prototype.subQuery = function(alias) { | ||
@@ -143,3 +149,3 @@ //create the query and pass it off | ||
Table.prototype.where = function() { | ||
var query = this.select(this.star()); | ||
var query = new Query(this); | ||
query.where.apply(query, arguments); | ||
@@ -146,0 +152,0 @@ return query; |
@@ -5,3 +5,3 @@ { | ||
"description": "sql builder", | ||
"version": "0.7.1", | ||
"version": "0.8.0", | ||
"homepage": "https://github.com/brianc/node-sql", | ||
@@ -8,0 +8,0 @@ "repository": { |
@@ -17,5 +17,5 @@ 'use strict'; | ||
query : user.where(user.name.equals(3)), | ||
pg : 'SELECT "user".* FROM "user" WHERE ("user"."name" = $1)', | ||
sqlite: 'SELECT "user".* FROM "user" WHERE ("user"."name" = $1)', | ||
mysql : 'SELECT `user`.* FROM `user` WHERE (`user`.`name` = ?)', | ||
pg : 'SELECT * FROM "user" WHERE ("user"."name" = $1)', | ||
sqlite: 'SELECT * FROM "user" WHERE ("user"."name" = $1)', | ||
mysql : 'SELECT * FROM `user` WHERE (`user`.`name` = ?)', | ||
params : [3] | ||
@@ -26,5 +26,5 @@ }); | ||
query : user.where(user.name.equals(3)).where(user.id.equals(1)), | ||
pg : 'SELECT "user".* FROM "user" WHERE (("user"."name" = $1) AND ("user"."id" = $2))', | ||
sqlite: 'SELECT "user".* FROM "user" WHERE (("user"."name" = $1) AND ("user"."id" = $2))', | ||
mysql : 'SELECT `user`.* FROM `user` WHERE ((`user`.`name` = ?) AND (`user`.`id` = ?))', | ||
pg : 'SELECT * FROM "user" WHERE (("user"."name" = $1) AND ("user"."id" = $2))', | ||
sqlite: 'SELECT * FROM "user" WHERE (("user"."name" = $1) AND ("user"."id" = $2))', | ||
mysql : 'SELECT * FROM `user` WHERE ((`user`.`name` = ?) AND (`user`.`id` = ?))', | ||
params: [3,1] | ||
@@ -51,6 +51,6 @@ }); | ||
query : post.where(post.content.isNull()).or({content: ''}).and({userId: 1}), | ||
pg : 'SELECT "post".* FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = $1)) AND ("post"."userId" = $2))', | ||
sqlite: 'SELECT "post".* FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = $1)) AND ("post"."userId" = $2))', | ||
mysql : 'SELECT `post`.* FROM `post` WHERE (((`post`.`content` IS NULL) OR (`post`.`content` = ?)) AND (`post`.`userId` = ?))', | ||
pg : 'SELECT * FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = $1)) AND ("post"."userId" = $2))', | ||
sqlite: 'SELECT * FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = $1)) AND ("post"."userId" = $2))', | ||
mysql : 'SELECT * FROM `post` WHERE (((`post`.`content` IS NULL) OR (`post`.`content` = ?)) AND (`post`.`userId` = ?))', | ||
params: ['', 1] | ||
}); |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
83799
64
2277
86