[Groonga-commit] pgroonga/pgroonga at da4b428 [master] Use recheck for LIKE

Back to archive index

Kouhei Sutou null+****@clear*****
Wed Oct 28 21:58:39 JST 2015


Kouhei Sutou	2015-10-28 21:58:39 +0900 (Wed, 28 Oct 2015)

  New Revision: da4b42849fdb481c01bec3414a7873c79d930d8a
  https://github.com/pgroonga/pgroonga/commit/da4b42849fdb481c01bec3414a7873c79d930d8a

  Message:
    Use recheck for LIKE

  Added files:
    expected/full-text-search/text/single/like/underscore/bitmapscan.out
    expected/full-text-search/text/single/like/underscore/indexscan.out
    expected/full-text-search/text/single/like/underscore/seqscan.out
    sql/full-text-search/text/single/like/underscore/bitmapscan.sql
    sql/full-text-search/text/single/like/underscore/indexscan.sql
    sql/full-text-search/text/single/like/underscore/seqscan.sql
  Copied files:
    expected/full-text-search/text/single/like/begin/bitmapscan.out
      (from sql/full-text-search/text/single/like/bitmapscan.sql)
    expected/full-text-search/text/single/like/begin/indexscan.out
      (from sql/full-text-search/text/single/like/indexscan.sql)
    expected/full-text-search/text/single/like/begin/seqscan.out
      (from sql/full-text-search/text/single/like/seqscan.sql)
    expected/full-text-search/text/single/like/end/indexscan.out
      (from expected/full-text-search/text/single/like/indexscan.out)
    expected/full-text-search/text/single/like/partial/bitmapscan.out
      (from expected/full-text-search/text/single/like/seqscan.out)
    expected/full-text-search/text/single/like/partial/indexscan.out
      (from expected/full-text-search/text/single/like/seqscan.out)
    sql/full-text-search/text/single/like/begin/bitmapscan.sql
      (from sql/full-text-search/text/single/like/bitmapscan.sql)
    sql/full-text-search/text/single/like/begin/indexscan.sql
      (from sql/full-text-search/text/single/like/indexscan.sql)
    sql/full-text-search/text/single/like/begin/seqscan.sql
      (from sql/full-text-search/text/single/like/seqscan.sql)
    sql/full-text-search/text/single/like/end/bitmapscan.sql
      (from sql/full-text-search/text/single/like/bitmapscan.sql)
    sql/full-text-search/text/single/like/end/indexscan.sql
      (from sql/full-text-search/text/single/like/indexscan.sql)
    sql/full-text-search/text/single/like/end/seqscan.sql
      (from sql/full-text-search/text/single/like/seqscan.sql)
  Modified files:
    pgroonga.c
  Renamed files:
    expected/full-text-search/text/single/like/end/bitmapscan.out
      (from expected/full-text-search/text/single/like/bitmapscan.out)
    expected/full-text-search/text/single/like/end/seqscan.out
      (from expected/full-text-search/text/single/like/indexscan.out)
    expected/full-text-search/text/single/like/partial/seqscan.out
      (from expected/full-text-search/text/single/like/seqscan.out)
    sql/full-text-search/text/single/like/partial/bitmapscan.sql
      (from sql/full-text-search/text/single/like/bitmapscan.sql)
    sql/full-text-search/text/single/like/partial/indexscan.sql
      (from sql/full-text-search/text/single/like/indexscan.sql)
    sql/full-text-search/text/single/like/partial/seqscan.sql
      (from sql/full-text-search/text/single/like/seqscan.sql)

  Copied: expected/full-text-search/text/single/like/begin/bitmapscan.out (+5 -5) 79%
===================================================================
--- sql/full-text-search/text/single/like/bitmapscan.sql    2015-10-28 21:12:24 +0900 (b102ea2)
+++ expected/full-text-search/text/single/like/begin/bitmapscan.out    2015-10-28 21:58:39 +0900 (3597661)
@@ -2,20 +2,20 @@ CREATE TABLE memos (
   id integer,
   content text
 );
-
 INSERT INTO memos VALUES (1, 'PostgreSQL is a RDBMS.');
 INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
-
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-
 SET enable_seqscan = off;
 SET enable_indexscan = off;
 SET enable_bitmapscan = on;
-
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
+ id |        content         
+----+------------------------
+  1 | PostgreSQL is a RDBMS.
+(1 row)
 
 DROP TABLE memos;

  Copied: expected/full-text-search/text/single/like/begin/indexscan.out (+5 -5) 79%
===================================================================
--- sql/full-text-search/text/single/like/indexscan.sql    2015-10-28 21:12:24 +0900 (4fdd972)
+++ expected/full-text-search/text/single/like/begin/indexscan.out    2015-10-28 21:58:39 +0900 (c2f99c9)
@@ -2,20 +2,20 @@ CREATE TABLE memos (
   id integer,
   content text
 );
-
 INSERT INTO memos VALUES (1, 'PostgreSQL is a RDBMS.');
 INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
-
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-
 SET enable_seqscan = off;
 SET enable_indexscan = on;
 SET enable_bitmapscan = off;
-
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
+ id |        content         
+----+------------------------
+  1 | PostgreSQL is a RDBMS.
+(1 row)
 
 DROP TABLE memos;

  Copied: expected/full-text-search/text/single/like/begin/seqscan.out (+5 -5) 79%
===================================================================
--- sql/full-text-search/text/single/like/seqscan.sql    2015-10-28 21:12:24 +0900 (10a5d37)
+++ expected/full-text-search/text/single/like/begin/seqscan.out    2015-10-28 21:58:39 +0900 (06b7347)
@@ -2,20 +2,20 @@ CREATE TABLE memos (
   id integer,
   content text
 );
-
 INSERT INTO memos VALUES (1, 'PostgreSQL is a RDBMS.');
 INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
-
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-
 SET enable_seqscan = on;
 SET enable_indexscan = off;
 SET enable_bitmapscan = off;
-
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
+ id |        content         
+----+------------------------
+  1 | PostgreSQL is a RDBMS.
+(1 row)
 
 DROP TABLE memos;

  Renamed: expected/full-text-search/text/single/like/end/bitmapscan.out (+2 -4) 85%
===================================================================
--- expected/full-text-search/text/single/like/bitmapscan.out    2015-10-28 21:12:24 +0900 (6296d36)
+++ expected/full-text-search/text/single/like/end/bitmapscan.out    2015-10-28 21:58:39 +0900 (23a5dd1)
@@ -12,12 +12,10 @@ SET enable_indexscan = off;
 SET enable_bitmapscan = on;
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
  id |                        content                        
 ----+-------------------------------------------------------
-  2 | Groonga is fast full text search engine.
   3 | PGroonga is a PostgreSQL extension that uses Groonga.
-  4 | groonga command is provided.
-(3 rows)
+(1 row)
 
 DROP TABLE memos;

  Copied: expected/full-text-search/text/single/like/end/indexscan.out (+2 -4) 85%
===================================================================
--- expected/full-text-search/text/single/like/indexscan.out    2015-10-28 21:12:24 +0900 (2788b46)
+++ expected/full-text-search/text/single/like/end/indexscan.out    2015-10-28 21:58:39 +0900 (77d3f69)
@@ -12,12 +12,10 @@ SET enable_indexscan = on;
 SET enable_bitmapscan = off;
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
  id |                        content                        
 ----+-------------------------------------------------------
-  2 | Groonga is fast full text search engine.
   3 | PGroonga is a PostgreSQL extension that uses Groonga.
-  4 | groonga command is provided.
-(3 rows)
+(1 row)
 
 DROP TABLE memos;

  Renamed: expected/full-text-search/text/single/like/end/seqscan.out (+4 -6) 78%
===================================================================
--- expected/full-text-search/text/single/like/indexscan.out    2015-10-28 21:12:24 +0900 (2788b46)
+++ expected/full-text-search/text/single/like/end/seqscan.out    2015-10-28 21:58:39 +0900 (8de1aef)
@@ -7,17 +7,15 @@ INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-SET enable_seqscan = off;
-SET enable_indexscan = on;
+SET enable_seqscan = on;
+SET enable_indexscan = off;
 SET enable_bitmapscan = off;
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
  id |                        content                        
 ----+-------------------------------------------------------
-  2 | Groonga is fast full text search engine.
   3 | PGroonga is a PostgreSQL extension that uses Groonga.
-  4 | groonga command is provided.
-(3 rows)
+(1 row)
 
 DROP TABLE memos;

  Copied: expected/full-text-search/text/single/like/partial/bitmapscan.out (+2 -2) 91%
===================================================================
--- expected/full-text-search/text/single/like/seqscan.out    2015-10-28 21:12:24 +0900 (df93bba)
+++ expected/full-text-search/text/single/like/partial/bitmapscan.out    2015-10-28 21:58:39 +0900 (50cffa2)
@@ -7,9 +7,9 @@ INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-SET enable_seqscan = on;
+SET enable_seqscan = off;
 SET enable_indexscan = off;
-SET enable_bitmapscan = off;
+SET enable_bitmapscan = on;
 SELECT id, content
   FROM memos
  WHERE content LIKE '%groonga%';

  Copied: expected/full-text-search/text/single/like/partial/indexscan.out (+2 -2) 92%
===================================================================
--- expected/full-text-search/text/single/like/seqscan.out    2015-10-28 21:12:24 +0900 (df93bba)
+++ expected/full-text-search/text/single/like/partial/indexscan.out    2015-10-28 21:58:39 +0900 (e2d50c1)
@@ -7,8 +7,8 @@ INSERT INTO memos VALUES (2, 'Groonga is fast full text search engine.');
 INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga.');
 INSERT INTO memos VALUES (4, 'groonga command is provided.');
 CREATE INDEX grnindex ON memos USING pgroonga (content);
-SET enable_seqscan = on;
-SET enable_indexscan = off;
+SET enable_seqscan = off;
+SET enable_indexscan = on;
 SET enable_bitmapscan = off;
 SELECT id, content
   FROM memos

  Renamed: expected/full-text-search/text/single/like/partial/seqscan.out (+0 -0) 100%
===================================================================

  Added: expected/full-text-search/text/single/like/underscore/bitmapscan.out (+20 -0) 100644
===================================================================
--- /dev/null
+++ expected/full-text-search/text/single/like/underscore/bitmapscan.out    2015-10-28 21:58:39 +0900 (8eba219)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+SET enable_seqscan = off;
+SET enable_indexscan = off;
+SET enable_bitmapscan = on;
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+ id | content 
+----+---------
+  2 | a
+(1 row)
+
+DROP TABLE memos;

  Added: expected/full-text-search/text/single/like/underscore/indexscan.out (+20 -0) 100644
===================================================================
--- /dev/null
+++ expected/full-text-search/text/single/like/underscore/indexscan.out    2015-10-28 21:58:39 +0900 (0df9f1c)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+SET enable_seqscan = off;
+SET enable_indexscan = on;
+SET enable_bitmapscan = off;
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+ id | content 
+----+---------
+  2 | a
+(1 row)
+
+DROP TABLE memos;

  Added: expected/full-text-search/text/single/like/underscore/seqscan.out (+20 -0) 100644
===================================================================
--- /dev/null
+++ expected/full-text-search/text/single/like/underscore/seqscan.out    2015-10-28 21:58:39 +0900 (19b151c)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+SET enable_seqscan = on;
+SET enable_indexscan = off;
+SET enable_bitmapscan = off;
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+ id | content 
+----+---------
+  2 | a
+(1 row)
+
+DROP TABLE memos;

  Modified: pgroonga.c (+79 -11)
===================================================================
--- pgroonga.c    2015-10-28 21:12:24 +0900 (dd3eba0)
+++ pgroonga.c    2015-10-28 21:58:39 +0900 (752619f)
@@ -206,6 +206,7 @@ static grn_ctx grnContext;
 static grn_ctx *ctx = NULL;
 static grn_obj buffer;
 static grn_obj pathBuffer;
+static grn_obj keywordBuffer;
 static grn_obj patternBuffer;
 static grn_obj ctidBuffer;
 static grn_obj scoreBuffer;
@@ -449,6 +450,7 @@ PGrnOnProcExit(int code, Datum arg)
 		GRN_OBJ_FIN(ctx, &ctidBuffer);
 		GRN_OBJ_FIN(ctx, &scoreBuffer);
 		GRN_OBJ_FIN(ctx, &patternBuffer);
+		GRN_OBJ_FIN(ctx, &keywordBuffer);
 		GRN_OBJ_FIN(ctx, &pathBuffer);
 		GRN_OBJ_FIN(ctx, &buffer);
 
@@ -620,6 +622,7 @@ _PG_init(void)
 
 	GRN_VOID_INIT(&buffer);
 	GRN_TEXT_INIT(&pathBuffer, 0);
+	GRN_TEXT_INIT(&keywordBuffer, 0);
 	GRN_TEXT_INIT(&patternBuffer, 0);
 	GRN_FLOAT_INIT(&scoreBuffer, 0);
 	GRN_UINT64_INIT(&ctidBuffer, 0);
@@ -3155,13 +3158,36 @@ pgroonga_beginscan(PG_FUNCTION_ARGS)
 }
 
 static void
+PGrnSearchBuildConditionLikeMatchFlush(grn_obj *expression,
+									   grn_obj *matchTarget,
+									   grn_obj *keyword,
+									   int *nKeywords)
+{
+	if (GRN_TEXT_LEN(keyword) == 0)
+		return;
+
+	grn_expr_append_obj(ctx, expression, matchTarget, GRN_OP_PUSH, 1);
+	grn_expr_append_const_str(ctx, expression,
+							  GRN_TEXT_VALUE(keyword),
+							  GRN_TEXT_LEN(keyword),
+							  GRN_OP_PUSH, 1);
+	grn_expr_append_op(ctx, expression, GRN_OP_MATCH, 2);
+	if (*nKeywords > 0)
+			grn_expr_append_op(ctx, expression, GRN_OP_OR, 2);
+	(*nKeywords)++;
+
+	GRN_BULK_REWIND(keyword);
+}
+
+static void
 PGrnSearchBuildConditionLikeMatch(PGrnSearchData *data,
 								  grn_obj *matchTarget,
 								  grn_obj *query)
 {
 	grn_obj *expression;
 	const char *queryRaw;
-	size_t querySize;
+	size_t i, querySize;
+	int nKeywords = 0;
 
 	expression = data->expression;
 	queryRaw = GRN_TEXT_VALUE(query);
@@ -3173,17 +3199,46 @@ PGrnSearchBuildConditionLikeMatch(PGrnSearchData *data,
 		return;
 	}
 
-	if (!(queryRaw[0] == '%' && queryRaw[querySize - 1] == '%'))
+	GRN_BULK_REWIND(&keywordBuffer);
+	for (i = 0; i < querySize; i++)
 	{
-		data->isEmptyCondition = true;
-		return;
+		switch (queryRaw[i])
+		{
+		case '\\':
+			if (i == querySize)
+			{
+				GRN_TEXT_PUTC(ctx, &keywordBuffer, '\\');
+			}
+			else
+			{
+				GRN_TEXT_PUTC(ctx, &keywordBuffer, queryRaw[i + 1]);
+				i++;
+			}
+			break;
+		case '%':
+		case '_':
+			PGrnSearchBuildConditionLikeMatchFlush(expression,
+												   matchTarget,
+												   &keywordBuffer,
+												   &nKeywords);
+			break;
+		default:
+			GRN_TEXT_PUTC(ctx, &keywordBuffer, queryRaw[i]);
+			break;
+		}
 	}
 
-	grn_expr_append_obj(ctx, expression, matchTarget, GRN_OP_PUSH, 1);
-	grn_expr_append_const_str(ctx, expression,
-							  queryRaw + 1, querySize - 2,
-							  GRN_OP_PUSH, 1);
-	grn_expr_append_op(ctx, expression, GRN_OP_MATCH, 2);
+	PGrnSearchBuildConditionLikeMatchFlush(expression,
+										   matchTarget,
+										   &keywordBuffer,
+										   &nKeywords);
+	if (nKeywords == 0)
+	{
+		grn_expr_append_obj(ctx, expression,
+							grn_ctx_get(ctx, "all_records", -1),
+							GRN_OP_PUSH, 1);
+		grn_expr_append_op(ctx, expression, GRN_OP_CALL, 0);
+	}
 }
 
 static void
@@ -4022,6 +4077,19 @@ PGrnEnsureCursorOpened(IndexScanDesc scan, ScanDirection dir)
 {
 	PGrnScanOpaque so = (PGrnScanOpaque) scan->opaque;
 
+	{
+		int i;
+		for (i = 0; i < scan->numberOfKeys; i++)
+		{
+			ScanKey key = &(scan->keyData[i]);
+			if (key->sk_strategy == PGrnLikeStrategyNumber)
+			{
+				scan->xs_recheck = true;
+				break;
+			}
+		}
+	}
+
 	if (so->indexCursor)
 		return;
 	if (so->tableCursor)
@@ -4166,7 +4234,7 @@ pgroonga_getbitmap(PG_FUNCTION_ARGS)
 			GRN_BULK_REWIND(&ctidBuffer);
 			grn_obj_get_value(ctx, so->ctidAccessor, posting->rid, &ctidBuffer);
 			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
-			tbm_add_tuples(tbm, &ctid, 1, false);
+			tbm_add_tuples(tbm, &ctid, 1, scan->xs_recheck);
 			nRecords++;
 		}
 	}
@@ -4179,7 +4247,7 @@ pgroonga_getbitmap(PG_FUNCTION_ARGS)
 			GRN_BULK_REWIND(&ctidBuffer);
 			grn_obj_get_value(ctx, so->ctidAccessor, id, &ctidBuffer);
 			ctid = UInt64ToCtid(GRN_UINT64_VALUE(&ctidBuffer));
-			tbm_add_tuples(tbm, &ctid, 1, false);
+			tbm_add_tuples(tbm, &ctid, 1, scan->xs_recheck);
 			nRecords++;
 		}
 	}

  Copied: sql/full-text-search/text/single/like/begin/bitmapscan.sql (+1 -1) 93%
===================================================================
--- sql/full-text-search/text/single/like/bitmapscan.sql    2015-10-28 21:12:24 +0900 (b102ea2)
+++ sql/full-text-search/text/single/like/begin/bitmapscan.sql    2015-10-28 21:58:39 +0900 (4b30caa)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = on;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
 
 DROP TABLE memos;

  Copied: sql/full-text-search/text/single/like/begin/indexscan.sql (+1 -1) 93%
===================================================================
--- sql/full-text-search/text/single/like/indexscan.sql    2015-10-28 21:12:24 +0900 (4fdd972)
+++ sql/full-text-search/text/single/like/begin/indexscan.sql    2015-10-28 21:58:39 +0900 (9a8117a)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = off;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
 
 DROP TABLE memos;

  Copied: sql/full-text-search/text/single/like/begin/seqscan.sql (+1 -1) 93%
===================================================================
--- sql/full-text-search/text/single/like/seqscan.sql    2015-10-28 21:12:24 +0900 (10a5d37)
+++ sql/full-text-search/text/single/like/begin/seqscan.sql    2015-10-28 21:58:39 +0900 (4603c88)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = off;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE 'PostgreSQL%';
 
 DROP TABLE memos;

  Copied: sql/full-text-search/text/single/like/end/bitmapscan.sql (+1 -1) 94%
===================================================================
--- sql/full-text-search/text/single/like/bitmapscan.sql    2015-10-28 21:12:24 +0900 (b102ea2)
+++ sql/full-text-search/text/single/like/end/bitmapscan.sql    2015-10-28 21:58:39 +0900 (6c87e6f)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = on;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
 
 DROP TABLE memos;

  Copied: sql/full-text-search/text/single/like/end/indexscan.sql (+1 -1) 94%
===================================================================
--- sql/full-text-search/text/single/like/indexscan.sql    2015-10-28 21:12:24 +0900 (4fdd972)
+++ sql/full-text-search/text/single/like/end/indexscan.sql    2015-10-28 21:58:39 +0900 (5bb096a)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = off;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
 
 DROP TABLE memos;

  Copied: sql/full-text-search/text/single/like/end/seqscan.sql (+1 -1) 94%
===================================================================
--- sql/full-text-search/text/single/like/seqscan.sql    2015-10-28 21:12:24 +0900 (10a5d37)
+++ sql/full-text-search/text/single/like/end/seqscan.sql    2015-10-28 21:58:39 +0900 (9ec27a4)
@@ -16,6 +16,6 @@ SET enable_bitmapscan = off;
 
 SELECT id, content
   FROM memos
- WHERE content LIKE '%groonga%';
+ WHERE content LIKE '%Groonga.';
 
 DROP TABLE memos;

  Renamed: sql/full-text-search/text/single/like/partial/bitmapscan.sql (+0 -0) 100%
===================================================================

  Renamed: sql/full-text-search/text/single/like/partial/indexscan.sql (+0 -0) 100%
===================================================================

  Renamed: sql/full-text-search/text/single/like/partial/seqscan.sql (+0 -0) 100%
===================================================================

  Added: sql/full-text-search/text/single/like/underscore/bitmapscan.sql (+20 -0) 100644
===================================================================
--- /dev/null
+++ sql/full-text-search/text/single/like/underscore/bitmapscan.sql    2015-10-28 21:58:39 +0900 (a308d92)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+
+SET enable_seqscan = off;
+SET enable_indexscan = off;
+SET enable_bitmapscan = on;
+
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+
+DROP TABLE memos;

  Added: sql/full-text-search/text/single/like/underscore/indexscan.sql (+20 -0) 100644
===================================================================
--- /dev/null
+++ sql/full-text-search/text/single/like/underscore/indexscan.sql    2015-10-28 21:58:39 +0900 (04522c2)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+
+SET enable_seqscan = off;
+SET enable_indexscan = on;
+SET enable_bitmapscan = off;
+
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+
+DROP TABLE memos;

  Added: sql/full-text-search/text/single/like/underscore/seqscan.sql (+20 -0) 100644
===================================================================
--- /dev/null
+++ sql/full-text-search/text/single/like/underscore/seqscan.sql    2015-10-28 21:58:39 +0900 (f7fd84f)
@@ -0,0 +1,20 @@
+CREATE TABLE memos (
+  id integer,
+  content text
+);
+
+INSERT INTO memos VALUES (1, '');
+INSERT INTO memos VALUES (2, 'a');
+INSERT INTO memos VALUES (3, 'ab');
+
+CREATE INDEX grnindex ON memos USING pgroonga (content);
+
+SET enable_seqscan = on;
+SET enable_indexscan = off;
+SET enable_bitmapscan = off;
+
+SELECT id, content
+  FROM memos
+ WHERE content LIKE '_';
+
+DROP TABLE memos;
-------------- next part --------------
HTML����������������������������...
Download 



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