@@ -834,3 +834,37 @@ EXPLAIN (COSTS OFF) SELECT * FROM test_array WHERE i % '{}';
834
834
(2 rows)
835
835
836
836
DROP INDEX idx_array;
837
+ /*
838
+ * Check ordering using distance operator
839
+ */
840
+ CREATE TABLE test_array_order (
841
+ i int2[]
842
+ );
843
+ \copy test_array_order(i) from 'data/rum_array.data';
844
+ CREATE INDEX idx_array_order ON test_array_order USING rum (i rum_anyarray_ops);
845
+ EXPLAIN (COSTS OFF)
846
+ SELECT *, i <=> '{51}' from test_array_order WHERE i @> '{23,20}' order by i <=> '{51}';
847
+ QUERY PLAN
848
+ ------------------------------------------------------
849
+ Index Scan using idx_array_order on test_array_order
850
+ Index Cond: (i @> '{23,20}'::smallint[])
851
+ Order By: (i <=> '{51}'::smallint[])
852
+ (3 rows)
853
+
854
+ SELECT *, i <=> '{51}' from test_array_order WHERE i @> '{23,20}' order by i <=> '{51}';
855
+ i | ?column?
856
+ ---------------------+------------------
857
+ {20,23,51} | 1.73205080756888
858
+ {33,51,20,77,23,65} | 2.44948974278318
859
+ {23,76,34,23,2,20} | Infinity
860
+ {20,60,45,23,29} | Infinity
861
+ {23,89,38,20,40,95} | Infinity
862
+ {23,20,72} | Infinity
863
+ {73,23,20} | Infinity
864
+ {6,97,20,89,23} | Infinity
865
+ {20,98,30,23,1,66} | Infinity
866
+ {57,23,39,46,50,20} | Infinity
867
+ {81,20,26,22,23} | Infinity
868
+ {18,23,10,90,15,20} | Infinity
869
+ (12 rows)
870
+