flaws list)
TODO:
* verify that no sequence of API calls produces SIGSEGV.
That is, verify that mysql_stmt_init -> mysql_stmt_fetch is OK,
or mysql_stmt_prepare -> mysql_stmt_fetch_column is OK and sets
meaningful error.
* remove alloc_stmt_fields call
* revise stmt->state codes and statement states.
* there are other items in prepared statements 'to fix' document.
Done:
- cleanups and comments
- revision of prepared statement error codes.
- mysql_stmt_prepare is now can always be called (that is, you can reprepare
a statement)
- new implementation of mysql_stmt_close and fetch cancellation
include/errmsg.h:
- CR_NOT_ALL_PARAMS_BOUND - this error code wasn't used until now.
Apparently it was added in advance, but then interface of
mysql_stmt_bind_param changed. Now it's not possible to bind only some
parameters - either all or none of parameters are bound.
This error code is renamed to CR_PARAMS_NOT_BOUND
- CR_FETCH_CANCELLED - error code set on server side when fetch from
MYSQL_RES or MYSQL_STMT (in blocking mode) was cancelled because of
intercepting call to mysql_stmt_close
- CR_NO_DATA - this is proposed error code to return from
mysql_stmt_fetch_column if no row was fetched (by any type of fetch).
We always can fall back to CR_COMMANDS_OUT_OF_SYNC though.
Need reviewer's opinion on this one.
include/mysql.h:
- added unbuffered_fetch_owner member to MYSQL to point to MYSQL_RES
or MYSQL_STMT which is used to fetch result at the moment.
This is to be able to set CR_FETCH_CANCELLED error without fantoms.
- added unbuffered_fetch_cancelled boolean variable to MYSQL_STMT and
MYSQL_RES structures
- rename PREP_STMT_STATE -> enum enum_mysql_stmt_state
- members of MYSQL_STMT ordered by size.
- removed members of MYSQL_STMT: current_row, result_buffered,
last_fetched_column, last_fetched_buffer, query
- renamed members of MYSQL_STMT: param_buffers -> bind_param_done,
res_buffers -> bind_result_done
- now mysql_stmt_fetch calls stmt->read_row_func to read row either from
buffer or from network.
include/sql_common.h:
declaration for flush_use_result
libmysql/client_settings.h:
stmt_close declaration removed
libmysql/errmsg.c:
Error messages for changed and added error codes.
libmysql/libmysql.c:
Many changes:
- some unused variables removed
- cleanups
- better error reporting
- some function calls commented
- alloc_stmt_fields is now called right after execute, to not read
mysql->fields of some other statement
- new implementation of mysql_stmt_fetch - this is also with cursor
fetch in mind (to implement cursor fetch I'll just need to write
special read_row function for it, so this change will be local)
- implementation of fetch cancellation, including complete rewrite of
mysql_stmt_close
- now mysql_stmt_free_result doesn't free results of other statements.
sql-common/client.c:
- implementation of flush_use_result
- implementation of fetch cancellation
- changed behaviour of mysql_close in regard to mysql_stmt_close - now
mysql_close just set stmt->mysql to 0
exceed unsigned long limit.
include/config-win.h:
implementation of ULL macro for Windows
include/my_global.h:
ULL macro defined: we need this macro because ULL qualifier is not defined
on systems withoug unsigned long long
sql/item_func.cc:
new ULL macro caused conflict with class for user level lock ULL.
ULL renamed to User_level_lock
sql/item_func.h:
ULL -> User_level_lock
sql/mysql_priv.h:
merge error fixed: LL defined in my_global.h
sql/mysqld.cc:
ULL macro used for long long constants to fix compilation failure on gcc 3.*
sql/sql_class.h:
ULL renamed to User_level_lock
COM_EXECUTE packet" and #2795 "prepare + execute without bind_param crashes
server" and #2473 "seg fault running tests/client_test.c":
- length checking added to packet parser
- default impelemntation of Item_param::set_param_func will work in
case of malformed packet.
No test cases are possible in our test suite, as there are no tests
operating on protocol layer.
sql/item.cc:
Default set_param function implemented: this is to not sigsegv in case
of malformed packet with no parameters data.
sql/item.h:
- Item_param constructor moved to .cc to be able to assign set_param_func.
- now embedded and ordinary versions of set_param have the same signature.
sql/mysql_priv.h:
mysql_stmt_execute now requires packet_length
sql/sql_parse.cc:
mysql_stmt_execute now requires packet length.
sql/sql_prepare.cc:
- length checking added to all functions working with network packet.
- set_param_func's in embedded and ordinary version now have the same
signature
sql/gstream.cc:
checking for ending \0 changed with m_limit
sql/gstream.h:
checking for ending \0 changed with m_limit
sql/item_geofunc.cc:
we should check for null value before we use val_str result
sql/item_strfunc.cc:
get rid of annoying warnings
sql/spatial.h:
error about size_t type fixed
mysql-test/r/create.result:
Changed ERROR -> NOTE (for enum/set)
sql/lock.cc:
Removed not needed test (table_list->db is always set)
sql/sql_repl.cc:
Removed not needed test
sql/sql_table.cc:
ERROR -> NOTE
Removed not needed test
strings/strtod.c:
Portabilty fix. (DBL_MAX *10 is not safe)
sigsegv protection (exp overflow)
don't return inf!
use errno=EOVERFLOW to signal an overflow (as my_strntod uses errno anyway)
if errno will be too slow, my_strtod can be changed to return overflow status in a parameter (like my_strntod does)
include/m_string.h:
EOVERFLOW
mysql-test/r/insert.result:
updated
mysql-test/r/mysqldump.result:
updated
strings/strtod.c:
sigsegv protection (exp overflow)
don't return inf!
use errno=EOVERFLOW to signal an overflow (as my_strntod uses errno anyway)
if errno will be too slow, it my_strtod can be changed to return overflow status in a parameter (like my_strntod does)
into eagle.mysql.r18.ru:/home/vva/work/BUG_856/mysql-4.1
mysql-test/r/create.result:
Auto merged
mysql-test/t/create.test:
Auto merged
sql/sql_table.cc:
Auto merged
mysql-test/r/create.result:
added test for bug #856 'Naming a key "Primary" causes trouble'
mysql-test/t/create.test:
added test for bug #856 'Naming a key "Primary" causes trouble'
include/mysqld_error.h:
added ER_DUPLICATED_VALUE_IN_TYPE
mysql-test/r/create.result:
added test for bug #1427 "enum allows duplicate values in the list"
mysql-test/t/create.test:
added test for bug #1427 "enum allows duplicate values in the list"
sql/share/czech/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/danish/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/dutch/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/english/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/estonian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/french/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/german/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/greek/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/hungarian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/italian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/japanese/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/korean/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/norwegian-ny/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/norwegian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/polish/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/portuguese/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/romanian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/russian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/serbian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/slovak/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/spanish/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/swedish/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/ukrainian/errmsg.txt:
added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/sql_table.cc:
added function check_duplicates_in_interval and
calling it from mysql_create_table for enum and set
MySQL with InnoDB on IBM AIX 5.2 in 64bit mode (which requires a special
AR flag)
innobase/configure.in:
- added AC_PROG_LIBTOOL to be able to compile MySQL with InnoDB on IBM
AIX 5.2 in 64bit mode (which requires a special AR flag)
set_mysql_error is deployed
libmysql/client_settings.h:
declaration for set_mysql_error
libmysql/libmysql.c:
- set_mysql_error moved to client.c
- st_stmt_errmsg -> set_stmt_error
sql-common/client.c:
deployment of set_mysql_error
Now we use virtual calls instead and redirect VMT pointer of the
geometry object with 'new' operation
sql/field.cc:
Usage of the Geometry class changed
sql/item_geofunc.cc:
Usage of the Geometry class changed
sql/spatial.cc:
Now we rewrite the real VMT of the object with new operation
sql/spatial.h:
No need for the VMT-like structure and pointers to it
sql/sql_yacc.yy:
enum items was renamed accordingly to coding standards
mysql-test/r/mysqldump.result:
added test for bug #2591 "mysqldump quotas names inconsistently"
mysql-test/t/mysqldump.test:
added test for bug #2591 "mysqldump quotas names inconsistently"
mysql-test/r/subselect.result:
Auto merged
mysql-test/t/subselect.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged