From 1566437160b6ba2b05da878ec8858733474f78b7 Mon Sep 17 00:00:00 2001 From: nicosommi Date: Thu, 15 Oct 2015 19:30:01 -0300 Subject: [PATCH] andWhere and equals as default --- es5/lib/query.js | 10 +++++++- es5/spec/database/query/equalTo.spec.js | 33 ++++++++++++++++++++++++- es6/lib/query.js | 10 +++++++- es6/spec/database/query/equalTo.spec.js | 31 ++++++++++++++++++++++- 4 files changed, 80 insertions(+), 4 deletions(-) diff --git a/es5/lib/query.js b/es5/lib/query.js index bd9a615..ebfc47d 100644 --- a/es5/lib/query.js +++ b/es5/lib/query.js @@ -271,7 +271,11 @@ var Query = (function () { var theirLink = theirChain[theirIndex]; var theirArguments = theirLink.options; - if (ourLink.name === theirLink.name) { + //so andWhere and where are treated both as the same + var theirLinkName = theirLink.name.replace("andWhere", "where"); + var ourLinkName = ourLink.name.replace("andWhere", "where"); + + if (ourLinkName === theirLinkName) { if (this[argumentsEqual](ourArguments, theirArguments)) { hasMatchingLink = true; break; @@ -293,6 +297,10 @@ var Query = (function () { }, { key: addChain, value: function value(chainName, options) { + var chainNameId = chainName.replace("andWhere", "where"); //treat where equals to andWhere + if (chainNameId === "where" && options.length === 2) { + options = [options[0], "=", options[1]]; + } (0, _incognito2["default"])(this).chain.push({ name: chainName, options: options diff --git a/es5/spec/database/query/equalTo.spec.js b/es5/spec/database/query/equalTo.spec.js index 936a0fa..95c7786 100644 --- a/es5/spec/database/query/equalTo.spec.js +++ b/es5/spec/database/query/equalTo.spec.js @@ -10,10 +10,12 @@ var databaseConfig = require("../../../../database.json").testing; describe(".equalTo(query)", function () { - var database = undefined; + var database = undefined, + mockUsers = undefined; beforeEach(function () { database = new _libDatabaseJs2["default"](databaseConfig); + mockUsers = [{ id: 1, name: "Bob" }]; }); it("should compare simple queries that are equal and return true", function () { @@ -71,6 +73,7 @@ describe(".equalTo(query)", function () { queryA.equalTo(queryB).should.be["true"]; }); + it("should compare simple queries with regex object parameters that do not match and return false", function () { var data = { name: "Bob", @@ -86,6 +89,34 @@ describe(".equalTo(query)", function () { queryA.equalTo(queryB).should.be["false"]; }); + describe("(where)", function () { + it("should treat where equals to andWhere", function (done) { + var name = "aName"; + + database.mock.select(/.*/).from(/u.*rs/).where("created_at", ">", /.*/).where("name", name).results(mockUsers); + + database.select("id").from("users").where("created_at", ">", "2015-10-02 21:39:14").andWhere("name", name).results(function (error, rows) { + if (error) { + throw error; + } + rows.should.eql(mockUsers); + done(); + }); + }); + + it("should use equals as the default operator", function (done) { + database.mock.select(/.*/).from(/u.*rs/).where("id", 1).results(mockUsers); + + database.select("id").from("users").where("id", "=", 1).results(function (error, rows) { + if (error) { + throw error; + } + rows.should.eql(mockUsers); + done(); + }); + }); + }); + it("should compare complex queries that are equal and return true"); it("should compare complex queries that are not equal and return false"); }); \ No newline at end of file diff --git a/es6/lib/query.js b/es6/lib/query.js index 28b6fe7..f70529c 100644 --- a/es6/lib/query.js +++ b/es6/lib/query.js @@ -181,7 +181,11 @@ export default class Query { const theirLink = theirChain[theirIndex]; const theirArguments = theirLink.options; - if (ourLink.name === theirLink.name) { + //so andWhere and where are treated both as the same + const theirLinkName = theirLink.name.replace("andWhere", "where"); + const ourLinkName = ourLink.name.replace("andWhere", "where"); + + if (ourLinkName === theirLinkName) { if (this[argumentsEqual](ourArguments, theirArguments)) { hasMatchingLink = true; break; @@ -206,6 +210,10 @@ export default class Query { } [addChain](chainName, options) { + const chainNameId = chainName.replace("andWhere", "where"); //treat where equals to andWhere + if (chainNameId === "where" && options.length === 2) { + options = [options[0], "=", options[1]]; + } privateData(this).chain.push({ name: chainName, options: options diff --git a/es6/spec/database/query/equalTo.spec.js b/es6/spec/database/query/equalTo.spec.js index ed7f7dd..fa7da28 100644 --- a/es6/spec/database/query/equalTo.spec.js +++ b/es6/spec/database/query/equalTo.spec.js @@ -4,10 +4,14 @@ const databaseConfig = require("../../../../database.json").testing; describe(".equalTo(query)", () => { - let database; + let database, + mockUsers; beforeEach(() => { database = new Database(databaseConfig); + mockUsers = [ + {id: 1, name: "Bob"} + ]; }); it("should compare simple queries that are equal and return true", () => { @@ -65,6 +69,7 @@ describe(".equalTo(query)", () => { queryA.equalTo(queryB).should.be.true; }); + it("should compare simple queries with regex object parameters that do not match and return false", () => { const data = { name: "Bob", @@ -80,6 +85,30 @@ describe(".equalTo(query)", () => { queryA.equalTo(queryB).should.be.false; }); + describe("(where)", () => { + it("should treat where equals to andWhere", done => { + const name = "aName"; + + database.mock.select(/.*/).from(/u.*rs/).where("created_at", ">", /.*/).where("name", name).results(mockUsers); + + database.select("id").from("users").where("created_at", ">", "2015-10-02 21:39:14").andWhere("name", name).results((error, rows) => { + if (error) { throw error; } + rows.should.eql(mockUsers); + done(); + }); + }); + + it("should use equals as the default operator", done => { + database.mock.select(/.*/).from(/u.*rs/).where("id", 1).results(mockUsers); + + database.select("id").from("users").where("id", "=", 1).results((error, rows) => { + if (error) { throw error; } + rows.should.eql(mockUsers); + done(); + }); + }); + }); + it("should compare complex queries that are equal and return true"); it("should compare complex queries that are not equal and return false"); });