diff options
author | unknown <monty@donna.mysql.com> | 2000-08-15 20:09:37 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-08-15 20:09:37 +0300 |
commit | 8b3993bc017512c3bf20315b12d1a8b7a6870381 (patch) | |
tree | 5f72e7444fbc3c8d944a66b54b26550a04e4f0be /sql/sql_select.cc | |
parent | 99110483b2271095dd8b2cb655e3a054f6f7c5a5 (diff) | |
download | mariadb-git-8b3993bc017512c3bf20315b12d1a8b7a6870381.tar.gz |
Fixed for Ia64 + delayed key creation + a lot of small bug fixes
Docs/Makefile.am:
Removed typo
Docs/internals.texi:
Added documentation about filesort
Docs/manual.texi:
Lots of changes, including information about the password in the mysql.user table
config.h.in:
***MISSING WEAVE***
heap/hp_rnext.c:
Fix of reading of read-next
include/config-win.h:
Fix for Ia64
include/global.h:
Fix for Ia64
include/my_base.h:
Fix for Ia64
include/myisam.h:
New repair options
isam/_dynrec.c:
Typo fixes
isam/_search.c:
Fix for Ia64
merge/rrnd.c:
Fix of ORDER BY for MERGE tables
myisam/ft_eval.c:
Fix for Ia64
myisam/ft_parser.c:
Fix for Ia64
myisam/ft_static.c:
Portability fixes
myisam/mi_check.c:
Fix for Ia64 + delay key creation
myisam/mi_locking.c:
Portability fixes
myisam/myisamdef.h:
Fixes for automatic table repair
myisam/myisampack.c:
Version number increment
myisammrg/myrg_rrnd.c:
Fix of ORDER BY for mymerge tables
mysql.proj:
Updated
mysys/charset.c:
Fix for Ia64
mysys/mf_casecnv.c:
Fix for Ia64
mysys/mf_pack.c:
Fix for Ia64
mysys/mf_path.c:
Fix for Ia64
mysys/mf_wfile.c:
Fix for Ia64
mysys/my_alloc.c:
Fix for Ia64
mysys/my_lib.c:
Fix for Ia64
mysys/my_lread.c:
Fix for Ia64
mysys/my_lwrite.c:
Fix for Ia64
mysys/my_winthread.c:
Fix for Ia64
mysys/string.c:
Fix for Ia64
mysys/thr_alarm.c:
Fix for Ia64
mysys/thr_rwlock.c:
Fix of scheduler bug for systems without rw_locks
regex/regcomp.c:
Fix for Ia64
regex/regex.h:
Fix for Ia64
regex/regex2.h:
Fix for Ia64
scripts/mysqlhotcopy.sh:
Explicit version number (because of bitkeeper)
sql-bench/bench-init.pl.sh:
New help message
sql-bench/server-cfg.sh:
Updates for postgreSQL 7.0
sql/ChangeLog:
Changelog
sql/field.cc:
Fix of datetime function handling
sql/filesort.cc:
More comments
sql/gen_lex_hash.cc:
More options
sql/ha_berkeley.cc:
Fix for part key reading
sql/ha_berkeley.h:
Indentation
sql/ha_myisam.cc:
Fix for delayed key creation
sql/ha_myisam.h:
Fix for delayed key creation
sql/handler.h:
Fix for delayed key creation
sql/item_func.cc:
Fix of crash when using constant expression with UDF functions in WHERE
sql/item_timefunc.cc:
Fix of datetime function handling
sql/mini_client.cc:
Portability fix
sql/mysql_priv.h:
Optimization of select initialization
sql/mysqld.cc:
Portability fixes, thread cache and min argument for connect_timeout
sql/sql_load.cc:
Delayed key handling
sql/sql_parse.cc:
Portability fixes and select initialization optimization
sql/sql_select.cc:
Small optimization + more comments
sql/sql_table.cc:
Fix default value adding to blob with alter table + delayed index creation
sql/sql_yacc.yy:
Optimized select initialization
sql/structs.h:
Fix for part key read
strings/ctype-sjis.c:
Fix for Ia64
strings/ctype-tis620.c:
Fix for Ia64
strings/t_ctype.h:
bk fix
support-files/mysql.spec.sh:
Added comment
vio/viotest-ssl.cc:
bk fix
vio/viotest-sslconnect.cc:
bk fix
vio/viotest.cc:
bk fix
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 030b6f6fb5c..749bbb5b1f5 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1939,35 +1939,37 @@ get_best_combination(JOIN *join) } else { - for (i=0 ; i < keyparts ; keyuse++,i++) - { - while (keyuse->keypart != i || - ((~used_tables) & keyuse->used_tables)) - keyuse++; /* Skipp other parts */ - - uint maybe_null= test(keyinfo->key_part[i].null_bit); - j->ref.items[i]=keyuse->val; // Save for cond removal - if (!keyuse->used_tables && - !(join->select_options & SELECT_DESCRIBE)) - { // Compare against constant - store_key_item *tmp=new store_key_item(keyinfo->key_part[i].field, - (char*)key_buff + maybe_null, - maybe_null ? - (char*) key_buff : 0, - keyinfo->key_part[i].length, - keyuse->val); - if (current_thd->fatal_error) - { - return TRUE; + THD *thd=current_thd; + for (i=0 ; i < keyparts ; keyuse++,i++) + { + while (keyuse->keypart != i || + ((~used_tables) & keyuse->used_tables)) + keyuse++; /* Skipp other parts */ + + uint maybe_null= test(keyinfo->key_part[i].null_bit); + j->ref.items[i]=keyuse->val; // Save for cond removal + if (!keyuse->used_tables && + !(join->select_options & SELECT_DESCRIBE)) + { // Compare against constant + store_key_item *tmp=new store_key_item(keyinfo->key_part[i].field, + (char*)key_buff + + maybe_null, + maybe_null ? + (char*) key_buff : 0, + keyinfo->key_part[i].length, + keyuse->val); + if (thd->fatal_error) + { + return TRUE; + } + tmp->copy(); } - tmp->copy(); + else + *ref_key++= get_store_key(keyuse,join->const_table_map, + &keyinfo->key_part[i], + (char*) key_buff,maybe_null); + key_buff+=keyinfo->key_part[i].store_length; } - else - *ref_key++= get_store_key(keyuse,join->const_table_map, - &keyinfo->key_part[i], - (char*) key_buff,maybe_null); - key_buff+=keyinfo->key_part[i].store_length; - } } /* not ftkey */ *ref_key=0; // end_marker if (j->type == JT_FT) /* no-op */; @@ -2319,8 +2321,11 @@ join_free(JOIN *join) if (join->table) { - /* only sorted table is cached */ - if (join->tables > join->const_tables) + /* + Only a sorted table may be cached. This sorted table is always the + first non const table in join->table + */ + if (join->tables > join->const_tables) // Test for not-const tables free_io_cache(join->table[join->const_tables]); for (tab=join->join_tab,end=tab+join->tables ; tab != end ; tab++) { @@ -2858,23 +2863,24 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) Item_func_isnull *func=(Item_func_isnull*) cond; Item **args= func->arguments(); + THD *thd=current_thd; if (args[0]->type() == Item::FIELD_ITEM) { Field *field=((Item_field*) args[0])->field; if (field->flags & AUTO_INCREMENT_FLAG && !field->table->maybe_null && - (current_thd->options & OPTION_AUTO_IS_NULL) && - current_thd->insert_id()) + (thd->options & OPTION_AUTO_IS_NULL) && + thd->insert_id()) { COND *new_cond; if ((new_cond= new Item_func_eq(args[0], new Item_int("last_insert_id()", - current_thd->insert_id(), + thd->insert_id(), 21)))) { cond=new_cond; - cond->fix_fields(current_thd,0); + cond->fix_fields(thd,0); } - current_thd->insert_id(0); // Clear for next request + thd->insert_id(0); // Clear for next request } /* fix to replace 'NULL' dates with '0' (shreeve@uci.edu) */ else if (((field->type() == FIELD_TYPE_DATE) || @@ -2885,7 +2891,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value) if ((new_cond= new Item_func_eq(args[0],new Item_int("0", 0, 2)))) { cond=new_cond; - cond->fix_fields(current_thd,0); + cond->fix_fields(thd,0); } } } @@ -6229,6 +6235,11 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab) } if (thd->fatal_error) DBUG_RETURN(TRUE); + + /* + Here we pass 0 as the first argument to fix_fields that don't need + to do any stack checking (This is already done in the initial fix_fields). + */ cond->fix_fields((THD *) 0,(TABLE_LIST *) 0); if (join_tab->select) { |