summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorserg@infomag.ape.relarn.ru <>2000-08-28 17:43:58 +0400
committerserg@infomag.ape.relarn.ru <>2000-08-28 17:43:58 +0400
commiteb8ad15751606cf9203caff2515ac868dd03c8d0 (patch)
tree485c3b99b43fae8c2b58b7a5ab72b383265423d2 /sql/sql_select.cc
parent6236dfc7a34cd528b5d11fad4ce32d230720ce44 (diff)
downloadmariadb-git-eb8ad15751606cf9203caff2515ac868dd03c8d0.tar.gz
ft_optimization: identical queries merging. collection -> fulltext. Bugs fixed.
**************** !!! NOTE EVERYBODY: SYNTAX CHANGED !!! ******************** There's no COLLECTIONs now, full-text indexes can be created via the word FULLTEXT, which should be used like UNIQUE.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc41
1 files changed, 22 insertions, 19 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index c779b9f555a..6578e3b717a 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1284,11 +1284,11 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
KEYUSE keyuse;
keyuse.table= cond_func->table;
- keyuse.val = cond_func->key_item();
+ keyuse.val = cond_func;
keyuse.key = cond_func->key;
#define FT_KEYPART (MAX_REF_PARTS+10)
keyuse.keypart=FT_KEYPART;
- keyuse.used_tables=keyuse.val->used_tables();
+ keyuse.used_tables=cond_func->key_item()->used_tables();
VOID(insert_dynamic(keyuse_array,(gptr) &keyuse));
}
@@ -1670,7 +1670,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
else
tmp=best_time; // Do nothing
}
- } /* not ftkey */
+ } /* not ft_key */
if (tmp < best_time - records/(double) TIME_FOR_COMPARE)
{
best_time=tmp + records/(double) TIME_FOR_COMPARE;
@@ -1882,26 +1882,29 @@ get_best_combination(JOIN *join)
keyinfo=table->key_info+key;
if (ftkey)
{
- ft_tmp=keyuse->val->val_str(&tmp2);
+ Item_func_match *ifm=(Item_func_match *)keyuse->val;
+
+ ft_tmp=ifm->key_item()->val_str(&tmp2);
length=ft_tmp->length();
keyparts=1;
+ ifm->join_key=1;
}
else
{
- keyparts=length=0;
- do
- {
- if (!((~used_tables) & keyuse->used_tables))
- {
- if (keyparts == keyuse->keypart)
- {
- keyparts++;
- length+=keyinfo->key_part[keyuse->keypart].length +
- test(keyinfo->key_part[keyuse->keypart].null_bit);
- }
- }
- keyuse++;
- } while (keyuse->table == table && keyuse->key == key);
+ keyparts=length=0;
+ do
+ {
+ if (!((~used_tables) & keyuse->used_tables))
+ {
+ if (keyparts == keyuse->keypart)
+ {
+ keyparts++;
+ length+=keyinfo->key_part[keyuse->keypart].length +
+ test(keyinfo->key_part[keyuse->keypart].null_bit);
+ }
+ }
+ keyuse++;
+ } while (keyuse->table == table && keyuse->key == key);
} /* not ftkey */
/* set up fieldref */
@@ -1924,7 +1927,7 @@ get_best_combination(JOIN *join)
byte *key_buff=j->ref.key_buff;
if (ftkey)
{
- j->ref.items[0]=keyuse->val;
+ j->ref.items[0]=((Item_func*)(keyuse->val))->key_item();
if (!keyuse->used_tables &&
!(join->select_options & SELECT_DESCRIBE))
{