diff --git a/CHANGELOG.md b/CHANGELOG.md index d67307c..6e57bbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Added `hamming_distance` function - Added `jaccard_distance` function - Added `quantize_binary` function +- Updated comparison operators to support vectors with different dimensions ## 0.6.2 (2024-03-18) diff --git a/src/vector.c b/src/vector.c index 071aba1..fd21e44 100644 --- a/src/vector.c +++ b/src/vector.c @@ -915,9 +915,6 @@ vector_lt(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) < 0); } @@ -931,9 +928,6 @@ vector_le(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) <= 0); } @@ -947,9 +941,6 @@ vector_eq(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) == 0); } @@ -963,9 +954,6 @@ vector_ne(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) != 0); } @@ -979,9 +967,6 @@ vector_ge(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) >= 0); } @@ -995,9 +980,6 @@ vector_gt(PG_FUNCTION_ARGS) Vector *a = PG_GETARG_VECTOR_P(0); Vector *b = PG_GETARG_VECTOR_P(1); - /* TODO Remove in 0.7.0 */ - CheckDims(a, b); - PG_RETURN_BOOL(vector_cmp_internal(a, b) > 0); } diff --git a/test/expected/vector_functions.out b/test/expected/vector_functions.out index 01ce11d..c6b594c 100644 --- a/test/expected/vector_functions.out +++ b/test/expected/vector_functions.out @@ -24,6 +24,30 @@ SELECT '[1e37]'::vector * '[1e37]'; ERROR: value out of range: overflow SELECT '[1e-37]'::vector * '[1e-37]'; ERROR: value out of range: underflow +SELECT '[1,2,3]'::vector < '[1,2,3]'; + ?column? +---------- + f +(1 row) + +SELECT '[1,2,3]'::vector < '[1,2]'; + ?column? +---------- + f +(1 row) + +SELECT '[1,2,3]'::vector <= '[1,2,3]'; + ?column? +---------- + t +(1 row) + +SELECT '[1,2,3]'::vector <= '[1,2]'; + ?column? +---------- + f +(1 row) + SELECT '[1,2,3]'::vector = '[1,2,3]'; ?column? ---------- @@ -31,7 +55,47 @@ SELECT '[1,2,3]'::vector = '[1,2,3]'; (1 row) SELECT '[1,2,3]'::vector = '[1,2]'; -ERROR: different vector dimensions 3 and 2 + ?column? +---------- + f +(1 row) + +SELECT '[1,2,3]'::vector != '[1,2,3]'; + ?column? +---------- + f +(1 row) + +SELECT '[1,2,3]'::vector != '[1,2]'; + ?column? +---------- + t +(1 row) + +SELECT '[1,2,3]'::vector >= '[1,2,3]'; + ?column? +---------- + t +(1 row) + +SELECT '[1,2,3]'::vector >= '[1,2]'; + ?column? +---------- + t +(1 row) + +SELECT '[1,2,3]'::vector > '[1,2,3]'; + ?column? +---------- + f +(1 row) + +SELECT '[1,2,3]'::vector > '[1,2]'; + ?column? +---------- + t +(1 row) + SELECT vector_cmp('[1,2,3]', '[1,2,3]'); vector_cmp ------------ diff --git a/test/sql/vector_functions.sql b/test/sql/vector_functions.sql index c604be6..a91aa48 100644 --- a/test/sql/vector_functions.sql +++ b/test/sql/vector_functions.sql @@ -6,8 +6,18 @@ SELECT '[1,2,3]'::vector * '[4,5,6]'; SELECT '[1e37]'::vector * '[1e37]'; SELECT '[1e-37]'::vector * '[1e-37]'; +SELECT '[1,2,3]'::vector < '[1,2,3]'; +SELECT '[1,2,3]'::vector < '[1,2]'; +SELECT '[1,2,3]'::vector <= '[1,2,3]'; +SELECT '[1,2,3]'::vector <= '[1,2]'; SELECT '[1,2,3]'::vector = '[1,2,3]'; SELECT '[1,2,3]'::vector = '[1,2]'; +SELECT '[1,2,3]'::vector != '[1,2,3]'; +SELECT '[1,2,3]'::vector != '[1,2]'; +SELECT '[1,2,3]'::vector >= '[1,2,3]'; +SELECT '[1,2,3]'::vector >= '[1,2]'; +SELECT '[1,2,3]'::vector > '[1,2,3]'; +SELECT '[1,2,3]'::vector > '[1,2]'; SELECT vector_cmp('[1,2,3]', '[1,2,3]'); SELECT vector_cmp('[1,2,3]', '[0,0,0]');