Browse Source

Merge pull request #251 from edudutra/oracle

Oracle dialect
revert-array-changes
Brian C 9 years ago
parent
commit
fccd02dbff
  1. 2
      README.md
  2. 2
      lib/dialect/index.js
  3. 255
      lib/dialect/oracle.js
  4. 21
      lib/dialect/postgres.js
  5. 76
      test/dialects/aggregate-tests.js
  6. 12
      test/dialects/alias-tests.js
  7. 20
      test/dialects/alter-table-tests.js
  8. 12
      test/dialects/binary-clause-tests.js
  9. 37
      test/dialects/case-tests.js
  10. 24
      test/dialects/cast-tests.js
  11. 16
      test/dialects/clause-ordering-tests.js
  12. 88
      test/dialects/create-table-tests.js
  13. 20
      test/dialects/delete-tests.js
  14. 20
      test/dialects/distinct-tests.js
  15. 16
      test/dialects/drop-table-tests.js
  16. 16
      test/dialects/from-clause-tests.js
  17. 20
      test/dialects/group-by-tests.js
  18. 12
      test/dialects/having-tests.js
  19. 28
      test/dialects/in-clause-tests.js
  20. 28
      test/dialects/indexes-tests.js
  21. 98
      test/dialects/insert-tests.js
  22. 24
      test/dialects/join-tests.js
  23. 12
      test/dialects/join-to-tests.js
  24. 8
      test/dialects/limit-and-offset-tests.js
  25. 12
      test/dialects/literal-tests.js
  26. 4
      test/dialects/matches-test.js
  27. 20
      test/dialects/namespace-tests.js
  28. 28
      test/dialects/not-in-clause-tests.js
  29. 40
      test/dialects/order-tests.js
  30. 24
      test/dialects/schema-tests.js
  31. 12
      test/dialects/select-tests.js
  32. 24
      test/dialects/shortcut-tests.js
  33. 20
      test/dialects/subquery-tests.js
  34. 3
      test/dialects/support.js
  35. 110
      test/dialects/table-tests.js
  36. 8
      test/dialects/ternary-clause-tests.js
  37. 24
      test/dialects/tostring-tests.js
  38. 4
      test/dialects/truncate-table-tests.js
  39. 8
      test/dialects/unary-clause-tests.js
  40. 28
      test/dialects/update-tests.js
  41. 20
      test/dialects/value-expression-tests.js
  42. 32
      test/dialects/where-clause-tests.js
  43. 28
      test/index-tests.js

2
README.md

@ -1,5 +1,5 @@
# node-sql
_sql string builder for node_ - supports PostgreSQL, mysql, Microsoft SQL Server, and sqlite dialects.
_sql string builder for node_ - supports PostgreSQL, mysql, Microsoft SQL Server, Oracle and sqlite dialects.
Building SQL statements by hand is no fun, especially in a language which has clumsy support for multi-line strings.

2
lib/dialect/index.js

@ -11,6 +11,8 @@ var getDialect = function(dialect) {
return require('./sqlite');
case 'mssql':
return require('./mssql');
case 'oracle':
return require('./oracle');
default:
throw new Error(dialect + ' is unsupported');
}

255
lib/dialect/oracle.js

@ -0,0 +1,255 @@
'use strict';
var util = require('util');
var assert = require('assert');
var Oracle = function() {
this.output = [];
this.params = [];
};
var Postgres = require(__dirname + '/postgres');
var Mssql = require(__dirname + '/mssql');
util.inherits(Oracle, Postgres);
Oracle.prototype._myClass = Oracle;
Oracle.prototype._aliasText = ' ';
Oracle.prototype._getParameterPlaceholder = function(index, value) {
/* jshint unused: false */
return ':' + index;
};
Oracle.prototype.visitAlias = function(alias) {
var result = [this.visit(alias.value) + ' ' + this.quote(alias.alias)];
return result;
};
Oracle.prototype.visitTable = function(tableNode) {
var table = tableNode.table;
var txt="";
if(table.getSchema()) {
txt = this.quote(table.getSchema());
txt += '.';
}
txt += this.quote(table.getName());
if(table.alias) {
txt += ' ' + this.quote(table.alias);
}
return [txt];
};
Oracle.prototype.visitCascade = function() {
return ['CASCADE CONSTRAINTS'];
};
Oracle.prototype.visitRestrict = function() {
throw new Error('Oracle do not support RESTRICT in DROP TABLE');
};
Oracle.prototype.visitDrop = function(drop) {
if (!isDropIfExists(drop)) {
return Oracle.super_.prototype.visitDrop.call(this, drop);
}
// Implement our own drop if exists:
// PostgreSQL: DROP TABLE IF EXISTS "group"
// Oracle:
// BEGIN
// EXECUTE IMMEDIATE 'DROP TABLE POST';
// EXCEPTION
// WHEN OTHERS THEN
// IF SQLCODE != -942 THEN
// RAISE;
// END IF;
// END;
var table = this._queryNode.table;
var tableResult=this.visit(table.toNode());
var dropResult = ['DROP TABLE'];
dropResult.push(tableResult);
return ["BEGIN EXECUTE IMMEDIATE '"+dropResult.join(' ')+"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;"];
};
Oracle.prototype.visitCreate = function(create) {
var isNotExists=isCreateIfNotExists(create)
//var isTemporary=isCreateTemporary(create)
var createText = Oracle.super_.prototype.visitCreate.call(this, create);
if (isNotExists) {
// Implement our own create if not exists:
// PostgreSQL: CREATE TABLE IF NOT EXISTS "group" ("id" varchar(100))
// Oracle:
// BEGIN
// EXECUTE IMMEDIATE 'CREATE TABLE ...';
// EXCEPTION
// WHEN OTHERS THEN
// IF SQLCODE != -955 THEN
// RAISE;
// END IF;
// END;
createText = "BEGIN EXECUTE IMMEDIATE '"+createText.join(' ').replace(' IF NOT EXISTS','')+"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -955 THEN RAISE; END IF; END;";
}
return createText;
};
Oracle.prototype.visitBinary = function(binary) {
if(binary.operator === '@@'){
var self = this;
var text = '(INSTR (' + this.visit(binary.left) + ', ';
text += this.visit(binary.right);
text += ') > 0)';
return [text];
}
if (!isRightSideArray(binary)){
return Oracle.super_.prototype.visitBinary.call(this, binary);
}
if (binary.operator=='IN' || binary.operator=='NOT IN'){
return Oracle.super_.prototype.visitBinary.call(this, binary);
}
throw new Error('Oracle does not support arrays in this type of expression.');
};
Oracle.prototype.visitModifier = function(node) {
var ret = Oracle.super_.prototype.visitModifier.call(this, node);
if (ret.indexOf('OFFSET') >= 0) {
ret.push('ROWS');
}
if (ret.indexOf('LIMIT') >= 0) {
ret[0] = 'FETCH NEXT';
ret.push('ROWS ONLY');
}
return ret;
};
Oracle.prototype.visitQueryHelper=function(actions,targets,filters){
var output = Oracle.super_.prototype.visitQueryHelper.call(this,actions,targets,filters);
//In Oracle, OFFSET must come before FETCH NEXT (limit)
//Change positions, if both are present and not done already
var offset = output.indexOf('OFFSET');
var limit = output.indexOf('FETCH NEXT');
if (offset != -1 && limit != -1 && offset > limit){
var temp = [output[offset], output[offset+1], output[offset+2]];
output[offset] = output[limit];
output[offset+1] = output[limit+1];
output[offset+2] = output[limit+2];
output[limit] = temp[0];
output[limit+1] = temp[1];
output[limit+2] = temp[2];
}
return this.output;
}
Oracle.prototype.visitColumn = function(columnNode) {
var self=this;
var table;
var inSelectClause;
function _arrayAgg(){
throw new Error("Oracle does not support array_agg.")
}
function _countStar(){
// Implement our own since count(table.*) is invalid in Oracle
var result='COUNT(*)'
if(inSelectClause && columnNode.alias) {
result += self._aliasText + self.quote(columnNode.alias);
}
return result;
}
table = columnNode.table;
inSelectClause = !this._selectOrDeleteEndIndex;
if (isCountStarExpression(columnNode)) return _countStar();
if (inSelectClause && !table.alias && columnNode.asArray) return _arrayAgg();
return Oracle.super_.prototype.visitColumn.call(this, columnNode);
};
Oracle.prototype.visitReturning = function() {
// TODO: need to add some code to the INSERT clause to support this since its the equivalent of the OUTPUT clause
// in MS SQL which appears before the values, not at the end of the statement.
throw new Error('Returning clause is not yet supported for Oracle.');
};
Oracle.prototype._getParameterValue = function(value) {
if (Buffer.isBuffer(value)) {
value = "utl_raw.cast_to_varchar2(hextoraw('" + value.toString('hex') + "'))";
} else {
value = Oracle.super_.prototype._getParameterValue.call(this, value);
//value = Postgres.prototype._getParameterValue.call(this, value);
}
return value;
};
Oracle.prototype.visitIndexes = function(node) {
var tableName = this._queryNode.table.getName();
var schemaName = this._queryNode.table.getSchema();
var indexes = "SELECT * FROM USER_INDEXES WHERE TABLE_NAME = '" + tableName + "'";
if (schemaName) {
indexes += " AND TABLE_OWNER = '" + schemaName + "'";
}
return indexes;
};
Oracle.prototype.visitDropIndex = function(node) {
var result = [ 'DROP INDEX' ];
var schemaName = node.table.getSchema();
if (schemaName) {
result.push(this.quote(schemaName) + ".");
}
result.push(this.quote(node.options.indexName));
return result;
};
// Using same CASE implementation as MSSQL
Oracle.prototype.visitCase = function(caseExp) {
return Mssql.prototype.visitCase.call(this, caseExp);
}
function isCreateIfNotExists(create){
if (create.nodes.length==0) return false;
if (create.nodes[0].type!='IF NOT EXISTS') return false;
return true;
};
function isCreateTemporary(create){
return create.options.isTemporary
};
function isDropIfExists(drop){
if (drop.nodes.length==0) return false;
if (drop.nodes[0].type!='IF EXISTS') return false;
return true;
};
// SQL Server does not support array expressions except in the IN clause.
function isRightSideArray(binary){
return Array.isArray(binary.right);
};
function isCountStarExpression(columnNode){
if (!columnNode.aggregator) return false;
if (columnNode.aggregator.toLowerCase()!='count') return false;
if (!columnNode.star) return false;
return true;
};
module.exports = Oracle;

21
lib/dialect/postgres.js

@ -162,6 +162,8 @@ Postgres.prototype.visit = function(node) {
};
Postgres.prototype._quoteCharacter = '"';
Postgres.prototype._aliasText = ' AS ';
Postgres.prototype.quote = function(word, quoteCharacter) {
var q;
if (quoteCharacter) {
@ -296,7 +298,7 @@ Postgres.prototype.visitDistinct = function(truncate) {
};
Postgres.prototype.visitAlias = function(alias) {
var result = [this.visit(alias.value) + ' AS ' + this.quote(alias.alias)];
var result = [this.visit(alias.value) + this._aliasText + this.quote(alias.alias)];
return result;
};
@ -636,7 +638,7 @@ Postgres.prototype.visitTable = function(tableNode) {
}
txt += this.quote(table.getName());
if(table.alias) {
txt += ' AS ' + this.quote(table.alias);
txt += this._aliasText + this.quote(table.alias);
}
return [txt];
};
@ -693,7 +695,7 @@ Postgres.prototype.visitColumn = function(columnNode) {
var col = table.columns[i];
var aliased = col.name !== (col.alias || col.property);
hasAliases = hasAliases || aliased;
allCols.push(tableName + this.quote(col.name) + (aliased ? ' AS ' + this.quote(col.alias || col.property) : ''));
allCols.push(tableName + this.quote(col.name) + (aliased ? this._aliasText + this.quote(col.alias || col.property) : ''));
}
}
if(hasAliases) {
@ -715,7 +717,7 @@ Postgres.prototype.visitColumn = function(columnNode) {
}
}
if(inSelectClause && (columnNode.alias || columnNode.property !== columnNode.name)) {
txt.push(' AS ' + this.quote(columnNode.alias || columnNode.property));
txt.push(this._aliasText + this.quote(columnNode.alias || columnNode.property));
}
if(this._visitingCreate || this._visitingAddColumn) {
assert(columnNode.dataType, 'dataType missing for column ' + columnNode.name +
@ -747,8 +749,13 @@ Postgres.prototype.visitColumn = function(columnNode) {
columnNode.name +
' (REFERENCES statements within CREATE TABLE and ADD COLUMN statements' +
' require a table and column)');
txt.push(' REFERENCES ' + columnNode.references.table + '(' +
columnNode.references.column + ')');
txt.push(' REFERENCES ');
if(columnNode.references.schema) {
txt.push(this.quote(columnNode.references.schema) + '.');
}
txt.push(this.quote(columnNode.references.table) + '(' +
this.quote(columnNode.references.column) + ')');
if (!!columnNode.references.onDelete) {
if (columnNode.references.onDelete.toUpperCase() === "CASCADE" ||
columnNode.references.onDelete.toUpperCase() === "RESTRICT") {
@ -840,7 +847,7 @@ Postgres.prototype.visitJoin = function(join) {
Postgres.prototype.visitLiteral = function(node) {
var txt = [node.literal];
if(node.alias) {
txt.push(' AS ' + this.quote(node.alias));
txt.push(this._aliasText + this.quote(node.alias));
}
return [txt.join('')];
};

76
test/dialects/aggregate-tests.js

@ -23,6 +23,10 @@ Harness.test({
text : 'SELECT COUNT(*) AS [post_count] FROM [post]',
string: 'SELECT COUNT(*) AS [post_count] FROM [post]'
},
oracle: {
text : 'SELECT COUNT(*) "post_count" FROM "post"',
string: 'SELECT COUNT(*) "post_count" FROM "post"'
},
params: []
});
@ -44,6 +48,10 @@ Harness.test({
text : 'SELECT COUNT(*) AS [post_count] FROM [post]',
string: 'SELECT COUNT(*) AS [post_count] FROM [post]'
},
oracle: {
text : 'SELECT COUNT(*) "post_count" FROM "post"',
string: 'SELECT COUNT(*) "post_count" FROM "post"'
},
params: []
});
@ -65,6 +73,10 @@ Harness.test({
text : 'SELECT COUNT(*) AS [post_amount] FROM [post]',
string: 'SELECT COUNT(*) AS [post_amount] FROM [post]'
},
oracle: {
text : 'SELECT COUNT(*) "post_amount" FROM "post"',
string: 'SELECT COUNT(*) "post_amount" FROM "post"'
},
params: []
});
@ -86,6 +98,10 @@ Harness.test({
text : 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]',
string: 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]'
},
oracle: {
text : 'SELECT COUNT("post"."content") "content_count" FROM "post"',
string: 'SELECT COUNT("post"."content") "content_count" FROM "post"'
},
params: []
});
@ -107,6 +123,10 @@ Harness.test({
text : 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]',
string: 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]'
},
oracle: {
text : 'SELECT COUNT("post"."content") "content_count" FROM "post"',
string: 'SELECT COUNT("post"."content") "content_count" FROM "post"'
},
params: []
});
@ -128,6 +148,10 @@ Harness.test({
text : 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]',
string: 'SELECT COUNT([post].[content]) AS [content_count] FROM [post]'
},
oracle: {
text : 'SELECT COUNT("post"."content") "content_count" FROM "post"',
string: 'SELECT COUNT("post"."content") "content_count" FROM "post"'
},
params: []
});
@ -145,6 +169,10 @@ Harness.test({
text : 'SELECT COUNT(`customer`.*) AS `customer_count` FROM `customer`',
string: 'SELECT COUNT(`customer`.*) AS `customer_count` FROM `customer`'
},
oracle: {
text : 'SELECT COUNT(*) "customer_count" FROM "customer"',
string: 'SELECT COUNT(*) "customer_count" FROM "customer"'
},
params: []
});
@ -166,6 +194,10 @@ Harness.test({
text : 'SELECT MIN([post].[id]) AS [id_min] FROM [post]',
string: 'SELECT MIN([post].[id]) AS [id_min] FROM [post]'
},
oracle: {
text : 'SELECT MIN("post"."id") "id_min" FROM "post"',
string: 'SELECT MIN("post"."id") "id_min" FROM "post"'
},
params: []
});
@ -187,6 +219,10 @@ Harness.test({
text : 'SELECT MIN([post].[id]) AS [min_id] FROM [post]',
string: 'SELECT MIN([post].[id]) AS [min_id] FROM [post]'
},
oracle: {
text : 'SELECT MIN("post"."id") "min_id" FROM "post"',
string: 'SELECT MIN("post"."id") "min_id" FROM "post"'
},
params: []
});
@ -208,6 +244,10 @@ Harness.test({
text : 'SELECT MIN([post].[id]) AS [min_id] FROM [post]',
string: 'SELECT MIN([post].[id]) AS [min_id] FROM [post]'
},
oracle: {
text : 'SELECT MIN("post"."id") "min_id" FROM "post"',
string: 'SELECT MIN("post"."id") "min_id" FROM "post"'
},
params: []
});
@ -229,6 +269,10 @@ Harness.test({
text : 'SELECT MAX([post].[id]) AS [id_max] FROM [post]',
string: 'SELECT MAX([post].[id]) AS [id_max] FROM [post]'
},
oracle: {
text : 'SELECT MAX("post"."id") "id_max" FROM "post"',
string: 'SELECT MAX("post"."id") "id_max" FROM "post"'
},
params: []
});
@ -250,6 +294,10 @@ Harness.test({
text : 'SELECT MAX([post].[id]) AS [max_id] FROM [post]',
string: 'SELECT MAX([post].[id]) AS [max_id] FROM [post]'
},
oracle: {
text : 'SELECT MAX("post"."id") "max_id" FROM "post"',
string: 'SELECT MAX("post"."id") "max_id" FROM "post"'
},
params: []
});
@ -271,6 +319,10 @@ Harness.test({
text : 'SELECT MAX([post].[id]) AS [max_id] FROM [post]',
string: 'SELECT MAX([post].[id]) AS [max_id] FROM [post]'
},
oracle: {
text : 'SELECT MAX("post"."id") "max_id" FROM "post"',
string: 'SELECT MAX("post"."id") "max_id" FROM "post"'
},
params: []
});
@ -292,6 +344,10 @@ Harness.test({
text : 'SELECT SUM([post].[id]) AS [id_sum] FROM [post]',
string: 'SELECT SUM([post].[id]) AS [id_sum] FROM [post]'
},
oracle: {
text : 'SELECT SUM("post"."id") "id_sum" FROM "post"',
string: 'SELECT SUM("post"."id") "id_sum" FROM "post"'
},
params: []
});
@ -313,6 +369,10 @@ Harness.test({
text : 'SELECT SUM([post].[id]) AS [sum_id] FROM [post]',
string: 'SELECT SUM([post].[id]) AS [sum_id] FROM [post]'
},
oracle: {
text : 'SELECT SUM("post"."id") "sum_id" FROM "post"',
string: 'SELECT SUM("post"."id") "sum_id" FROM "post"'
},
params: []
});
@ -334,6 +394,10 @@ Harness.test({
text : 'SELECT SUM([post].[id]) AS [sum_id] FROM [post]',
string: 'SELECT SUM([post].[id]) AS [sum_id] FROM [post]'
},
oracle: {
text : 'SELECT SUM("post"."id") "sum_id" FROM "post"',
string: 'SELECT SUM("post"."id") "sum_id" FROM "post"'
},
params: []
});
@ -355,6 +419,10 @@ Harness.test({
text : 'SELECT AVG([post].[id]) AS [id_avg] FROM [post]',
string: 'SELECT AVG([post].[id]) AS [id_avg] FROM [post]'
},
oracle: {
text : 'SELECT AVG("post"."id") "id_avg" FROM "post"',
string: 'SELECT AVG("post"."id") "id_avg" FROM "post"'
},
params: []
});
@ -376,6 +444,10 @@ Harness.test({
text : 'SELECT AVG([post].[id]) AS [avg_id] FROM [post]',
string: 'SELECT AVG([post].[id]) AS [avg_id] FROM [post]'
},
oracle: {
text : 'SELECT AVG("post"."id") "avg_id" FROM "post"',
string: 'SELECT AVG("post"."id") "avg_id" FROM "post"'
},
params: []
});
@ -397,5 +469,9 @@ Harness.test({
text : 'SELECT AVG([post].[id]) AS [avg_id] FROM [post]',
string: 'SELECT AVG([post].[id]) AS [avg_id] FROM [post]'
},
oracle: {
text : 'SELECT AVG("post"."id") "avg_id" FROM "post"',
string: 'SELECT AVG("post"."id") "avg_id" FROM "post"'
},
params: []
});

12
test/dialects/alias-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT ([customer].[name] IS NULL) AS [nameIsNull] FROM [customer]',
string: 'SELECT ([customer].[name] IS NULL) AS [nameIsNull] FROM [customer]'
},
oracle: {
text : 'SELECT ("customer"."name" IS NULL) "nameIsNull" FROM "customer"',
string: 'SELECT ("customer"."name" IS NULL) "nameIsNull" FROM "customer"'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT ([customer].[name] + [customer].[age]) AS [nameAndAge] FROM [customer] WHERE (([customer].[age] > @1) AND ([customer].[age] < @2))',
string: 'SELECT ([customer].[name] + [customer].[age]) AS [nameAndAge] FROM [customer] WHERE (([customer].[age] > 10) AND ([customer].[age] < 20))'
},
oracle: {
text : 'SELECT ("customer"."name" + "customer"."age") "nameAndAge" FROM "customer" WHERE (("customer"."age" > :1) AND ("customer"."age" < :2))',
string: 'SELECT ("customer"."name" + "customer"."age") "nameAndAge" FROM "customer" WHERE (("customer"."age" > 10) AND ("customer"."age" < 20))'
},
params: [10, 20]
});
@ -63,5 +71,9 @@ Harness.test({
text : 'SELECT ([customer].[age] BETWEEN @1 AND @2) AS [ageBetween] FROM [customer]',
string: 'SELECT ([customer].[age] BETWEEN 10 AND 20) AS [ageBetween] FROM [customer]'
},
oracle: {
text : 'SELECT ("customer"."age" BETWEEN :1 AND :2) "ageBetween" FROM "customer"',
string: 'SELECT ("customer"."age" BETWEEN 10 AND 20) "ageBetween" FROM "customer"'
},
params: [10, 20]
});

20
test/dialects/alter-table-tests.js

@ -274,16 +274,20 @@ var post = Table.define({
Harness.test({
query: post.alter().addColumn(post.userId),
pg: {
text : 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES user(id)',
string: 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES user(id)'
text : 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")',
string: 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")'
},
sqlite: {
text : 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES user(id)',
string: 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES user(id)'
text : 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")',
string: 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")'
},
mysql: {
text : 'ALTER TABLE `post` ADD COLUMN `userId` int REFERENCES user(id)',
string: 'ALTER TABLE `post` ADD COLUMN `userId` int REFERENCES user(id)'
text : 'ALTER TABLE `post` ADD COLUMN `userId` int REFERENCES `user`(`id`)',
string: 'ALTER TABLE `post` ADD COLUMN `userId` int REFERENCES `user`(`id`)'
},
oracle: {
text : 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")',
string: 'ALTER TABLE "post" ADD COLUMN "userId" int REFERENCES "user"("id")'
},
params: []
});
@ -302,5 +306,9 @@ Harness.test({
text : 'ALTER TABLE `post` ADD COLUMN `picture` varchar(100)',
string: 'ALTER TABLE `post` ADD COLUMN `picture` varchar(100)'
},
oracle: {
text : 'ALTER TABLE "post" ADD COLUMN "picture" varchar(100)',
string: 'ALTER TABLE "post" ADD COLUMN "picture" varchar(100)'
},
params: []
});

12
test/dialects/binary-clause-tests.js

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT ([customer].[name] + [customer].[age]) FROM [customer]',
string: 'SELECT ([customer].[name] + [customer].[age]) FROM [customer]'
},
oracle: {
text : 'SELECT ("customer"."name" + "customer"."age") FROM "customer"',
string: 'SELECT ("customer"."name" + "customer"."age") FROM "customer"'
},
params: []
});
@ -43,6 +47,10 @@ Harness.test({
text : 'SELECT ([post].[content] + @1) FROM [post] WHERE ([post].[userId] IN (SELECT [customer].[id] FROM [customer]))',
string: 'SELECT ([post].[content] + \'!\') FROM [post] WHERE ([post].[userId] IN (SELECT [customer].[id] FROM [customer]))'
},
oracle: {
text : 'SELECT ("post"."content" + :1) FROM "post" WHERE ("post"."userId" IN (SELECT "customer"."id" FROM "customer"))',
string: 'SELECT ("post"."content" + \'!\') FROM "post" WHERE ("post"."userId" IN (SELECT "customer"."id" FROM "customer"))'
},
params: ['!']
});
@ -64,5 +72,9 @@ Harness.test({
text : 'SELECT (([post].[id] + @1) + [post].[content]) FROM [post] WHERE ([post].[userId] NOT IN (SELECT [customer].[id] FROM [customer]))',
string: 'SELECT (([post].[id] + \': \') + [post].[content]) FROM [post] WHERE ([post].[userId] NOT IN (SELECT [customer].[id] FROM [customer]))'
},
oracle: {
text : 'SELECT (("post"."id" + :1) + "post"."content") FROM "post" WHERE ("post"."userId" NOT IN (SELECT "customer"."id" FROM "customer"))',
string: 'SELECT (("post"."id" + \': \') + "post"."content") FROM "post" WHERE ("post"."userId" NOT IN (SELECT "customer"."id" FROM "customer"))'
},
params: [': ']
});

37
test/dialects/case-tests.js

@ -23,6 +23,11 @@ Harness.test({
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END) FROM [customer]',
params: [0, 1, 2]
},
oracle: {
text : 'SELECT (CASE WHEN 1=1 THEN :1 WHEN 0=1 THEN :2 ELSE :3 END) FROM "customer"',
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END) FROM "customer"',
params: [0, 1, 2]
},
params: [true, 0, false, 1, 2]
});
@ -46,6 +51,11 @@ Harness.test({
string: 'SELECT ([customer].[age] + (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END)) FROM [customer]',
params: [0, 1, 2]
},
oracle: {
text : 'SELECT ("customer"."age" + (CASE WHEN 1=1 THEN :1 WHEN 0=1 THEN :2 ELSE :3 END)) FROM "customer"',
string: 'SELECT ("customer"."age" + (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END)) FROM "customer"',
params: [0, 1, 2]
},
params: [true, 0, false, 1, 2]
});
@ -69,6 +79,11 @@ Harness.test({
string: 'SELECT ((CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END) + 3) FROM [customer]',
params: [0, 1, 2, 3]
},
oracle: {
text : 'SELECT ((CASE WHEN 1=1 THEN :1 WHEN 0=1 THEN :2 ELSE :3 END) + :4) FROM "customer"',
string: 'SELECT ((CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE 2 END) + 3) FROM "customer"',
params: [0, 1, 2, 3]
},
params: [true, 0, false, 1, 2, 3]
});
@ -92,6 +107,11 @@ Harness.test({
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE ([customer].[age] BETWEEN 10 AND 20) END) FROM [customer]',
params: [0, 1, 10, 20]
},
oracle: {
text : 'SELECT (CASE WHEN 1=1 THEN :1 WHEN 0=1 THEN :2 ELSE ("customer"."age" BETWEEN :3 AND :4) END) FROM "customer"',
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 ELSE ("customer"."age" BETWEEN 10 AND 20) END) FROM "customer"',
params: [0, 1, 10, 20]
},
params: [true, 0, false, 1, 10, 20]
});
@ -115,6 +135,11 @@ Harness.test({
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 END) FROM [customer]',
params: [0, 1]
},
oracle: {
text : 'SELECT (CASE WHEN 1=1 THEN :1 WHEN 0=1 THEN :2 END) FROM "customer"',
string: 'SELECT (CASE WHEN 1=1 THEN 0 WHEN 0=1 THEN 1 END) FROM "customer"',
params: [0, 1]
},
params: [true, 0, false, 1]
});
@ -137,6 +162,10 @@ Harness.test({
text : 'SELECT (CASE WHEN ([customer].[age] IN (@1, @2, @3)) THEN @4 WHEN ([customer].[age] <= @5) THEN @6 ELSE @7 END) FROM [customer]',
string: 'SELECT (CASE WHEN ([customer].[age] IN (10, 20, 30)) THEN 0 WHEN ([customer].[age] <= 60) THEN 1 ELSE 2 END) FROM [customer]'
},
oracle: {
text : 'SELECT (CASE WHEN ("customer"."age" IN (:1, :2, :3)) THEN :4 WHEN ("customer"."age" <= :5) THEN :6 ELSE :7 END) FROM "customer"',
string: 'SELECT (CASE WHEN ("customer"."age" IN (10, 20, 30)) THEN 0 WHEN ("customer"."age" <= 60) THEN 1 ELSE 2 END) FROM "customer"'
},
params: [10, 20, 30, 0, 60, 1, 2]
});
@ -159,6 +188,10 @@ Harness.test({
text : 'SELECT (CASE WHEN ([customer].[age] IN (@1, @2, @3)) THEN @4 WHEN ([customer].[age] <= @5) THEN @6 END) FROM [customer]',
string: 'SELECT (CASE WHEN ([customer].[age] IN (10, 20, 30)) THEN 0 WHEN ([customer].[age] <= 60) THEN 1 END) FROM [customer]'
},
oracle: {
text : 'SELECT (CASE WHEN ("customer"."age" IN (:1, :2, :3)) THEN :4 WHEN ("customer"."age" <= :5) THEN :6 END) FROM "customer"',
string: 'SELECT (CASE WHEN ("customer"."age" IN (10, 20, 30)) THEN 0 WHEN ("customer"."age" <= 60) THEN 1 END) FROM "customer"'
},
params: [10, 20, 30, 0, 60, 1]
});
@ -181,5 +214,9 @@ Harness.test({
text : 'SELECT (CASE WHEN ([customer].[age] IN (@1, @2, @3)) THEN ([customer].[age] + @4) WHEN ([customer].[age] <= @5) THEN ([customer].[age] - @6) END) FROM [customer]',
string: 'SELECT (CASE WHEN ([customer].[age] IN (10, 20, 30)) THEN ([customer].[age] + 5) WHEN ([customer].[age] <= 60) THEN ([customer].[age] - 1) END) FROM [customer]'
},
oracle: {
text : 'SELECT (CASE WHEN ("customer"."age" IN (:1, :2, :3)) THEN ("customer"."age" + :4) WHEN ("customer"."age" <= :5) THEN ("customer"."age" - :6) END) FROM "customer"',
string: 'SELECT (CASE WHEN ("customer"."age" IN (10, 20, 30)) THEN ("customer"."age" + 5) WHEN ("customer"."age" <= 60) THEN ("customer"."age" - 1) END) FROM "customer"'
},
params: [10, 20, 30, 5, 60, 1]
});

24
test/dialects/cast-tests.js

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT CAST([customer].[age] AS int) FROM [customer]',
string: 'SELECT CAST([customer].[age] AS int) FROM [customer]'
},
oracle: {
text : 'SELECT CAST("customer"."age" AS int) FROM "customer"',
string: 'SELECT CAST("customer"."age" AS int) FROM "customer"'
},
params: []
});
@ -43,6 +47,10 @@ Harness.test({
text : 'SELECT CAST([customer].[name] AS varchar(10)) FROM [customer]',
string: 'SELECT CAST([customer].[name] AS varchar(10)) FROM [customer]'
},
oracle: {
text : 'SELECT CAST("customer"."name" AS varchar(10)) FROM "customer"',
string: 'SELECT CAST("customer"."name" AS varchar(10)) FROM "customer"'
},
params: []
});
@ -65,6 +73,10 @@ Harness.test({
text : 'SELECT CAST(([customer].[name] + [customer].[age]) AS varchar(15)) FROM [customer]',
string: 'SELECT CAST(([customer].[name] + [customer].[age]) AS varchar(15)) FROM [customer]'
},
oracle: {
text : 'SELECT CAST(("customer"."name" + "customer"."age") AS varchar(15)) FROM "customer"',
string: 'SELECT CAST(("customer"."name" + "customer"."age") AS varchar(15)) FROM "customer"'
},
params: []
});
@ -87,6 +99,10 @@ Harness.test({
text : 'SELECT CAST(CAST([customer].[name] AS varchar(15)) AS varchar(10)) FROM [customer]',
string: 'SELECT CAST(CAST([customer].[name] AS varchar(15)) AS varchar(10)) FROM [customer]'
},
oracle: {
text : 'SELECT CAST(CAST("customer"."name" AS varchar(15)) AS varchar(10)) FROM "customer"',
string: 'SELECT CAST(CAST("customer"."name" AS varchar(15)) AS varchar(10)) FROM "customer"'
},
params: []
});
@ -109,6 +125,10 @@ Harness.test({
text : 'SELECT [customer].[name] FROM [customer] WHERE ((CAST([customer].[age] AS int) + @1) = @2)',
string: 'SELECT [customer].[name] FROM [customer] WHERE ((CAST([customer].[age] AS int) + 100) = 150)'
},
oracle: {
text : 'SELECT "customer"."name" FROM "customer" WHERE ((CAST("customer"."age" AS int) + :1) = :2)',
string: 'SELECT "customer"."name" FROM "customer" WHERE ((CAST("customer"."age" AS int) + 100) = 150)'
},
params: [100, 150]
});
@ -131,5 +151,9 @@ Harness.test({
text : 'SELECT CAST([customer].[age] AS int) AS [age_int] FROM [customer]',
string: 'SELECT CAST([customer].[age] AS int) AS [age_int] FROM [customer]'
},
oracle: {
text : 'SELECT CAST("customer"."age" AS int) "age_int" FROM "customer"',
string: 'SELECT CAST("customer"."age" AS int) "age_int" FROM "customer"'
},
params: []
});

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

@ -23,6 +23,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId])',
string: 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId])'
},
oracle: {
text : 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")',
string: 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")'
},
params: []
});
@ -47,6 +51,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = \'\')'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = \'\')'
},
params: ['']
});
@ -74,6 +82,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) WHERE ([user].[name] = @1)',
string: 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) WHERE ([user].[name] = \'\')'
},
oracle: {
text : 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") WHERE ("user"."name" = :1)',
string: 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") WHERE ("user"."name" = \'\')'
},
params: ['']
});
@ -98,5 +110,9 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = \'\')'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = \'\')'
},
params: ['']
});

88
test/dialects/create-table-tests.js

@ -33,6 +33,10 @@ Harness.test({
text : 'CREATE TABLE [group] ([id] varchar(100), [user_id] varchar(100))',
string: 'CREATE TABLE [group] ([id] varchar(100), [user_id] varchar(100))'
},
oracle: {
text : 'CREATE TABLE "group" ("id" varchar(100), "user_id" varchar(100))',
string: 'CREATE TABLE "group" ("id" varchar(100), "user_id" varchar(100))'
},
params: []
});
@ -54,6 +58,10 @@ Harness.test({
text : 'IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = \'group\') BEGIN CREATE TABLE [group] ([id] varchar(100), [user_id] varchar(100)) END',
string: 'IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = \'group\') BEGIN CREATE TABLE [group] ([id] varchar(100), [user_id] varchar(100)) END'
},
oracle: {
text : 'BEGIN EXECUTE IMMEDIATE \'CREATE TABLE "group" ("id" varchar(100), "user_id" varchar(100))\'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -955 THEN RAISE; END IF; END;',
string: 'BEGIN EXECUTE IMMEDIATE \'CREATE TABLE "group" ("id" varchar(100), "user_id" varchar(100))\'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -955 THEN RAISE; END IF; END;'
},
params: []
});
@ -82,6 +90,10 @@ Harness.test({
mssql: {
text : 'CREATE TABLE [user] ([id] varchar(100))',
string: 'CREATE TABLE [user] ([id] varchar(100))'
},
oracle: {
text : 'CREATE TABLE "user" ("id" varchar(100))',
string: 'CREATE TABLE "user" ("id" varchar(100))'
}
});
@ -110,6 +122,10 @@ Harness.test({
mssql: {
text : 'CREATE TABLE [user] ([id] varchar(100))',
string: 'CREATE TABLE [user] ([id] varchar(100))'
},
oracle: {
text : 'CREATE TABLE "user" ("id" varchar(100))',
string: 'CREATE TABLE "user" ("id" varchar(100))'
}
});
@ -139,6 +155,10 @@ Harness.test({
mssql: {
text : 'CREATE TABLE [user] ([id] varchar(100))',
string: 'CREATE TABLE [user] ([id] varchar(100))'
},
oracle: {
text : 'CREATE TABLE "user" ("id" varchar(100))',
string: 'CREATE TABLE "user" ("id" varchar(100))'
}
});
@ -166,6 +186,10 @@ Harness.test({
mssql: {
text : 'CREATE TABLE [user] ([id] int PRIMARY KEY)',
string: 'CREATE TABLE [user] ([id] int PRIMARY KEY)'
},
oracle: {
text : 'CREATE TABLE "user" ("id" int PRIMARY KEY)',
string: 'CREATE TABLE "user" ("id" int PRIMARY KEY)'
}
});
@ -189,6 +213,10 @@ Harness.test({
mysql: {
text : 'CREATE TABLE `user` (`id` int NOT NULL)',
string: 'CREATE TABLE `user` (`id` int NOT NULL)'
},
oracle: {
text : 'CREATE TABLE "user" ("id" int NOT NULL)',
string: 'CREATE TABLE "user" ("id" int NOT NULL)'
}
});
@ -213,6 +241,10 @@ Harness.test({
mysql: {
text : 'CREATE TABLE `user` (`id` int PRIMARY KEY)',
string: 'CREATE TABLE `user` (`id` int PRIMARY KEY)'
},
oracle: {
text : 'CREATE TABLE "user" ("id" int PRIMARY KEY)',
string: 'CREATE TABLE "user" ("id" int PRIMARY KEY)'
}
});
@ -229,16 +261,20 @@ Harness.test({
}]
}).create(),
pg: {
text : 'CREATE TABLE "post" ("userId" int REFERENCES user(id))',
string: 'CREATE TABLE "post" ("userId" int REFERENCES user(id))'
text : 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))',
string: 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))'
},
sqlite: {
text : 'CREATE TABLE "post" ("userId" int REFERENCES user(id))',
string: 'CREATE TABLE "post" ("userId" int REFERENCES user(id))'
text : 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))',
string: 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))'
},
mysql: {
text : 'CREATE TABLE `post` (`userId` int REFERENCES user(id))',
string: 'CREATE TABLE `post` (`userId` int REFERENCES user(id))'
text : 'CREATE TABLE `post` (`userId` int REFERENCES `user`(`id`))',
string: 'CREATE TABLE `post` (`userId` int REFERENCES `user`(`id`))'
},
oracle: {
text : 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))',
string: 'CREATE TABLE "post" ("userId" int REFERENCES "user"("id"))'
},
params: []
});
@ -260,16 +296,20 @@ Harness.test({
}]
}).create(),
pg: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES user(id), "caption" varchar(100))',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES user(id), "caption" varchar(100))'
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))'
},
sqlite: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES user(id), "caption" varchar(100))',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES user(id), "caption" varchar(100))'
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))'
},
mysql: {
text : 'CREATE TABLE `picture` (`userId` int REFERENCES user(id), `caption` varchar(100))',
string: 'CREATE TABLE `picture` (`userId` int REFERENCES user(id), `caption` varchar(100))'
text : 'CREATE TABLE `picture` (`userId` int REFERENCES `user`(`id`), `caption` varchar(100))',
string: 'CREATE TABLE `picture` (`userId` int REFERENCES `user`(`id`), `caption` varchar(100))'
},
oracle: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id"), "caption" varchar(100))'
},
params: []
});
@ -288,16 +328,20 @@ Harness.test({
}]
}).create(),
pg: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES user(id) ON DELETE CASCADE)',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES user(id) ON DELETE CASCADE)'
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)'
},
sqlite: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES user(id) ON DELETE CASCADE)',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES user(id) ON DELETE CASCADE)'
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)'
},
mysql: {
text : 'CREATE TABLE `picture` (`userId` int REFERENCES user(id) ON DELETE CASCADE)',
string: 'CREATE TABLE `picture` (`userId` int REFERENCES user(id) ON DELETE CASCADE)'
text : 'CREATE TABLE `picture` (`userId` int REFERENCES `user`(`id`) ON DELETE CASCADE)',
string: 'CREATE TABLE `picture` (`userId` int REFERENCES `user`(`id`) ON DELETE CASCADE)'
},
oracle: {
text : 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)',
string: 'CREATE TABLE "picture" ("userId" int REFERENCES "user"("id") ON DELETE CASCADE)'
},
params: []
});
@ -323,6 +367,10 @@ Harness.test({
text : 'references is not a object for column userId (REFERENCES statements within CREATE TABLE and ADD COLUMN statements require refrences to be expressed as an object)',
throws: true
},
oracle: {
text : 'references is not a object for column userId (REFERENCES statements within CREATE TABLE and ADD COLUMN statements require refrences to be expressed as an object)',
throws: true
},
params: []
});
@ -378,6 +426,10 @@ Harness.test({
text : 'CREATE TABLE [post] ([id] int)',
string: 'CREATE TABLE [post] ([id] int)'
},
oracle: {
text : 'CREATE TABLE "post" ("id" int)',
string: 'CREATE TABLE "post" ("id" int)'
},
params: []
});

20
test/dialects/delete-tests.js

@ -22,6 +22,10 @@ Harness.test({
text : 'DELETE FROM [post] WHERE ([post].[content] = @1)',
string: "DELETE FROM [post] WHERE ([post].[content] = 'hello''s world')"
},
oracle: {
text : 'DELETE FROM "post" WHERE ("post"."content" = :1)',
string: 'DELETE FROM "post" WHERE ("post"."content" = \'hello\'\'s world\')'
},
params: ["hello's world"]
});
@ -76,6 +80,10 @@ Harness.test({
text: 'DELETE `user` FROM `user` INNER JOIN `post` ON (`post`.`userId` = `user`.`id`) WHERE (`post`.`content` = ?)',
string: 'DELETE `user` FROM `user` INNER JOIN `post` ON (`post`.`userId` = `user`.`id`) WHERE (`post`.`content` = \'foo\')'
},
oracle: {
text: 'DELETE "user" FROM "user" INNER JOIN "post" ON ("post"."userId" = "user"."id") WHERE ("post"."content" = :1)',
string: 'DELETE "user" FROM "user" INNER JOIN "post" ON ("post"."userId" = "user"."id") WHERE ("post"."content" = \'foo\')'
},
params: [ 'foo' ]
});
@ -99,6 +107,10 @@ Harness.test({
text : 'DELETE FROM [post] WHERE ([post].[content] = @1)',
string: "DELETE FROM [post] WHERE ([post].[content] = '')"
},
oracle: {
text : 'DELETE FROM "post" WHERE ("post"."content" = :1)',
string: 'DELETE FROM "post" WHERE ("post"."content" = \'\')'
},
params: ['']
});
@ -122,6 +134,10 @@ Harness.test({
text : 'DELETE FROM [post] WHERE ([post].[content] = @1)',
string: "DELETE FROM [post] WHERE ([post].[content] = '')"
},
oracle: {
text : 'DELETE FROM "post" WHERE ("post"."content" = :1)',
string: 'DELETE FROM "post" WHERE ("post"."content" = \'\')'
},
params: ['']
});
@ -145,5 +161,9 @@ Harness.test({
text : 'DELETE FROM [post] WHERE (([post].[content] = @1) OR ([post].[content] IS NULL))',
string: "DELETE FROM [post] WHERE (([post].[content] = '') OR ([post].[content] IS NULL))"
},
oracle: {
text : 'DELETE FROM "post" WHERE (("post"."content" = :1) OR ("post"."content" IS NULL))',
string: 'DELETE FROM "post" WHERE (("post"."content" = \'\') OR ("post"."content" IS NULL))'
},
params: ['']
});

20
test/dialects/distinct-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT DISTINCT([user].[id]) FROM [user]',
string: 'SELECT DISTINCT([user].[id]) FROM [user]'
},
oracle: {
text : 'SELECT DISTINCT("user"."id") FROM "user"',
string: 'SELECT DISTINCT("user"."id") FROM "user"'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT COUNT(DISTINCT([user].[id])) AS [count] FROM [user]',
string: 'SELECT COUNT(DISTINCT([user].[id])) AS [count] FROM [user]'
},
oracle: {
text : 'SELECT COUNT(DISTINCT("user"."id")) "count" FROM "user"',
string: 'SELECT COUNT(DISTINCT("user"."id")) "count" FROM "user"'
},
params: []
});
@ -65,6 +73,10 @@ Harness.test({
text : 'SELECT DISTINCT [user].* FROM [user]',
string: 'SELECT DISTINCT [user].* FROM [user]'
},
oracle: {
text : 'SELECT DISTINCT "user".* FROM "user"',
string: 'SELECT DISTINCT "user".* FROM "user"'
},
params: []
});
@ -86,6 +98,10 @@ Harness.test({
text : 'SELECT DISTINCT [user].[id] FROM [user]',
string: 'SELECT DISTINCT [user].[id] FROM [user]'
},
oracle: {
text : 'SELECT DISTINCT "user"."id" FROM "user"',
string: 'SELECT DISTINCT "user"."id" FROM "user"'
},
params: []
});
@ -107,6 +123,10 @@ Harness.test({
text : 'SELECT DISTINCT [user].[id], [user].[name] FROM [user]',
string: 'SELECT DISTINCT [user].[id], [user].[name] FROM [user]'
},
oracle: {
text : 'SELECT DISTINCT "user"."id", "user"."name" FROM "user"',
string: 'SELECT DISTINCT "user"."id", "user"."name" FROM "user"'
},
params: []
});

16
test/dialects/drop-table-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'DROP TABLE [post]',
string: 'DROP TABLE [post]'
},
oracle: {
text : 'DROP TABLE "post"',
string: 'DROP TABLE "post"'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = [post]) BEGIN DROP TABLE [post] END',
string: 'IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = [post]) BEGIN DROP TABLE [post] END'
},
oracle: {
text : 'BEGIN EXECUTE IMMEDIATE \'DROP TABLE "post"\'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;',
string: 'BEGIN EXECUTE IMMEDIATE \'DROP TABLE "post"\'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;'
},
params: []
});
@ -59,6 +67,10 @@ Harness.test({
text : 'DROP TABLE `post` CASCADE',
string: 'DROP TABLE `post` CASCADE'
},
oracle: {
text : 'DROP TABLE "post" CASCADE CONSTRAINTS',
string: 'DROP TABLE "post" CASCADE CONSTRAINTS'
},
params: []
});
@ -76,5 +88,9 @@ Harness.test({
text : 'DROP TABLE `post` RESTRICT',
string: 'DROP TABLE `post` RESTRICT'
},
oracle: {
text : 'Oracle do not support RESTRICT in DROP TABLE',
throws: true
},
params: []
});

16
test/dialects/from-clause-tests.js

@ -21,6 +21,10 @@ Harness.test({
mssql: {
text : 'SELECT [user].* FROM [user] , [post]',
string: 'SELECT [user].* FROM [user] , [post]'
},
oracle: {
text : 'SELECT "user".* FROM "user" , "post"',
string: 'SELECT "user".* FROM "user" , "post"'
}
});
@ -41,6 +45,10 @@ Harness.test({
mssql: {
text : 'SELECT [user].*, [post].* FROM [user] , [post]',
string: 'SELECT [user].*, [post].* FROM [user] , [post]'
},
oracle: {
text : 'SELECT "user".*, "post".* FROM "user" , "post"',
string: 'SELECT "user".*, "post".* FROM "user" , "post"'
}
});
@ -57,6 +65,10 @@ Harness.test({
mysql: {
text : 'SELECT `user`.* FROM `user` , `post`',
string: 'SELECT `user`.* FROM `user` , `post`'
},
oracle: {
text : 'SELECT "user".* FROM "user" , "post"',
string: 'SELECT "user".* FROM "user" , "post"'
}
});
@ -73,5 +85,9 @@ Harness.test({
mysql: {
text : 'SELECT `user`.* FROM `user` , `post`',
string: 'SELECT `user`.* FROM `user` , `post`'
},
oracle: {
text : 'SELECT "user".* FROM "user" , "post"',
string: 'SELECT "user".* FROM "user" , "post"'
}
});

20
test/dialects/group-by-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId]',
string: 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId]'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId"',
string: 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId"'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId], [post].[id]',
string: 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId], [post].[id]'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId", "post"."id"',
string: 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId", "post"."id"'
},
params: []
});
@ -63,6 +71,10 @@ Harness.test({
text : 'SQL Server does not support array_agg.',
throws: true
},
oracle: {
text : 'Oracle does not support array_agg.',
throws: true
},
params: []
});
@ -84,6 +96,10 @@ Harness.test({
text : 'SQL Server does not support array_agg.',
throws: true
},
oracle: {
text : 'Oracle does not support array_agg.',
throws: true
},
params: []
});
@ -105,5 +121,9 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId], [post].[id]',
string: 'SELECT [post].[content] FROM [post] GROUP BY [post].[userId], [post].[id]'
},
oracel: {
text : 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId", "post"."id"',
string: 'SELECT "post"."content" FROM "post" GROUP BY "post"."userId", "post"."id"'
},
params: []
});

12
test/dialects/having-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > @1)',
string: 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > 10)'
},
oracle: {
text : 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > :1)',
string: 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > 10)'
},
params: [10]
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > @1) AND ([post].[userId] < @2)',
string: 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > 10) AND ([post].[userId] < 100)'
},
oracle: {
text : 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > :1) AND ("post"."userId" < :2)',
string: 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > 10) AND ("post"."userId" < 100)'
},
params: [10, 100]
});
@ -63,5 +71,9 @@ Harness.test({
text : 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > @1) AND ([post].[userId] < @2)',
string: 'SELECT [post].[userId], COUNT([post].[content]) AS [content_count] FROM [post] GROUP BY [post].[userId] HAVING ([post].[userId] > 10) AND ([post].[userId] < 100)'
},
oracle: {
text : 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > :1) AND ("post"."userId" < :2)',
string: 'SELECT "post"."userId", COUNT("post"."content") "content_count" FROM "post" GROUP BY "post"."userId" HAVING ("post"."userId" > 10) AND ("post"."userId" < 100)'
},
params: [10, 100]
});

28
test/dialects/in-clause-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE (1=0)',
string: 'SELECT [post].* FROM [post] WHERE (1=0)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE (1=0)',
string: 'SELECT "post".* FROM "post" WHERE (1=0)'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (@1))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (1))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (:1))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (1))'
},
params: [1]
});
@ -63,6 +71,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NULL)'
},
params: []
});
@ -84,6 +96,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (@1, @2))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (1, 2))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (:1, :2))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (1, 2))'
},
params: [1, 2]
});
@ -105,6 +121,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NULL)'
},
params: []
});
@ -126,6 +146,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (@1, @2) OR [post].[id] IS NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (1, 2) OR [post].[id] IS NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (:1, :2) OR "post"."id" IS NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (1, 2) OR "post"."id" IS NULL)'
},
params: [1, 2]
});
@ -147,5 +171,9 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (@1, @2) OR [post].[id] IS NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IN (1, 2) OR [post].[id] IS NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (:1, :2) OR "post"."id" IS NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IN (1, 2) OR "post"."id" IS NULL)'
},
params: [1, 2]
});

28
test/dialects/indexes-tests.js

@ -17,6 +17,10 @@ Harness.test({
text : 'PRAGMA INDEX_LIST("post")',
string: 'PRAGMA INDEX_LIST("post")'
},
oracle: {
text : 'SELECT * FROM USER_INDEXES WHERE TABLE_NAME = \'post\'',
string: 'SELECT * FROM USER_INDEXES WHERE TABLE_NAME = \'post\''
},
params: []
});
@ -34,6 +38,10 @@ Harness.test({
text : 'CREATE UNIQUE INDEX "index_name" USING BTREE ON "post" ("id","userId") WITH PARSER foo',
string: 'CREATE UNIQUE INDEX "index_name" USING BTREE ON "post" ("id","userId") WITH PARSER foo'
},
oracle: {
text : 'CREATE UNIQUE INDEX "index_name" USING BTREE ON "post" ("id","userId") WITH PARSER foo',
string: 'CREATE UNIQUE INDEX "index_name" USING BTREE ON "post" ("id","userId") WITH PARSER foo'
},
params: []
});
@ -85,6 +93,10 @@ Harness.test({
text : 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")',
string: 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")'
},
oracle: {
text : 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")',
string: 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")'
},
params: []
});
@ -102,6 +114,10 @@ Harness.test({
text : 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")',
string: 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")'
},
oracle: {
text : 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")',
string: 'CREATE INDEX "post_id_userId" ON "post" ("userId","id")'
},
params: []
});
@ -118,6 +134,10 @@ Harness.test({
sqlite: {
text : 'No columns defined!',
throws: true
},
oracle: {
text : 'No columns defined!',
throws: true
}
});
@ -135,6 +155,10 @@ Harness.test({
text : 'DROP INDEX "public"."index_name"',
string: 'DROP INDEX "public"."index_name"'
},
oracle: {
text : 'DROP INDEX "index_name"',
string: 'DROP INDEX "index_name"'
},
params: []
});
@ -152,5 +176,9 @@ Harness.test({
text : 'DROP INDEX "public"."post_id_userId"',
string: 'DROP INDEX "public"."post_id_userId"'
},
oracle: {
text : 'DROP INDEX "post_id_userId"',
string: 'DROP INDEX "post_id_userId"'
},
params: []
});

98
test/dialects/insert-tests.js

@ -18,6 +18,10 @@ Harness.test({
text : 'INSERT INTO `post` (`content`, `userId`) VALUES (?, ?)',
string: 'INSERT INTO `post` (`content`, `userId`) VALUES (\'test\', 1)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (\'test\', 1)'
},
params: ['test', 1]
});
@ -35,6 +39,14 @@ Harness.test({
text : 'INSERT INTO `post` (`content`) VALUES (?)',
string: 'INSERT INTO `post` (`content`) VALUES (\'whoah\')'
},
mssql: {
text : 'INSERT INTO [post] ([content]) VALUES (@1)',
string: 'INSERT INTO [post] ([content]) VALUES (\'whoah\')'
},
oracle: {
text : 'INSERT INTO "post" ("content") VALUES (:1)',
string: 'INSERT INTO "post" ("content") VALUES (\'whoah\')'
},
params: ['whoah']
});
@ -55,6 +67,10 @@ Harness.test({
text : 'INSERT INTO `post` (`content`, `userId`) VALUES (?, ?)',
string: 'INSERT INTO `post` (`content`, `userId`) VALUES (\'test\', 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (\'test\', 2)'
},
params: ['test', 2]
});
@ -75,6 +91,10 @@ Harness.test({
text : 'INSERT INTO `post` (`content`, `userId`) VALUES (LOWER(?), ?)',
string: 'INSERT INTO `post` (`content`, `userId`) VALUES (LOWER(\'TEST\'), 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (LOWER(:1), :2)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (LOWER(\'TEST\'), 2)'
},
params: ['TEST', 2]
});
@ -98,6 +118,10 @@ Harness.test({
text : 'INSERT INTO `post` (`content`) VALUES (?), (?)',
string: 'INSERT INTO `post` (`content`) VALUES (\'whoah\'), (\'hey\')'
},
oracle: {
text : 'INSERT INTO "post" ("content") VALUES (:1), (:2)',
string: 'INSERT INTO "post" ("content") VALUES (\'whoah\'), (\'hey\')'
},
params: ['whoah', 'hey']
});
@ -122,6 +146,10 @@ Harness.test({
text : 'INSERT INTO `post` (`content`, `userId`) VALUES (?, ?), (?, ?)',
string: 'INSERT INTO `post` (`content`, `userId`) VALUES (\'whoah\', 1), (\'hey\', 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2), (:3, :4)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (\'whoah\', 1), (\'hey\', 2)'
},
params: ['whoah', 1, 'hey', 2]
});
@ -151,6 +179,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) VALUES (@1, @2), (@3, @4)',
string: 'INSERT INTO [post] ([content], [userId]) VALUES (\'whoah\', 1), (\'hey\', 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2), (:3, :4)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (\'whoah\', 1), (\'hey\', 2)'
},
params: ['whoah', 1, 'hey', 2]
});
@ -172,6 +204,10 @@ Harness.test({
text : 'INSERT INTO [post] DEFAULT VALUES',
string: 'INSERT INTO [post] DEFAULT VALUES'
},
oracle: {
text : 'INSERT INTO "post" DEFAULT VALUES',
string: 'INSERT INTO "post" DEFAULT VALUES'
},
params: []
});
@ -190,6 +226,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: []
});
@ -208,6 +247,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: []
});
@ -226,6 +268,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: []
});
@ -244,6 +289,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: []
});
@ -262,6 +310,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: []
});
@ -292,7 +343,12 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) VALUES (@1, @2), (@3, DEFAULT)',
string: 'INSERT INTO [post] ([content], [userId]) VALUES (\'whoah\', 1), (\'hey\', DEFAULT)',
params: ['whoah', 1, 'hey']
}
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2), (:3, DEFAULT)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (\'whoah\', 1), (\'hey\', DEFAULT)',
params: ['whoah', 1, 'hey']
},
});
Harness.test({
@ -321,6 +377,11 @@ Harness.test({
text : 'INSERT INTO [post] ([userId], [content]) VALUES (@1, DEFAULT), (@2, @3)',
string: 'INSERT INTO [post] ([userId], [content]) VALUES (1, DEFAULT), (2, \'hey\')',
params: [1, 2, 'hey']
},
oracle: {
text : 'INSERT INTO "post" ("userId", "content") VALUES (:1, DEFAULT), (:2, :3)',
string: 'INSERT INTO "post" ("userId", "content") VALUES (1, DEFAULT), (2, \'hey\')',
params: [1, 2, 'hey']
}
});
@ -343,6 +404,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) SELECT \'test\', [user].[id] FROM [user] WHERE ([user].[name] LIKE @1)',
string: 'INSERT INTO [post] ([content], [userId]) SELECT \'test\', [user].[id] FROM [user] WHERE ([user].[name] LIKE \'A%\')'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") SELECT \'test\', "user"."id" FROM "user" WHERE ("user"."name" LIKE :1)',
string: 'INSERT INTO "post" ("content", "userId") SELECT \'test\', "user"."id" FROM "user" WHERE ("user"."name" LIKE \'A%\')'
},
params: ['A%']
});
@ -365,6 +430,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) SELECT \'test\', [user].[id] FROM [user] WHERE ([user].[name] LIKE @1)',
string: 'INSERT INTO [post] ([content], [userId]) SELECT \'test\', [user].[id] FROM [user] WHERE ([user].[name] LIKE \'A%\')'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") SELECT \'test\', "user"."id" FROM "user" WHERE ("user"."name" LIKE :1)',
string: 'INSERT INTO "post" ("content", "userId") SELECT \'test\', "user"."id" FROM "user" WHERE ("user"."name" LIKE \'A%\')'
},
params: ['A%']
});
@ -383,6 +452,10 @@ Harness.test({
text : 'INSERT INTO `post` (`userId`) SELECT `user`.`id` FROM `user` WHERE (`user`.`name` LIKE ?)',
string: 'INSERT INTO `post` (`userId`) SELECT `user`.`id` FROM `user` WHERE (`user`.`name` LIKE \'A%\')'
},
oracle: {
text : 'INSERT INTO "post" ("userId") SELECT "user"."id" FROM "user" WHERE ("user"."name" LIKE :1)',
string: 'INSERT INTO "post" ("userId") SELECT "user"."id" FROM "user" WHERE ("user"."name" LIKE \'A%\')'
},
params: ['A%']
});
@ -405,6 +478,10 @@ Harness.test({
text : 'INSERT INTO [post] ([userId]) SELECT [post].[userId] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) WHERE ([post].[tags] LIKE @1)',
string: 'INSERT INTO [post] ([userId]) SELECT [post].[userId] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) WHERE ([post].[tags] LIKE \'A%\')'
},
oracle: {
text : 'INSERT INTO "post" ("userId") SELECT "post"."userId" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") WHERE ("post"."tags" LIKE :1)',
string: 'INSERT INTO "post" ("userId") SELECT "post"."userId" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") WHERE ("post"."tags" LIKE \'A%\')'
},
params: ['A%']
});
@ -426,6 +503,10 @@ Harness.test({
text : 'INSERT INTO [post] ([userId]) SELECT DISTINCT [user].[id] FROM [user]',
string: 'INSERT INTO [post] ([userId]) SELECT DISTINCT [user].[id] FROM [user]'
},
oracle: {
text : 'INSERT INTO "post" ("userId") SELECT DISTINCT "user"."id" FROM "user"',
string: 'INSERT INTO "post" ("userId") SELECT DISTINCT "user"."id" FROM "user"'
},
params: []
});
@ -448,6 +529,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) VALUES (@1, @2)',
string: 'INSERT INTO [post] ([content], [userId]) VALUES (\'\\x74657374\', 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (utl_raw.cast_to_varchar2(hextoraw(\'74657374\')), 2)'
},
params: [new Buffer('test'), 2]
});
@ -472,6 +557,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content], [userId]) VALUES (@1, @2)',
string: 'INSERT INTO [post] ([content], [userId]) VALUES (\'\\x74657374\', 2)'
},
oracle: {
text : 'INSERT INTO "post" ("content", "userId") VALUES (:1, :2)',
string: 'INSERT INTO "post" ("content", "userId") VALUES (utl_raw.cast_to_varchar2(hextoraw(\'74657374\')), 2)'
},
params: [new Buffer('test'), 2]
});
@ -499,6 +588,10 @@ Harness.test({
text : 'INSERT INTO [post] ([content]) VALUES (@1), (@2)',
string: 'INSERT INTO [post] ([content]) VALUES (\'\\x77686f6168\'), (\'\\x686579\')'
},
oracle: {
text : 'INSERT INTO "post" ("content") VALUES (:1), (:2)',
string: 'INSERT INTO "post" ("content") VALUES (utl_raw.cast_to_varchar2(hextoraw(\'77686f6168\'))), (utl_raw.cast_to_varchar2(hextoraw(\'686579\')))'
},
params: [new Buffer('whoah'), new Buffer('hey')]
});
@ -522,6 +615,9 @@ Harness.test({
mssql: {
throws: true
},
oracle: {
throws: true
},
params: ['test', 2, 'testupdate']
});

24
test/dialects/join-tests.js

@ -23,6 +23,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId])',
string: 'SELECT [user].[name], [post].[content] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId])'
},
oracle: {
text : 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")',
string: 'SELECT "user"."name", "post"."content" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId")'
},
params: []
});
@ -44,6 +48,10 @@ Harness.test({
text : '[user] INNER JOIN [post] ON ([user].[id] = [post].[userId])',
string: '[user] INNER JOIN [post] ON ([user].[id] = [post].[userId])'
},
oracle: {
text : '"user" INNER JOIN "post" ON ("user"."id" = "post"."userId")',
string: '"user" INNER JOIN "post" ON ("user"."id" = "post"."userId")'
},
params: []
});
@ -70,6 +78,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content], [comment].[text] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) INNER JOIN [comment] ON ([post].[id] = [comment].[postId])',
string: 'SELECT [user].[name], [post].[content], [comment].[text] FROM [user] INNER JOIN [post] ON ([user].[id] = [post].[userId]) INNER JOIN [comment] ON ([post].[id] = [comment].[postId])'
},
oracle: {
text : 'SELECT "user"."name", "post"."content", "comment"."text" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") INNER JOIN "comment" ON ("post"."id" = "comment"."postId")',
string: 'SELECT "user"."name", "post"."content", "comment"."text" FROM "user" INNER JOIN "post" ON ("user"."id" = "post"."userId") INNER JOIN "comment" ON ("post"."id" = "comment"."postId")'
},
params: []
});
@ -91,6 +103,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content] FROM [user] LEFT JOIN [post] ON ([user].[id] = [post].[userId])',
string: 'SELECT [user].[name], [post].[content] FROM [user] LEFT JOIN [post] ON ([user].[id] = [post].[userId])'
},
oracle: {
text : 'SELECT "user"."name", "post"."content" FROM "user" LEFT JOIN "post" ON ("user"."id" = "post"."userId")',
string: 'SELECT "user"."name", "post"."content" FROM "user" LEFT JOIN "post" ON ("user"."id" = "post"."userId")'
},
params: []
});
@ -117,6 +133,10 @@ Harness.test({
text : 'SELECT [user].[name], [post].[content] FROM [user] LEFT JOIN [post] ON ([user].[id] = [post].[userId]) LEFT JOIN [comment] ON ([post].[id] = [comment].[postId])',
string: 'SELECT [user].[name], [post].[content] FROM [user] LEFT JOIN [post] ON ([user].[id] = [post].[userId]) LEFT JOIN [comment] ON ([post].[id] = [comment].[postId])'
},
oracle: {
text : 'SELECT "user"."name", "post"."content" FROM "user" LEFT JOIN "post" ON ("user"."id" = "post"."userId") LEFT JOIN "comment" ON ("post"."id" = "comment"."postId")',
string: 'SELECT "user"."name", "post"."content" FROM "user" LEFT JOIN "post" ON ("user"."id" = "post"."userId") LEFT JOIN "comment" ON ("post"."id" = "comment"."postId")'
},
params: []
});
@ -148,5 +168,9 @@ Harness.test({
text : 'SELECT [user].[name], [subposts].[content] FROM [user] INNER JOIN (SELECT [post].[content], [post].[userId] AS [subpostUserId] FROM [post]) [subposts] ON ([user].[id] = [subposts].[subpostUserId])',
string: 'SELECT [user].[name], [subposts].[content] FROM [user] INNER JOIN (SELECT [post].[content], [post].[userId] AS [subpostUserId] FROM [post]) [subposts] ON ([user].[id] = [subposts].[subpostUserId])'
},
oracle: {
text : 'SELECT "user"."name", "subposts"."content" FROM "user" INNER JOIN (SELECT "post"."content", "post"."userId" "subpostUserId" FROM "post") "subposts" ON ("user"."id" = "subposts"."subpostUserId")',
string: 'SELECT "user"."name", "subposts"."content" FROM "user" INNER JOIN (SELECT "post"."content", "post"."userId" "subpostUserId" FROM "post") "subposts" ON ("user"."id" = "subposts"."subpostUserId")'
},
params: []
});

12
test/dialects/join-to-tests.js

@ -54,6 +54,10 @@ Harness.test({
text : '[user] INNER JOIN [post] ON ([user].[id] = [post].[ownerId])',
string: '[user] INNER JOIN [post] ON ([user].[id] = [post].[ownerId])'
},
oracle: {
text : '"user" INNER JOIN "post" ON ("user"."id" = "post"."ownerId")',
string: '"user" INNER JOIN "post" ON ("user"."id" = "post"."ownerId")'
},
params: []
});
@ -75,6 +79,10 @@ Harness.test({
text : '[post] INNER JOIN [user] ON ([user].[id] = [post].[ownerId])',
string: '[post] INNER JOIN [user] ON ([user].[id] = [post].[ownerId])'
},
oracle: {
text : '"post" INNER JOIN "user" ON ("user"."id" = "post"."ownerId")',
string: '"post" INNER JOIN "user" ON ("user"."id" = "post"."ownerId")'
},
params: []
});
@ -96,5 +104,9 @@ Harness.test({
text : '[user] INNER JOIN [photo] ON ([user].[id] = [photo].[ownerId])',
string: '[user] INNER JOIN [photo] ON ([user].[id] = [photo].[ownerId])'
},
oracle: {
text : '"user" INNER JOIN "photo" ON ("user"."id" = "photo"."ownerId")',
string: '"user" INNER JOIN "photo" ON ("user"."id" = "photo"."ownerId")'
},
params: []
});

8
test/dialects/limit-and-offset-tests.js

@ -66,6 +66,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user] ORDER BY [user].[name] OFFSET 10 ROWS',
string: 'SELECT [user].* FROM [user] ORDER BY [user].[name] OFFSET 10 ROWS'
},
oracle: {
text : 'SELECT "user".* FROM "user" ORDER BY "user"."name" OFFSET 10 ROWS',
string: 'SELECT "user".* FROM "user" ORDER BY "user"."name" OFFSET 10 ROWS'
},
params: []
});
@ -91,6 +95,10 @@ Harness.test({
text : 'Microsoft SQL Server does not support OFFSET without and ORDER BY.',
throws: true
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE ("user"."name" = :1) OFFSET (SELECT FLOOR(RANDOM() * COUNT(*)) FROM "user" WHERE ("user"."name" = :2)) ROWS FETCH NEXT 1 ROWS ONLY',
string: 'SELECT "user".* FROM "user" WHERE ("user"."name" = \'John\') OFFSET (SELECT FLOOR(RANDOM() * COUNT(*)) FROM "user" WHERE ("user"."name" = \'John\')) ROWS FETCH NEXT 1 ROWS ONLY'
},
values: ['John', 'John']
});

12
test/dialects/literal-tests.js

@ -17,6 +17,10 @@ Harness.test({
text : 'SELECT foo, `user`.`name`, 123 AS `onetwothree` FROM `user`',
string: 'SELECT foo, `user`.`name`, 123 AS `onetwothree` FROM `user`'
},
oracle: {
text : 'SELECT foo, "user"."name", 123 "onetwothree" FROM "user"',
string: 'SELECT foo, "user"."name", 123 "onetwothree" FROM "user"'
},
params: []
});
@ -35,6 +39,10 @@ Harness.test({
text : 'SELECT `user`.* FROM `user` WHERE foo = bar',
string: 'SELECT `user`.* FROM `user` WHERE foo = bar'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE foo = bar',
string: 'SELECT "user".* FROM "user" WHERE foo = bar'
},
params: []
});
@ -56,5 +64,9 @@ Harness.test({
text : 'SELECT COUNT(`subquery_for_count`.`count_column`) AS `count_column_count` FROM (SELECT 1 AS `count_column` FROM `user` LIMIT 10 OFFSET 20) `subquery_for_count`',
string: 'SELECT COUNT(`subquery_for_count`.`count_column`) AS `count_column_count` FROM (SELECT 1 AS `count_column` FROM `user` LIMIT 10 OFFSET 20) `subquery_for_count`'
},
oracle: {
text : 'SELECT COUNT("subquery_for_count"."count_column") "count_column_count" FROM (SELECT 1 "count_column" FROM "user" OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY) "subquery_for_count"',
string: 'SELECT COUNT("subquery_for_count"."count_column") "count_column_count" FROM (SELECT 1 "count_column" FROM "user" OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY) "subquery_for_count"'
},
params: []
});

4
test/dialects/matches-test.js

@ -30,6 +30,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE (CONTAINS ([post].[content], @1))',
string: 'SELECT [post].* FROM [post] WHERE (CONTAINS ([post].[content], \'hello\'))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE (INSTR ("post"."content", :1) > 0)',
string: 'SELECT "post".* FROM "post" WHERE (INSTR ("post"."content", \'hello\') > 0)'
},
params: ['hello']
});

20
test/dialects/namespace-tests.js

@ -24,6 +24,10 @@ Harness.test({
text : 'SELECT [u].[name] FROM [user] AS [u]',
string: 'SELECT [u].[name] FROM [user] AS [u]'
},
oracle: {
text : 'SELECT "u"."name" FROM "user" "u"',
string: 'SELECT "u"."name" FROM "user" "u"'
},
params: []
});
@ -45,6 +49,10 @@ Harness.test({
text : 'SELECT [u].* FROM [user] AS [u]',
string: 'SELECT [u].* FROM [user] AS [u]'
},
oracle: {
text : 'SELECT "u".* FROM "user" "u"',
string: 'SELECT "u".* FROM "user" "u"'
},
params: []
});
@ -67,6 +75,10 @@ Harness.test({
text : 'SELECT [u].[name] FROM [user] AS [u] INNER JOIN [post] AS [p] ON (([u].[id] = [p].[userId]) AND ([p].[id] = @1))',
string: 'SELECT [u].[name] FROM [user] AS [u] INNER JOIN [post] AS [p] ON (([u].[id] = [p].[userId]) AND ([p].[id] = 3))'
},
oracle: {
text : 'SELECT "u"."name" FROM "user" "u" INNER JOIN "post" "p" ON (("u"."id" = "p"."userId") AND ("p"."id" = :1))',
string: 'SELECT "u"."name" FROM "user" "u" INNER JOIN "post" "p" ON (("u"."id" = "p"."userId") AND ("p"."id" = 3))'
},
params: [3]
});
@ -88,6 +100,10 @@ Harness.test({
text : '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))',
string: '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))'
},
oracle: {
text : 'SELECT "p"."content", "u"."name" FROM "user" "u" INNER JOIN "post" "p" ON (("u"."id" = "p"."userId") AND ("p"."content" IS NOT NULL))',
string: 'SELECT "p"."content", "u"."name" FROM "user" "u" INNER JOIN "post" "p" ON (("u"."id" = "p"."userId") AND ("p"."content" IS NOT NULL))'
},
params: []
});
@ -122,5 +138,9 @@ Harness.test({
text : 'SELECT [comment].[text], [comment].[userId] FROM [comment]',
string: 'SELECT [comment].[text], [comment].[userId] FROM [comment]'
},
orcle: {
text : 'SELECT "comment"."text", "comment"."userId" FROM "comment"',
string: 'SELECT "comment"."text", "comment"."userId" FROM "comment"'
},
params: []
});

28
test/dialects/not-in-clause-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE (1=1)',
string: 'SELECT [post].* FROM [post] WHERE (1=1)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE (1=1)',
string: 'SELECT "post".* FROM "post" WHERE (1=1)'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] NOT IN (@1))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] NOT IN (1))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" NOT IN (:1))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" NOT IN (1))'
},
params: [1]
});
@ -63,6 +71,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NOT NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NOT NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NOT NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NOT NULL)'
},
params: []
});
@ -84,6 +96,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] NOT IN (@1, @2))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] NOT IN (1, 2))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" NOT IN (:1, :2))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" NOT IN (1, 2))'
},
params: [1, 2]
});
@ -105,6 +121,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NOT NULL)',
string: 'SELECT [post].* FROM [post] WHERE ([post].[id] IS NOT NULL)'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NOT NULL)',
string: 'SELECT "post".* FROM "post" WHERE ("post"."id" IS NOT NULL)'
},
params: []
});
@ -126,6 +146,10 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE (NOT ([post].[id] IN (@1, @2) OR [post].[id] IS NULL))',
string: 'SELECT [post].* FROM [post] WHERE (NOT ([post].[id] IN (1, 2) OR [post].[id] IS NULL))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE (NOT ("post"."id" IN (:1, :2) OR "post"."id" IS NULL))',
string: 'SELECT "post".* FROM "post" WHERE (NOT ("post"."id" IN (1, 2) OR "post"."id" IS NULL))'
},
params: [1, 2]
});
@ -147,5 +171,9 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE (NOT ([post].[id] IN (@1, @2) OR [post].[id] IS NULL))',
string: 'SELECT [post].* FROM [post] WHERE (NOT ([post].[id] IN (1, 2) OR [post].[id] IS NULL))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE (NOT ("post"."id" IN (:1, :2) OR "post"."id" IS NULL))',
string: 'SELECT "post".* FROM "post" WHERE (NOT ("post"."id" IN (1, 2) OR "post"."id" IS NULL))'
},
params: [1, 2]
});

40
test/dialects/order-tests.js

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] ORDER BY [post].[content]',
string: 'SELECT [post].[content] FROM [post] ORDER BY [post].[content]'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" ORDER BY "post"."content"',
string: 'SELECT "post"."content" FROM "post" ORDER BY "post"."content"'
},
params: []
});
@ -43,6 +47,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC',
string: 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC',
string: 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC'
},
params: []
});
@ -64,6 +72,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC',
string: 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC',
string: 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC'
},
params: []
});
@ -85,6 +97,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC',
string: 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC',
string: 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC'
},
params: []
});
@ -106,6 +122,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC',
string: 'SELECT [post].[content] FROM [post] ORDER BY [post].[content], [post].[userId] DESC'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC',
string: 'SELECT "post"."content" FROM "post" ORDER BY "post"."content", "post"."userId" DESC'
},
params: []
});
@ -127,6 +147,10 @@ Harness.test({
text : 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL)',
string: 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL)'
},
oracle: {
text : 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL)',
string: 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL)'
},
params: []
});
@ -148,6 +172,10 @@ Harness.test({
text : 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL) DESC',
string: 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL) DESC'
},
oracle: {
text : 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL) DESC',
string: 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL) DESC'
},
params: []
});
@ -169,6 +197,10 @@ Harness.test({
text : 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL)',
string: 'SELECT ([post].[content] IS NULL) FROM [post] ORDER BY ([post].[content] IS NULL)'
},
oracle: {
text : 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL)',
string: 'SELECT ("post"."content" IS NULL) FROM "post" ORDER BY ("post"."content" IS NULL)'
},
params: []
});
@ -190,6 +222,10 @@ Harness.test({
text : 'SELECT RTRIM([post].[content]) FROM [post] ORDER BY RTRIM([post].[content])',
string: 'SELECT RTRIM([post].[content]) FROM [post] ORDER BY RTRIM([post].[content])'
},
oracle: {
text : 'SELECT RTRIM("post"."content") FROM "post" ORDER BY RTRIM("post"."content")',
string: 'SELECT RTRIM("post"."content") FROM "post" ORDER BY RTRIM("post"."content")'
},
params: []
});
@ -211,5 +247,9 @@ Harness.test({
text : 'SELECT RTRIM([post].[content]) FROM [post] ORDER BY RTRIM([post].[content]) DESC',
string: 'SELECT RTRIM([post].[content]) FROM [post] ORDER BY RTRIM([post].[content]) DESC'
},
oracle: {
text : 'SELECT RTRIM("post"."content") FROM "post" ORDER BY RTRIM("post"."content") DESC',
string: 'SELECT RTRIM("post"."content") FROM "post" ORDER BY RTRIM("post"."content") DESC'
},
params: []
});

24
test/dialects/schema-tests.js

@ -28,6 +28,10 @@ Harness.test({
text : 'SELECT [staging].[user].[id] FROM [staging].[user]',
string: 'SELECT [staging].[user].[id] FROM [staging].[user]'
},
oracle: {
text : 'SELECT "staging"."user"."id" FROM "staging"."user"',
string: 'SELECT "staging"."user"."id" FROM "staging"."user"'
},
params: []
});
@ -49,6 +53,10 @@ Harness.test({
text : 'SELECT COUNT([staging].[user].[id]) AS [id_count] FROM [staging].[user]',
string: 'SELECT COUNT([staging].[user].[id]) AS [id_count] FROM [staging].[user]'
},
oracle: {
text : 'SELECT COUNT("staging"."user"."id") "id_count" FROM "staging"."user"',
string: 'SELECT COUNT("staging"."user"."id") "id_count" FROM "staging"."user"'
},
params: []
});
@ -70,6 +78,10 @@ Harness.test({
text : 'SELECT [staging].[user].[id], [staging].[user].[name] FROM [staging].[user]',
string: 'SELECT [staging].[user].[id], [staging].[user].[name] FROM [staging].[user]'
},
oracle: {
text : 'SELECT "staging"."user"."id", "staging"."user"."name" FROM "staging"."user"',
string: 'SELECT "staging"."user"."id", "staging"."user"."name" FROM "staging"."user"'
},
params: []
});
@ -92,6 +104,10 @@ Harness.test({
text : 'SELECT [uws].[name] FROM [staging].[user] AS [uws]',
string: 'SELECT [uws].[name] FROM [staging].[user] AS [uws]'
},
oracle: {
text : 'SELECT "uws"."name" FROM "staging"."user" "uws"',
string: 'SELECT "uws"."name" FROM "staging"."user" "uws"'
},
params: []
});
@ -119,6 +135,10 @@ Harness.test({
text : 'SELECT [staging].[user].[name], [dev].[post].[content] FROM [staging].[user] INNER JOIN [dev].[post] ON ([staging].[user].[id] = [dev].[post].[userId])',
string: 'SELECT [staging].[user].[name], [dev].[post].[content] FROM [staging].[user] INNER JOIN [dev].[post] ON ([staging].[user].[id] = [dev].[post].[userId])'
},
oracle: {
text : 'SELECT "staging"."user"."name", "dev"."post"."content" FROM "staging"."user" INNER JOIN "dev"."post" ON ("staging"."user"."id" = "dev"."post"."userId")',
string: 'SELECT "staging"."user"."name", "dev"."post"."content" FROM "staging"."user" INNER JOIN "dev"."post" ON ("staging"."user"."id" = "dev"."post"."userId")'
},
params: []
});
@ -140,5 +160,9 @@ Harness.test({
text : 'SELECT [uws].[name], [dev].[post].[content] FROM [staging].[user] AS [uws] INNER JOIN [dev].[post] ON ([uws].[id] = [dev].[post].[userId])',
string: 'SELECT [uws].[name], [dev].[post].[content] FROM [staging].[user] AS [uws] INNER JOIN [dev].[post] ON ([uws].[id] = [dev].[post].[userId])'
},
oracle: {
text : 'SELECT "uws"."name", "dev"."post"."content" FROM "staging"."user" "uws" INNER JOIN "dev"."post" ON ("uws"."id" = "dev"."post"."userId")',
string: 'SELECT "uws"."name", "dev"."post"."content" FROM "staging"."user" "uws" INNER JOIN "dev"."post" ON ("uws"."id" = "dev"."post"."userId")'
},
params: []
});

12
test/dialects/select-tests.js

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT [post].[id], [post].[content] FROM [post]',
string: 'SELECT [post].[id], [post].[content] FROM [post]'
},
oracle: {
text : 'SELECT "post"."id", "post"."content" FROM "post"',
string: 'SELECT "post"."id", "post"."content" FROM "post"'
},
params: []
});
@ -39,5 +43,13 @@ Harness.test({
text : 'SELECT `customer`.`id` AS `id_alias`, `customer`.`name` AS `name_alias`, `customer`.`age` AS `age_alias`, `customer`.`income` AS `income_alias`, `customer`.`metadata` AS `metadata_alias` FROM `customer`',
string: 'SELECT `customer`.`id` AS `id_alias`, `customer`.`name` AS `name_alias`, `customer`.`age` AS `age_alias`, `customer`.`income` AS `income_alias`, `customer`.`metadata` AS `metadata_alias` FROM `customer`'
},
mssql: {
text : 'SELECT [customer].[id] AS [id_alias], [customer].[name] AS [name_alias], [customer].[age] AS [age_alias], [customer].[income] AS [income_alias], [customer].[metadata] AS [metadata_alias] FROM [customer]',
string: 'SELECT [customer].[id] AS [id_alias], [customer].[name] AS [name_alias], [customer].[age] AS [age_alias], [customer].[income] AS [income_alias], [customer].[metadata] AS [metadata_alias] FROM [customer]'
},
oracle: {
text : 'SELECT "customer"."id" "id_alias", "customer"."name" "name_alias", "customer"."age" "age_alias", "customer"."income" "income_alias", "customer"."metadata" "metadata_alias" FROM "customer"',
string: 'SELECT "customer"."id" "id_alias", "customer"."name" "name_alias", "customer"."age" "age_alias", "customer"."income" "income_alias", "customer"."metadata" "metadata_alias" FROM "customer"'
},
params: []
});

24
test/dialects/shortcut-tests.js

@ -23,6 +23,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user]',
string: 'SELECT [user].* FROM [user]'
},
oracle: {
text : 'SELECT "user".* FROM "user"',
string: 'SELECT "user".* FROM "user"'
},
params: []
});
@ -44,6 +48,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT * FROM [user] WHERE ([user].[name] = 3)'
},
oracle: {
text : 'SELECT * FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT * FROM "user" WHERE ("user"."name" = 3)'
},
params: [3]
});
@ -65,6 +73,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE (([user].[name] = @1) AND ([user].[id] = @2))',
string: 'SELECT * FROM [user] WHERE (([user].[name] = 3) AND ([user].[id] = 1))'
},
oracle: {
text : 'SELECT * FROM "user" WHERE (("user"."name" = :1) AND ("user"."id" = :2))',
string: 'SELECT * FROM "user" WHERE (("user"."name" = 3) AND ("user"."id" = 1))'
},
params: [3, 1]
});
@ -87,6 +99,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post]',
string: 'SELECT [post].[content] FROM [post]'
},
oracle: {
text : 'SELECT "post"."content" FROM "post"',
string: 'SELECT "post"."content" FROM "post"'
},
params: []
});
@ -108,6 +124,10 @@ Harness.test({
text : 'SELECT [post].[content] FROM [post] WHERE ([post].[userId] = @1)',
string: 'SELECT [post].[content] FROM [post] WHERE ([post].[userId] = 1)'
},
oracle: {
text : 'SELECT "post"."content" FROM "post" WHERE ("post"."userId" = :1)',
string: 'SELECT "post"."content" FROM "post" WHERE ("post"."userId" = 1)'
},
params: [1]
});
@ -133,5 +153,9 @@ Harness.test({
text : 'SELECT * FROM [post] WHERE ((([post].[content] IS NULL) OR ([post].[content] = @1)) AND ([post].[userId] = @2))',
string: 'SELECT * FROM [post] WHERE ((([post].[content] IS NULL) OR ([post].[content] = \'\')) AND ([post].[userId] = 1))'
},
oracle: {
text : 'SELECT * FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = :1)) AND ("post"."userId" = :2))',
string: 'SELECT * FROM "post" WHERE ((("post"."content" IS NULL) OR ("post"."content" = \'\')) AND ("post"."userId" = 1))'
},
params: ['', 1]
});

20
test/dialects/subquery-tests.js

@ -27,6 +27,10 @@ Harness.test({
text : '([user].[name] IN (SELECT [customer].[name] FROM [customer] WHERE ([user].[name] IN (SELECT [customer].[name] FROM [customer] WHERE ([user].[name] LIKE @1)))))',
string: '([user].[name] IN (SELECT [customer].[name] FROM [customer] WHERE ([user].[name] IN (SELECT [customer].[name] FROM [customer] WHERE ([user].[name] LIKE \'%HELLO%\')))))'
},
oracle: {
text : '("user"."name" IN (SELECT "customer"."name" FROM "customer" WHERE ("user"."name" IN (SELECT "customer"."name" FROM "customer" WHERE ("user"."name" LIKE :1)))))',
string: '("user"."name" IN (SELECT "customer"."name" FROM "customer" WHERE ("user"."name" IN (SELECT "customer"."name" FROM "customer" WHERE ("user"."name" LIKE \'%HELLO%\')))))'
},
params: ['%HELLO%']
});
@ -48,6 +52,10 @@ Harness.test({
text : 'SELECT * FROM (SELECT * FROM [user])',
string: 'SELECT * FROM (SELECT * FROM [user])'
},
oracle: {
text : 'SELECT * FROM (SELECT * FROM "user")',
string: 'SELECT * FROM (SELECT * FROM "user")'
},
params: []
});
@ -69,6 +77,10 @@ Harness.test({
text : 'SELECT * FROM (SELECT * FROM [customer]) [T1] , (SELECT * FROM [user]) [T2]',
string: 'SELECT * FROM (SELECT * FROM [customer]) [T1] , (SELECT * FROM [user]) [T2]'
},
oracle: {
text : 'SELECT * FROM (SELECT * FROM "customer") "T1" , (SELECT * FROM "user") "T2"',
string: 'SELECT * FROM (SELECT * FROM "customer") "T1" , (SELECT * FROM "user") "T2"'
},
params: []
});
@ -93,6 +105,10 @@ Harness.test({
text : '([customer].[name] BETWEEN (SELECT MIN([customer].[name]) FROM [customer]) AND (SELECT MAX([customer].[name]) FROM [customer]))',
string: '([customer].[name] BETWEEN (SELECT MIN([customer].[name]) FROM [customer]) AND (SELECT MAX([customer].[name]) FROM [customer]))'
},
oracle: {
text : '("customer"."name" BETWEEN (SELECT MIN("customer"."name") FROM "customer") AND (SELECT MAX("customer"."name") FROM "customer"))',
string: '("customer"."name" BETWEEN (SELECT MIN("customer"."name") FROM "customer") AND (SELECT MAX("customer"."name") FROM "customer"))'
},
params: []
});
@ -114,5 +130,9 @@ Harness.test({
text : '(EXISTS (SELECT * FROM [user] WHERE ([user].[name] = [customer].[name])))',
string: '(EXISTS (SELECT * FROM [user] WHERE ([user].[name] = [customer].[name])))'
},
oracle: {
text : '(EXISTS (SELECT * FROM "user" WHERE ("user"."name" = "customer"."name")))',
string: '(EXISTS (SELECT * FROM "user" WHERE ("user"."name" = "customer"."name")))'
},
params: []
});

3
test/dialects/support.js

@ -8,7 +8,8 @@ var dialects = {
pg : require('../../lib/dialect/postgres'),
sqlite : require('../../lib/dialect/sqlite'),
mysql : require('../../lib/dialect/mysql'),
mssql : require('../../lib/dialect/mssql')
mssql : require('../../lib/dialect/mssql'),
oracle : require('../../lib/dialect/oracle')
};
module.exports = {

110
test/dialects/table-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user]',
string: 'SELECT [user].[id] FROM [user]'
},
oracle: {
text : 'SELECT "user"."id" FROM "user"',
string: 'SELECT "user"."id" FROM "user"'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT [user].[id], [user].[name] FROM [user]',
string: 'SELECT [user].[id], [user].[name] FROM [user]'
},
oracle: {
text : 'SELECT "user"."id", "user"."name" FROM "user"',
string: 'SELECT "user"."id", "user"."name" FROM "user"'
},
params: []
});
@ -63,6 +71,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user]',
string: 'SELECT [user].* FROM [user]'
},
oracle: {
text : 'SELECT "user".* FROM "user"',
string: 'SELECT "user".* FROM "user"'
},
params: []
});
@ -80,6 +92,10 @@ Harness.test({
text: 'SELECT `user`.`id`, `user`.`name` FROM `user`',
string: 'SELECT `user`.`id`, `user`.`name` FROM `user`'
},
oracle: {
text: 'SELECT "user"."id", "user"."name" FROM "user"',
string: 'SELECT "user"."id", "user"."name" FROM "user"'
},
params: []
});
@ -97,6 +113,10 @@ Harness.test({
text: 'SELECT `user`.`id`, `user`.`name` FROM `user`',
string: 'SELECT `user`.`id`, `user`.`name` FROM `user`'
},
oracle: {
text: 'SELECT "user"."id", "user"."name" FROM "user"',
string: 'SELECT "user"."id", "user"."name" FROM "user"'
},
params: []
});
@ -114,6 +134,10 @@ Harness.test({
text: 'SELECT `user`.`id`, `user`.`name` FROM `user`',
string: 'SELECT `user`.`id`, `user`.`name` FROM `user`'
},
oracle: {
text: 'SELECT "user"."id", "user"."name" FROM "user"',
string: 'SELECT "user"."id", "user"."name" FROM "user"'
},
params: []
});
@ -131,6 +155,10 @@ Harness.test({
text: 'SELECT `user`.*, `user`.`id` AS `foo_id`, `user`.`name` AS `foo_name`, `user`.`id` AS `bar_id`, `user`.`name` AS `bar_name` FROM `user`',
string: 'SELECT `user`.*, `user`.`id` AS `foo_id`, `user`.`name` AS `foo_name`, `user`.`id` AS `bar_id`, `user`.`name` AS `bar_name` FROM `user`'
},
oracle: {
text: 'SELECT "user".*, "user"."id" "foo_id", "user"."name" "foo_name", "user"."id" "bar_id", "user"."name" "bar_name" FROM "user"',
string: 'SELECT "user".*, "user"."id" "foo_id", "user"."name" "foo_name", "user"."id" "bar_id", "user"."name" "bar_name" FROM "user"'
},
params: []
});
@ -152,6 +180,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT [user].[id] FROM [user] WHERE ([user].[name] = \'foo\')'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT "user"."id" FROM "user" WHERE ("user"."name" = \'foo\')'
},
params: ['foo']
});
@ -173,6 +205,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = @1) OR ([user].[name] = @2))',
string: 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = \'foo\') OR ([user].[name] = \'bar\'))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = :1) OR ("user"."name" = :2))',
string: 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = \'foo\') OR ("user"."name" = \'bar\'))'
},
params: ['foo', 'bar']
});
@ -194,6 +230,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = @1) AND ([user].[name] = @2))',
string: 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = \'foo\') AND ([user].[name] = \'bar\'))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = :1) AND ("user"."name" = :2))',
string: 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = \'foo\') AND ("user"."name" = \'bar\'))'
},
params: ['foo', 'bar']
});
@ -215,6 +255,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = @1) OR ([user].[name] = @2))',
string: 'SELECT [user].[id] FROM [user] WHERE (([user].[name] = \'foo\') OR ([user].[name] = \'bar\'))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = :1) OR ("user"."name" = :2))',
string: 'SELECT "user"."id" FROM "user" WHERE (("user"."name" = \'foo\') OR ("user"."name" = \'bar\'))'
},
params: ['foo', 'bar']
});
@ -236,6 +280,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ((([user].[name] = @1) OR ([user].[name] = @2)) AND ([user].[name] = @3))',
string: 'SELECT [user].[id] FROM [user] WHERE ((([user].[name] = \'foo\') OR ([user].[name] = \'baz\')) AND ([user].[name] = \'bar\'))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ((("user"."name" = :1) OR ("user"."name" = :2)) AND ("user"."name" = :3))',
string: 'SELECT "user"."id" FROM "user" WHERE ((("user"."name" = \'foo\') OR ("user"."name" = \'baz\')) AND ("user"."name" = \'bar\'))'
},
params: ['foo', 'baz', 'bar']
});
@ -257,6 +305,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ([user].[name] IN (@1, @2))',
string: 'SELECT [user].[id] FROM [user] WHERE ([user].[name] IN (\'foo\', \'bar\'))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ("user"."name" IN (:1, :2))',
string: 'SELECT "user"."id" FROM "user" WHERE ("user"."name" IN (\'foo\', \'bar\'))'
},
params: ['foo', 'bar']
});
@ -278,6 +330,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE (([user].[name] IN (@1, @2)) AND ([user].[id] = @3))',
string: 'SELECT [user].[id] FROM [user] WHERE (([user].[name] IN (\'foo\', \'bar\')) AND ([user].[id] = 1))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE (("user"."name" IN (:1, :2)) AND ("user"."id" = :3))',
string: 'SELECT "user"."id" FROM "user" WHERE (("user"."name" IN (\'foo\', \'bar\')) AND ("user"."id" = 1))'
},
params: ['foo', 'bar', 1]
});
@ -299,6 +355,10 @@ Harness.test({
text : 'SELECT [user].[id], [user].[name] FROM [user]',
string: 'SELECT [user].[id], [user].[name] FROM [user]'
},
oracle: {
text : 'SELECT "user"."id", "user"."name" FROM "user"',
string: 'SELECT "user"."id", "user"."name" FROM "user"'
},
params: []
});
@ -327,6 +387,10 @@ Harness.test({
text : 'SELECT [user].[id] FROM [user] WHERE ((([user].[name] = @1) AND ([user].[id] = @2)) OR (([user].[name] = @3) AND ([user].[id] = @4)))',
string: 'SELECT [user].[id] FROM [user] WHERE ((([user].[name] = \'boom\') AND ([user].[id] = 1)) OR (([user].[name] = \'bang\') AND ([user].[id] = 2)))'
},
oracle: {
text : 'SELECT "user"."id" FROM "user" WHERE ((("user"."name" = :1) AND ("user"."id" = :2)) OR (("user"."name" = :3) AND ("user"."id" = :4)))',
string: 'SELECT "user"."id" FROM "user" WHERE ((("user"."name" = \'boom\') AND ("user"."id" = 1)) OR (("user"."name" = \'bang\') AND ("user"."id" = 2)))'
},
params: ['boom', 1, 'bang', 2]
});
@ -348,6 +412,10 @@ Harness.test({
text : 'SELECT [user].[name] AS [user name], [user].[id] AS [user id] FROM [user]',
string: 'SELECT [user].[name] AS [user name], [user].[id] AS [user id] FROM [user]'
},
oracle: {
text : 'SELECT "user"."name" "user name", "user"."id" "user id" FROM "user"',
string: 'SELECT "user"."name" "user name", "user"."id" "user id" FROM "user"'
},
params: []
});
@ -365,10 +433,14 @@ Harness.test({
text : 'SELECT `user`.`name` AS `user name` FROM `user` WHERE (`user`.`name` = ?)',
string: 'SELECT `user`.`name` AS `user name` FROM `user` WHERE (`user`.`name` = \'brian\')'
},
sqlsever: {
mssql: {
text : 'SELECT [user].[name] AS [user name] FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT [user].[name] AS [user name] FROM [user] WHERE ([user].[name] = \'brian\')'
},
oracle: {
text : 'SELECT "user"."name" "user name" FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT "user"."name" "user name" FROM "user" WHERE ("user"."name" = \'brian\')'
},
params: ['brian']
});
@ -390,6 +462,10 @@ Harness.test({
text : 'SELECT [user].[name] FROM [user] WHERE ([user].[name] = @1)',
string: 'SELECT [user].[name] FROM [user] WHERE ([user].[name] = \'brian\')'
},
oracle: {
text : 'SELECT "user"."name" FROM "user" WHERE ("user"."name" = :1)',
string: 'SELECT "user"."name" FROM "user" WHERE ("user"."name" = \'brian\')'
},
params: ['brian']
});
@ -411,6 +487,10 @@ Harness.test({
text : 'SELECT name FROM user WHERE (name <> NULL)',
string: 'SELECT name FROM user WHERE (name <> NULL)'
},
oracle: {
text : 'SELECT name FROM user WHERE (name <> NULL)',
string: 'SELECT name FROM user WHERE (name <> NULL)'
},
params: []
});
@ -432,6 +512,10 @@ Harness.test({
text : 'SELECT name,id FROM user WHERE (name <> NULL)',
string: 'SELECT name,id FROM user WHERE (name <> NULL)'
},
oracle: {
text : 'SELECT name,id FROM user WHERE (name <> NULL)',
string: 'SELECT name,id FROM user WHERE (name <> NULL)'
},
params: []
});
@ -453,6 +537,10 @@ Harness.test({
text : 'SELECT name, id FROM user WHERE (name <> NULL)',
string: 'SELECT name, id FROM user WHERE (name <> NULL)'
},
oracle: {
text : 'SELECT name, id FROM user WHERE (name <> NULL)',
string: 'SELECT name, id FROM user WHERE (name <> NULL)'
},
params: []
});
@ -474,6 +562,10 @@ Harness.test({
text : 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))',
string: 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))'
},
oracle: {
text : 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))',
string: 'SELECT name, id FROM user WHERE ((name <> NULL) AND (id <> NULL))'
},
params: []
});
@ -497,6 +589,10 @@ Harness.test({
text : 'SELECT name FROM user WHERE ([user].[name] = @1)',
string: 'SELECT name FROM user WHERE ([user].[name] = \'brian\')'
},
oracle: {
text : 'SELECT name FROM user WHERE ("user"."name" = :1)',
string: 'SELECT name FROM user WHERE ("user"."name" = \'brian\')'
},
params: ['brian']
});
@ -521,6 +617,10 @@ Harness.test({
text : 'SELECT name FROM user WHERE (([user].[name] = @1) AND ([user].[id] = @2))',
string: 'SELECT name FROM user WHERE (([user].[name] = \'brian\') AND ([user].[id] = 1))'
},
oracle: {
text : 'SELECT name FROM user WHERE (("user"."name" = :1) AND ("user"."id" = :2))',
string: 'SELECT name FROM user WHERE (("user"."name" = \'brian\') AND ("user"."id" = 1))'
},
params: ['brian', 1]
});
@ -542,6 +642,10 @@ Harness.test({
text : 'SELECT [user].[name] AS [quote"quote"tick`tick`] FROM [user]',
string: 'SELECT [user].[name] AS [quote"quote"tick`tick`] FROM [user]'
},
oracle: {
text : 'SELECT "user"."name" "quote""quote""tick`tick`" FROM "user"',
string: 'SELECT "user"."name" "quote""quote""tick`tick`" FROM "user"'
},
params: []
});
@ -563,5 +667,9 @@ Harness.test({
text : 'SELECT [user].* FROM [user] WHERE ([user].[id] IN (SELECT [user].[id] FROM [user]))',
string: 'SELECT [user].* FROM [user] WHERE ([user].[id] IN (SELECT [user].[id] FROM [user]))'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE ("user"."id" IN (SELECT "user"."id" FROM "user"))',
string: 'SELECT "user".* FROM "user" WHERE ("user"."id" IN (SELECT "user"."id" FROM "user"))'
},
params: []
});

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

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT [customer].* FROM [customer] WHERE ([customer].[age] BETWEEN @1 AND @2)',
string: 'SELECT [customer].* FROM [customer] WHERE ([customer].[age] BETWEEN 18 AND 25)'
},
oracle: {
text : 'SELECT "customer".* FROM "customer" WHERE ("customer"."age" BETWEEN :1 AND :2)',
string: 'SELECT "customer".* FROM "customer" WHERE ("customer"."age" BETWEEN 18 AND 25)'
},
params: [18, 25]
});
@ -43,5 +47,9 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[userId] BETWEEN (SELECT MIN([customer].[id]) AS [id_min] FROM [customer]) AND (SELECT MAX([customer].[id]) AS [id_max] FROM [customer]))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[userId] BETWEEN (SELECT MIN([customer].[id]) AS [id_min] FROM [customer]) AND (SELECT MAX([customer].[id]) AS [id_max] FROM [customer]))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."userId" BETWEEN (SELECT MIN("customer"."id") "id_min" FROM "customer") AND (SELECT MAX("customer"."id") "id_max" FROM "customer"))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."userId" BETWEEN (SELECT MIN("customer"."id") "id_min" FROM "customer") AND (SELECT MAX("customer"."id") "id_max" FROM "customer"))'
},
params: []
});

24
test/dialects/tostring-tests.js

@ -23,6 +23,10 @@ Harness.test({
text : '([post].[content] = @1)',
string: '([post].[content] = NULL)'
},
oracle: {
text : '("post"."content" = :1)',
string: '("post"."content" = NULL)'
},
params: [null]
});
@ -45,6 +49,10 @@ Harness.test({
text : '([post].[content] = @1)',
string: '([post].[content] = 3.14)'
},
oracle: {
text : '("post"."content" = :1)',
string: '("post"."content" = 3.14)'
},
params: [3.14]
});
@ -67,6 +75,10 @@ Harness.test({
text : '([post].[content] = @1)',
string: '([post].[content] = \'hello\'\'\')'
},
oracle: {
text : '("post"."content" = :1)',
string: '("post"."content" = \'hello\'\'\')'
},
params: ['hello\'']
});
@ -89,6 +101,10 @@ Harness.test({
text : 'SQL Server does not support arrays.',
throws: true
},
oracle: {
text : 'SQL Server does not support arrays.',
throws: true
},
params: [1, '2', null]
});
@ -111,6 +127,10 @@ Harness.test({
text : '([post].[content] = @1)',
string: '([post].[content] = \'2000-01-01T00:00:00.000Z\')'
},
oracle: {
text : '("post"."content" = :1)',
string: '("post"."content" = \'2000-01-01T00:00:00.000Z\')'
},
params: [new Date('Sat, 01 Jan 2000 00:00:00 GMT')]
});
@ -139,6 +159,10 @@ Harness.test({
text : '([post].[content] = @1)',
string: '([post].[content] = \'secretMessage\')'
},
oracle: {
text : '("post"."content" = :1)',
string: '("post"."content" = \'secretMessage\')'
},
params: [customObject]
});

4
test/dialects/truncate-table-tests.js

@ -21,5 +21,9 @@ Harness.test({
text : 'TRUNCATE TABLE [post]',
string: 'TRUNCATE TABLE [post]'
},
oracle: {
text : 'TRUNCATE TABLE "post"',
string: 'TRUNCATE TABLE "post"'
},
params: []
});

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

@ -22,6 +22,10 @@ Harness.test({
text : 'SELECT [customer].* FROM [customer] WHERE ([customer].[age] IS NOT NULL)',
string: 'SELECT [customer].* FROM [customer] WHERE ([customer].[age] IS NOT NULL)'
},
oracle: {
text : 'SELECT "customer".* FROM "customer" WHERE ("customer"."age" IS NOT NULL)',
string: 'SELECT "customer".* FROM "customer" WHERE ("customer"."age" IS NOT NULL)'
},
params: []
});
@ -43,5 +47,9 @@ Harness.test({
text : 'SELECT [post].* FROM [post] WHERE ([post].[userId] IN (SELECT [customer].[id] FROM [customer] WHERE ([customer].[age] IS NULL)))',
string: 'SELECT [post].* FROM [post] WHERE ([post].[userId] IN (SELECT [customer].[id] FROM [customer] WHERE ([customer].[age] IS NULL)))'
},
oracle: {
text : 'SELECT "post".* FROM "post" WHERE ("post"."userId" IN (SELECT "customer"."id" FROM "customer" WHERE ("customer"."age" IS NULL)))',
string: 'SELECT "post".* FROM "post" WHERE ("post"."userId" IN (SELECT "customer"."id" FROM "customer" WHERE ("customer"."age" IS NULL)))'
},
params: []
});

28
test/dialects/update-tests.js

@ -24,6 +24,10 @@ Harness.test({
text : 'UPDATE [post] SET [content] = @1',
string: 'UPDATE [post] SET [content] = \'test\''
},
oracle: {
text : 'UPDATE "post" SET "content" = :1',
string: 'UPDATE "post" SET "content" = \'test\''
},
params: ['test']
});
@ -48,6 +52,10 @@ Harness.test({
text : 'UPDATE [post] SET [content] = @1, [userId] = @2',
string: 'UPDATE [post] SET [content] = \'test\', [userId] = 3'
},
oracle: {
text : 'UPDATE "post" SET "content" = :1, "userId" = :2',
string: 'UPDATE "post" SET "content" = \'test\', "userId" = 3'
},
params: ['test', 3]
});
@ -72,6 +80,10 @@ Harness.test({
text : 'UPDATE [post] SET [content] = @1, [userId] = @2',
string: 'UPDATE [post] SET [content] = NULL, [userId] = 3'
},
oracle: {
text : 'UPDATE "post" SET "content" = :1, "userId" = :2',
string: 'UPDATE "post" SET "content" = NULL, "userId" = 3'
},
params: [null, 3]
});
@ -96,6 +108,10 @@ Harness.test({
text : 'UPDATE [post] SET [content] = @1, [userId] = @2 WHERE ([post].[content] = @3)',
string: 'UPDATE [post] SET [content] = \'test\', [userId] = 3 WHERE ([post].[content] = \'no\')'
},
oracle: {
text : 'UPDATE "post" SET "content" = :1, "userId" = :2 WHERE ("post"."content" = :3)',
string: 'UPDATE "post" SET "content" = \'test\', "userId" = 3 WHERE ("post"."content" = \'no\')'
},
params: ['test', 3, 'no']
});
@ -119,6 +135,10 @@ Harness.test({
text : 'UPDATE [post] SET [content] = [user].[name] FROM [user] WHERE ([post].[userId] = [user].[id])',
string: 'UPDATE [post] SET [content] = [user].[name] FROM [user] WHERE ([post].[userId] = [user].[id])'
},
oracle: {
text : 'UPDATE "post" SET "content" = "user"."name" FROM "user" WHERE ("post"."userId" = "user"."id")',
string: 'UPDATE "post" SET "content" = "user"."name" FROM "user" WHERE ("post"."userId" = "user"."id")'
},
params: []
});
@ -143,6 +163,10 @@ Harness.test({
text : 'UPDATE [post] SET [userId] = [user].[id] FROM [user] WHERE ([post].[userId] = [user].[id])',
string: 'UPDATE [post] SET [userId] = [user].[id] FROM [user] WHERE ([post].[userId] = [user].[id])'
},
oracle: {
text : 'UPDATE "post" SET "userId" = "user"."id" FROM "user" WHERE ("post"."userId" = "user"."id")',
string: 'UPDATE "post" SET "userId" = "user"."id" FROM "user" WHERE ("post"."userId" = "user"."id")'
},
params: []
});
@ -163,5 +187,9 @@ Harness.test({
text : 'UPDATE `post` SET `content` = ?',
string: 'UPDATE `post` SET `content` = x\'74657374\''
},
oracle: {
text : 'UPDATE "post" SET "content" = :1',
string: 'UPDATE "post" SET "content" = utl_raw.cast_to_varchar2(hextoraw(\'74657374\'))'
},
params: [new Buffer('test')]
});

20
test/dialects/value-expression-tests.js

@ -24,6 +24,10 @@ Harness.test({
text : 'SELECT [customer].[name], ([customer].[income] % @1) FROM [customer] WHERE ((([customer].[age] + @2) * ([customer].[age] - @3)) = @4)',
string: 'SELECT [customer].[name], ([customer].[income] % 100) FROM [customer] WHERE ((([customer].[age] + 5) * ([customer].[age] - 2)) = 10)'
},
oracle: {
text : 'SELECT "customer"."name", ("customer"."income" % :1) FROM "customer" WHERE ((("customer"."age" + :2) * ("customer"."age" - :3)) = :4)',
string: 'SELECT "customer"."name", ("customer"."income" % 100) FROM "customer" WHERE ((("customer"."age" + 5) * ("customer"."age" - 2)) = 10)'
},
params: [100, 5, 2, 10]
});
@ -46,6 +50,10 @@ Harness.test({
text : 'SELECT [customer].[name] FROM [customer] WHERE ([customer].[name] LIKE ([customer].[id] + @1))',
string: 'SELECT [customer].[name] FROM [customer] WHERE ([customer].[name] LIKE ([customer].[id] + \'hello\'))'
},
oracle: {
text : 'SELECT "customer"."name" FROM "customer" WHERE ("customer"."name" LIKE ("customer"."id" + :1))',
string: 'SELECT "customer"."name" FROM "customer" WHERE ("customer"."name" LIKE ("customer"."id" + \'hello\'))'
},
params: ['hello']
});
@ -69,6 +77,10 @@ Harness.test({
text : 'SELECT (((([variable].[a] * [variable].[a]) / @1) + ([variable].[v] * [variable].[t])) = [variable].[d]) FROM [variable]',
string: 'SELECT (((([variable].[a] * [variable].[a]) / 2) + ([variable].[v] * [variable].[t])) = [variable].[d]) FROM [variable]'
},
oracle: {
text : 'SELECT (((("variable"."a" * "variable"."a") / :1) + ("variable"."v" * "variable"."t")) = "variable"."d") FROM "variable"',
string: 'SELECT (((("variable"."a" * "variable"."a") / 2) + ("variable"."v" * "variable"."t")) = "variable"."d") FROM "variable"'
},
params: [2]
});
@ -91,6 +103,10 @@ Harness.test({
text : 'SELECT ((([variable].[a] * [variable].[a]) + ([variable].[b] * [variable].[b])) = ([variable].[c] * [variable].[c])) FROM [variable]',
string: 'SELECT ((([variable].[a] * [variable].[a]) + ([variable].[b] * [variable].[b])) = ([variable].[c] * [variable].[c])) FROM [variable]'
},
oracle: {
text : 'SELECT ((("variable"."a" * "variable"."a") + ("variable"."b" * "variable"."b")) = ("variable"."c" * "variable"."c")) FROM "variable"',
string: 'SELECT ((("variable"."a" * "variable"."a") + ("variable"."b" * "variable"."b")) = ("variable"."c" * "variable"."c")) FROM "variable"'
},
params: []
});
@ -108,6 +124,10 @@ Harness.test({
text : 'SELECT `post`.`id` FROM `post` WHERE (`post`.`content` = ?)',
string: 'SELECT `post`.`id` FROM `post` WHERE (`post`.`content` = x\'74657374\')',
},
oracle: {
text : 'SELECT "post"."id" FROM "post" WHERE ("post"."content" = :1)',
string: 'SELECT "post"."id" FROM "post" WHERE ("post"."content" = utl_raw.cast_to_varchar2(hextoraw(\'74657374\')))',
},
params: [new Buffer('test')]
});

32
test/dialects/where-clause-tests.js

@ -21,6 +21,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))',
string: 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))'
},
oracle: {
text : 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))',
string: 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))'
},
params: []
});
@ -42,6 +46,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))',
string: 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))'
},
oracle: {
text : 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))',
string: 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))'
},
params: []
});
@ -63,6 +71,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))',
string: 'SELECT * FROM [user] WHERE (([user].[id] IS NOT NULL) AND ([user].[name] IS NOT NULL))'
},
oracle: {
text : 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))',
string: 'SELECT * FROM "user" WHERE (("user"."id" IS NOT NULL) AND ("user"."name" IS NOT NULL))'
},
params: []
});
@ -84,6 +96,10 @@ Harness.test({
text : 'SELECT * FROM [user] WHERE (1 = 1)',
string: 'SELECT * FROM [user] WHERE (1 = 1)'
},
oracle: {
text : 'SELECT * FROM "user" WHERE (1 = 1)',
string: 'SELECT * FROM "user" WHERE (1 = 1)'
},
params: []
});
@ -105,6 +121,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user] WHERE (([user].[id] = @1) AND ([user].[name] = @2))',
string: 'SELECT [user].* FROM [user] WHERE (([user].[id] = 1) AND ([user].[name] = \'a\'))'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE (("user"."id" = :1) AND ("user"."name" = :2))',
string: 'SELECT "user".* FROM "user" WHERE (("user"."id" = 1) AND ("user"."name" = \'a\'))'
},
params: [1,'a']
});
@ -126,6 +146,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user] WHERE ([user].[id] = @1)',
string: 'SELECT [user].* FROM [user] WHERE ([user].[id] = 1)'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE ("user"."id" = :1)',
string: 'SELECT "user".* FROM "user" WHERE ("user"."id" = 1)'
},
params: [1]
});
@ -147,6 +171,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user] WHERE ([user].[id] = @1)',
string: 'SELECT [user].* FROM [user] WHERE ([user].[id] = 1)'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE ("user"."id" = :1)',
string: 'SELECT "user".* FROM "user" WHERE ("user"."id" = 1)'
},
params: [1]
});
@ -168,6 +196,10 @@ Harness.test({
text : 'SELECT [user].* FROM [user] WHERE (([user].[id] = @1) OR ([user].[name] = @2))',
string: 'SELECT [user].* FROM [user] WHERE (([user].[id] = 1) OR ([user].[name] = \'a\'))'
},
oracle: {
text : 'SELECT "user".* FROM "user" WHERE (("user"."id" = :1) OR ("user"."name" = :2))',
string: 'SELECT "user".* FROM "user" WHERE (("user"."id" = 1) OR ("user"."name" = \'a\'))'
},
params: [1,'a']
});

28
test/index-tests.js

@ -30,6 +30,11 @@ suite('index', function() {
test('stores the mssql dialect', function() {
assert.equal(sql.create('mssql').dialectName, 'mssql');
});
test('stores the oracle dialect', function() {
assert.equal(sql.create('oracle').dialectName, 'oracle');
});
test('can create a query using the default dialect', function() {
var query = sql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery();
@ -56,16 +61,19 @@ suite('index', function() {
var mysql = sql.create('mysql');
var postgres = sql.create('postgres');
var sqlite = sql.create('sqlite');
var oracle = sql.create('oracle');
var mssqlTable = mssql.define({name: 'table', columns: ['column']});
var mysqlTable = mysql.define({name: 'table', columns: ['column']});
var postgresTable = postgres.define({name: 'table', columns: ['column']});
var sqliteTable = sqlite.define({name: 'table', columns: ['column']});
var oracleTable = oracle.define({name: 'table', columns: ['column']});
assert.equal(mysqlTable.sql, mysql);
assert.equal(postgresTable.sql, postgres);
assert.equal(sqliteTable.sql, sqlite);
assert.equal(mssqlTable.sql, mssql);
assert.equal(oracleTable.sql, oracle);
});
test('using Sql as a class', function() {
@ -74,11 +82,13 @@ suite('index', function() {
var mysql = new Sql('mysql');
var postgres = new Sql('postgres');
var sqlite = new Sql('sqlite');
var oracle = new Sql('oracle');
assert.equal(mysql.dialect, require(__dirname + '/../lib/dialect/mysql'));
assert.equal(postgres.dialect, require(__dirname + '/../lib/dialect/postgres'));
assert.equal(sqlite.dialect, require(__dirname + '/../lib/dialect/sqlite'));
assert.equal(mssql.dialect, require(__dirname + '/../lib/dialect/mssql'));
assert.equal(oracle.dialect, require(__dirname + '/../lib/dialect/oracle'));
});
test('override dialect for toQuery using dialect name', function() {
@ -87,11 +97,13 @@ suite('index', function() {
var mysql = new Sql('mysql');
var postgres = new Sql('postgres');
var sqlite = new Sql('sqlite');
var oracle = new Sql('oracle');
var sqliteQuery = mysql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery('sqlite');
var postgresQuery = sqlite.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery('postgres');
var mysqlQuery = postgres.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery('mysql');
var mssqlQuery = mysql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery('mssql');
var oracleQuery = oracle.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toQuery('oracle');
var values = ['brian.m.carlson@gmail.com'];
assert.equal(sqliteQuery.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = $1)');
@ -105,6 +117,9 @@ suite('index', function() {
assert.equal(mssqlQuery.text, 'SELECT [user].[id] FROM [user] WHERE ([user].[email] = @1)');
assert.deepEqual(mssqlQuery.values, values);
assert.equal(oracleQuery.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = :1)');
assert.deepEqual(oracleQuery.values, values);
});
test('override dialect for toQuery using invalid dialect name', function() {
@ -140,10 +155,15 @@ suite('index', function() {
var mysql = new Sql('mysql');
var postgres = new Sql('postgres');
var sqlite = new Sql('sqlite');
var mssql = new Sql('mssql');
var oracle = new Sql('oracle');
var sqliteQuery = mysql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toNamedQuery('user.select_brian','sqlite');
var postgresQuery = sqlite.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toNamedQuery('user.select_brian','postgres');
var mysqlQuery = postgres.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toNamedQuery('user.select_brian','mysql');
var oracleQuery = mssql.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toNamedQuery('user.select_brian','oracle');
var mssqlQuery = oracle.select(user.id).from(user).where(user.email.equals('brian.m.carlson@gmail.com')).toNamedQuery('user.select_brian','mssql');
var values = ['brian.m.carlson@gmail.com'];
assert.equal(sqliteQuery.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = $1)');
@ -157,6 +177,14 @@ suite('index', function() {
assert.equal(mysqlQuery.text, 'SELECT `user`.`id` FROM `user` WHERE (`user`.`email` = ?)');
assert.deepEqual(mysqlQuery.values, values);
assert.equal('user.select_brian', mysqlQuery.name);
assert.equal(mssqlQuery.text, 'SELECT [user].[id] FROM [user] WHERE ([user].[email] = @1)');
assert.deepEqual(mssqlQuery.values, values);
assert.equal('user.select_brian', mssqlQuery.name);
assert.equal(oracleQuery.text, 'SELECT "user"."id" FROM "user" WHERE ("user"."email" = :1)');
assert.deepEqual(oracleQuery.values, values);
assert.equal('user.select_brian', oracleQuery.name);
});

Loading…
Cancel
Save