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.0.4 to 0.0.5

.travis.yml

6

lib/column.js

@@ -9,8 +9,2 @@ var ColumnNode = require(__dirname + '/node/column');

this.name = config.name;
if(typeof config.quote === 'undefined') {
//auto-quote if column name is upper & lower case
this.quote = this.name.toLowerCase() != this.name;
} else {
this.quote = config.quote;
}
this.asc = this.ascending = this;

@@ -17,0 +11,0 @@ this.desc = this.descending = new BinaryNode({

40

lib/dialect/postgres.js

@@ -19,5 +19,7 @@ var From = require(__dirname + '/../node/from');

case 'UPDATE': return this.visitUpdate(node);
case 'DELETE': return this.visitDelete();
case 'FROM': return this.visitFrom(node);
case 'WHERE': return this.visitWhere(node);
case 'ORDER BY': return this.visitOrderBy(node);
case 'RETURNING': return this.visitReturning(node);
case 'BINARY': return this.visitBinary(node);

@@ -40,3 +42,3 @@ case 'TABLE': return this.visitTable(node);

var result = ['SELECT', select.nodes.map(this.visit.bind(this)).join(', ')];
this._selectEndIndex = this.output.length + result.length;
this._selectOrDeleteEndIndex = this.output.length + result.length;
return result;

@@ -50,7 +52,7 @@ }

this._visitedInsert = true;
var paramNodes = insert.nodes.map(function(node) {
var paramNodes = insert.nodes.map(function(node) {
return self.visit(new Parameter(node.value));
}).join(', ');
var result = [
'INSERT INTO',
'INSERT INTO',
this.visit(this._queryNode.table.toNode()),

@@ -64,2 +66,4 @@ '(' + insert.nodes.map(this.visit.bind(this)).join(', ') + ')',

Postgres.prototype.visitUpdate = function(update) {
//don't prefix columns with table names
this._visitingUpdate = true;
//don't auto-generate from clause

@@ -77,5 +81,11 @@ this._visitedFrom = true;

];
this._visitingUpdate = false;
return result;
}
Postgres.prototype.visitDelete = function() {
this._selectOrDeleteEndIndex = 1;
return ['DELETE'];
}
Postgres.prototype.visitFrom = function(from) {

@@ -117,5 +127,5 @@ this._visitedFrom = true;

if(!this._visitedFrom) {
var select = this.output.slice(0, this._selectEndIndex);
var select = this.output.slice(0, this._selectOrDeleteEndIndex);
var from = this.visitFrom(new From().add(queryNode.table.toNode()));
var rest = this.output.slice(this._selectEndIndex);
var rest = this.output.slice(this._selectOrDeleteEndIndex);
this.output = select.concat(from).concat(rest);

@@ -128,6 +138,3 @@ }

var table = tableNode.table;
var txt = table.getName();
if(table.quote) {
txt = '"' + txt + '"';
}
var txt = this.quote(table.getName());
if(table.alias) {

@@ -142,16 +149,11 @@ txt += ' AS ' + table.alias;

var txt = "";
if(!this._visitedInsert) {
if(!this._visitedInsert && !this._visitingUpdate) {
if(table.alias) {
txt = table.alias;
} else if(table.quote) {
txt = '"' + table.getName() + '"';
} else {
txt = table.getName();
txt = this.quote(table.getName());
}
txt += '.'
}
if(columnNode.quote) {
return txt += ('"' + columnNode.name + '"');
}
return txt += columnNode.name;
return txt + this.quote(columnNode.name);
}

@@ -174,2 +176,6 @@

Postgres.prototype.visitReturning = function(returning) {
return ['RETURNING', returning.nodes.map(this.visit.bind(this)).join(', ')];
}
module.exports = Postgres;

@@ -20,5 +20,6 @@ var Table = require(__dirname + '/table');

}
return this;
}
};
module.exports = sql;
module.exports = sql.setDialect('postgres');
var Node = require(__dirname);
var Column = Node.define({
module.exports = Node.define({
type: 'COLUMN',

@@ -8,7 +8,4 @@ constructor: function(config) {

this.table = config.table;
this.quote = config.quote;
this.value = config.getValue();
}
});
module.exports = Column;
var Node = require(__dirname);
var Insert = Node.define({
module.exports = Node.define({
type: 'INSERT'
});
module.exports = Insert;
var Node = require(__dirname);
var OrderBy = Node.define({
module.exports = Node.define({
type: 'ORDER BY'
});
module.exports = OrderBy;

@@ -8,2 +8,4 @@ var Node = require(__dirname);

var Update = require(__dirname + '/update');
var Delete = require(__dirname + '/delete');
var Returning = require(__dirname + '/returning');

@@ -40,3 +42,3 @@ var Query = Node.define({

return this;
},
},
order: function() {

@@ -73,2 +75,14 @@ var args = Array.prototype.slice.call(arguments, 0);

},
delete: function() {
return this.add(new Delete());
},
returning: function() {
var returning = new Returning();
var args = Array.prototype.slice.call(arguments, 0);
for(var i = 0; i < args.length; i++) {
//arg could be a column instead of a node
returning.add(args[i]);
}
return this.add(returning)
},
toQuery: function() {

@@ -75,0 +89,0 @@ var Dialect = require(__dirname + '/../').dialect;

var Node = require(__dirname);
var Update = Node.define({
module.exports = Node.define({
type: 'UPDATE'
});
module.exports = Update;

@@ -10,3 +10,2 @@ var Query = require(__dirname + '/node/query');

this._initialConfig = config;
this.quote = config.quote || false;
this.columns = [];

@@ -65,2 +64,8 @@ }

Table.prototype.delete = function() {
var query = new Query(this);
query.delete.apply(query, arguments);
return query;
}
Table.prototype.toNode = function() {

@@ -67,0 +72,0 @@ return new TableNode(this);

@@ -5,3 +5,3 @@ {

"description": "sql builder",
"version": "0.0.4",
"version": "0.0.5",
"homepage": "https://github.com/brianc/node-sql",

@@ -21,4 +21,5 @@ "repository": {

"devDependencies": {
"test-dir" : "*"
"test-dir" : "*",
"tap" : "*"
}
}
# node-sql
_sql string builder for node_
[![Build Status](https://secure.travis-ci.org/brianc/node-sql.png?branch=master)](http://travis-ci.org/brianc/node-sql)
## examples

@@ -18,3 +20,3 @@

var usersWhoLoggedInBeforeToday = user.select(user.id, user.email).from(user).where(user.lastLogin.lt(new Date()));
console.log(usersWhoLoggedInBeforeToday);
console.log(usersWhoLoggedInBeforeToday.toQuery());
// { text: 'SELECT user.'id', user.'email' FROM user WHERE user.'lastLogin' > $1', values: ['2011-01-1'] }

@@ -28,1 +30,4 @@ ```

I need help with a mysql and sqlite syntax. Even if you don't want to contribute code, I could still use some failing tests I can work towards. You see, I don't really know mysql or sqlite syntax very well and don't use either database much. If you'd like to contribute, please message me on github. I'll give you commit access, and we'll be off to the races.
##license
MIT

@@ -1,2 +0,2 @@

var assert = require('assert');
var test = require('tap').test;
var Column = require(__dirname + '/../lib/column');

@@ -10,13 +10,15 @@ var Table = require(__dirname + '/../lib/table');

console.log('test operators');
assert.equal(Foo.baz.equals(1).operator, '=');
assert.equal(Foo.baz.equal(1).operator, '=');
assert.equal(Foo.baz.notEqual(1).operator, '<>');
assert.equal(Foo.baz.notEquals(1).operator, '<>');
assert.equal(Foo.baz.like('asdf').operator, 'LIKE');
assert.equal(Foo.baz.isNull().operator, 'IS NULL');
assert.equal(Foo.baz.isNotNull().operator, 'IS NOT NULL');
assert.equal(Foo.baz.gt(1).operator, '>');
assert.equal(Foo.baz.gte(1).operator, '>=');
assert.equal(Foo.baz.lt(1).operator, '<');
assert.equal(Foo.baz.lte(1).operator, '<=');
test('operators', function(t) {
t.equal(Foo.baz.equals(1).operator, '=');
t.equal(Foo.baz.equal(1).operator, '=');
t.equal(Foo.baz.notEqual(1).operator, '<>');
t.equal(Foo.baz.notEquals(1).operator, '<>');
t.equal(Foo.baz.like('asdf').operator, 'LIKE');
t.equal(Foo.baz.isNull().operator, 'IS NULL');
t.equal(Foo.baz.isNotNull().operator, 'IS NOT NULL');
t.equal(Foo.baz.gt(1).operator, '>');
t.equal(Foo.baz.gte(1).operator, '>=');
t.equal(Foo.baz.lt(1).operator, '<');
t.equal(Foo.baz.lte(1).operator, '<=');
t.end();
})

@@ -1,2 +0,2 @@

var assert = require('assert');
var test = require('tap').test;
var Node = require(__dirname + '/../lib/node/');

@@ -15,13 +15,16 @@

var select = new Bang();
assert.equal(select.type, 'SELECT');
assert.equal(select.nodes.length, 0);
test('clause definition', function(t) {
var select = new Bang();
t.equal(select.type, 'SELECT');
t.equal(select.nodes.length, 0);
var q = new Boom('hai');
assert.equal(q.nodes.length, 0);
var q2 = new Boom('bai');
q.nodes.push(1);
assert.equal(q.nodes.length, 1);
assert.equal(q.name, 'hai');
assert.equal(q2.nodes.length, 0);
assert.equal(q2.name, 'bai');
var q = new Boom('hai');
t.equal(q.nodes.length, 0);
var q2 = new Boom('bai');
q.nodes.push(1);
t.equal(q.nodes.length, 1);
t.equal(q.name, 'hai');
t.equal(q2.nodes.length, 0);
t.equal(q2.name, 'bai');
t.end();
})

@@ -1,2 +0,2 @@

var assert = require('assert');
var tap = require('tap').test;
var Postgres = require(__dirname + '/../lib/dialect/postgres');

@@ -6,12 +6,15 @@ var Table = require(__dirname + '/../lib/table');

var test = function(expected) {
var query = expected.query;
var pgQuery = new Postgres().getQuery(query);
var expectedPgText = expected.pg;
assert.equal(pgQuery.text, expected.pg, 'Postgres text not equal\n actual: "' + pgQuery.text + '"\n expected: "' + expected.pg + '"');
if(expected.params) {
assert.equal(expected.params.length, pgQuery.values.length);
for(var i = 0; i < expected.params.length; i++) {
assert.equal(expected.params[i], pgQuery.values[i]);
tap(expected.pg, function(t) {
var query = expected.query;
var pgQuery = new Postgres().getQuery(query);
var expectedPgText = expected.pg;
t.equal(pgQuery.text, expected.pg, 'Postgres text not equal\n actual: "' + pgQuery.text + '"\n expected: "' + expected.pg + '"');
if(expected.params) {
t.equal(expected.params.length, pgQuery.values.length);
for(var i = 0; i < expected.params.length; i++) {
t.equal(expected.params[i], pgQuery.values[i]);
}
}
}
t.end();
})
}

@@ -31,3 +34,3 @@

test({
query : user.select(user.id, user.name).from(user),
query : user.select(user.id, user.name).from(user),
pg : 'SELECT "user".id, "user".name FROM "user"'

@@ -71,5 +74,5 @@ });

query : user.select(user.id).from(user)
.where(user.name.equals('boom')
.and(user.id.equals(1))).or(user.name.equals('bang').and(user.id.equals(2))),
pg : 'SELECT "user".id FROM "user" WHERE ((("user".name = $1) AND ("user".id = $2)) OR (("user".name = $3) AND ("user".id = $4)))'
.where(user.name.equals('boom')
.and(user.id.equals(1))).or(user.name.equals('bang').and(user.id.equals(2))),
pg : 'SELECT "user".id FROM "user" WHERE ((("user".name = $1) AND ("user".id = $2)) OR (("user".name = $3) AND ("user".id = $4)))'
});

@@ -90,3 +93,3 @@

query : u.select(u.name).from(u),
pg :'SELECT u.name FROM "user" AS u'
pg :'SELECT u.name FROM "user" AS u'
});

@@ -105,3 +108,2 @@

console.log('inserting plain SQL');
test({

@@ -112,3 +114,2 @@ query : user.select('name').from('user').where('name <> NULL'),

console.log('automatic FROM on "easy" queries');
test({

@@ -124,3 +125,2 @@ query : post.select(post.content),

console.log('order by');

@@ -142,3 +142,2 @@ test({

console.log('insert');

@@ -163,3 +162,2 @@ test({

console.log('update');

@@ -184,4 +182,9 @@ test({

console.log('IGNORE: parent queries');
var ignore = function() {
test({
query : post.delete().where(post.content.equals('')),
pg : 'DELETE FROM post WHERE (post.content = $1)',
params: ['']
});
var ignore = function() {
var parent = post.select(post.content);

@@ -194,3 +197,2 @@ assert.textEqual(parent, 'SELECT post.content FROM post');

console.log('quoting column names');
var comment = Table.define({

@@ -197,0 +199,0 @@ name: 'comment',

@@ -1,2 +0,2 @@

var assert = require('assert');
var test = require('tap').test;
var sql = require(__dirname + '/../lib');

@@ -9,15 +9,24 @@

console.log('unknown dialog throws exception');
assert.throws(function() {
sql.setDialect('asdf');
})
test('unknown dialect', function(t) {
console.log('unknown dialog throws exception');
t.throws(function() {
sql.setDialect('asdf');
})
t.end();
});
//throws before dialog is set
assert.throws(function() {
var query = sql.select(user.id).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery();
})
sql.setDialect('postgres');
var query = sql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery();
assert.equal(query.text, 'SELECT user.id FROM user WHERE (user.email = $1)');
assert.equal(query.values[0], 'brian.m.carlson@gmail.com')
test('throws before dialect is set', function(t) {
t.throws(function() {
var query = sql.select(user.id).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery();
});
t.end();
});
test('setting dialect to postgres works', function(t) {
sql.setDialect('postgres');
var query = sql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery();
t.equal(query.text, 'SELECT user.id FROM user WHERE (user.email = $1)');
t.equal(query.values[0], 'brian.m.carlson@gmail.com')
t.end();
});

@@ -1,41 +0,43 @@

var assert = require('assert');
var test = require('tap').test;
var Table = require(__dirname + '/../lib/table');
var Column = require(__dirname + '/../lib/column');
var table = new Table({
name: 'bang'
})
test('table', function(t) {
var table = new Table({
name: 'bang'
})
assert.equal(table.getName(), 'bang');
assert.equal(table.columns.length, 0);
t.equal(table.getName(), 'bang');
t.equal(table.columns.length, 0);
var col = new Column({
table: table,
name: 'boom'
})
var col = new Column({
table: table,
name: 'boom'
})
assert.equal(col.name, 'boom');
assert.equal(col.table.getName(), 'bang');
t.equal(col.name, 'boom');
t.equal(col.table.getName(), 'bang');
table.addColumn(col);
assert.equal(table.columns.length, 1);
assert.equal(table.boom, col);
table.addColumn(col);
t.equal(table.columns.length, 1);
t.equal(table.boom, col);
console.log('table creates query node');
var sel = table.select(table.boom);
assert.equal(sel.type, 'QUERY');
console.log('table creates query node');
var sel = table.select(table.boom);
t.equal(sel.type, 'QUERY');
console.log('table can be defined');
var user = Table.define({
name: 'user',
columns: ['id', 'name']
})
console.log('table can be defined');
var user = Table.define({
name: 'user',
columns: ['id', 'name']
})
assert.equal(user.getName(), 'user');
assert.equal(user.columns.length, 2);
assert.equal(user.columns[0].name, 'id');
assert.equal(user.columns[1].name, 'name');
assert.equal(user.columns[0].name, user.id.name)
assert.equal(user.id.table, user);
assert.equal(user.name.table, user);
t.equal(user.getName(), 'user');
t.equal(user.columns.length, 2);
t.equal(user.columns[0].name, 'id');
t.equal(user.columns[1].name, 'name');
t.equal(user.columns[0].name, user.id.name)
t.equal(user.id.table, user);
t.equal(user.name.table, user);
t.end();
});
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