Skip to content

Commit 7e36fb1

Browse files
Eduard Bosch BertranEduard Bosch Bertran
Eduard Bosch Bertran
authored and
Eduard Bosch Bertran
committed
feat: Add postgres support
Thanks to @dplewis
1 parent 132b0d6 commit 7e36fb1

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

spec/ParseQuery.spec.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,8 @@ describe('Parse.Query testing', () => {
354354

355355
var objectList = [object, object2, object3];
356356

357-
Parse.Object.saveAll(objectList).then(() => {
358-
equal(objectList.length, 3);
357+
Parse.Object.saveAll(objectList).then((results) => {
358+
equal(objectList.length, results.length);
359359

360360
new Parse.Query('Object')
361361
.containsAllStartingWith('strings', ['the', 'fox', 'lazy'])
@@ -373,6 +373,13 @@ describe('Parse.Query testing', () => {
373373
arrayContains(results, object);
374374
arrayContains(results, object3);
375375

376+
return new Parse.Query('Object')
377+
.containsAllStartingWith('strings', ['he', 'lazy'])
378+
.find();
379+
})
380+
.then(function (results) {
381+
equal(results.length, 0);
382+
376383
done();
377384
});
378385
});

src/Adapters/Storage/Postgres/PostgresStorageAdapter.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,15 @@ const buildWhereClause = ({ schema, query, index }) => {
307307
}
308308

309309
if (Array.isArray(fieldValue.$all) && isArrayField) {
310-
patterns.push(`array_contains_all($${index}:name, $${index + 1}::jsonb)`);
310+
if (fieldValue.$all[0].$regex) {
311+
for (let i = 0; i < fieldValue.$all.length; i += 1) {
312+
const value = processRegexPattern(fieldValue.$all[i].$regex);
313+
fieldValue.$all[i] = value.substring(1) + '%';
314+
}
315+
patterns.push(`array_contains_all_regex($${index}:name, $${index + 1}::jsonb)`);
316+
} else {
317+
patterns.push(`array_contains_all($${index}:name, $${index + 1}::jsonb)`);
318+
}
311319
values.push(fieldName, JSON.stringify(fieldValue.$all));
312320
index += 2;
313321
}
@@ -1185,6 +1193,7 @@ export class PostgresStorageAdapter {
11851193
t.none(sql.array.addUnique),
11861194
t.none(sql.array.remove),
11871195
t.none(sql.array.containsAll),
1196+
t.none(sql.array.containsAllRegex),
11881197
t.none(sql.array.contains)
11891198
]);
11901199
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CREATE OR REPLACE FUNCTION array_contains_all_regex(
2+
"array" jsonb,
3+
"values" jsonb
4+
)
5+
RETURNS boolean
6+
LANGUAGE sql
7+
IMMUTABLE
8+
STRICT
9+
AS $function$
10+
SELECT RES.CNT = jsonb_array_length("values") FROM (SELECT COUNT(*) as CNT FROM jsonb_array_elements_text("array") as elt WHERE elt LIKE ANY (SELECT jsonb_array_elements_text("values"))) as RES;
11+
$function$;

0 commit comments

Comments
 (0)