diff --git a/Changelog.md b/Changelog.md index feeb3e1e..a76b86cc 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,6 @@ +### v6.2.0 +- [Feature] Add `.driver.generateQuery` function - same as `.driver.execQuery` but returns the SQL instead of executing it + ### v6.1.0 - [Feature] Accept options when calling `Model.create` ([856](../../pull/856)) diff --git a/lib/Drivers/DML/_shared.js b/lib/Drivers/DML/_shared.js index e12a0055..f353b76b 100644 --- a/lib/Drivers/DML/_shared.js +++ b/lib/Drivers/DML/_shared.js @@ -1,12 +1,19 @@ var Promise = require('bluebird'); +var generateQuery = function (sql, params) { + return this.query.escape(sql, params); +}; + var execQuery = function () { + var cb; + var query; + if (arguments.length == 2) { - var query = arguments[0]; - var cb = arguments[1]; + query = arguments[0]; + cb = arguments[1]; } else if (arguments.length == 3) { - var query = this.query.escape(arguments[0], arguments[1]); - var cb = arguments[2]; + query = this.generateQuery(arguments[0], arguments[1]); + cb = arguments[2]; } return this.execSimpleQuery(query, cb); }; @@ -30,6 +37,8 @@ var eagerQuery = function (association, opts, keys, cb) { }; module.exports = { + generateQuery: generateQuery, + execQuery: execQuery, eagerQuery: eagerQuery, diff --git a/package-lock.json b/package-lock.json index 0833ef49..c0d97e97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "orm", - "version": "6.1.0", + "version": "6.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 68c18e20..91769df8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "sqlite", "mongodb" ], - "version": "6.1.0", + "version": "6.2.0", "license": "MIT", "homepage": "http://dresende.github.io/node-orm2", "repository": "http://github.com/dresende/node-orm2.git", diff --git a/test/integration/db.js b/test/integration/db.js index 016824b1..b6664077 100644 --- a/test/integration/db.js +++ b/test/integration/db.js @@ -142,6 +142,27 @@ describe("db.driver", function () { }); }); + describe("#generateQuery", function () { + it("should return interpolated & escaped SQL", function () { + var expected = "expectation missing; unknown protocol"; + + switch (common.protocol()) { + case 'mysql': + case 'sqlite': + expected = "UPDATE `animals` SET `name` = 'cat' WHERE `id` = 9" + break; + case 'postgres': + expected = 'UPDATE "animals" SET "name" = \'cat\' WHERE "id" = 9' + break; + } + + should.equal( + db.driver.generateQuery("UPDATE ?? SET ?? = ? WHERE ?? = ?", ['animals', 'name', 'cat', 'id', 9]), + expected, + ); + }); + }); + describe("#execQuery", function () { it("should execute sql queries", function (done) { db.driver.execQuery("SELECT id FROM log", function (err, data) {