From b7d9a5d927f450219862e3bc42c862215ea791c7 Mon Sep 17 00:00:00 2001 From: Will Heslam Date: Sun, 31 Oct 2021 18:54:37 +0000 Subject: [PATCH] Fix overzealous warning on use of whereNot with "in" or "between" (#4780) --- lib/query/querybuilder.js | 2 +- test/unit/query/builder.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/query/querybuilder.js b/lib/query/querybuilder.js index 8529eb79fa..50c76c1a82 100644 --- a/lib/query/querybuilder.js +++ b/lib/query/querybuilder.js @@ -429,7 +429,7 @@ class Builder extends EventEmitter { // Adds an `not where` clause to the query. whereNot(column, ...args) { - if (args.length >= 1) { + if (args.length >= 2) { if (args[0] === 'in' || args[0] === 'between') { this.client.logger.warn( 'whereNot is not suitable for "in" and "between" type subqueries. You should use "not in" and "not between" instead.' diff --git a/test/unit/query/builder.js b/test/unit/query/builder.js index 832f18f6a2..9c32f063df 100644 --- a/test/unit/query/builder.js +++ b/test/unit/query/builder.js @@ -1084,6 +1084,36 @@ describe('QueryBuilder', () => { } }); + it('where not should not throw warning when used with "in" or "between" as equality', function () { + testquery( + clientsWithCustomLoggerForTestWarnings.pg + .queryBuilder() + .select('*') + .from('users') + .whereNot('id', 'in'), + { + mysql: "select * from `users` where not `id` = 'in'", + pg: 'select * from "users" where not "id" = \'in\'', + 'pg-redshift': 'select * from "users" where not "id" = \'in\'', + mssql: "select * from [users] where not [id] = 'in'", + } + ); + + testquery( + clientsWithCustomLoggerForTestWarnings.pg + .queryBuilder() + .select('*') + .from('users') + .whereNot('id', 'between'), + { + mysql: "select * from `users` where not `id` = 'between'", + pg: 'select * from "users" where not "id" = \'between\'', + 'pg-redshift': 'select * from "users" where not "id" = \'between\'', + mssql: "select * from [users] where not [id] = 'between'", + } + ); + }); + it('where bool', () => { testquery(qb().select('*').from('users').where(true), { mysql: 'select * from `users` where 1 = 1',