diff --git a/sql/vector--0.6.2--0.7.0.sql b/sql/vector--0.6.2--0.7.0.sql index fc94da5..663b6cc 100644 --- a/sql/vector--0.6.2--0.7.0.sql +++ b/sql/vector--0.6.2--0.7.0.sql @@ -223,6 +223,15 @@ CREATE OPERATOR > ( RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); +CREATE OPERATOR CLASS halfvec_ops + DEFAULT FOR TYPE halfvec USING btree AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 halfvec_cmp(halfvec, halfvec); + CREATE OPERATOR CLASS halfvec_l2_ops FOR TYPE halfvec USING ivfflat AS OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops, @@ -406,6 +415,15 @@ CREATE OPERATOR > ( RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); +CREATE OPERATOR CLASS sparsevec_ops + DEFAULT FOR TYPE sparsevec USING btree AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 sparsevec_cmp(sparsevec, sparsevec); + CREATE OPERATOR CLASS sparsevec_l2_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops, diff --git a/sql/vector.sql b/sql/vector.sql index 4568a83..2996604 100644 --- a/sql/vector.sql +++ b/sql/vector.sql @@ -526,6 +526,15 @@ CREATE OPERATOR > ( -- halfvec opclasses +CREATE OPERATOR CLASS halfvec_ops + DEFAULT FOR TYPE halfvec USING btree AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 halfvec_cmp(halfvec, halfvec); + CREATE OPERATOR CLASS halfvec_l2_ops FOR TYPE halfvec USING ivfflat AS OPERATOR 1 <-> (halfvec, halfvec) FOR ORDER BY float_ops, @@ -725,6 +734,15 @@ CREATE OPERATOR > ( -- sparsevec opclasses +CREATE OPERATOR CLASS sparsevec_ops + DEFAULT FOR TYPE sparsevec USING btree AS + OPERATOR 1 < , + OPERATOR 2 <= , + OPERATOR 3 = , + OPERATOR 4 >= , + OPERATOR 5 > , + FUNCTION 1 sparsevec_cmp(sparsevec, sparsevec); + CREATE OPERATOR CLASS sparsevec_l2_ops FOR TYPE sparsevec USING hnsw AS OPERATOR 1 <-> (sparsevec, sparsevec) FOR ORDER BY float_ops, diff --git a/test/expected/btree_halfvec.out b/test/expected/btree_halfvec.out new file mode 100644 index 0000000..e4575de --- /dev/null +++ b/test/expected/btree_halfvec.out @@ -0,0 +1,20 @@ +SET enable_seqscan = off; +CREATE TABLE t (val halfvec(3)); +INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); +CREATE INDEX ON t (val); +SELECT * FROM t WHERE val = '[1,2,3]'; + val +--------- + [1,2,3] +(1 row) + +SELECT * FROM t ORDER BY val; + val +--------- + [0,0,0] + [1,1,1] + [1,2,3] + +(4 rows) + +DROP TABLE t; diff --git a/test/expected/btree_sparsevec.out b/test/expected/btree_sparsevec.out new file mode 100644 index 0000000..5d95952 --- /dev/null +++ b/test/expected/btree_sparsevec.out @@ -0,0 +1,20 @@ +SET enable_seqscan = off; +CREATE TABLE t (val sparsevec(3)); +INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); +CREATE INDEX ON t (val); +SELECT * FROM t WHERE val = '{1:1,2:2,3:3}/3'; + val +----------------- + {1:1,2:2,3:3}/3 +(1 row) + +SELECT * FROM t ORDER BY val; + val +----------------- + {}/3 + {1:1,2:1,3:1}/3 + {1:1,2:2,3:3}/3 + +(4 rows) + +DROP TABLE t; diff --git a/test/expected/btree.out b/test/expected/btree_vector.out similarity index 82% rename from test/expected/btree.out rename to test/expected/btree_vector.out index d8b6da5..a43d0d2 100644 --- a/test/expected/btree.out +++ b/test/expected/btree_vector.out @@ -8,10 +8,13 @@ SELECT * FROM t WHERE val = '[1,2,3]'; [1,2,3] (1 row) -SELECT * FROM t ORDER BY val LIMIT 1; +SELECT * FROM t ORDER BY val; val --------- [0,0,0] -(1 row) + [1,1,1] + [1,2,3] + +(4 rows) DROP TABLE t; diff --git a/test/sql/btree_halfvec.sql b/test/sql/btree_halfvec.sql new file mode 100644 index 0000000..795232d --- /dev/null +++ b/test/sql/btree_halfvec.sql @@ -0,0 +1,10 @@ +SET enable_seqscan = off; + +CREATE TABLE t (val halfvec(3)); +INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); +CREATE INDEX ON t (val); + +SELECT * FROM t WHERE val = '[1,2,3]'; +SELECT * FROM t ORDER BY val; + +DROP TABLE t; diff --git a/test/sql/btree_sparsevec.sql b/test/sql/btree_sparsevec.sql new file mode 100644 index 0000000..a569364 --- /dev/null +++ b/test/sql/btree_sparsevec.sql @@ -0,0 +1,10 @@ +SET enable_seqscan = off; + +CREATE TABLE t (val sparsevec(3)); +INSERT INTO t (val) VALUES ('{}/3'), ('{1:1,2:2,3:3}/3'), ('{1:1,2:1,3:1}/3'), (NULL); +CREATE INDEX ON t (val); + +SELECT * FROM t WHERE val = '{1:1,2:2,3:3}/3'; +SELECT * FROM t ORDER BY val; + +DROP TABLE t; diff --git a/test/sql/btree.sql b/test/sql/btree_vector.sql similarity index 84% rename from test/sql/btree.sql rename to test/sql/btree_vector.sql index 232b288..9c560cd 100644 --- a/test/sql/btree.sql +++ b/test/sql/btree_vector.sql @@ -5,6 +5,6 @@ INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL); CREATE INDEX ON t (val); SELECT * FROM t WHERE val = '[1,2,3]'; -SELECT * FROM t ORDER BY val LIMIT 1; +SELECT * FROM t ORDER BY val; DROP TABLE t;