From b53fd00965eaf48e36a3502c357f85d58789ce61 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Wed, 2 Jun 2021 19:15:53 +0530 Subject: [PATCH 1/3] add isNull filter for all datatypes --- src/lib/Filters.js | 17 ++++++++++++----- src/lib/queryFromFilters.js | 3 +++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/lib/Filters.js b/src/lib/Filters.js index f95a705a93..13d293034e 100644 --- a/src/lib/Filters.js +++ b/src/lib/Filters.js @@ -163,14 +163,19 @@ export const Constraints = { field: null, comparable: false }, + isNull: { + name: 'isNull', + field: null, + comparable: false + } }; export const FieldConstraints = { - 'Pointer': [ 'exists', 'dne', 'eq', 'neq', 'unique' ], - 'Boolean': [ 'exists', 'dne', 'eq', 'unique' ], - 'Number': [ 'exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique' ], - 'String': [ 'exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique' ], - 'Date': [ 'exists', 'dne', 'before', 'after', 'unique' ], + 'Pointer': [ 'exists', 'dne', 'eq', 'neq', 'unique', 'isNull' ], + 'Boolean': [ 'exists', 'dne', 'eq', 'unique', 'isNull' ], + 'Number': [ 'exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique', 'isNull' ], + 'String': [ 'exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique', 'isNull' ], + 'Date': [ 'exists', 'dne', 'before', 'after', 'unique', 'isNull' ], 'Object': [ 'exists', 'dne', @@ -183,6 +188,7 @@ export const FieldConstraints = { 'keyLt', 'keyLte', 'unique', + 'isNull' ], 'Array': [ 'exists', @@ -193,6 +199,7 @@ export const FieldConstraints = { 'doesNotContainNumber', 'containsAny', 'doesNotContainAny', + 'isNull' ] }; diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index bd74075c65..2078ded68f 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -104,6 +104,9 @@ function addConstraint(query, filter) { case 'keyLte': addQueryConstraintFromObject(query, filter, 'lessThanOrEqualTo'); break; + case 'isNull': + query.equalTo(filter.get('field'), null); + break; } return query; } From 38d2f16da23ebbfa6ce3d13e554c2f31896e2310 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Thu, 3 Jun 2021 11:27:40 +0530 Subject: [PATCH 2/3] filtering null values only --- src/lib/queryFromFilters.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index 2078ded68f..c2c12bd638 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -16,7 +16,7 @@ export default function queryFromFilters(className, filters) { query = className.query(); } filters.forEach((filter) => { - addConstraint(query, filter); + query = addConstraint(query, filter, className); }); return query; } @@ -28,7 +28,7 @@ function addQueryConstraintFromObject(query, filter, constraintType) { } } -function addConstraint(query, filter) { +function addConstraint(query, filter, className) { switch (filter.get('constraint')) { case 'exists': query.exists(filter.get('field')); @@ -105,7 +105,10 @@ function addConstraint(query, filter) { addQueryConstraintFromObject(query, filter, 'lessThanOrEqualTo'); break; case 'isNull': - query.equalTo(filter.get('field'), null); + query.exists(filter.get('field')); + let nullQuery = new Parse.Query(className); + nullQuery.equalTo(filter.get('field'), null); + query = Parse.Query.and(query, nullQuery); break; } return query; From 761cdc47547316f20d5f84dc081862d8d9a22de1 Mon Sep 17 00:00:00 2001 From: sadakchap Date: Fri, 4 Jun 2021 08:09:38 +0530 Subject: [PATCH 3/3] changed filter name & query --- src/lib/Filters.js | 18 +++++++++--------- src/lib/queryFromFilters.js | 11 ++++------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/lib/Filters.js b/src/lib/Filters.js index 13d293034e..a29fedc42e 100644 --- a/src/lib/Filters.js +++ b/src/lib/Filters.js @@ -163,19 +163,19 @@ export const Constraints = { field: null, comparable: false }, - isNull: { - name: 'isNull', + dneOrNull: { + name: 'does not exists or null', field: null, comparable: false } }; export const FieldConstraints = { - 'Pointer': [ 'exists', 'dne', 'eq', 'neq', 'unique', 'isNull' ], - 'Boolean': [ 'exists', 'dne', 'eq', 'unique', 'isNull' ], - 'Number': [ 'exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique', 'isNull' ], - 'String': [ 'exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique', 'isNull' ], - 'Date': [ 'exists', 'dne', 'before', 'after', 'unique', 'isNull' ], + 'Pointer': [ 'exists', 'dne', 'eq', 'neq', 'unique', 'dneOrNull' ], + 'Boolean': [ 'exists', 'dne', 'eq', 'unique', 'dneOrNull' ], + 'Number': [ 'exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique', 'dneOrNull' ], + 'String': [ 'exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique', 'dneOrNull' ], + 'Date': [ 'exists', 'dne', 'before', 'after', 'unique', 'dneOrNull' ], 'Object': [ 'exists', 'dne', @@ -188,7 +188,7 @@ export const FieldConstraints = { 'keyLt', 'keyLte', 'unique', - 'isNull' + 'dneOrNull' ], 'Array': [ 'exists', @@ -199,7 +199,7 @@ export const FieldConstraints = { 'doesNotContainNumber', 'containsAny', 'doesNotContainAny', - 'isNull' + 'dneOrNull' ] }; diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index c2c12bd638..ecdec4678d 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -16,7 +16,7 @@ export default function queryFromFilters(className, filters) { query = className.query(); } filters.forEach((filter) => { - query = addConstraint(query, filter, className); + addConstraint(query, filter); }); return query; } @@ -28,7 +28,7 @@ function addQueryConstraintFromObject(query, filter, constraintType) { } } -function addConstraint(query, filter, className) { +function addConstraint(query, filter) { switch (filter.get('constraint')) { case 'exists': query.exists(filter.get('field')); @@ -104,11 +104,8 @@ function addConstraint(query, filter, className) { case 'keyLte': addQueryConstraintFromObject(query, filter, 'lessThanOrEqualTo'); break; - case 'isNull': - query.exists(filter.get('field')); - let nullQuery = new Parse.Query(className); - nullQuery.equalTo(filter.get('field'), null); - query = Parse.Query.and(query, nullQuery); + case 'dneOrNull': + query.equalTo(filter.get('field'), null); break; } return query;