[Groonga-commit] pgroonga/pgroonga at 0dbe4c2 [master] Support range search with multi-column index

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index