[Groonga-mysql-commit] mroonga/mroonga [master] [storage] support fulltext search on no primary key table. fixes #1193

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 8日 (木) 22:36:08 JST


Kouhei Sutou	2011-12-08 13:36:08 +0000 (Thu, 08 Dec 2011)

  New Revision: af02425c69b9627309657672e0ab3c3874cbfed8

  Log:
    [storage] support fulltext search on no primary key table. fixes #1193
    
    Reported by Kazuhiko Shiozaki. Thanks!!!

  Added files:
    test/sql/suite/groonga_storage/r/fulltext_no_primary_key.result
    test/sql/suite/groonga_storage/t/fulltext_no_primary_key.test
  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+10 -4)
===================================================================
--- ha_mroonga.cc    2011-12-08 01:05:03 +0000 (a99e429)
+++ ha_mroonga.cc    2011-12-08 13:36:08 +0000 (5fc04d2)
@@ -5525,10 +5525,16 @@ int ha_mroonga::storage_ft_read(uchar *buf)
   }
 
   GRN_BULK_REWIND(&key_buffer);
-  grn_obj_get_value(ctx, key_accessor, found_record_id, &key_buffer);
-  record_id = grn_table_get(ctx, grn_table,
-                            GRN_TEXT_VALUE(&key_buffer),
-                            GRN_TEXT_LEN(&key_buffer));
+  if (key_accessor) {
+    grn_obj_get_value(ctx, key_accessor, found_record_id, &key_buffer);
+    record_id = grn_table_get(ctx, grn_table,
+                              GRN_TEXT_VALUE(&key_buffer),
+                              GRN_TEXT_LEN(&key_buffer));
+  } else {
+    void *key;
+    grn_table_cursor_get_key(ctx, cursor, &key);
+    record_id = *((grn_id *)key);
+  }
   store_to_fields_from_primary_table(buf, record_id);
   DBUG_RETURN(0);
 }

  Added: test/sql/suite/groonga_storage/r/fulltext_no_primary_key.result (+21 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/suite/groonga_storage/r/fulltext_no_primary_key.result    2011-12-08 13:36:08 +0000 (172fd3e)
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table	Create Table
+diaries	CREATE TABLE `diaries` (
+  `title` varchar(255) DEFAULT NULL,
+  `content` text,
+  FULLTEXT KEY `content` (`content`)
+) ENGINE=groonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES("Hello", "今日からはじめました。");
+INSERT INTO diaries VALUES("天気", "明日の富士山の天気について");
+INSERT INTO diaries VALUES("富士山", "今日も天気がよくてきれいに見える。");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("*D+ 今日 天気" IN BOOLEAN MODE);
+title	content
+富士山	今日も天気がよくてきれいに見える。
+DROP TABLE diaries;

  Added: test/sql/suite/groonga_storage/t/fulltext_no_primary_key.test (+39 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/suite/groonga_storage/t/fulltext_no_primary_key.test    2011-12-08 13:36:08 +0000 (7c0ab45)
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou****@clear*****>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+--source include/have_groonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+  title VARCHAR(255),
+  content TEXT,
+  FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES("Hello", "今日からはじめました。");
+INSERT INTO diaries VALUES("天気", "明日の富士山の天気について");
+INSERT INTO diaries VALUES("富士山", "今日も天気がよくてきれいに見える。");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("*D+ 今日 天気" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source include/have_groonga_deinit.inc




Groonga-mysql-commit メーリングリストの案内
Back to archive index