Skip to content

Commit a618da3

Browse files
committed
fix(ore): return null when comparing null ore values
1 parent 77a0b3a commit a618da3

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

sql/000-ore.sql

+14-3
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,24 @@ RETURNS integer AS $$
239239
DECLARE
240240
cmp_result integer;
241241
BEGIN
242-
IF (array_length(a, 1) = 0 OR a IS NULL) AND (array_length(b, 1) = 0 OR b IS NULL) THEN
242+
243+
-- NULLs are NULL
244+
IF a IS NULL OR b IS NULL THEN
245+
RETURN NULL;
246+
END IF;
247+
248+
-- empty a and b
249+
IF cardinality(a) = 0 AND cardinality(b) = 0 THEN
243250
RETURN 0;
244251
END IF;
245-
IF array_length(a, 1) = 0 OR a IS NULL THEN
252+
253+
-- empty a and some b
254+
IF (cardinality(a) = 0) AND cardinality(b) > 0 THEN
246255
RETURN -1;
247256
END IF;
248-
IF array_length(b, 1) = 0 OR a IS NULL THEN
257+
258+
-- some a and empty b
259+
IF cardinality(a) > 0 AND (cardinality(b) = 0) THEN
249260
RETURN 1;
250261
END IF;
251262

tests/operators-ore.sql

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ CREATE TABLE users
1212

1313
TRUNCATE TABLE users;
1414

15-
16-
TRUNCATE TABLE users;
15+
INSERT INTO users (name_encrypted) VALUES (NULL);
1716

1817
-- User with "LOW" value
1918
INSERT INTO users (name_encrypted) VALUES (
@@ -57,6 +56,9 @@ DO $$
5756
-- SANITY CHECK
5857
ASSERT (SELECT EXISTS (SELECT id FROM users WHERE cs_ore_64_8_v1(name_encrypted) < cs_ore_64_8_v1(ore_json)));
5958

59+
-- NULL VALUES SHOULD BE IGNORED
60+
ASSERT (SELECT (SELECT COUNT(*) FROM (SELECT id FROM users WHERE cs_ore_64_8_v1(name_encrypted) < cs_ore_64_8_v1(ore_json)) as count) = 1);
61+
6062
ASSERT (SELECT EXISTS (
6163
SELECT id FROM users WHERE name_encrypted < ore_cs_encrypted::jsonb
6264
));

0 commit comments

Comments
 (0)