Item_func_user doesn't calculate anything in it's val_str() method,
just returns saved str_value.
Though Item::save_in_field method can destroy str_value, relying on
val_str() return. As a result we get the garbage stored in field.
We cannot use Item::save_in_field implementation for Item_func_user,
reimplement it in simpler way.
mysql-test/r/rpl_session_var.result:
Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
test result
mysql-test/t/rpl_session_var.test:
Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
test case
sql/item.cc:
Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
duplicating code moved to Item::save_str_in_field
sql/item.h:
Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
duplicating code moved to Item::save_str_in_field
sql/item_strfunc.h:
Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
Item_func_user::save_in_field implemented as simple storing str_value
- make ha_berkeley::cmp_ref() take into account that auto-generated PKs
are stored in LSB-first order.
- Remove the temporary code that made the bugfix work for innodb only
mysql-test/r/bdb.result:
Adjust test-results.
sql/ha_berkeley.cc:
BUG#28591: make the fix work for BDB tables too:
- make ha_berkeley::cmp_ref() take into account that auto-generated PKs
are stored in LSB-first order.
sql/sql_select.cc:
BUG#28591: Remove "innodb only" clause as the fix now works for BDB too
sql/table.cc:
BUG#28591: Remove "innodb only" clause as the fix now works for BDB too
the master but on the slave
MySQL can decide to "downgrade" a INSERT DELAYED statement
to normal insert in certain situations.
One such situation is when the slave is replaying a
replication feed.
However INSERT DELAYED is logged even if there're no updates
whereas the NORMAL INSERT is not logged in such cases.
Fixed by always logging a "downgraded" INSERT DELAYED: even
if there were no updates.
mysql-test/r/rpl_insert_delayed.result:
Bug #29571: test case
mysql-test/t/rpl_insert_delayed.test:
Bug #29571: test case
sql/sql_insert.cc:
Bug #29571: log INSERT DELAYED even if it was
"downgraded" to INSERT (and there were no updates)
into gleb.loc:/home/uchum/work/bk/5.0-opt
mysql-test/t/create.test:
Auto merged
sql/field.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/table.cc:
Auto merged
mysql-test/r/create.result:
Merge with 5.0 (main).
When the SQL_BIG_RESULT flag is specified SELECT should store items from the
select list in the filesort data and use them when sending to a client.
The get_addon_fields function is responsible for creating necessary structures
for that. But this function was allowed to do so only for SELECT and
INSERT .. SELECT queries. This makes the SQL_BIG_RESULT useless for
the CREATE .. SELECT queries.
Now the get_addon_fields allows storing select list items in the filesort
data for the CREATE .. SELECT queries.
mysql-test/t/create.test:
Added a test case for the bug#15130: CREATE .. SELECT was denied to use
advantages of the SQL_BIG_RESULT.
mysql-test/r/create.result:
Added a test case for the bug#15130: CREATE .. SELECT was denied to use
advantages of the SQL_BIG_RESULT.
sql/filesort.cc:
Bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT.
Now the get_addon_fields allows storing select list items in the filesort
data for the CREATE .. SELECT queries.
into magare.gmz:/home/kgeorge/mysql/autopush/B29644-5.0-opt
sql/ha_innodb.cc:
Auto merged
sql/sql_base.cc:
Auto merged
mysql-test/r/innodb_mysql.result:
5.0-opt merge
mysql-test/t/innodb_mysql.test:
5.0-opt merge
Limit the fix for bug 28591 to InnoDB only
sql/sql_select.cc:
Limit the fix for bug 28591 to InnoDB only
sql/table.cc:
Limit the fix for bug 28591 to InnoDB only
If a primary key is defined over column c of enum type then
the EXPLAIN command for a look-up query of the form
SELECT * FROM t WHERE c=0
said that the query was with an impossible where condition though the
query correctly returned non-empty result set when the table indeed
contained rows with error empty strings for column c.
This kind of misbehavior was due to a bug in the function
Field_enum::store(longlong,bool) that erroneously returned 1 if
the the value to be stored was equal to 0.
Note that the method
Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
correctly returned 0 if a value of the error empty string
was stored.
mysql-test/r/type_enum.result:
Added a test case for bug #29661.
mysql-test/t/type_enum.test:
Added a test case for bug #29661.
sql/field.cc:
Fixed bug #29611.
If a primary key was defined over column c of enum type then
the EXPLAIN command for a look-up query of the form
SELECT * FROM t WHERE c=0
said that the query was with an impossible where condition though the
query correctly returned non-empty result set when the table indeed
contained rows with error empty strings for column c.
This kind of misbehavior was due to a bug in the function
Field_enum::store(longlong,bool) that erroneously returned 1 if
the the value to be stored was equal to 0.
Note that the method
Field_enum::store(const char *from,uint length,CHARSET_INFO *cs)
correctly returned 0 if a value of the error empty string
was stored.
into magare.gmz:/home/kgeorge/mysql/autopush/B28951-5.0-opt
mysql-test/t/innodb_mysql.test:
Auto merged
sql/sql_select.cc:
Auto merged
sql/table.cc:
Auto merged
mysql-test/r/innodb_mysql.result:
merge of 5.0-opt
Additional test case fix for bug #29338.
mysql-test/t/sp.test:
Additional test case fix for bug #29338.
mysql-test/r/sp.result:
Additional test case fix for bug #29338.
into olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug29911
mysql-test/t/having.test:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/having.result:
SCCS merged
into bodhi.(none):/opt/local/work/mysql-5.0-runtime
mysql-test/r/create.result:
Auto merged
mysql-test/t/create.test:
Auto merged
sql/sql_class.h:
Auto merged
This bug manifested itself for join queries with GROUP BY and HAVING clauses
whose SELECT lists contained DISTINCT. It occurred when the optimizer could
deduce that the result set would have not more than one row.
The bug could lead to wrong result sets for queries of this type because
HAVING conditions were erroneously ignored in some cases in the function
remove_duplicates.
mysql-test/r/having.result:
Added a test case for bug #29911.
mysql-test/t/having.test:
Added a test case for bug #29911.
into mysql.com:/home/kent/bk/tmp3/mysql-5.0-build
libmysql/libmysql.c:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
sql/field.cc:
Auto merged
After dumping triggers mysqldump copied
the value of the OLD_SQL_MODE variable to the SQL_MODE
variable. If the --compact option of the mysqldump was
not set the OLD_SQL_MODE variable had the value
of the uninitialized SQL_MODE variable. So
usually the NO_AUTO_VALUE_ON_ZERO option of the
SQL_MODE variable was discarded.
This fix is for non-"--compact" mode of the mysqldump,
because mysqldump --compact never set SQL_MODE to the
value of NO_AUTO_VALUE_ON_ZERO.
The dump_triggers_for_table function has been modified
to restore previous value of the SQL_MODE variable after
dumping triggers using the SAVE_SQL_MODE temporary
variable.
client/mysqldump.c:
Fixed bug #29788.
The dump_triggers_for_table function has been modified
to restore previous value of the SQL_MODE variable after
dumping triggers using the SAVE_SQL_MODE temporary
variable.
mysql-test/r/mysqldump.result:
Updated test case for bug #29788.
mysql-test/t/mysqldump.test:
Updated test case for bug #29788.
ORDER BY primary_key on InnoDB table
Queries that use an InnoDB secondary index to retrieve
data don't need to sort in case of ORDER BY primary key
if the secondary index is compared to constant(s).
They can also skip sorting if ORDER BY contains both the
the secondary key parts and the primary key parts (in
that order).
This is because InnoDB returns the rows in order of the
primary key for rows with the same values of the secondary
key columns.
Fixed by preventing temp table sort for the qualifying
queries.
mysql-test/r/innodb_mysql.result:
Bug #28591: test case
mysql-test/t/innodb_mysql.test:
Bug #28591: test case
sql/sql_select.cc:
Bug #28591: Use the primary key as suffix when testing
if the key can be used for ORDER BY on supporting engines.
sql/table.cc:
Bug #28591: can use the primary key
as a suffix for the secondary keys
by long running transaction
On Windows opened files can't be deleted. There was a special
upgraded lock mode (TL_WRITE instead of TL_WRITE_ALLOW_READ)
in ALTER TABLE to make sure nobody has the table opened
when deleting the old table in ALTER TABLE. This special mode
was causing ALTER TABLE to hang waiting on a lock inside InnoDB.
This special lock is no longer necessary as the server is
closing the tables it needs to delete in ALTER TABLE.
Fixed by removing the special lock.
Note that this also reverses the fix for bug 17264 that deals with
another consequence of this special lock mode being used.
mysql-test/r/innodb_mysql.result:
Bug #29644: test case
mysql-test/t/innodb_mysql.test:
Bug #29644: test case
sql/ha_innodb.cc:
Bug #29644: reverse the (now excessive) fix
for bug 17264 (but leave the test case).
sql/sql_base.cc:
Bug #29644: don't need a special lock mode for Win32 anymore:
the table is closed before the drop.
unpack_fields() didn't expect NULL_LENGHT in the field's descriptions.
In this case we get NULL in the resulting string so cannot use
strdup_root to make a copy of it.
strdup_root changed with strmake_root as it's NULL-safe
sql-common/client.c:
Bug #29494 Field packet with NULL fields crashes libmysqlclient
strdup_root changed with strmake_root in unpack_fields()
into pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
configure.in:
Auto merged
libmysql/libmysql.c:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
sql/field.cc:
Auto merged
into pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.46
configure.in:
Auto merged
libmysql/libmysql.c:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
CMakeLists.txt:
BUG#20815 Set stack size. This value is really supposed to be the linker's default. I'm not quite sure why we have to specify it manually too.
The Item_date_typecast::val_int function doesn't reset null_value flag.
This makes all values that follows the first null value to be treated as nulls
and led to a wrong result.
Now the Item_date_typecast::val_int function correctly sets the null_value flag
for both null and non-null values.
mysql-test/t/cast.test:
Added a test case for the bug#29898: Item_date_typecast::val_int doesn't reset
the null_value flag.
mysql-test/r/cast.result:
Added a test case for the bug#29898: Item_date_typecast::val_int doesn't reset
the null_value flag.
sql/item_timefunc.cc:
Bug#29898: Item_date_typecast::val_int doesn't reset the null_value flag.
Now the Item_date_typecast::val_int function correctly sets the null_value flag
for both null and non-null values.
a temporary table.
The result string of the Item_func_group_concat wasn't initialized in the
copying constructor of the Item_func_group_concat class. This led to a
wrong charset of GROUP_CONCAT result when the select employs a temporary
table.
The copying constructor of the Item_func_group_concat class now correctly
initializes the charset of the result string.
mysql-test/t/func_gconcat.test:
Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
when the select employs a temporary table.
mysql-test/r/func_gconcat.result:
Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
when the select employs a temporary table.
sql/item_sum.cc:
Bug#29850: Wrong charset of GROUP_CONCAT result when the select employs
a temporary table.
The copying constructor of the Item_func_group_concat class now correctly
initializes the charset of the result string.
No test case, since the bug requires a stress case with 30 INSERT DELAYED
threads and 1 killer thread to repeat. The patch is verified
manually.
Review fixes.
The server that is running DELAYED inserts would deadlock itself
or crash under high load if some of the delayed threads were KILLed
in the meanwhile.
The fix is to change internal lock acquisition order of delayed inserts
subsystem and to ensure that
Delayed_insert::table_list::db does not point to volatile memory in some
cases.
For details, please see a comment for sql_insert.cc.
sql/sql_insert.cc:
A fix for Bug#29431 killing an insert delayed thread causes crash
1) The deadlock was caused by different lock acquisition order
between delayed_get_table and handle_delayed_insert.
delayed_get_table would:
- acquire LOCK_delayed_create
- create a new Delayed_insert instance
- acquire instance mutex (di->mutex)
- "lock the instance in memory" by
increasing di->locked_in_memory variable
- start the delayed thread
- release di->mutex
- let the delayed thread open the delayed table
- discover that the delayed thread was killed
- try to unlock() the delayed insert instance in memory
- in Delayed_insert::unlock() do
* lock LOCK_delayed_insert
* decrease locks_in_memory and discover it's 0
* attempt to lock di->mutex to broadcast di->cond condition <-- deadlock
here
Meanwhile, the delayed thread would
* lock di->mutex
* open the table
* get killed
* not notice that and attempt to lock LOCK_delayed_insert
to register itself in the delayed insert list <-- deadlock here.
Simply put, delayed_get_table used to lock LOCK_delayed_insert and then
di->mutex, and handle_delayed_insert would lock di->mutex and then
LOCK_delayed_insert.
Fixed by moving registration in the list of delayed insert threads from
handle_delayed_insert to delayed_get_table - so that now
handle_delayed_insert doesn't need to acquire LOCK_delayed_insert mutex.
2) di->table_list.db was copied by-pointer from table_list.db of the first
producer -- the one who initiated creation of the delayed insert thread.
This producer might be long gone when the member is needed
(handle_delayed_insert:open_ltable),
e.g. by having been killed with KILL CONNECTION statement.
Fixed by using a pointer to the consumer's deep copy of THD::db.
3) In find_handler, we shouldn't assume that Delayed_insert object
already (or still) has a table opened all the time it is
present in the delayed insert list. E.g. it's not the case
when Delayed_insert decided to terminate, closed the table, but haven't
yet unregistered from the list (see the end of handle_delayed_insert).