PG: Fixes issues comparing to zero or false (#4667)
* initial test * more test * clean up * added correct errors * test fix * $eq null test * type check
This commit is contained in:
@@ -287,7 +287,14 @@ const buildWhereClause = ({ schema, query, index }) => {
|
||||
index += 2;
|
||||
} else if (typeof fieldValue === 'boolean') {
|
||||
patterns.push(`$${index}:name = $${index + 1}`);
|
||||
values.push(fieldName, fieldValue);
|
||||
// Can't cast boolean to double precision
|
||||
if (schema.fields[fieldName] && schema.fields[fieldName].type === 'Number') {
|
||||
// Should always return zero results
|
||||
const MAX_INT_PLUS_ONE = 9223372036854775808;
|
||||
values.push(fieldName, MAX_INT_PLUS_ONE);
|
||||
} else {
|
||||
values.push(fieldName, fieldValue);
|
||||
}
|
||||
index += 2;
|
||||
} else if (typeof fieldValue === 'number') {
|
||||
patterns.push(`$${index}:name = $${index + 1}`);
|
||||
@@ -329,11 +336,16 @@ const buildWhereClause = ({ schema, query, index }) => {
|
||||
values.push(fieldName, fieldValue.$ne);
|
||||
index += 2;
|
||||
}
|
||||
|
||||
if (fieldValue.$eq) {
|
||||
patterns.push(`$${index}:name = $${index + 1}`);
|
||||
values.push(fieldName, fieldValue.$eq);
|
||||
index += 2;
|
||||
if (fieldValue.$eq !== undefined) {
|
||||
if (fieldValue.$eq === null) {
|
||||
patterns.push(`$${index}:name IS NULL`);
|
||||
values.push(fieldName);
|
||||
index += 1;
|
||||
} else {
|
||||
patterns.push(`$${index}:name = $${index + 1}`);
|
||||
values.push(fieldName, fieldValue.$eq);
|
||||
index += 2;
|
||||
}
|
||||
}
|
||||
const isInOrNin = Array.isArray(fieldValue.$in) || Array.isArray(fieldValue.$nin);
|
||||
if (Array.isArray(fieldValue.$in) &&
|
||||
@@ -393,6 +405,10 @@ const buildWhereClause = ({ schema, query, index }) => {
|
||||
if (fieldValue.$nin) {
|
||||
createConstraint(_.flatMap(fieldValue.$nin, elt => elt), true);
|
||||
}
|
||||
} else if(typeof fieldValue.$in !== 'undefined') {
|
||||
throw new Parse.Error(Parse.Error.INVALID_JSON, 'bad $in value');
|
||||
} else if (typeof fieldValue.$nin !== 'undefined') {
|
||||
throw new Parse.Error(Parse.Error.INVALID_JSON, 'bad $nin value');
|
||||
}
|
||||
|
||||
if (Array.isArray(fieldValue.$all) && isArrayField) {
|
||||
@@ -578,7 +594,7 @@ const buildWhereClause = ({ schema, query, index }) => {
|
||||
}
|
||||
|
||||
Object.keys(ParseToPosgresComparator).forEach(cmp => {
|
||||
if (fieldValue[cmp]) {
|
||||
if (fieldValue[cmp] || fieldValue[cmp] === 0) {
|
||||
const pgComparator = ParseToPosgresComparator[cmp];
|
||||
patterns.push(`$${index}:name ${pgComparator} $${index + 1}`);
|
||||
values.push(fieldName, toPostgresValue(fieldValue[cmp]));
|
||||
|
||||
Reference in New Issue
Block a user