"MySQL server does not detect if garbage chars at the end of query":
Detect garbage chars at the end of the query or at the end of a query
for a prepared statement (which happens if mysql_real_query() or mysql_prepare()
were called with a too big 'length' parameter (bigger than the real intended
length of the query: then we receive a query + garbage characters from the
client). This resulted in garbage chars written into the binlog.
Now instead the client receives something like:
'You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server version for the right syntax to use near '!stmt'
at line 1' i.e. the server is pointing at the weird tail of the query
(this '!stmt' are the garbage chars sent by the client).
All tests pass, except mysqldump.test and ctype_utf8.test but they failed
before the patch.
sql/sql_parse.cc:
Detect garbage chars at the end of the query
(which happens if mysql_real_query() was called with a too big 'length'
parameter (bigger than the real intended length of the query: then
we receive a query + garbage characters from the client).
sql/sql_prepare.cc:
Detect garbage chars at the end of the query
(which happens if mysql_prepare() was called with a too big 'length'
parameter (bigger than the real intended length of the query: then
we receive a query + garbage characters from the client).
tests/client_test.c:
The change to sql_parse.cc and sql_prepare.cc rightfully gives many
syntax errors to tests/client_test.c which is full of
mysql_prepare(mysql, "SHOW TABLES", 100).
Correcting all these commands.
added setting of 'neg' in Item_param::set_time() (looks like the only forgotten
member).
It's the second place I find where 'neg' was forgotten.
The symptom was unexpected negative times in the binary log when running
tests/client_test.c (test_date() in fact):
# at 43009
#040210 15:46:42 server id 1 log_pos 43009 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1076424402;
INSERT INTO test_date VALUES('2000-01-10 11:16:20','-11:16:20' etc
sql/item.cc:
Don't forget to copy 'neg'.
Don't show PSEUDO_THREAD_ID in SHOW VARIABLES because:
- we don't want people to discover this variable as it could never do good to
set it (it was designed for use by mysqlbinlog only, so that a thread can have
several temp tables of the same name at the same time)
- if we show it in SHOW VARIABLES, Mysql Administrator will display it and
this will force us to put a description, so all MySQL Administrator user
will be aware of this variable, some may have the idea to set it with a SET
command, and then it will cause bad things.
The variable is still settable, and still visible with SELECT @@.
sql/set_var.cc:
Don't show PSEUDO_THREAD_ID in SHOW VARIABLES because:
- we don't want people to discover this variable as it could never do good to
set it (it was designed for use by mysqlbinlog only, so that a thread can have
several temp tables of the same name at the same time)
- if we show it in SHOW VARIABLES, Mysql Administrator will display it and
this will force us to put a description, so all MySQL Administrator user
will be aware of this variable, some may have the idea to set it with a SET
command, and then it will cause bad things.
The variable is still settable, and still visible with SELECT @@.
now we execute only one first select during mysql_real_query
others - during 'mysql_next_result'
include/mysql.h:
'virtual' next_result added
libmysql/client_settings.h:
cli_next_result declaration added
libmysql/libmysql.c:
mysql_next_result now works in embedded library as well
libmysqld/lib_sql.cc:
emb_next_result implemented
sql/sql_class.h:
fields to store the rest of the query added
sql/sql_parse.cc:
Saving the rest of the query added for embedded case
sql/sql_derived.cc:
memory leack fixed
sql/sql_lex.cc:
flag to avoid double cleaning
sql/sql_lex.h:
flag to avoid double cleaning
sql/sql_select.cc:
right way to cleanup JOIN_TAB
sql/sql_select.h:
right way to cleanup JOIN_TAB
sql/sql_union.cc:
flag to avoid double cleaning
into sanja.is.com.ua:/home/bell/mysql/bk/work-derived2-4.1
mysql-test/r/derived.result:
Auto merged
mysql-test/t/derived.test:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_update.cc:
Auto merged
Removed warnings from test suite
mysql-test/r/ctype_utf8.result:
Update results after fix of return argument from date_format()
mysql-test/r/date_formats.result:
Remove unnecessary warnings
mysql-test/r/type_decimal.result:
Remove unnecessary warnings
mysql-test/r/warnings.result:
Remove unnecessary warnings
mysql-test/t/ctype_utf8.test:
Fixed test
mysql-test/t/date_formats.test:
Remove unnecessary warnings
mysql-test/t/type_decimal.test:
Remove unnecessary warnings
mysql-test/t/warnings.test:
Remove unnecessary warnings
sql/field.cc:
Optimize
sql/item_timefunc.cc:
Ensure that result from date_format() is binary
strings/ctype-simple.c:
Better names for arguments
mysql-test/r/derived.result:
test of error handling in derived tables with UPDATE & DELETE
mysql-test/t/derived.test:
test of error handling in derived tables with UPDATE & DELETE
sql/mysql_priv.h:
opened tables counter added to avoid loop of tables calculating in lock_tables
sql/sql_acl.cc:
opened tables counter added to avoid loop of tables calculating in lock_tables, here it is just for compatibility
sql/sql_base.cc:
removed unneeded assignment
opened tables counter added to avoid loop of tables calculating in lock_tables
commentary fixed
sql/sql_derived.cc:
mysql_derived made static
variable res moved in place where it used
priveleges written in correct place
sql/sql_handler.cc:
opened tables counter added to avoid loop of tables calculating in lock_tables
sql/sql_parse.cc:
mistyping in commentary fixed
Fixed output from mysqlbinlog when using --skip-comments
Fixed warnings from valgrind
Fixed ref_length when used with HEAP tables
More efficent need_conversion()
Fixed error handling in UPDATE with not updateable tables
Fixed bug in null handling in CAST to signed/unsigned
client/client_priv.h:
cleanup & added OPT_COMPACT
client/mysqldump.c:
Added option --compact to get a compact readable dump.
Ensure that SET CHARACTER_SET_CLIENT is not done if we have not remembered the old character set
Print optimization comments even if --skip-comments are given as these are not true comments. (Before these where only printed at end, which was a bug)
mysql-test/r/cast.result:
More cast tests
mysql-test/r/derived.result:
Removed warnings
mysql-test/r/mysqldump.result:
Update results after fixing mysqlbinlog
mysql-test/r/query_cache.result:
Make test usable with --extern
more tests
mysql-test/r/rpl_until.result:
Make test repeatable under valgrind
mysql-test/r/sql_mode.result:
Fix test result
mysql-test/r/subselect.result:
Make test smaller. Update wrong results
mysql-test/t/cast.test:
More cast tests
mysql-test/t/derived.test:
Removed warnings
mysql-test/t/query_cache.test:
Make test usable with --extern
more tests
mysql-test/t/rpl_until.test:
fix for valgrind. Becasue of unknown reason one got 'Slave_SQL_Running=yes' in this setup
mysql-test/t/subselect.test:
Make test case smaller
sql/field.cc:
Updated need_conversion() to use new arguments
sql/ha_heap.cc:
Moved initialization of ref_length to right place. This fixed problem that we had a ref_length of 8 for heap tables, which was not efficent.
sql/item_func.cc:
Cleanup
sql/item_func.h:
Fixed bug in null_handling for cast to signed/unsigned
sql/item_strfunc.cc:
Optimized/cleaned up Item_func_conv_charset3
sql/item_sum.cc:
Cleanup.
Ensure that some flag variables are cleared in cleanup()
sql/item_sum.h:
Fixed references to uninitialized memory
sql/opt_range.cc:
Fixed spelling error
sql/sql_class.cc:
Fixed wrong return code, which could case protocol problems
sql/sql_class.h:
After merge fix
sql/sql_prepare.cc:
Added comments
sql/sql_show.cc:
Cleanup
sql/sql_string.cc:
Optimzed usage of need_conversion().
- Removed not used argument
- Save diff lenght in 'offset' to not have to recalculate length several times.
Cleaned up comment
Optimized copy_aligned() based on the knowledge that it's only called when you have wrong data
sql/sql_string.h:
Updated need_conversion() and copy_aligned() to use new arguments
sql/sql_update.cc:
Fixed error handling with non-updateable tables
sql/sql_yacc.yy:
Ensure that lex->lock_options are set correctly (to get rid of warnings from valgrind)
Ensure that cast_type sets lex->charset and lex->length. Without these CONVERT() didn't work properly
into sanja.is.com.ua:/home/bell/mysql/bk/work-derived2-4.1
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_select.h:
Auto merged
sql/sql_update.cc:
Auto merged
mysql-test/r/mysqldump.result:
added test for
bug #2592 mysqldump doesn't quote "tricky" names correctly
please note, output's still looking wrong because of bug #2593
it will be fixed when fix for bug #2593 will be pushed
mysql-test/t/mysqldump.test:
added test for bug
#2592 mysqldump doesn't quote "tricky" names correctly
sql/sql_lex.cc:
fixed processing of multibyte quoted variables
mysql-test/r/subselect.result:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/opt_range.h:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_class.cc:
Auto merged
Added 'select_to_file' class to be able to merge identical code for select_export and select_dump
client/mysql.cc:
Print mysql_insert_id() in 'status'
mysys/charset.c:
after merge fixup
sql/item_func.cc:
Code cleanup + new comments
sql/opt_range.cc:
Added SQL_SELECT::cleanup() to make it easier to reuse SQL_SELECT item's for sub selects.
sql/opt_range.h:
Added SQL_SELECT::cleanup() to make it easier to reuse SQL_SELECT item's for sub selects.
sql/sql_class.cc:
Added 'select_to_file' class to be able to merge identical code for select_export and select_dump
sql/sql_class.h:
Added 'select_to_file' class to be able to merge identical code for select_export and select_dump
sql/sql_select.cc:
Fixed bug when calling 'delete select' in sub selects. (Bug 2479)
(Test case is already commited to global source repository)
Emit "TYPE=" for 4.0 and 3.23 compatible modes
mysql-test/r/mysqldump.result:
Bug#2634
New test case
mysql-test/t/mysqldump.test:
Bug#2634
New test case
we don't need opt_range.h and opt_range.cc files at all.
BitKeeper/deleted/.del-opt_ft.cc~2048ffa561f9c59:
Delete: sql/opt_ft.cc
BitKeeper/deleted/.del-opt_ft.h~24aac1d29304599a:
Delete: sql/opt_ft.h
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
sql/sql_yacc.yy:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/key_cache.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/t/preload.test:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/key_cache.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
mysql-test/r/preload.result:
Fixed bug #2602 in CACHE INDEX, LOAD INDEX
(BUG#2120 sfter merge)
mysql-test/r/derived.result:
correct results of derived tble EXPLAIN
test of "Using Index" with derived tables
mysql-test/t/derived.test:
test of "Using Index" with derived tables
sql/mysql_priv.h:
way to force derived table save JOIN after execution
sql/sql_derived.cc:
way to force derived table save JOIN after execution
sql/sql_lex.h:
way to force derived table save JOIN after execution
sql/sql_select.cc:
make JOIN::prepare, JOIN::optimize only once for EXPLAIN of derived table
into sanja.is.com.ua:/home/bell/mysql/bk/work-derived2-4.1
sql/mysql_priv.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
fixed BUG#2120 and other problem with EXPLAINing derived tables
mysql-test/r/derived.result:
correct tables names & Co in derived tables
test case for BUG#2120
mysql-test/t/derived.test:
test case for BUG#2120
sql/mysql_priv.h:
derived tables processing moved after open/locking all tables (in open_and_lock_tables)
sql/repl_failsafe.cc:
correct initialization of TABLE_LIST
sql/sql_acl.cc:
used simple table opening without derived table processing to avoid unneeded initialization of SELECT_LEX
sql/sql_base.cc:
derived tables processing moved after open/locking all tables (in open_and_lock_tables)
sql/sql_delete.cc:
all tables processing is done during opening
sql/sql_derived.cc:
derived tables processing moved after open/locking all tables (in open_and_lock_tables) to sutisfy "all query tables locking" at the moment
sql/sql_insert.cc:
all tables processing is done during opening
correct initialization of TABLE_LIST
sql/sql_lex.cc:
now table list will be created for whole query
layout fix
correct check of updated table in subqueries
sql/sql_lex.h:
now table list will be created for whole query
correct check of updated table in subqueries
sql/sql_olap.cc:
THIS FUNCTION IS USED NOWHERE
it will be good to remove it at all (handle_olaps)
sql/sql_parse.cc:
derived tables processing moved after open/locking all tables (in open_and_lock_tables)
sql/sql_prepare.cc:
new creating list parameters
all tables processing is done during opening
sql/sql_select.cc:
all tables processing is done during opening
sql/sql_select.h:
now it used only within file where is defined
sql/sql_udf.cc:
used simple table opening without derived table processing to avoid unneeded initialization of SELECT_LEX
sql/sql_update.cc:
all tables processing is done during opening