diff options
author | unknown <monty@mashka.mysql.fi> | 2003-02-12 21:55:37 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-02-12 21:55:37 +0200 |
commit | fcb61f5917ee69bba91bd6a926db2eab4ac3eeb5 (patch) | |
tree | 3ac37e452f15c8f05e9d1f338a6050281f838048 /sql/sql_base.cc | |
parent | 363fd89b92de2fc58e7910f7a27684308656ebda (diff) | |
download | mariadb-git-fcb61f5917ee69bba91bd6a926db2eab4ac3eeb5.tar.gz |
Fixed a lot of wrong memory references as reported by valgrind
Portability fixes
Added new client function: mysql_get_server_version()
New server help code (From Victor Vagin)
Fixed wrong usage of binary()
Disabled RTREE usage for now.
BitKeeper/etc/ignore:
added scripts/fill_help_tables.sql
client/mysql.cc:
Some fixes when using 'help'
cmd-line-utils/libedit/compat.h:
Portability fix
cmd-line-utils/libedit/fgetln.c:
Portability fix
include/mysql.h:
Added new client function: mysql_get_server_version()
libmysql/libmysql.c:
Added new client function: mysql_get_server_version()
libmysqld/libmysqld.c:
Fixed prototype
mysql-test/install_test_db.sh:
Added creation of help tables
mysql-test/r/connect.result:
Added help tables
mysql-test/r/myisam.result:
Test of RTREE index
mysql-test/r/type_ranges.result:
updated results
mysql-test/t/myisam.test:
Test of RTREE index
mysql-test/t/type_ranges.test:
Updated test
mysys/charset.c:
Indentation change
mysys/my_symlink.c:
Removed compiler warning
scripts/fill_help_tables.sh:
Update for new help tables
sql/field.cc:
Indentation changes
sql/filesort.cc:
Optimized character set usage
sql/item_cmpfunc.cc:
Fix wrong usage of binary()
sql/item_cmpfunc.h:
Fix wrong usage of binary()
sql/item_func.cc:
Fix wrong usage of binary()
sql/item_func.h:
Fix wrong usage of binary()
sql/item_strfunc.cc:
Fix wrong usage of binary()
sql/item_sum.cc:
Fix wrong usage of binary()
sql/item_sum.h:
Fix wrong usage of binary()
sql/key.cc:
Indentation change
sql/lex.h:
HELP -> HELP_SYM
sql/mysql_priv.h:
Make get_field() more general
sql/password.c:
Indentation change + variable initialisation moved
sql/sql_acl.cc:
Make get_field() more general
sql/sql_base.cc:
Added comments + assertion for double call to mysql_lock_tables
sql/sql_cache.cc:
Indentation changes
sql/sql_class.h:
Added need_strxnfrm to SORT_FIELD to be able to optimise character set handling in filesort
sql/sql_derived.cc:
Renamed variables
sql/sql_help.cc:
New help functions (from Victor Vagin)
sql/sql_lex.cc:
Removed variables that doesn't have to be initialized for each query
sql/sql_lex.h:
Removed not used variable (olap)
sql/sql_parse.cc:
Fixed (not fatal) access of unitialized memory
Indentation / code cleanup
sql/sql_prepare.cc:
Indentaion cleanup
sql/sql_table.cc:
Disabled RTREE until 5.0
sql/sql_udf.cc:
Make get_field() more general
sql/sql_yacc.yy:
Removed access to uninitialized memory
Always set offset_limit and select_limit when using LIMIT (removed warnings)
Allow usage of 'help week'
sql/table.cc:
Make get_field() more general
More comments
sql/table.h:
Fixded type of TABLE_LIST->derived
sql/time.cc:
Stricter date / datetime handling (to be able to handle timestamps with days and microseconds)
strings/ctype-bin.c:
Added cha
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 97c92ff2b8f..d3a049a11da 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1481,6 +1481,7 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type) } else { + DBUG_ASSERT(thd->lock == 0); // You must lock everything at once if ((table->reginfo.lock_type= lock_type) != TL_UNLOCK) if (!(thd->lock=mysql_lock_tables(thd,&table_list->table,1))) table= 0; @@ -1512,6 +1513,11 @@ int open_and_lock_tables(THD *thd,TABLE_LIST *tables) thd Thread handler tables Tables to lock + NOTES + You can't call lock_tables twice, as this would break the dead-lock-free + handling thr_lock gives us. You most always get all needed locks at + once. + RETURN VALUES 0 ok -1 Error @@ -1525,6 +1531,7 @@ int lock_tables(THD *thd,TABLE_LIST *tables) if (!thd->locked_tables) { + DBUG_ASSERT(thd->lock == 0); // You must lock everything at once uint count=0; for (table = tables ; table ; table=table->next) count++; @@ -1676,28 +1683,31 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length, return field; } -// Special Field pointer for find_field_in_tables returning -const Field *not_found_field= (Field*) 0x1; + /* Find field in table list. SYNOPSIS find_field_in_tables() - thd - pointer to current thread structure - item - field item that should be found - tables - tables for scaning - where - table where field found will be returned via this parameter - report_error - if FALSE then do not report error if item not found and - return not_found_field; + thd Pointer to current thread structure + item Field item that should be found + tables Tables for scaning + where Table where field found will be returned via + this parameter + report_error If FALSE then do not report error if item not found + and return not_found_field RETURN VALUES - 0 - field is not found or field is not unique, error message is - reported - not_found_field - function was called with report_error == FALSE and - field if not found, no error message reported + 0 Field is not found or field is not unique- error + message is reported + not_found_field Function was called with report_error == FALSE and + field was not found. no error message reported. found field */ +// Special Field pointer for find_field_in_tables returning +const Field *not_found_field= (Field*) 0x1; + Field * find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables, TABLE_LIST **where, bool report_error) @@ -1802,8 +1812,6 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables, return (Field*) 0; } -// Special Item pointer for find_item_in_list returning -const Item **not_found_item= (const Item**) 0x1; /* Find Item in list of items (find_field_in_tables analog) @@ -1813,24 +1821,29 @@ const Item **not_found_item= (const Item**) 0x1; SYNOPSIS find_item_in_list() - find - item to find - items - list of items - counter - to return number of found item + find Item to find + items List of items + counter To return number of found item report_error - REPORT_ALL_ERRORS - report errors, return 0 if error - REPORT_EXCEPT_NOT_FOUND - do not report 'not found' error and return not_ found_item, report other errors, return 0 - IGNORE_ERRORS - do not report errors, return 0 if error + REPORT_ALL_ERRORS report errors, return 0 if error + REPORT_EXCEPT_NOT_FOUND Do not report 'not found' error and + return not_found_item, report other errors, + return 0 + IGNORE_ERRORS Do not report errors, return 0 if error RETURN VALUES - 0 - item is not found or item is not unique, error message is - reported - not_found_item - function was called with report_error == - REPORT_EXCEPT_NOT_FOUND and item if not found, no error - message reported + 0 Item is not found or item is not unique, + error message is reported + not_found_item Function was called with + report_error == REPORT_EXCEPT_NOT_FOUND and + item was not found. No error message was reported found field - */ +// Special Item pointer for find_item_in_list returning +const Item **not_found_item= (const Item**) 0x1; + + Item ** find_item_in_list(Item *find, List<Item> &items, uint *counter, find_item_error_report_type report_error) @@ -1970,6 +1983,9 @@ int setup_fields(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables, Remap table numbers if INSERT ... SELECT Check also that the 'used keys' and 'ignored keys' exists and set up the table structure accordingly + + This has to be called for all tables that are used by items, as otherwise + table->map is not set and all Item_field will be regarded as const items. */ bool setup_tables(TABLE_LIST *tables) |