Problem: Memory overrun happened in attempts to generate
error messages (e.g. in case of incorrect XPath syntax).
Reason: set_if_bigger() was used instead of set_if_smaller().
Change: replacing wrong set_if_bigger() to set_if_smaller(),
and making minor additional code clean-ups.
mysql-test/r/xml.result:
Adding test cases for all pieces of code with
set_if_smaller() followed by my_printf_error().
mysql-test/t/xml.test:
Adding test cases for all pieces of code with
set_if_smaller() followed by my_printf_error().
sql/item_xmlfunc.cc:
- fixing incorrect set_if_bigger to set_if_smaller in two places
- getting read of unnesessary "char context[32]" variable and
using '%.*s' instead if '%s' in the error format.
into magare.gmz:/home/kgeorge/mysql/work/B28476-5.1-opt
Zero merge all except the new test
mysql-test/r/key.result:
bug #28476: zero-merge to 5.1
mysql-test/r/myisam.result:
bug #28476: merge to 5.1
mysql-test/t/key.test:
bug #28476: zero-merge to 5.1
mysql-test/t/myisam.test:
bug #28476: merge to 5.1
sql/sql_base.cc:
bug #28476: zero-merge to 5.1
sql/sql_select.cc:
bug #28476: zero-merge to 5.1
sql/table.h:
bug #28476: zero-merge to 5.1
This patch corrects a problem encountered when reading the binlog from a remote
host. The application was crashing because the buffer variable (temp_buf) in
log_event was not pointing to the incoming data. For a normal file read, this
buffer is allocated by a previous call of read_log_event. However, when reading
from a remote host, the first call to read_log_event is not executed therefore
no buffer is allocated. Furthermore, there is no need to allocate a new buffer
because the incoming stream is what needs to be read.
This patch adds the call to initialize the temp_buf variable if reading from a
remote host. It also adds a check at destroy time to ensure the temp_buf is not
freed if reading from a remote host.
client/mysqlbinlog.cc:
BUG#17654 : --read-from-remote-server causes core
This patch corrects a problem when reading from a remote host. The temp_buf
variable of the log_event class is undefined. This patch assigns the temp_buf
variable to the address of the incoming stream. This allows the print functions
to print the binlog events correctly.
mysql-test/r/rpl_row_mysqlbinlog.result:
BUG#17654 : --read-from-remote-server causes core
This patch adds the results for the test that were disabled when the bug report
was investigated. The patch also adds an additional test was added to ensure
the output of reading from a remote host is the same as reading from a local file.
mysql-test/t/rpl_row_mysqlbinlog.test:
BUG#17654 : --read-from-remote-server causes core
This patch enables the portions of the test that were disabled when the bug report
was investigated. The patch also adds an additional test was added to ensure
the output of reading from a remote host is the same as reading from a local file.
When processing the USE/FORCE index hints
the optimizer was not checking if the indexes
specified are enabled (see ALTER TABLE).
Fixed by:
Backporting the fix for bug 20604 to 5.0
mysql-test/r/key.result:
Test for BUG 20604.
The important part of the test is the explain output that
tests what indexes are used.
mysql-test/r/myisam.result:
Bug #28476: test cases
mysql-test/t/key.test:
Bug 20604:
The minimal test case that reveals the bug. The optimizer for
aggregates relies on keys disabled with ALTER TABLE ... DISABLE KEYS
not being in the set TABLE::keys_in_use_for_query.
When the execution engine tries to use a disabled index, MyISAM
returns an error.
mysql-test/t/myisam.test:
Bug #28476: test cases
sql/sql_base.cc:
Bug #28476:
- Ignore disabled indexes in USE/FORCE index
sql/sql_select.cc:
Bug 20604 : The intersection operation between table->s->keys_in_use
and table->keys_in_use_for_query is no longer necessary.
We can trust that the latter is a subset of the former.
sql/table.h:
Bug 20604:
Added comments to TABLE_SHARE::keys_in_use and
TABLE::keys_in_use_for_query.
into dl145s.mysql.com:/users/mhansson/mysql/push/bug23856/mysql-5.1o-pushee
sql/item_sum.cc:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/func_gconcat.result:
Bug#23856: Manually merged test case.
mysql-test/t/func_gconcat.test:
Bug#23856: Manually merged test case.
mode.
When a new DATE/DATETIME field without default value is being added by the
ALTER TABLE the '0000-00-00' value is used as the default one. But it wasn't
checked whether such value was allowed by the set sql mode. Due to this
'0000-00-00' values was allowed for DATE/DATETIME fields even in the
NO_ZERO_DATE mode.
Now the mysql_alter_table() function checks whether the '0000-00-00' value
is allowed for DATE/DATETIME fields by the set sql mode.
The new error_if_not_empty flag is used in the mysql_alter_table() function
to indicate that it should abort if the table being altered isn't empty.
The new new_datetime_field field is used in the mysql_alter_table() function
for error throwing purposes.
The new error_if_not_empty parameter is added to the copy_data_between_tables()
function to indicate the it should return error if the source table isn't empty.
mysql-test/t/alter_table.test:
Added a test case for the bug#27507: Wrong DATETIME value was allowed by
ALTER TABLE in the NO_ZERO_DATE mode.
mysql-test/r/alter_table.result:
Added a test case for the bug#27507: Wrong DATETIME value was allowed by
ALTER TABLE in the NO_ZERO_DATE mode.
sql/sql_table.cc:
Bug#27507: Wrong DATETIME value was allowed by ALTER TABLE in the NO_ZERO_DATE
mode.
Now the mysql_alter_table() function checks whether the '0000-00-00' value
is allowed for DATE/DATETIME fields by the set sql mode.
The new error_if_not_empty flag is used in the mysql_alter_table() function
to indicate that it should abort if the table being altered isn't empty.
The new new_datetime_field field is used in the mysql_alter_table() function
for error throwing purposes.
The new error_if_not_empty parameter is added to the copy_data_between_tables()
function to indicate the it should return error if the source table isn't empty.
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/51
configure.in:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/r/type_datetime.result:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/sql_show.cc:
Auto merged
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
configure.in:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/r/type_datetime.result:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
into mysql.com:/home/hf/work/27984/my51-27984
mysql-test/t/type_newdecimal.test:
Auto merged
strings/decimal.c:
Auto merged
mysql-test/r/type_newdecimal.result:
merging
decimal_round failed to perform a correct rounding
of a decimal number if its first nine digits were '9'.
It just sets those digits to 0.
mysql-test/r/type_newdecimal.result:
Bug #27984 Long Decimal Maths produces truncated results.
test result
mysql-test/t/type_newdecimal.test:
Bug #27984 Long Decimal Maths produces truncated results.
test case
strings/decimal.c:
Bug #27984 Long Decimal Maths produces truncated results.
when to == from we break the data if we do to->buf[0]=0
So now doing this after the data is moved and only
if we really need to set to->buf[0] to zero
- Added suppressions for dlopen to make plugin test pass.
- Do not pass empty string to mysqld, since my_getopt is
not capable to handle it.
- Re-enabled trailing UNINSTALL PLUGIN statement of plugin.test.
The memory leak described in the bug report happens in libdl, not
in mysqld. On some valgrind installations this error is suppressed
by default, no idea why it isn't suppressed on pb-valgrind.
<observation>
If library remains open after thread has finished, and is closed by
another thread, we get memory leak. But in case library is opened and
closed by the same thread no leak occurs.
</observation>
mysql-test/lib/mtr_io.pl:
Do not pass empty string since my_getopt is not capable to handle it.
This is required to make plugin.test work on platforms where
ha_example is not compiled.
mysql-test/r/plugin.result:
Updated test result.
mysql-test/t/plugin.test:
Re-enabled UNINSTALL PLUGIN statement. It is a good idea to cleanup
at the end of the test. Anyway bug22694 was fixed while this test
was disabled.
mysql-test/valgrind.supp:
Added suppressions for dlopen to make plugin test pass.
into dl145s.mysql.com:/users/mhansson/mysql/push/bug23856/my51-bug23856
mysql-test/r/func_gconcat.result:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
sql/field.h:
Auto merged
sql/field_conv.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/item_sum.cc:
Bug#23856: Manual merge 5.0->5.1. Changed comparison to strict inequality between
convert_blob_length and UINT_MAX16. Replaced UINT_MAX16 with Field_varstring::MAX_SIZE.
- Fix test case to work also when filesystem time differs
from mysqld' time. I.e when running with data files on a
network share.
mysql-test/r/rpl_rotate_logs.result:
Update result file
mysql-test/t/rpl_rotate_logs.test:
Calculate time to use in "purge master logs before" by taking
last modification time of t2 and adding 1 second
This is done in order to handle the case where file system time differs
from mysqld's time
into mysql.com:/home/hf/work/27894/my51-27894
mysql-test/r/ps_2myisam.result:
Auto merged
mysql-test/r/ps_3innodb.result:
Auto merged
mysql-test/r/ps_4heap.result:
Auto merged
mysql-test/r/ps_5merge.result:
Auto merged
mysql-test/r/ps_7ndb.result:
Auto merged
result max length changed for the 'decimal' fields
so test results have to be fixed
mysql-test/r/ps_2myisam.result:
Bug #28361 Buffer overflow in DECIMAL code on Windows
test result fixed
mysql-test/r/ps_3innodb.result:
Bug #28361 Buffer overflow in DECIMAL code on Windows
test result fixed
mysql-test/r/ps_4heap.result:
Bug #28361 Buffer overflow in DECIMAL code on Windows
test result fixed
mysql-test/r/ps_5merge.result:
Bug #28361 Buffer overflow in DECIMAL code on Windows
test result fixed
mysql-test/r/ps_7ndb.result:
Bug #28361 Buffer overflow in DECIMAL code on Windows
test result fixed
into mysql.com:/home/hf/work/28361/my51-28361
mysql-test/t/type_newdecimal.test:
Auto merged
sql/my_decimal.h:
Auto merged
mysql-test/r/type_newdecimal.result:
merging
my_decimal in some cases can contain more decimal digits than
is officially supported (DECIMAL_MAX_PRECISION), so we need to
prepare bigger buffer for the resulting string.
mysql-test/r/type_newdecimal.result:
bug #28361 Buffer overflow in DECIMAL code on Windows
test result
mysql-test/t/type_newdecimal.test:
bug #28361 Buffer overflow in DECIMAL code on Windows
test case
This test case doesn't fall in most cases even without the fix
Still valgrind shows the problemn
sql/my_decimal.h:
bug #28361 Buffer overflow in DECIMAL code on Windows
DECIMAL_MAX_POSSIBLE_PRECISION introduced to be used in places,
when we need to check for the number of digits technicaly possible
in my_decimal.
DECIMAL_MAX_STR_LENGTH fixed as it has to fit for the MAX_POSSIBLE_PRECISION
into pilot.blaudden:/home/msvensson/mysql/bug28401/my51-bug28401
mysql-test/r/mysql_upgrade.result:
Auto merged
mysql-test/t/mysql_upgrade.test:
Auto merged
scripts/mysql_system_tables_fix.sql:
Auto merged
- The SQL commands used by mysql_upgrade are written to be run
with sql_mode set to '' - thus the scripts should change sql_mode
for the session to make sure the SQL is legal.
mysql-test/r/mysql_upgrade.result:
Update test result
mysql-test/t/mysql_upgrade.test:
The SQL commands used by mysql_upgrade are written to be run
with sql_mode set to '' - thus the scripts should change sql_mode
for the session to make sure the SQL is legal.
scripts/mysql_system_tables_fix.sql:
Set sql_mode to '' before running the SQL commands
to fix system tables - backport from 5.1
and invalidation in the most general case (non-temporary table and
not simple RENAME or ENABLE/DISABLE KEYS or partitioning command).
See comment for sql/sql_table.cc for more information.
These changes are prerequisite for 5.1 version of fix for bug #23667
"CREATE TABLE LIKE is not isolated from alteration by other connections"
mysql-test/include/mix1.inc:
Extended coverage for behavior of ALTER TABLE statement under LOCK TABLES,
which should be consistent across all platforms and for all engines.
mysql-test/r/alter_table-big.result:
Changed test for bug #25044 to use @@debug and injected sleeps
infrastructure. Extended test coverage for ALTER TABLE's behavior
under concurrency.
mysql-test/r/alter_table.result:
Extended coverage for behavior of ALTER TABLE statement under LOCK TABLES,
which should be consistent across all platforms and for all engines.
mysql-test/r/innodb_mysql.result:
Extended coverage for behavior of ALTER TABLE statement under LOCK TABLES,
which should be consistent across all platforms and for all engines.
mysql-test/t/alter_table-big.test:
Changed test for bug #25044 to use @@debug and injected sleeps
infrastructure. Extended test coverage for ALTER TABLE's behavior
under concurrency.
mysql-test/t/alter_table.test:
Extended coverage for behavior of ALTER TABLE statement under LOCK TABLES,
which should be consistent across all platforms and for all engines.
sql/mysql_priv.h:
Made functions reopen_table() and close_handle_and_leave_table_as_lock()
available outside of sql_base.cc file.
Changed close_data_tables() in such way that after closing handler
for the table it leaves TABLE object for it in table cache not as
placeholder for ordinary name-lock but as placeholder for an exclusive
name-lock. Renamed this routine to close_data_files_and_morph_locks().
sql/sql_base.cc:
Made functions reopen_table() and close_handle_and_leave_table_as_lock()
available outside of sql_base.cc file.
Changed close_data_tables() in such way that after closing handler
for the table it leaves TABLE object for it in table cache not as
placeholder for ordinary name-lock but as placeholder for an exclusive
name-lock. Renamed this routine to close_data_files_and_morph_locks().
Also adjusted it so it can work properly not only in LOCK TABLES mode.
sql/sql_table.cc:
Changed the way in which ALTER TABLE implementation handles table
locking and invalidation in the most general case (non-temporary table
and not simple RENAME or ENABLE/DISABLE KEYS or partitioning command)
Now after preparing new version of the table we:
1) Wait until all other threads close old version of table.
2) Close instances of table open by this thread and replace them
with exclusive name-locks.
3) Rename the old table to a temp name, rename the new one to the
old name.
4) If we are under LOCK TABLES and don't do ALTER TABLE ... RENAME
we reopen new version of table.
5) Write statement to the binary log.
6) If we are under LOCK TABLES and do ALTER TABLE ... RENAME we
remove name-locks from list of open tables and table cache.
7) If we are not not under LOCK TABLES we rely on close_thread_tables()
call to remove name-locks from table cache and list of open table.
Such approach:
a) Eliminates possibility for concurrent statement to sneak in and get
access to the new version of the table before ALTER TABLE gets logged
into binary log.
b) Ensures that ALTER TABLE behaves under LOCK TABLES in the same way
on all platforms and for all engines (in 5.0 this was not true)
c) Preserves nice invariant that if table is open in some connection
there is a guarantee that .FRM file for this table exists and is
properly named.
into mysql.com:/d2/hf/mrg/mysql-5.1-opt
mysql-test/r/ps.result:
Auto merged
mysql-test/r/strict.result:
Auto merged
mysql-test/t/ps.test:
Auto merged
mysql-test/t/strict.test:
Auto merged
sql/item.cc:
Auto merged
mysql-test/r/sp_trans.result:
merging
mysql-test/t/sp_trans.test:
merging
into mysql.com:/d2/hf/mrg/mysql-5.1-opt
mysql-test/include/mix1.inc:
Auto merged
mysql-test/r/innodb_mysql.result:
Auto merged
mysql-test/r/ps.result:
Auto merged
mysql-test/t/ps.test:
Auto merged
sql/item.cc:
Auto merged
sql/sql_lex.cc:
Auto merged