Socket
Socket
Sign inDemoInstall

sql

Package Overview
Dependencies
Maintainers
1
Versions
101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sql - npm Package Compare versions

Comparing version 0.7.1 to 0.8.0

test/dialects/clause-ordering-tests.js

59

lib/dialect/postgres.js

@@ -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]
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc