Checking for NULL before calling the val_xxx()
methods only checks for such arguments that are
known to be NULLs at compile time.
The arguments that may or may not contain
NULLs (e.g. function calls and possibly others)
are not checked at all.
Fixed by first calling the val_xxx() method and
then checking for null in SEC_TO_TIME().
In addition QUARTER() was not returning 0 (as all the
val_int() functions do when processing a NULL value).
mysql-test/r/func_time.result:
Bug #25643: SEC_TO_TIME function problem
- test case
mysql-test/t/func_time.test:
Bug #25643: SEC_TO_TIME function problem
- test case
sql/item_timefunc.cc:
Bug #25643: SEC_TO_TIME function problem
- null handling fixed for QUARTER() and SEC_TO_TIME()
into mysql.com:/home/psergey/mysql-5.0-bug8804-r12
sql/item_cmpfunc.cc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/subselect.result:
Manual Merge
into mysql.com:/home/gluh/MySQL/Merge/5.0-opt
mysql-test/r/func_in.result:
Auto merged
mysql-test/r/range.result:
Auto merged
mysql-test/r/sp-code.result:
Auto merged
mysql-test/t/func_in.test:
Auto merged
mysql-test/t/range.test:
Auto merged
mysql-test/t/trigger.test:
Auto merged
mysql-test/t/view.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
mysql-test/r/select.result:
manual merge
mysql-test/r/view.result:
manual merge
mysql-test/t/select.test:
manual merge
- make sure keys are copied correctly when varchar has 2 length bytes
- test case
mysql-test/r/ndb_basic.result:
bug#25746 ndb: 4209 error with 2 VARCHAR primary keys
- test case
mysql-test/t/ndb_basic.test:
bug#25746 ndb: 4209 error with 2 VARCHAR primary keys
- test case
sql/ha_ndbcluster.cc:
bug#25746 ndb: 4209 error with 2 VARCHAR primary keys
- make sure keys are copied correctly when varchar has 2 length bytes
When inserting into a join-based view the update fields from the ON DUPLICATE
KEY UPDATE wasn't checked to be from the table being inserted into and were
silently ignored.
The new check_view_single_update() function is added to check that
insert/update fields are being from the same single table of the view.
sql/sql_insert.cc:
Bug#25123: ON DUPLICATE KEY clause allows fields not from the insert table.
The new check_view_single_update() function is added to check that
insert/update fields are being from the same single table of the view.
mysql-test/r/insert.result:
Added a test case for bug#25123: ON DUPLICATE KEY clause allows fields not from the insert table.
mysql-test/t/insert.test:
Added a test case for bug#25123: ON DUPLICATE KEY clause allows fields not from the insert table.
After fix for bug#21798 JOIN stores the pointer to the buffer for sorting
fields. It is used while sorting for grouping and for ordering. If ORDER BY
clause has more elements then the GROUP BY clause then a memory overrun occurs.
Now the length of the ORDER BY list is always passed to the
make_unireg_sortorder() function and it allocates buffer big enough to be
used for bigger list.
sql/sql_delete.cc:
Bug#25172: Not checked buffer size leads to a server crash.
Length parameter is initialized to 0 for the make_unireg_sortorder() function.
sql/sql_select.cc:
Bug#25172: Not checked buffer size leads to a server crash.
Now the length of the ORDER BY list is always passed to the
make_unireg_sortorder() function and it allocates buffer big enough to be
used for bigger list.
sql/sql_table.cc:
Bug#25172: Not checked buffer size leads to a server crash.
Length parameter is initialized to 0 for the make_unireg_sortorder() function.
sql/sql_update.cc:
Bug#25172: Not checked buffer size leads to a server crash.
Length parameter is initialized to 0 for the make_unireg_sortorder() function.
mysql-test/r/select.result:
Added a test case for bug#25172: Not checked buffer size leads to a server crash.
mysql-test/t/select.test:
Added a test case for bug#25172: Not checked buffer size leads to a server crash.
UNION over correlated and uncorrelated SELECTS.
In such subqueries each uncorrelated SELECT should be considered as
uncacheable. Otherwise join_free is called for it and in many cases
it causes some problems.
mysql-test/r/subselect.result:
Added a test case for bug #25219.
mysql-test/t/subselect.test:
Added a test case for bug #25219.
sql/mysql_priv.h:
Fixed bug #25219: crash for a query that contains an EXIST subquery with
UNION over correlated and uncorrelated SELECTS.
In such subqueries each uncorrelated SELECT should be considered as
uncacheable. Otherwise join_free is called for it and in many cases
it causes some problems.
Added a new flag UNCACHEABLE_UNITED for such SELECTs.
sql/sql_lex.cc:
Fixed bug #25219: crash for a query that contains an EXIST subquery with
UNION over correlated and uncorrelated SELECTS.
In such subqueries each uncorrelated SELECT should be considered as
uncacheable. Otherwise join_free is called for it and in many cases
it causes some problems.
Added a new flag UNCACHEABLE_UNITED for such SELECTs.
into siva.hindu.god:/home/tsmith/m/bk/mrg-jan17/maint/50
client/mysqlbinlog.cc:
Auto merged
include/my_pthread.h:
Auto merged
mysql-test/r/sp.result:
Auto merged
mysql-test/t/mix_innodb_myisam_binlog.test:
Auto merged
mysql-test/t/sp.test:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_parse.cc:
Manual merge
crashes server
Check for null value is reliable only after calling some of the
val_xxx() methods. If the val_xxx() method is not called
the null_value flag will be set only for certain types of NULL
values (like SQL constant NULLs for example).
This caused a crash while trying to dereference a NULL pointer
that is returned by val_str() for NULL values.
Fixed by swapping the order of val_xxx() and null_value check.
mysql-test/r/udf.result:
Bug #25382: Passing NULL to an UDF called from stored procedures
crashes server
- test case
mysql-test/t/udf.test:
Bug #25382: Passing NULL to an UDF called from stored procedures
crashes server
- test case
sql/item_func.cc:
Bug #25382: Passing NULL to an UDF called from stored procedures
crashes server
- reliably check null_value
into mysql.com:/usr/home/ram/work/bug22533/my50-bug22533
mysql-test/r/type_bit.result:
Auto merged
mysql-test/t/select.test:
Auto merged
sql/field.cc:
Auto merged
sql/item.cc:
Auto merged
when they contain the '!' operator.
Added an implementation for the method Item_func_not::print.
The method encloses any NOT expression into extra parentheses to avoid
incorrect stored representations of views that use the '!' operators.
Without this change when a view was created that contained
the expression !0*5 its stored representation contained not this
expression but rather the expression not(0)*5 .
The operator '!' is of a higher precedence than '*', while NOT is
of a lower precedence than '*'. That's why the expression !0*5
is interpreted as not(0)*5, while the expression not(0)*5 is interpreted
as not((0)*5) unless sql_mode is set to HIGH_NOT_PRECEDENCE.
Now we translate !0*5 into (not(0))*5.
mysql-test/r/sp-code.result:
Adjusted results after the fix of bug 25580.
mysql-test/r/subselect.result:
Adjusted results after the fix of bug 25580.
mysql-test/r/view.result:
Added a test case for bug #25580.
mysql-test/t/view.test:
Added a test case for bug #25580.
sql/item_cmpfunc.cc:
Fixed bug #25580: incorrect stored representations of views in cases
when they contain the '!' operator.
Added an implementation for the method Item_func_not::print.
The method encloses the NOT expression into extra parenthesis to avoid
incorrect stored representations of views that use the '!' operators.
sql/item_cmpfunc.h:
Fixed bug #25580: incorrect stored representations of views in cases
when they contain the '!' operator.
Added an implementation for the method Item_func_not::print.
The method encloses the NOT expression into extra parenthesis to avoid
incorrect stored representations of views that use the '!' operators.
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
sql/item_timefunc.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/mysqld.cc:
Once again, disable symlink.test under valgrind builds. symlink.test
fails deep in mi_repair - the result of this having been disabled
for almost 5 years.
by the patch for Bug#4968
sql/sql_parse.cc:
Fix lowercase_tables2 test failure on powermacg5: table_case_name()
function needed create_info.alias if lowercase_table_names=2, which
was not set for the stack copy of HA_CREATE_INFO. Move the
update of create_info.alias from create_table_precheck to
mysql_execute_command, so that it is done on the right object.
mysql-test/r/ps.result:
Update result files.
mysql-test/t/ps.test:
Disable result ouptut of SHOW CREATE TABLE: DATA DIRECTORY option
may be present or absent from the output depending on the build
otpions and the operating system, so the output is not consistent
across supported platforms.
sql/mysqld.cc:
Remove a tricky #ifdef dependency of --use-symbolic-links on PURIFY
added in 2002: DEBUG options should not influence server functionality.
This backfired by producing different output of SHOW CREATE TABLE
depending on the build options (see also Bug#25677 "With
--skip-symbolic-links option on, DATA DIRECTORY clause
is silently ignored".
into pilot.mysql.com:/home/msvensson/mysql/mysql-5.0-maint
mysys/my_read.c:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
sql/field.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
The optimizer needs to evaluate whether predicates are better
evaluated using an index. IN is one such predicate.
To qualify an IN predicate must involve a field of the index
on the left and constant arguments on the right.
However whether an expression is a constant can be determined only
by knowing the preceding tables in the join order.
Assuming that only IN predicates with expressions on the right that
are constant for the whole query qualify limits the scope of
possible optimizations of the IN predicate (more specifically it
doesn't allow the "Range checked for each record" optimization for
such an IN predicate.
Fixed by not pre-determining the optimizability of the IN predicate
in the case when all right IN operands are not SQL constant expressions
mysql-test/r/func_in.result:
BUG#20420: optimizer reports wrong keys on left join with IN
- test case
mysql-test/t/func_in.test:
BUG#20420: optimizer reports wrong keys on left join with IN
- test case
sql/item_cmpfunc.h:
BUG#20420: optimizer reports wrong keys on left join with IN
- cannot decide on the optimizability of a function without
knowing the tables before it in the join order
mysql-test/r/sp.result:
Auto merged
mysql-test/t/sp.test:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_list.h:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into bodhi.local:/opt/local/work/mysql-4.1-4968-to-push
sql/mysql_priv.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Manual merge.
sql/sql_table.cc:
Manual merge.
of untouched rows in full table scans".
SELECT ... FOR UPDATE/LOCK IN SHARE MODE statements as well as
UPDATE/DELETE statements which were executed using full table
scan were not releasing locks on rows which didn't satisfy
WHERE condition.
This bug surfaced in 5.0 and affected NDB tables. (InnoDB tables
intentionally don't support such unlocking in default mode).
This problem occured because code implementing join didn't call
handler::unlock_row() for rows which didn't satisfy part of condition
attached to this particular table/level of nested loop. So we solve
the problem adding this call.
Note that we already had this call in place in 4.1 but it was lost
(actually not quite correctly placed) when we have introduced nested
joins.
Also note that additional QA should be requested once this patch is
pushed as interaction between handler::unlock_row() and many recent
MySQL features such as subqueries, unions, views is not tested enough.
mysql-test/r/ndb_lock.result:
Enabled back part of the test that covers bug #20390 "SELECT FOR
UPDATE does not release locks of untouched rows in full table scans".
Adjusted test in such way that it now covers both execution paths
in which we unlock non-matching rows inspected during table scan.
mysql-test/t/ndb_lock.test:
Enabled back part of the test that covers bug #20390 "SELECT FOR
UPDATE does not release locks of untouched rows in full table scans".
Adjusted test in such way that it now covers both execution paths
in which we unlock non-matching rows inspected during table scan.
sql/sql_select.cc:
evaluate_join_record() should call handler::unlock_row() for records
which don't satisfy condition which was pushed-down to this table/level
of nested loop.
We just put back the thing that we already have in 4.1 and which was lost
when we have introduced nested joins.
in a select list.
The objects of the Item_trigger_field class inherited the implementations
of the methods copy_or_same, get_tmp_table_item and get_tmp_table_field
from the class Item_field while they rather should have used the default
implementations defined for the base class Item.
It could cause catastrophic problems for triggers that used SELECTs
with select list containing trigger fields such as NEW.<table column>
under DISTINCT.
mysql-test/r/trigger.result:
Added a test case for bug #25398.
mysql-test/t/trigger.test:
Added a test case for bug #25398.
- Make the code produce correct result: use an array of triggers to turn on/off equalities for each
compared column. Also turn on/off optimizations based on those equalities.
- Make EXPLAIN output show "Full scan on NULL key" for tables for which we switch between
ref/unique_subquery/index_subquery and ALL access.
- index_subquery engine now has HAVING clause when it is needed, and it is
displayed in EXPLAIN EXTENDED
- Fix incorrect presense of "Using index" for index/unique-based subqueries (BUG#22930)
// bk trigger note: this commit refers to BUG#24127
mysql-test/r/ndb_subquery.result:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Updated test results (checked)
mysql-test/r/subselect.result:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Updated test results (checked)
mysql-test/r/subselect2.result:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Updated test results (checked)
mysql-test/r/subselect3.result:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Testcases
mysql-test/t/subselect3.test:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Testcases
sql/item_cmpfunc.cc:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- For row-based IN subqueries, use one flag per each column. Set the flags appropriately before
running the subquery.
sql/item_cmpfunc.h:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Added Item_func_trig_cond::get_triv_var()
sql/item_subselect.cc:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Item_subselect::exec() and subselect_*_engine::exec() don't have parameter
anymore - now Item_subselect owns the pushed down predicates guard flags.
- A correct set of conditional predicates is now pushed into row-based IN
subquery.
- select_indexsubquery_engine now has "HAVING clause" (needed for correct query
results), and it is shown in EXPLAIN EXTENDED
sql/item_subselect.h:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Item_subselect::exec() and subselect_*_engine::exec() don't have parameter
anymore - now Item_subselect owns the pushed down predicates guard flags.
- A correct set of conditional predicates is now pushed into row-based IN
subquery.
- select_indexsubquery_engine now has "HAVING clause" (needed for correct query
results), and it is shown in EXPLAIN EXTENDED
sql/mysql_priv.h:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Added "in_having_cond" special Item name
sql/mysqld.cc:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Added "in_having_cond" special Item name
sql/sql_lex.h:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
sql/sql_select.cc:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Make "ref" analyzer be able to work with conditional equalities
- Fix subquery optimization code to match the changes in what kinds of
conditions are pushed down into subqueries
- Fix wrong EXPLAIN output in some queries with subquery (BUG#22390)
sql/sql_select.h:
BUG#24127: wrong result for (null,not-null) IN (SELECT a,b ...)
- Make "ref" analyzer be able to work with conditional equalities
- Fix wrong EXPLAIN output in some queries with subquery (BUG#22390)
When transforming "oe IN (SELECT ie ...)" wrap the pushed-down predicates
iff "oe can be null", not "ie can be null".
The fix doesn't cover row-based subqueries, those will be fixed in #24127.
mysql-test/r/subselect.result:
BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...)
Update the test results (checked)
mysql-test/r/subselect3.result:
BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...)
- Testcase
mysql-test/t/subselect3.test:
BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...)
- Testcase
sql/item_subselect.cc:
BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...)
When transforming "oe IN (SELECT ie ...)" we should make special
provisions (wrap the pushed predicates) if we can encounter
NULL IN (SELECT ...), i.e. when oe->maybe_null. The code was checking
for ie->maybe_null instead, fixed it for single value based subqueries.
Row-based subqueries (e.g. (a,b) IN (SELECT c,d ...)) are not fixed
because they won't produce correct results for several other reasons
(filed as #24085)