server
The problem was that when memory was exhausted HEAP engine could crash
(GROUP BY uses HEAP TABLE). Alternatively, if SET was used, it could
report an error "You may only use constant expressions with SET" instead
of "Out of memory (Needed NNNNNN bytes)".
The solution is:
- pass MY_WME to (some) calls to my_malloc() to get correct message.
- fix heap_write() so that the first key is skipped during cleanup
on ENOMEM because it wasn't inserted and doesn't have to be
deleted.
No test case is provided because we can't test out-of-memory behaviour
in our current test framework.
heap/hp_block.c:
If allocation fails, write an error message.
heap/hp_write.c:
On ENOMEM, skip the first key in cleanup, as it wasn't inserted yet.
sql/item_func.cc:
Add MY_WME so that OOM error will be reported.
correctly in some cases".
In short, calls to a stored function located in another database
than the default database, may fail to replicate if the call was made
by SET, SELECT, or DO.
Longer: when a stored function is called from a statement which does not go
to binlog ("SET @a=somedb.myfunc()", "SELECT somedb.myfunc()",
"DO somedb.myfunc()"), this crafted statement is binlogged:
"SELECT myfunc();" (accompanied with a mention of the default database
if there is one). So, if "somedb" is not the default database,
the slave would fail to find myfunc(). The fix is to specify the
function's database name in the crafted binlogged statement, like this:
"SELECT somedb.myfunc();". Test added in rpl_sp.test.
mysql-test/r/rpl_sp.result:
Because I moved the SHOW BINLOG EVENTS down a bit, big portions of its
output move. Also, the function's database name appears in
SELECT statements.
mysql-test/t/rpl_sp.test:
Adding test for BUG#19725.
Moving the SHOW BINLOG EVENTS down, it is run at the very end to
test everything.
sql/sp_head.cc:
When binlogging a "SELECT myfunc()" (when a stored function is executed
inside a statement which does not go to the binlog (like a SET,
SELECT, DO), we need to write "SELECT db_of_myfunc().myfunc()",
because the function may be in a database which is not the default
database.
- "make_binary_distribution" accepts a dummy "--platform=" argument.
- "MySQL-shared-compat.spec" uses a "version40" define symbol internally.
scripts/make_binary_distribution.sh:
Newer versions of the release build tools call this with a "--platform=" argument
which we seem not to need in 4.0, but which makes the tool crash (happened on SCO).
Rather than add another version check into the build tools, just accept a "--platform="
argument and ignore it, just give a message.
support-files/MySQL-shared-compat.spec.sh:
The current version of "Do-shared-compat" needs two digits to identify the release families
(to differ between 4.0 and 4.1), so the variable "version4" must get renamed to "version40".
Add CFLAGS to gcc call with --print-libgcc-file, to make sure the
correct "libgcc.a" path is returned for the 32/64 bit architecture
scripts/make_binary_distribution.sh:
Add CFLAGS to gcc call with --print-libgcc-file, to make sure the
correct "libgcc.a" path is returned for the 32/64 bit architecture
support-files/mysql.spec.sh:
Add CFLAGS to gcc call with --print-libgcc-file, to make sure the
correct "libgcc.a" path is returned for the 32/64 bit architecture
The optimizer removes expressions from GROUP BY/DISTINCT
if they happen to participate in a <expression> = <const>
predicates of the WHERE clause (the idea being that if
it's always equal to a constant it can't have multiple
values).
However for predicates where the expression and the
constant item are of different result type this is not
valid (e.g. a string column compared to 0).
Fixed by additional check of the result types of the
expression and the constant and if they differ the
expression don't get removed from the group by list.
mysql-test/r/distinct.result:
Bug #15881: cast problems
- test case
mysql-test/t/distinct.test:
Bug #15881: cast problems
- test case
sql/sql_select.cc:
Bug #15881: cast problems
- can't use <expr>=<const> to remove GROUP BY/DISTINCT cols
if they're not of the same type.
This bug appeared after the patch for bug 21390 that had added some code
to handle outer joins with no matches after substitution of a const
table in an efficient way. That code as it is cannot be applied to the case
of nested outer join operations. Being applied to the queries with
nested outer joins the code can cause crashes or wrong result sets.
The fix blocks row substitution for const inner tables of an outer join
if the inner operand is not a single table.
mysql-test/r/join_nested.result:
Added a test case for bug #24345.
mysql-test/t/join_nested.test:
Added a test case for bug #24345.
With MySQL 3.23 and 4.0, the syntax 'LIMIT N, -1' is accepted, and returns
all the rows located after row N. This behavior, however, is not the
intended result, and defeats the purpose of LIMIT, which is to constrain
the size of a result set.
With MySQL 4.1 and later, this construct is correctly detected as a syntax
error.
This fix does not change the production code, and only adds a new test case
to improve test coverage in this area, to enforce in the test suite the
intended behavior.
mysql-test/r/select.result:
Enforce that LIMIT N, -1 is illegal.
mysql-test/t/select.test:
Enforce that LIMIT N, -1 is illegal.
into mysql.com:/d2/hf/opt/my50-opt
myisam/mi_check.c:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/item_subselect.h:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_udf.cc:
Auto merged
into mysql.com:/d2/hf/common/my50-common
mysql-test/t/mysqladmin.test:
Auto merged
sql/item_func.cc:
Auto merged
libmysqld/lib_sql.cc:
merging
mysql-test/t/distinct.test:
merging
sql/sql_prepare.cc:
SCCS merged
libmysqld/lib_sql.cc:
error message moved to 'stmt'
mysql-test/t/distinct.test:
temporary disabled in embedded server
mysql-test/t/mysqladmin.test:
disabled in embedded server
sql/sql_prepare.cc:
superfluous #ifndef removed
into mysql.com:/home/kent/bk/tmp/mysql-5.0-build
innobase/buf/buf0buf.c:
Auto merged
innobase/dict/dict0dict.c:
Auto merged
innobase/fil/fil0fil.c:
Auto merged
innobase/ha/ha0ha.c:
Auto merged
innobase/include/hash0hash.h:
Auto merged
innobase/lock/lock0lock.c:
Auto merged
innobase/log/log0recv.c:
Auto merged
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/buf/buf0buf.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/dict/dict0dict.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/fil/fil0fil.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/ha/ha0ha.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/ha/hash0hash.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/include/hash0hash.h:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/lock/lock0lock.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/log/log0recv.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
innobase/thr/thr0loc.c:
Renamed hash_create() not to clash with imap using embedded server (bug#13859)
Don't use thread priority by default on Mac OS X (bug#18526)
configure.in:
Don't use thread priority by default on Mac OS X (bug#18526)
sql/mysqld.cc:
Don't use thread priority by default on Mac OS X (bug#18526)
Build "mysqld_error.h" even if configured --withouth-server (bug#21265)
configure.in:
Build "mysqld_error.h" even if configured --withouth-server (bug#21265)