Browse Source

Merge pull request #85 from yc662/fixCommentSpacing

fix spacing in comments
dev
Brian C 12 years ago
parent
commit
bc167a487e
  1. 6
      lib/column.js
  2. 24
      lib/dialect/postgres.js
  3. 8
      lib/joiner.js
  4. 4
      lib/node/index.js
  5. 6
      lib/node/query.js
  6. 2
      lib/node/where.js
  7. 15
      lib/table.js
  8. 8
      test/dialects/clause-ordering-tests.js
  9. 8
      test/dialects/insert-tests.js
  10. 1
      test/dialects/namespace-tests.js
  11. 4
      test/dialects/shortcut-tests.js
  12. 1
      test/dialects/table-tests.js
  13. 21
      test/readme-examples.js

6
lib/column.js

@ -67,7 +67,7 @@ Column.prototype.getValue = function() {
}; };
Column.prototype.toNode = function() { Column.prototype.toNode = function() {
//creates a query node from this column // creates a query node from this column
return new ColumnNode(contextify(this)); return new ColumnNode(contextify(this));
}; };
@ -103,11 +103,11 @@ Column.prototype.max = function(alias) {
return this.aggregate(alias, 'max'); return this.aggregate(alias, 'max');
}; };
Column.prototype.sum = function(alias) { Column.prototype.sum = function(alias) {
return this.aggregate(alias, 'sum'); return this.aggregate(alias, 'sum');
}; };
Column.prototype.avg = function(alias) { Column.prototype.avg = function(alias) {
return this.aggregate(alias, 'avg'); return this.aggregate(alias, 'avg');
}; };

24
lib/dialect/postgres.js

@ -14,7 +14,7 @@ Postgres.prototype._myClass = Postgres;
Postgres.prototype._arrayAggFunctionName = 'array_agg'; Postgres.prototype._arrayAggFunctionName = 'array_agg';
Postgres.prototype.getQuery = function(queryNode) { Postgres.prototype.getQuery = function(queryNode) {
//passed in a table, not a query // passed in a table, not a query
if(queryNode instanceof Table) { if(queryNode instanceof Table) {
queryNode = queryNode.select(queryNode.star()); queryNode = queryNode.select(queryNode.star());
} }
@ -78,7 +78,7 @@ Postgres.prototype.visitSelect = function(select) {
Postgres.prototype.visitInsert = function(insert) { Postgres.prototype.visitInsert = function(insert) {
var self = this; var self = this;
//don't use table.column for inserts // don't use table.column for inserts
this._visitedInsert = true; this._visitedInsert = true;
var paramNodes = insert.getParameters() var paramNodes = insert.getParameters()
@ -104,9 +104,9 @@ Postgres.prototype.visitInsert = function(insert) {
}; };
Postgres.prototype.visitUpdate = function(update) { Postgres.prototype.visitUpdate = function(update) {
//don't auto-generate from clause // don't auto-generate from clause
var params = []; var params = [];
/*jshint boss: true */ /* jshint boss: true */
for(var i = 0, node; node = update.nodes[i]; i++) { for(var i = 0, node; node = update.nodes[i]; i++) {
this._visitingUpdateTargetColumn = true; this._visitingUpdateTargetColumn = true;
var target_col = this.visit(node); var target_col = this.visit(node);
@ -129,7 +129,7 @@ Postgres.prototype.visitDelete = function() {
Postgres.prototype.visitCreate = function(create) { Postgres.prototype.visitCreate = function(create) {
this._visitingCreate = true; this._visitingCreate = true;
//don't auto-generate from clause // don't auto-generate from clause
var table = this._queryNode.table; var table = this._queryNode.table;
var col_nodes = table.columns.map(function(col) { return col.toNode(); }); var col_nodes = table.columns.map(function(col) { return col.toNode(); });
@ -142,7 +142,7 @@ Postgres.prototype.visitCreate = function(create) {
}; };
Postgres.prototype.visitDrop = function(drop) { Postgres.prototype.visitDrop = function(drop) {
//don't auto-generate from clause // don't auto-generate from clause
var result = ['DROP TABLE']; var result = ['DROP TABLE'];
result = result.concat(drop.nodes.map(this.visit.bind(this))); result = result.concat(drop.nodes.map(this.visit.bind(this)));
result.push(this.visit(this._queryNode.table.toNode())); result.push(this.visit(this._queryNode.table.toNode()));
@ -151,7 +151,7 @@ Postgres.prototype.visitDrop = function(drop) {
Postgres.prototype.visitAlter = function(alter) { Postgres.prototype.visitAlter = function(alter) {
this._visitingAlter = true; this._visitingAlter = true;
//don't auto-generate from clause // don't auto-generate from clause
var table = this._queryNode.table; var table = this._queryNode.table;
// TODO: col_nodes is unused? // TODO: col_nodes is unused?
var col_nodes = table.columns.map(function(col) { return col.toNode(); }); var col_nodes = table.columns.map(function(col) { return col.toNode(); });
@ -221,8 +221,8 @@ Postgres.prototype.visitUnary = function(unary) {
Postgres.prototype.visitQuery = function(queryNode) { Postgres.prototype.visitQuery = function(queryNode) {
this._queryNode = queryNode; this._queryNode = queryNode;
//need to sort the top level query nodes on visitation priority // need to sort the top level query nodes on visitation priority
//so select/insert/update/delete comes before from comes before where // so select/insert/update/delete comes before from comes before where
var sortedNodes = []; var sortedNodes = [];
var missingFrom = true; var missingFrom = true;
var hasFrom = false; var hasFrom = false;
@ -257,19 +257,19 @@ Postgres.prototype.visitQuery = function(queryNode) {
} }
} }
if(!actions.length) { if(!actions.length) {
//if no actions are given, guess it's a select // if no actions are given, guess it's a select
actions.push(new Select().add('*')); actions.push(new Select().add('*'));
} }
if(missingFrom) { if(missingFrom) {
targets.push(new From().add(queryNode.table)); targets.push(new From().add(queryNode.table));
} }
//lazy-man sorting // lazy-man sorting
sortedNodes = actions.concat(targets).concat(filters); sortedNodes = actions.concat(targets).concat(filters);
for(i = 0; i < sortedNodes.length; i++) { for(i = 0; i < sortedNodes.length; i++) {
var res = this.visit(sortedNodes[i]); var res = this.visit(sortedNodes[i]);
this.output = this.output.concat(res); this.output = this.output.concat(res);
} }
//implicit 'from' // implicit 'from'
return this.output; return this.output;
}; };

8
lib/joiner.js

@ -8,7 +8,7 @@ var getPrimaryKeyColumn = function(table) {
}; };
var findReference = function(left, right) { var findReference = function(left, right) {
//find reference // find reference
for(var i = 0; i < right.columns.length; i++) { for(var i = 0; i < right.columns.length; i++) {
var col = right.columns[i]; var col = right.columns[i];
if(col.references) { if(col.references) {
@ -25,9 +25,9 @@ var findReference = function(left, right) {
}; };
module.exports = { module.exports = {
//auto-join two tables based on column properties // auto-join two tables based on column properties
//requires one column to have { references: {table: 'foreignTableName', column: 'foreignColumnName'}} // requires one column to have { references: {table: 'foreignTableName', column: 'foreignColumnName'}}
//or to have { references: 'foreignTableName'} -- in which case the foreign table's primary key is assumed // or to have { references: 'foreignTableName'} -- in which case the foreign table's primary key is assumed
leftJoin: function(left, right) { leftJoin: function(left, right) {
var leftCol, rightCol; var leftCol, rightCol;
var ref = findReference(left, right); var ref = findReference(left, right);

4
lib/node/index.js

@ -3,7 +3,7 @@
var util = require('util'); var util = require('util');
var assert = require('assert'); var assert = require('assert');
/*jshint unused: false */ /* jshint unused: false */
var Node = function(type) { var Node = function(type) {
this.nodes = []; this.nodes = [];
}; };
@ -34,7 +34,7 @@ Node.define = function(def) {
var c = function() { var c = function() {
Node.call(this); Node.call(this);
}; };
//allow custom sub-class constructor // allow custom sub-class constructor
if(def.constructor && def.constructor != {}.constructor) { if(def.constructor && def.constructor != {}.constructor) {
c = def.constructor; c = def.constructor;
} }

6
lib/node/query.js

@ -81,14 +81,14 @@ var Query = Node.define({
}, },
where: function(node) { where: function(node) {
if(arguments.length > 1) { if(arguments.length > 1) {
//allow multiple where clause arguments // allow multiple where clause arguments
var args = sliced(arguments); var args = sliced(arguments);
for(var i = 0; i < args.length; i++) { for(var i = 0; i < args.length; i++) {
this.where(args[i]); this.where(args[i]);
} }
return this; return this;
} }
//calling #where twice functions like calling #where & then #and // calling #where twice functions like calling #where & then #and
if(this.whereClause) return this.and(node); if(this.whereClause) return this.and(node);
this.whereClause = new Where(this.table); this.whereClause = new Where(this.table);
this.whereClause.add(node); this.whereClause.add(node);
@ -122,7 +122,7 @@ var Query = Node.define({
var self = this; var self = this;
var args = sliced(arguments); var args = sliced(arguments);
//object literal // object literal
if(arguments.length == 1 && !o.toNode && !o.forEach) { if(arguments.length == 1 && !o.toNode && !o.forEach) {
args = Object.keys(o).map(function(key) { args = Object.keys(o).map(function(key) {
return self.table.get(key).value(o[key]); return self.table.get(key).value(o[key]);

2
lib/node/where.js

@ -35,7 +35,7 @@ module.exports = Node.define({
}, },
or: function(other) { or: function(other) {
var right = normalizeNode(this.table, other); var right = normalizeNode(this.table, other);
//calling 'or' without an initial 'where' // calling 'or' without an initial 'where'
if(!this.nodes.length) { if(!this.nodes.length) {
return this.add(other); return this.add(other);
} }

15
lib/table.js

@ -20,7 +20,7 @@ var Table = function(config) {
Table.define = function(config) { Table.define = function(config) {
var table = new Table(config); var table = new Table(config);
//allow hash of columns as well as array // allow hash of columns as well as array
if(config.columns && !util.isArray(config.columns)) { if(config.columns && !util.isArray(config.columns)) {
var cols = []; var cols = [];
@ -110,11 +110,12 @@ Table.prototype.star = function() {
Table.prototype.count = function(alias) { Table.prototype.count = function(alias) {
var name = this.alias || this._name, var name = this.alias || this._name,
col = new Column({table: this, star: true}); col = new Column({table: this, star: true});
return col.count(alias || name + '_count'); //ColumnNode // ColumnNode
return col.count(alias || name + '_count');
}; };
Table.prototype.select = function() { Table.prototype.select = function() {
//create the query and pass it off // create the query and pass it off
var query = new Query(this); var query = new Query(this);
if (arguments.length === 0) { if (arguments.length === 0) {
query.select.call(query, this.star()); query.select.call(query, this.star());
@ -131,7 +132,7 @@ Table.prototype.from = function() {
}; };
Table.prototype.subQuery = function(alias) { Table.prototype.subQuery = function(alias) {
//create the query and pass it off // create the query and pass it off
var query = new Query(this); var query = new Query(this);
query.type = 'SUBQUERY'; query.type = 'SUBQUERY';
query.alias = alias; query.alias = alias;
@ -186,19 +187,19 @@ Table.prototype.leftJoin = function(other) {
return new JoinNode('LEFT', this.toNode(), other.toNode()); return new JoinNode('LEFT', this.toNode(), other.toNode());
}; };
//auto-join tables based on column intropsection // auto-join tables based on column intropsection
Table.prototype.joinTo = function(other) { Table.prototype.joinTo = function(other) {
return Joiner.leftJoin(this, other); return Joiner.leftJoin(this, other);
}; };
Table.prototype.as = function(alias) { Table.prototype.as = function(alias) {
//TODO could this be cleaner? // TODO could this be cleaner?
var t = Table.define(this._initialConfig); var t = Table.define(this._initialConfig);
t.alias = alias; t.alias = alias;
return t; return t;
}; };
//called in shorthand when not calling select // called in shorthand when not calling select
Table.prototype.__defineGetter__("nodes", function() { Table.prototype.__defineGetter__("nodes", function() {
return this.select(this.star()).nodes; return this.select(this.star()).nodes;
}); });

8
test/dialects/clause-ordering-tests.js

@ -4,7 +4,7 @@ var Harness = require('./support');
var user = Harness.defineUserTable(); var user = Harness.defineUserTable();
var post = Harness.definePostTable(); var post = Harness.definePostTable();
//FROM - SELECT // FROM - SELECT
Harness.test({ Harness.test({
query : user.from(user.join(post).on(user.id.equals(post.userId))).select(user.name, post.content), query : user.from(user.join(post).on(user.id.equals(post.userId))).select(user.name, post.content),
pg : 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")', pg : 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")',
@ -12,7 +12,7 @@ Harness.test({
mysql : 'SELECT `user`.`name`, `post`.`content` FROM `user` INNER JOIN `post` ON (`user`.`id` = `post`.`userId`)' mysql : 'SELECT `user`.`name`, `post`.`content` FROM `user` INNER JOIN `post` ON (`user`.`id` = `post`.`userId`)'
}); });
//WHERE - FROM - SELECT // WHERE - FROM - SELECT
Harness.test({ Harness.test({
query : user.where({name: ''}).from(user).select(user.id), query : user.where({name: ''}).from(user).select(user.id),
pg : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = $1)', pg : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = $1)',
@ -21,7 +21,7 @@ Harness.test({
params: [''] params: ['']
}); });
//SELECT - FROM - WHERE // SELECT - FROM - WHERE
Harness.test({ Harness.test({
query : user query : user
.select(user.name, post.content) .select(user.name, post.content)
@ -33,7 +33,7 @@ Harness.test({
params: [''] params: ['']
}); });
//SELECT - FROM - WHERE // SELECT - FROM - WHERE
Harness.test({ Harness.test({
query : user.select(user.id).from(user).where({name: ''}), query : user.select(user.id).from(user).where({name: ''}),
pg : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = $1)', pg : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = $1)',

8
test/dialects/insert-tests.js

@ -28,7 +28,7 @@ Harness.test({
params: ['test', 2] params: ['test', 2]
}); });
//allow bulk insert // allow bulk insert
Harness.test({ Harness.test({
query : post.insert([{content: 'whoah'}, {content: 'hey'}]), query : post.insert([{content: 'whoah'}, {content: 'hey'}]),
pg : 'INSERT INTO "post" ("content") VALUES ($1), ($2)', pg : 'INSERT INTO "post" ("content") VALUES ($1), ($2)',
@ -45,8 +45,7 @@ Harness.test({
params: ['whoah', 1, 'hey', 2] params: ['whoah', 1, 'hey', 2]
}); });
// consistent order
//consistent order
Harness.test({ Harness.test({
query : post.insert([{content: 'whoah', userId: 1}, {userId: 2, content: 'hey' }]), query : post.insert([{content: 'whoah', userId: 1}, {userId: 2, content: 'hey' }]),
pg : 'INSERT INTO "post" ("content", "userId") VALUES ($1, $2), ($3, $4)', pg : 'INSERT INTO "post" ("content", "userId") VALUES ($1, $2), ($3, $4)',
@ -55,8 +54,7 @@ Harness.test({
params: ['whoah', 1, 'hey', 2] params: ['whoah', 1, 'hey', 2]
}); });
// handle missing columns
//handle missing columns
Harness.test({ Harness.test({
query : post.insert([{content: 'whoah', userId: 1}, {content: 'hey'}]), query : post.insert([{content: 'whoah', userId: 1}, {content: 'hey'}]),
pg : { pg : {

1
test/dialects/namespace-tests.js

@ -36,7 +36,6 @@ Harness.test({
mysql : 'SELECT `p`.`content`, `u`.`name` FROM `user` AS `u` INNER JOIN `post` AS `p` ON ((`u`.`id` = `p`.`userId`) AND (`p`.`content` IS NOT NULL))' mysql : 'SELECT `p`.`content`, `u`.`name` FROM `user` AS `u` INNER JOIN `post` AS `p` ON ((`u`.`id` = `p`.`userId`) AND (`p`.`content` IS NOT NULL))'
}); });
// the quote property isn't implemented for columns, so all columns are quoted in generated queries // the quote property isn't implemented for columns, so all columns are quoted in generated queries
var comment = Table.define({ var comment = Table.define({
name: 'comment', name: 'comment',

4
test/dialects/shortcut-tests.js

@ -4,7 +4,7 @@ var Harness = require('./support');
var user = Harness.defineUserTable(); var user = Harness.defineUserTable();
var post = Harness.definePostTable(); var post = Harness.definePostTable();
//shortcut: 'select * from <table>' // shortcut: 'select * from <table>'
Harness.test({ Harness.test({
query : user, query : user,
pg : 'SELECT "user".* FROM "user"', pg : 'SELECT "user".* FROM "user"',
@ -28,7 +28,7 @@ Harness.test({
params: [3,1] params: [3,1]
}); });
//shortcut: no 'from' // shortcut: no 'from'
Harness.test({ Harness.test({
query : post.select(post.content), query : post.select(post.content),
pg : 'SELECT "post"."content" FROM "post"', pg : 'SELECT "post"."content" FROM "post"',

1
test/dialects/table-tests.js

@ -118,7 +118,6 @@ Harness.test({
params: ['brian'] params: ['brian']
}); });
//Fix #10: prevent column state mutation
Harness.test({ Harness.test({
query : user.select(user.name).from(user).where(user.name.equals('brian')), query : user.select(user.name).from(user).where(user.name.equals('brian')),
pg : 'SELECT "user"."name" FROM "user" WHERE ("user"."name" = $1)', pg : 'SELECT "user"."name" FROM "user" WHERE ("user"."name" = $1)',

21
test/readme-examples.js

@ -4,8 +4,7 @@ var user = sql.define({
columns: ['id', 'lastLogin', 'email'] columns: ['id', 'lastLogin', 'email']
}); });
//this also makes parts of your queries composable, which is handy // this also makes parts of your queries composable, which is handy
var friendship = sql.define({ var friendship = sql.define({
name: 'friendship', name: 'friendship',
columns: ['userId', 'friendId'] columns: ['userId', 'friendId']
@ -15,18 +14,18 @@ var friends = user.as('friends');
var userToFriends = user var userToFriends = user
.leftJoin(friendship).on(user.id.equals(friendship.userId)) .leftJoin(friendship).on(user.id.equals(friendship.userId))
.leftJoin(friends).on(friendship.friendId.equals(friends.id)); .leftJoin(friends).on(friendship.friendId.equals(friends.id));
//and now...compose... //and now...compose...
var friendsWhoHaveLoggedInQuery = user.from(userToFriends).where(friends.lastLogin.isNotNull()); var friendsWhoHaveLoggedInQuery = user.from(userToFriends).where(friends.lastLogin.isNotNull());
console.log(friendsWhoHaveLoggedInQuery.toQuery().text); console.log(friendsWhoHaveLoggedInQuery.toQuery().text);
//SELECT * FROM "user" // SELECT * FROM "user"
//LEFT JOIN "friendship" ON ("user"."id" = "friendship"."userId") // LEFT JOIN "friendship" ON ("user"."id" = "friendship"."userId")
//LEFT JOIN "user" AS "friends" ON ("friendship"."friendId" = "friends"."id") // LEFT JOIN "user" AS "friends" ON ("friendship"."friendId" = "friends"."id")
//WHERE "friends"."lastLogin" IS NOT NULL // WHERE "friends"."lastLogin" IS NOT NULL
var friendsWhoUseGmailQuery = user.from(userToFriends).where(friends.email.like('%@gmail.com')); var friendsWhoUseGmailQuery = user.from(userToFriends).where(friends.email.like('%@gmail.com'));
console.log(friendsWhoUseGmailQuery.toQuery().text); console.log(friendsWhoUseGmailQuery.toQuery().text);
//SELECT * FROM "user" // SELECT * FROM "user"
//LEFT JOIN "friendship" ON ("user"."id" = "friendship"."userId") // LEFT JOIN "friendship" ON ("user"."id" = "friendship"."userId")
//LEFT JOIN "user" AS "friends" ON ("friendship"."friendId" = "friends"."id") // LEFT JOIN "user" AS "friends" ON ("friendship"."friendId" = "friends"."id")
//WHERE "friends"."email" LIKE %1 // WHERE "friends"."email" LIKE %1

Loading…
Cancel
Save