Comparing version 0.2.1 to 0.2.2
var util = require('util'); | ||
var assert = require('assert'); | ||
var From = require(__dirname + '/../node/from'); | ||
@@ -43,2 +44,3 @@ var Parameter = require(__dirname + '/../node/parameter'); | ||
case 'DROP COLUMN': return this.visitDropColumn(node); | ||
case 'RENAME COLUMN': return this.visitRenameColumn(node); | ||
case 'LIMIT': | ||
@@ -86,4 +88,2 @@ case 'OFFSET': | ||
Postgres.prototype.visitUpdate = function(update) { | ||
//don't prefix columns with table names | ||
this._visitingUpdate = true; | ||
//don't auto-generate from clause | ||
@@ -93,3 +93,6 @@ this._visitedFrom = true; | ||
for(var i = 0, node; node = update.nodes[i]; i++) { | ||
params = params.concat(this.visit(node) + ' = ' + this.visit(node.value)); | ||
this._visitingUpdateTargetColumn = true; | ||
var target_col = this.visit(node); | ||
this._visitingUpdateTargetColumn = false; | ||
params = params.concat(target_col + ' = ' + this.visit(node.value)); | ||
} | ||
@@ -102,3 +105,2 @@ var result = [ | ||
]; | ||
this._visitingUpdate = false; | ||
return result; | ||
@@ -142,3 +144,2 @@ } | ||
var col_nodes = table.columns.map(function(col) { return col.toNode(); }); | ||
console.log('nodes.length: ' + alter.nodes.length); | ||
var result = [ | ||
@@ -252,3 +253,3 @@ 'ALTER TABLE', | ||
} | ||
if(!this._visitedInsert && !this._visitingUpdate && !this._visitingCreate && !this._visitingAlter) { | ||
if(!this._visitedInsert && !this._visitingUpdateTargetColumn && !this._visitingCreate && !this._visitingAlter) { | ||
if(table.alias) { | ||
@@ -273,4 +274,7 @@ txt = table.alias; | ||
} | ||
if(this._visitingCreate || this._visitingAddColumn) | ||
if(this._visitingCreate || this._visitingAddColumn) { | ||
assert(columnNode.dataType, 'dataType missing for column ' + columnNode.name + | ||
' (CREATE TABLE and ADD COLUMN statements require a dataType)'); | ||
txt += ' ' + columnNode.dataType; | ||
} | ||
return txt; | ||
@@ -301,2 +305,6 @@ } | ||
Postgres.prototype.visitRenameColumn = function(renameColumn) { | ||
return ['RENAME COLUMN ' + this.visit(renameColumn.nodes[0]) + ' TO ' + this.visit(renameColumn.nodes[1])]; | ||
} | ||
Postgres.prototype.visitIfExists = function() { | ||
@@ -303,0 +311,0 @@ return ['IF EXISTS']; |
@@ -16,5 +16,8 @@ var Node = require(__dirname); | ||
var DropColumn = require(__dirname + '/dropColumn'); | ||
var RenameColumn = require(__dirname + '/renameColumn'); | ||
var Column = require(__dirname + '/../column'); | ||
var ParameterNode = require(__dirname + '/parameter'); | ||
var IfExists = require(__dirname + '/ifExists'); | ||
var IfNotExists = require(__dirname + '/ifNotExists'); | ||
var Column = require(__dirname + '/../column'); | ||
@@ -48,2 +51,5 @@ var Modifier = Node.define({ | ||
where: function(node) { | ||
if (!node.toNode && typeof node == 'object') | ||
node = this._whereObject(node); | ||
//calling #where twice functions like calling #where & then #and | ||
@@ -55,2 +61,15 @@ if(this.whereClause) return this.and(node); | ||
}, | ||
_whereObject: function(node) { | ||
var result; | ||
for (var colName in node) { | ||
var column = new Column({name: colName, table: this.table}); | ||
var query = column.equals(node[colName]); | ||
if (!result) | ||
result = query; | ||
else | ||
result.and(query); | ||
} | ||
return result; | ||
}, | ||
or: function(node) { | ||
@@ -137,4 +156,8 @@ this.whereClause.or(node); | ||
}, | ||
addColumn: function(column) { | ||
addColumn: function(column, dataType) { | ||
var addClause = new AddColumn(); | ||
if (!column.toNode) | ||
column = new Column({name: column, table: this.table}); | ||
if (dataType) | ||
column.dataType = dataType; | ||
addClause.add(column.toNode()); | ||
@@ -146,2 +169,4 @@ this.nodes[0].add(addClause); | ||
var dropClause = new DropColumn(); | ||
if (!column.toNode) | ||
column = new Column({name: column, table: this.table}); | ||
dropClause.add(column.toNode()); | ||
@@ -151,2 +176,13 @@ this.nodes[0].add(dropClause); | ||
}, | ||
renameColumn: function(oldColumn, newColumn) { | ||
var renameClause = new RenameColumn(); | ||
if (!oldColumn.toNode) | ||
oldColumn = new Column({name: oldColumn, table: this.table}); | ||
if (!newColumn.toNode) | ||
newColumn = new Column({name: newColumn, table: this.table}); | ||
renameClause.add(oldColumn.toNode()); | ||
renameClause.add(newColumn.toNode()); | ||
this.nodes[0].add(renameClause); | ||
return this; | ||
}, | ||
limit: function(count) { | ||
@@ -153,0 +189,0 @@ return this.add(new Modifier(this, 'LIMIT', count)); |
@@ -5,3 +5,3 @@ { | ||
"description": "sql builder", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"homepage": "https://github.com/brianc/node-sql", | ||
@@ -8,0 +8,0 @@ "repository": { |
@@ -17,2 +17,7 @@ var Harness = require('./support'); | ||
Harness.test({ | ||
query : post.alter().dropColumn('content').dropColumn('userId'), | ||
pg : 'ALTER TABLE "post" DROP COLUMN "content", DROP COLUMN "userId"', | ||
params: [] | ||
}); | ||
@@ -40,2 +45,26 @@ var group = Table.define({ | ||
params: [] | ||
}); | ||
}); | ||
Harness.test({ | ||
query : group.alter().addColumn('id', 'varchar(100)').addColumn('userId', 'varchar(100)'), | ||
pg : 'ALTER TABLE "group" ADD COLUMN "id" varchar(100), ADD COLUMN "userId" varchar(100)', | ||
params: [] | ||
}); | ||
Harness.test({ | ||
query : group.alter().renameColumn('userId', 'newUserId'), | ||
pg : 'ALTER TABLE "group" RENAME COLUMN "userId" TO "newUserId"', | ||
params: [] | ||
}); | ||
Harness.test({ | ||
query : group.alter().renameColumn(group.userId, 'newUserId'), | ||
pg : 'ALTER TABLE "group" RENAME COLUMN "userId" TO "newUserId"', | ||
params: [] | ||
}); | ||
Harness.test({ | ||
query : group.alter().renameColumn('userId', group.id), | ||
pg : 'ALTER TABLE "group" RENAME COLUMN "userId" TO "id"', | ||
params: [] | ||
}); |
@@ -94,1 +94,6 @@ var Harness = require('./support'); | ||
}); | ||
Harness.test({ | ||
query : user.select('name').from('user').where({name: 'brian'}), | ||
pg : 'SELECT name FROM user WHERE ("user"."name" = $1)' | ||
}); |
@@ -31,5 +31,11 @@ var Harness = require('./support'); | ||
query : post.update({content: user.name}).from(user).where(post.userId.equals(user.id)), | ||
pg : 'UPDATE "post" SET "content" = "name" FROM "user" WHERE ("post"."userId" = "user"."id")', | ||
pg : 'UPDATE "post" SET "content" = "user"."name" FROM "user" WHERE ("post"."userId" = "user"."id")', | ||
params: [] | ||
}); | ||
// update() needs to prefix ambiguous source columns; prefixing target columns is not allowed | ||
Harness.test({ | ||
query : post.update({userId: user.id}).from(user).where(post.userId.equals(user.id)), | ||
pg : 'UPDATE "post" SET "userId" = "user"."id" FROM "user" WHERE ("post"."userId" = "user"."id")', | ||
params: [] | ||
}); |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
52438
57
1546
78