Kouhei Sutou
null+****@clear*****
Wed Feb 11 18:57:54 JST 2015
Kouhei Sutou 2015-02-11 18:57:54 +0900 (Wed, 11 Feb 2015) New Revision: 0dbe4c2bec23644890f5b59d5f5ea2ecb76b4faa https://github.com/pgroonga/pgroonga/commit/0dbe4c2bec23644890f5b59d5f5ea2ecb76b4faa Message: Support range search with multi-column index Added files: expected/compare/integer/multiple/greater-than-equal/multiple.out sql/compare/integer/multiple/greater-than-equal/multiple.sql Modified files: Makefile pgroonga.c Modified: Makefile (+3 -0) =================================================================== --- Makefile 2015-02-11 17:15:59 +0900 (e984cf4) +++ Makefile 2015-02-11 18:57:54 +0900 (8381527) @@ -36,6 +36,7 @@ installcheck: results/compare/text/single/equal installcheck: results/compare/integer/single/less-than-equal installcheck: results/compare/integer/single/greater-than-equal installcheck: results/compare/integer/single/between +installcheck: results/compare/integer/multiple/greater-than-equal installcheck: results/compare/integer/order_by_limit results/full-text-search/text/single/contain: @@ -60,5 +61,7 @@ results/compare/integer/single/greater-than-equal: @mkdir -p $@ results/compare/integer/single/between: @mkdir -p $@ +results/compare/integer/multiple/greater-than-equal: + @mkdir -p $@ results/compare/integer/order_by_limit: @mkdir -p $@ Added: expected/compare/integer/multiple/greater-than-equal/multiple.out (+33 -0) 100644 =================================================================== --- /dev/null +++ expected/compare/integer/multiple/greater-than-equal/multiple.out 2015-02-11 18:57:54 +0900 (4e1fbce) @@ -0,0 +1,33 @@ +CREATE TABLE numbers ( + number1 integer, + number2 integer +); +INSERT INTO numbers VALUES (2, 20); +INSERT INTO numbers VALUES (7, 70); +INSERT INTO numbers VALUES (6, 60); +INSERT INTO numbers VALUES (4, 40); +INSERT INTO numbers VALUES (5, 50); +INSERT INTO numbers VALUES (8, 80); +INSERT INTO numbers VALUES (1, 10); +INSERT INTO numbers VALUES (10, 100); +INSERT INTO numbers VALUES (3, 30); +INSERT INTO numbers VALUES (9, 90); +CREATE INDEX grnindex ON numbers USING pgroonga (number1, number2); +SET enable_seqscan = off; +SET enable_indexscan = on; +SET enable_bitmapscan = off; +SELECT number1, number2 + FROM numbers + WHERE number1 >= 3 AND number2 >= 50 + ORDER BY number1 ASC; + number1 | number2 +---------+--------- + 5 | 50 + 6 | 60 + 7 | 70 + 8 | 80 + 9 | 90 + 10 | 100 +(6 rows) + +DROP TABLE numbers; Modified: pgroonga.c (+10 -0) =================================================================== --- pgroonga.c 2015-02-11 17:15:59 +0900 (ad83d9f) +++ pgroonga.c 2015-02-11 18:57:54 +0900 (af36ea7) @@ -1238,11 +1238,21 @@ static bool PGrnIsRangeSearchable(IndexScanDesc scan) { int i; + AttrNumber previousAttrNumber = InvalidAttrNumber; for (i = 0; i < scan->numberOfKeys; i++) { ScanKey key = &(scan->keyData[i]); + if (previousAttrNumber == InvalidAttrNumber) + { + previousAttrNumber = key->sk_attno; + } + if (key->sk_attno != previousAttrNumber) + { + return false; + } + switch (key->sk_strategy) { case PGrnLessStrategyNumber: Added: sql/compare/integer/multiple/greater-than-equal/multiple.sql (+28 -0) 100644 =================================================================== --- /dev/null +++ sql/compare/integer/multiple/greater-than-equal/multiple.sql 2015-02-11 18:57:54 +0900 (01eef43) @@ -0,0 +1,28 @@ +CREATE TABLE numbers ( + number1 integer, + number2 integer +); + +INSERT INTO numbers VALUES (2, 20); +INSERT INTO numbers VALUES (7, 70); +INSERT INTO numbers VALUES (6, 60); +INSERT INTO numbers VALUES (4, 40); +INSERT INTO numbers VALUES (5, 50); +INSERT INTO numbers VALUES (8, 80); +INSERT INTO numbers VALUES (1, 10); +INSERT INTO numbers VALUES (10, 100); +INSERT INTO numbers VALUES (3, 30); +INSERT INTO numbers VALUES (9, 90); + +CREATE INDEX grnindex ON numbers USING pgroonga (number1, number2); + +SET enable_seqscan = off; +SET enable_indexscan = on; +SET enable_bitmapscan = off; + +SELECT number1, number2 + FROM numbers + WHERE number1 >= 3 AND number2 >= 50 + ORDER BY number1 ASC; + +DROP TABLE numbers; -------------- next part -------------- HTML����������������������������...Download