null+****@clear*****
null+****@clear*****
2011年 6月 18日 (土) 15:22:52 JST
Kentoku 2011-06-18 06:22:52 +0000 (Sat, 18 Jun 2011)
New Revision: 867b9db447c43888b1ac4b08ef85cd684bd24758
Log:
add fulletxt_searching flag
Modified files:
ha_mroonga.cc
ha_mroonga.h
Modified: ha_mroonga.cc (+58 -6)
===================================================================
--- ha_mroonga.cc 2011-06-18 05:37:54 +0000 (1508612)
+++ ha_mroonga.cc 2011-06-18 06:22:52 +0000 (4e31197)
@@ -932,6 +932,7 @@ ha_mroonga::ha_mroonga(handlerton *hton, TABLE_SHARE *share)
share = NULL;
is_clone = FALSE;
wrap_handler = NULL;
+ fulltext_searching = FALSE;
DBUG_VOID_RETURN;
}
@@ -1623,6 +1624,9 @@ int ha_mroonga::wrapper_open(const char *name, int mode, uint test_if_locked)
MRN_SET_BASE_TABLE_KEY(this, table);
init();
+ pk_keypart_map = make_prev_keypart_map(
+ table->key_info[table_share->primary_key].key_parts);
+
if (error)
{
grn_obj_unlink(ctx, grn_table);
@@ -2271,7 +2275,10 @@ int ha_mroonga::wrapper_rnd_init(bool scan)
MRN_DBUG_ENTER_METHOD();
MRN_SET_WRAP_SHARE_KEY(share, table->s);
MRN_SET_WRAP_TABLE_KEY(this, table);
- error = wrap_handler->ha_rnd_init(scan);
+ if (fulltext_searching)
+ error = wrap_handler->ha_index_init(table_share->primary_key, FALSE);
+ else
+ error = wrap_handler->ha_rnd_init(scan);
MRN_SET_BASE_SHARE_KEY(share, table->s);
MRN_SET_BASE_TABLE_KEY(this, table);
DBUG_RETURN(error);
@@ -2303,7 +2310,10 @@ int ha_mroonga::wrapper_rnd_end()
MRN_DBUG_ENTER_METHOD();
MRN_SET_WRAP_SHARE_KEY(share, table->s);
MRN_SET_WRAP_TABLE_KEY(this, table);
- error = wrap_handler->ha_rnd_end();
+ if (fulltext_searching)
+ error = wrap_handler->ha_index_end();
+ else
+ error = wrap_handler->ha_rnd_end();
MRN_SET_BASE_SHARE_KEY(share, table->s);
MRN_SET_BASE_TABLE_KEY(this, table);
DBUG_RETURN(error);
@@ -2337,7 +2347,11 @@ int ha_mroonga::wrapper_rnd_next(uchar *buf)
MRN_DBUG_ENTER_METHOD();
MRN_SET_WRAP_SHARE_KEY(share, table->s);
MRN_SET_WRAP_TABLE_KEY(this, table);
- error = wrap_handler->rnd_next(buf);
+ if (fulltext_searching)
+ error = wrap_handler->index_read_map(buf, /* TODO: give me a PK */,
+ pk_keypart_map, HA_READ_KEY_EXACT);
+ else
+ error = wrap_handler->rnd_next(buf);
MRN_SET_BASE_SHARE_KEY(share, table->s);
MRN_SET_BASE_TABLE_KEY(this, table);
DBUG_RETURN(error);
@@ -2951,7 +2965,10 @@ int ha_mroonga::wrapper_index_init(uint idx, bool sorted)
MRN_DBUG_ENTER_METHOD();
MRN_SET_WRAP_SHARE_KEY(share, table->s);
MRN_SET_WRAP_TABLE_KEY(this, table);
- error = wrap_handler->ha_index_init(share->wrap_key_nr[idx], sorted);
+ if (fulltext_searching)
+ error = wrap_handler->ha_index_init(table_share->primary_key, FALSE);
+ else
+ error = wrap_handler->ha_index_init(share->wrap_key_nr[idx], sorted);
MRN_SET_BASE_SHARE_KEY(share, table->s);
MRN_SET_BASE_TABLE_KEY(this, table);
DBUG_RETURN(error);
@@ -3666,8 +3683,14 @@ int ha_mroonga::read_range_next()
int ha_mroonga::wrapper_ft_init()
{
+ int error;
MRN_DBUG_ENTER_METHOD();
- DBUG_RETURN(0);
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_index_init(table_share->primary_key, FALSE);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
}
int ha_mroonga::default_ft_init()
@@ -3684,6 +3707,33 @@ int ha_mroonga::ft_init()
DBUG_RETURN(default_ft_init());
}
+void ha_mroonga::wrapper_ft_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->ha_index_end();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::default_ft_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::ft_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ wrapper_ft_end();
+ else
+ default_ft_end();
+ DBUG_VOID_RETURN;
+}
+
FT_INFO *ha_mroonga::wrapper_ft_init_ext(uint flags, uint key_nr, String *key)
{
MRN_DBUG_ENTER_METHOD();
@@ -3768,6 +3818,7 @@ FT_INFO *ha_mroonga::default_ft_init_ext(uint flags, uint key_nr, String *key)
FT_INFO *ha_mroonga::ft_init_ext(uint flags, uint key_nr, String *key)
{
MRN_DBUG_ENTER_METHOD();
+ fulltext_searching = TRUE;
if (share->wrapper_mode)
DBUG_RETURN(wrapper_ft_init_ext(flags, key_nr, key));
DBUG_RETURN(default_ft_init_ext(flags, key_nr, key));
@@ -4192,7 +4243,8 @@ int ha_mroonga::reset()
error = wrapper_reset();
else
error = default_reset();
- ignoring_duplicated_key = false;
+ ignoring_duplicated_key = FALSE;
+ fulltext_searching = FALSE;
DBUG_RETURN(error);
}
Modified: ha_mroonga.h (+5 -0)
===================================================================
--- ha_mroonga.h 2011-06-18 05:37:54 +0000 (2dec0ac)
+++ ha_mroonga.h 2011-06-18 06:22:52 +0000 (933133f)
@@ -61,6 +61,7 @@ class ha_mroonga: public handler
MRN_SHARE *share;
KEY *wrap_key_info;
KEY *base_key_info;
+ key_part_map pk_keypart_map
MEM_ROOT mem_root;
public:
handler *wrap_handler;
@@ -101,6 +102,7 @@ private:
bool fast_order_limit_with_index;
bool ignoring_duplicated_key;
+ bool fulltext_searching;
public:
ha_mroonga(handlerton *hton, TABLE_SHARE *share);
@@ -161,6 +163,7 @@ public:
int read_range_next();
int ft_init();
+ void ft_end()
FT_INFO *ft_init_ext(uint flags, uint inx, String *key);
int ft_read(uchar *buf);
@@ -312,6 +315,8 @@ private:
int default_read_range_next();
int wrapper_ft_init();
int default_ft_init();
+ void wrapper_ft_end();
+ void default_ft_end();
FT_INFO *wrapper_ft_init_ext(uint flags, uint key_nr, String *key);
FT_INFO *default_ft_init_ext(uint flags, uint key_nr, String *key);
int wrapper_ft_read(uchar *buf);