mysql-test/t/type_datetime.test:
Additional test case for the bug#27759.
sql/item_func.h:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
Now the Item_func_min_max::result_as_longlong() returns TRUE when LEAST()
compares DATE/DATETIME values. This allows caller to obtain correct integer
values through the val_int() function.
This bug affects multi-row INSERT ... ON DUPLICATE into table
with PRIMARY KEY of AUTO_INCREMENT field and some additional UNIQUE indices.
If the first row in multi-row INSERT contains duplicated values of UNIQUE
indices, then following rows of multi-row INSERT (with either duplicated or
unique key field values) may me applied to _arbitrary_ records of table as
updates.
This bug was introduced in 5.0. Related code was widely rewritten in 5.1, and
5.1 is already free of this problem. 4.1 was not affected too.
When updating the row during INSERT ON DUPLICATE KEY UPDATE, we called
restore_auto_increment(), which set next_insert_id back to 0, but we
forgot to set clear_next_insert_id back to 0.
restore_auto_increment() function has been fixed.
sql/sql_class.h:
Fixed bug #27954.
Added commentary for THD::clear_next_insert_id variable.
sql/handler.cc:
Fixed bug #27954.
When updating the row during INSERT ON DUPLICATE KEY UPDATE, we called
restore_auto_increment(), which set next_insert_id back to 0, but we
forgot to set clear_next_insert_id back to 0.
restore_auto_increment() function has been fixed.
mysql-test/t/insert_update.test:
Added test case for bug #27954.
mysql-test/r/insert_update.result:
Added test case for bug #27954.
The IN function was comparing DATE/DATETIME values either as ints or as
strings. Both methods have their disadvantages and may lead to a wrong
result.
Now IN function checks whether all of its arguments has the STRING result
types and at least one of them is a DATE/DATETIME item. If so it uses either
an object of the in_datetime class or an object of the cmp_item_datetime
class to perform its work. If the IN() function arguments are rows then
row columns are checked whether the DATE/DATETIME comparator should be used
to compare them.
The in_datetime class is used to find occurence of the item to be checked
in the vector of the constant DATE/DATETIME values. The cmp_item_datetime
class is used to compare items one by one in the DATE/DATETIME context.
Both classes obtain values from items with help of the get_datetime_value()
function and cache the left item if it is a constant one.
mysql-test/t/type_datetime.test:
Added a test case for the bug#28133: Wrong DATE/DATETIME comparison in IN() function.
mysql-test/r/type_datetime.result:
Added a test case for the bug#28133: Wrong DATE/DATETIME comparison in IN() function.
mysql-test/r/func_in.result:
A test case result is corrected after the fix for the bug#28133.
sql/item_cmpfunc.h:
Bug#28133: Wrong DATE/DATETIME comparison in IN() function.
Two DATE/DATETIME comparison classes are added.
The in_datetime class is used to find occurence of the item to be checked
in the vector of the constant DATE/DATETIME values. The cmp_item_datetime
class is used to compare items one by one in the DATE/DATETIME context.
Both classes obtain values from items with help of the get_datetime_value()
function and cache the left item if it is a constant one.
sql/item_cmpfunc.cc:
Bug#28133: Wrong DATE/DATETIME comparison in IN() function.
Now IN function checks whether all of its arguments has the STRING result
types and at least one of them is a DATE/DATETIME item. If so it uses either
an object of the in_datetime class or an object of the cmp_item_datetime
class to perform its work. If the IN() function arguments are rows then
row columns are checked whether the DATE/DATETIME comparator should be used
to compare them.
- In some cases, flow control optimization implemented in sp::optimize
removes hreturn instructions, causing SQL exception handlers to:
* never return
* execute wrong logic
- This patch overrides default short cut optimization on hreturn instructions
to avoid this problem.
mysql-test/r/sp-code.result:
Added test case
mysql-test/t/sp-code.test:
Added test case
sql/sp_head.cc:
Override opt_mark to get correct execution paths without jump short cut
optimization.
sql/sp_head.h:
Added override sp_instr_hreturn::opt_shortcut_jump so that jump short cuts aren't
performed on hreturn instructions operating on handlers which are set to CONTINUE
after interruption.
The LEAST/GREATEST functions compared DATE/DATETIME values as
strings which in some cases could lead to a wrong result.
A new member function called cmp_datetimes() is added to the
Item_func_min_max class. It compares arguments in DATETIME context
and returns index of the least/greatest argument.
The Item_func_min_max::fix_length_and_dec() function now detects when
arguments should be compared in DATETIME context and sets the newly
added flag compare_as_dates. It indicates that the cmp_datetimes() function
should be called to get a correct result.
Item_func_min_max::val_xxx() methods are corrected to call the
cmp_datetimes() function when needed.
Objects of the Item_splocal class now stores and reports correct original
field type.
mysql-test/t/type_datetime.test:
Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
mysql-test/r/type_datetime.result:
Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
mysql-test/r/sp-vars.result:
A test case result corrected after the fix for the bug#27759.
sql/mysql_priv.h:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
Added the prototype of the get_datetime_value() function.
sql/item_func.h:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
A new member function called cmp_datetimes() is added to the
Item_func_min_max class.
sql/item_func.cc:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
A new member function called cmp_datetimes() is added to the
Item_func_min_max class. It compares arguments in DATETIME context
and returns index of the least/greatest argument.
The Item_func_min_max::fix_length_and_dec() function now detects when
arguments should be compared in DATETIME context and sets the newly
added flag compare_as_dates. It indicates that the cmp_datetimes() function
should be called to get a correct result.
Item_func_min_max::val_xxx() methods are corrected to call the
cmp_datetimes() function when needed.
sql/item_cmpfunc.cc:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
The get_datetime_value() function is no longer static.
sql/item.h:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
Objects of the Item_splocal class now stores and reports correct original
field type.
sql/item.cc:
Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
Objects of the Item_splocal class now stores and reports correct original
field type.
into magare.gmz:/home/kgeorge/mysql/work/B27531-5.0-opt
mysql-test/t/join.test:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/join.result:
SCCS merged
When checking for applicability of join cache
we must disable its usage only if there is no
temp table in use.
When a temp table is used we can use join
cache (and it will not make the result-set
unordered) to fill the temp table. The filesort()
operation is then applied to the data in the temp
table and hence is not affected by join cache
usage.
Fixed by narrowing the condition for disabling
join cache to exclude the case where temp table
is used.
mysql-test/r/join.result:
Bug #27531: test case
mysql-test/t/join.test:
Bug #27531: test case
sql/sql_select.cc:
Bug #27531:
Disable join cache only if not using temp table
allow select into out file from I_S if user has FILE privilege
otherwise issue an error
mysql-test/r/outfile.result:
test result
mysql-test/t/outfile.test:
test case
sql/sql_parse.cc:
allow select into out file from I_S if user has FILE privilege
otherwise issue an error
into moonbone.local:/mnt/gentoo64/work/23656-bug-5.0-opt-mysql
mysql-test/r/cast.result:
Auto merged
mysql-test/t/cast.test:
Auto merged
sql/item_func.cc:
Manual merge
into magare.gmz:/home/kgeorge/mysql/autopush/B27807-5.0-opt
sql/sql_select.cc:
Auto merged
mysql-test/r/subselect.result:
merge to 5.0-opt
mysql-test/t/subselect.test:
merge to 5.0-opt
Non-correlated scalar subqueries may get executed
in EXPLAIN at the optimization phase if they are
part of a right hand sargable expression.
If the scalar subquery uses a temp table to
materialize its results it will replace the
subquery structure from the parser with a simple
select from the materialization table.
As a result the EXPLAIN will crash as the
temporary materialization table is not to be shown
in EXPLAIN at all.
Fixed by preserving the original query structure
right after calling optimize() for scalar subqueries
with temp tables executed during EXPLAIN.
mysql-test/r/subselect.result:
Bug #27807: test case
mysql-test/t/subselect.test:
Bug #27807: test case
sql/item_subselect.cc:
Bug #27807: preserve the join structure
sql/sql_select.cc:
Bug #27807: introduce initialization function for tmp_join
sql/sql_select.h:
Bug #27807: introduce initialization function for tmp_join
The generic string to int conversion was used by the Item_func_signed and
the Item_func_unsigned classes to convert DATE/DATETIME values to the
SIGNED/UNSIGNED type. But this conversion produces wrong results for such
values.
Now if the item which result has to be converted can return its result as
longlong then the item->val_int() method is used to allow the item to carry
out the conversion itself and return the correct result.
This condition is checked in the Item_func_signed::val_int() and the
Item_func_unsigned::val_int() functions.
mysql-test/t/cast.test:
Added a test case for the bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
mysql-test/r/cast.result:
Added a test case for the bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
sql/item_func.cc:
Bug#23656: Wrong conversion result of a DATETIME to integer using CAST function.
Now if the item which result has to be converted can return its result as
longlong then the item->val_int() method is used to allow the item to carry
out the conversion itself and return the correct result.
This condition is checked in the Item_func_signed::val_int() and the
Item_func_unsigned::val_int() functions.
(here: "scripts/mysql_fix_privilege_tables{.sql,_sql.c}"). Important for cross-builds.
scripts/Makefile.am:
Generated files like "mysql_fix_privilege_tables{.sql,_sql.c}" should survive
a "make clean", this is essential for cross-builds.
So move them from "CLEANFILES" to "DISTCLEANFILES".
source tarball, this is essential for cross builds, like for NetWare.
scripts/Makefile.am:
On a fast build machine, both the source (mysql_fix_privilege_tables.sql)
and the generated file (mysql_fix_privilege_tables_sql.c) may have identical timestamps
(granularity is one second only, may be too coarse).
If that happens, the Makefile rule will fire, and "comp_sql" will be built and called -
which fails in a cross build, like for NetWare.
Prevent that by sleeping for 5 (five) seconds, this will ensure a time difference.
into weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
mysql-test/t/sp.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
client/Makefile.am:
"Makefile" command lines must start with a tab, not with blanks.
libmysqld/Makefile.am:
"Makefile" command lines must start with a tab, not with blanks.
netware/Makefile.am:
"Makefile" command lines must start with a tab, not with blanks.
scripts/Makefile.am:
"Makefile" command lines must start with a tab, not with blanks.
win/Makefile.am:
After a backslash (to mark a continuation line) there must not be a trailing blank.
'not exists' optimization is applied.
In fact 'not exists' optimization did not work anymore after the patch
introducing the evaluate_join_record function had been applied.
Corrected the evaluate_join_record function to respect the 'not_exists'
optimization.
mysql-test/r/join_outer.result:
Added a test case for bug #28188.
mysql-test/t/join_outer.test:
Added a test case for bug #28188.
sql/sql_select.cc:
Fixed bug #28188: performance degradation for outer join queries to which
'not exists' optimization is applied.
Corrected the evaluate_join_record function to respect the 'not_exists'
optimization.
- validated current result files
- forced order by and removed time stamps
removed a_version files (since do not make sense now when suite is in the main tree)
Note: datadict tests still fail as a result of regression bug 28181 in 5.0.42 (discovered
while performing this update) - tests should run clean once bug is fixed
BitKeeper/deleted/.del-a_version_check.test:
Delete: mysql-test/suite/funcs_1/t/a_version_check.test
BitKeeper/deleted/.del-a_version_check.result:
Delete: mysql-test/suite/funcs_1/r/a_version_check.result
BitKeeper/deleted/.del-innodb_views.warnings:
Delete: mysql-test/suite/funcs_1/r/innodb_views.warnings
BitKeeper/deleted/.del-memory_views.warnings:
Delete: mysql-test/suite/funcs_1/r/memory_views.warnings
BitKeeper/deleted/.del-myisam_views.warnings:
Delete: mysql-test/suite/funcs_1/r/myisam_views.warnings
mysql-test/suite/funcs_1/datadict/datadict_load.inc:
Modified to correct failiure to return host name on some systems
mysql-test/suite/funcs_1/datadict/datadict_master.inc:
corrections to force order by on queries and replace time stamps with strings
mysql-test/suite/funcs_1/datadict/datadict_show_schema.inc:
corrections to force order by on queries
mysql-test/suite/funcs_1/r/innodb__datadict.result:
Updated result file with order bu selects, elimination of time stamps
and selects with empty user (that we don't have anymore)
mysql-test/suite/funcs_1/r/innodb_func_view.result:
confirming existing results as correct ones - old result file had wrong cast values returned
mysql-test/suite/funcs_1/r/innodb_trig_08.result:
confirming existing results as correct ones - updated error message
mysql-test/suite/funcs_1/r/innodb_views.result:
confirming existing results as correct ones - returned results are correct,
wrong 'expected' error messages removed
mysql-test/suite/funcs_1/r/memory__datadict.result:
Updated result file with order bu selects, elimination of time stamps
and selects with empty user (that we don't have anymore)
mysql-test/suite/funcs_1/r/memory_func_view.result:
confirming existing results as correct ones - old result file had wrong cast values returned
mysql-test/suite/funcs_1/r/memory_trig_08.result:
confirming existing results as correct ones - updated error message
mysql-test/suite/funcs_1/r/memory_views.result:
confirming existing results as correct ones - returned results are correct,
wrong 'expected' error messages removed
mysql-test/suite/funcs_1/r/myisam__datadict.result:
Updated result file with order bu selects, elimination of time stamps
and selects with empty user (that we don't have anymore)
mysql-test/suite/funcs_1/r/myisam_func_view.result:
confirming existing results as correct ones - old result file had wrong cast values returned
mysql-test/suite/funcs_1/r/myisam_trig_08.result:
confirming existing results as correct ones - updated error message
mysql-test/suite/funcs_1/r/myisam_views.result:
confirming existing results as correct ones - returned results are correct,
wrong 'expected' error messages removed
mysql-test/suite/funcs_1/t/disabled.def:
Updated disabled messages with clearer ones
mysql-test/suite/funcs_1/views/views_master.inc:
removed invalid -- lines generating warning files
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
mysql-test/r/alter_table.result:
Auto merged
mysql-test/t/alter_table.test:
Auto merged
tmpdir has uppercase
Fix: don't convert mysql_tmpdir to lower case when building the path to a
temporary table
mysql-test/include/have_lowercase1.inc:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/include/have_lowercase1.inc
mysql-test/r/lowercase1.require:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase1.require
mysql-test/r/lowercase_mixed_tmpdir.result:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase_mixed_tmpdir.result
mysql-test/t/lowercase_mixed_tmpdir-master.opt:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.opt
mysql-test/t/lowercase_mixed_tmpdir-master.sh:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.sh
mysql-test/t/lowercase_mixed_tmpdir.test:
BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir.test
sql/sql_table.cc:
When building the path for a temporary table file, do not
convert mysql_tmpdir to lower case; lower_case_table_names
should not apply to mysql_tmpdir.