mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user