Post review changes for bug#19862.
sql/sql_select.cc:
Post review changes for bug#19862.
sql/item_func.h:
Post review changes for bug#19862.
sql/item_func.cc:
Post review changes for bug#19862.
sql/item.h:
Post review changes for bug#19862.
When processing aggregate functions all tables values are reset
to NULLs at the end of each group.
When doing that if there are no rows found for a group
the const tables must not be reset as they are not recalculated
by do_select()/sub_select() for each group.
mysql-test/r/subselect2.result:
* Bug #20792: Incorrect results from aggregate subquery
- test suite for the bug. This is dependent on InnoDB despite
the fact that the bug and the fix are not InnoDB specific.
This is because of the table flag HA_NOT_EXACT_COUNT.
When this flag is off (as in MyISAM) both t2 and t3 become of
join type 'system' as they are estimated to have 1 record and
and this statistics can be trusted (according to the absence of
HA_NOT_EXACT_COUNT).
mysql-test/t/subselect2.test:
* Bug #20792: Incorrect results from aggregate subquery
- test suite for the bug
sql/sql_select.cc:
* Bug #20792: Incorrect results from aggregate subquery
- when clearing results if there are not rows found for group
the const tables must not be reset as they are not recalculated
for each group.
into macbook.gmz:/Users/kgeorge/mysql/work/B21019-5.0-opt
mysql-test/t/select.test:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/select.result:
SCCS merged
Too many cursors (more than 1024) could lead to memory corruption.
This affects both, stored routines and C API cursors, and the
threshold is per-server, not per-connection. Similarly, the
corruption could happen when the server was under heavy load
(executing more than 1024 simultaneous complex queries), and this is
the reason why this bug is fixed in 4.1, which doesn't support
cursors.
The corruption was caused by a bug in the temporary tables code, when
an attempt to create a table could lead to a write beyond allocated
space. Note, that only internal tables were affected (the tables
created internally by the server to resolve the query), not tables
created with CREATE TEMPORARY TABLE. Another pre-condition for the
bug is TRUE value of --temp-pool startup option, which, however, is a
default.
The cause of a bug was that random memory was overwritten in
bitmap_set_next() due to out-of-bound memory access.
mysys/my_bitmap.c:
Local 'bitmap_size' is measured in bytes, no need to multiply it by 8.
sql/sql_select.cc:
Clear the temp_pool_slot bit only if we have set it previously.
- Add prelocking for stored procedures that uses sp or sf
- Update test result for sp_error(reported as bug#21294)
- Make note about new error message from sp-error(bug#17244)
mysql-test/r/sp-error.result:
Update test result(reported as bug#21294)
mysql-test/r/sp_notembedded.result:
Update test result after disabling test case
mysql-test/t/sp-error.test:
Add note about the faulty error message
mysql-test/t/sp_notembedded.test:
Disable test case until bug#17244 has been fixed
sql/sp.cc:
Add prelocking for all stored procedures that uses another sp or sf
sql/sp.h:
Add prelocking for all stored procedures that uses another sp or sf
sql/sql_base.cc:
Add prelocking for all stored procedures that uses another sp or sf
When optimizing conditions like 'a = <some_val> OR a IS NULL' so that they're
united into a single condition on the key and checked together the server must
check which value is the NULL value in a correct way : not only using ->is_null
but also check if the expression doesn't depend on any tables referenced in the
current statement.
This additional check must be performed because that optimization takes place
before the actual execution of the statement, so if the field was initialized
to NULL from a previous statement the optimization would be applied incorrectly.
mysql-test/r/select.result:
Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
- test case
mysql-test/t/select.test:
Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
- test case.
Note that ALTER TABLE is important here : it happens to
leave the Field instance for t1.b set to NULL, witch is vital for
demonstrating the problem fixed by this changeset.
sql/sql_select.cc:
Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
- check whether a value is null taking into account its table dependency.
mysql-test/mysql-test-run.pl:
Report warining when failure to start mysqld was detected, this will allow the testcase to continue executing.
The failure to start mysqld will be caugt when executing mysqltest
Changes in SQL parser:
* Change default mode of SELECT from "lock in share mode"
to "consistent read".
* Remove support from SELECT for specifying "consistent read".
* Add support in SELECT for specifying "lock in share mode".
* Change all uses of SQL parser to specify "lock in share mode".
* Modify syntax so that the only valid top-level statement is
a procedure definition, since it's the only one that actually
works.
* Add support for lock waits.
sql/ha_innodb.cc:
Applied innodb-5.1-ss660 snapshot.
Document better the "bool table_id" flag.
storage/innobase/btr/btr0cur.c:
Applied innodb-5.1-ss660 snapshot.
btr_cur_search_to_nth_level(): Reacquire btr_search_latch after
inserting to the insert buffer. This was noticed while analysing
Bug#19801, but this should not fix this bug since, according to
Heikki, btr_search_latch is not reserved during an insert.
storage/innobase/configure.in:
Applied innodb-5.1-ss660 snapshot.
Add -Wpointer-arith to CFLAGS when using GCC.
storage/innobase/data/data0type.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/dict/dict0crea.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/dict/dict0dict.c:
Applied innodb-5.1-ss660 snapshot.
Make dict_remove_db_name() non-static.
storage/innobase/ibuf/ibuf0ibuf.c:
Applied innodb-5.1-ss660 snapshot.
ibuf_fixed_addr_page(): Add parameter space. As the insert buffer
B-tree is only located in the system tablespace (space 0),
IBUF_TREE_ROOT_PAGE_NO is only special in space 0.
storage/innobase/include/data0type.h:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/include/dict0dict.h:
Applied innodb-5.1-ss660 snapshot.
Make dict_remove_db_name() non-static.
storage/innobase/include/pars0grm.h:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/include/pars0pars.h:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/include/que0que.h:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/include/sync0rw.ic:
Applied innodb-5.1-ss660 snapshot.
rw_lock_s_unlock_func(): Change a debug assertion to a
production assertion in order to track down Bug#19081.
storage/innobase/include/trx0trx.h:
Applied innodb-5.1-ss660 snapshot.
trx_sig_send() always succeeds or asserts.
storage/innobase/include/ut0ut.h:
Applied innodb-5.1-ss660 snapshot.
Document better the "bool table_id" flags.
storage/innobase/mem/mem0mem.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/lexyy.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/pars0grm.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/pars0grm.h:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/pars0grm.y:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/pars0lex.l:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/pars/pars0pars.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/que/que0que.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/row/row0mysql.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/row/row0sel.c:
Applied innodb-5.1-ss660 snapshot.
* Disable prefetch and adaptive hash index for tables
with rows over 1024 bytes in InnoDB's SQL parser.
* row_sel_try_search_shortcut(): Do not return SEL_FOUND
when the record was not found. This bug was introduced
in MySQL/InnoDB 5.0.3, but luckily it should never
manifest itself, given that existing InnoDB SQL code
never makes use of consistent reads.
* Don't take unnecesary locks on supremum records when the
srv_locks_unsafe_for_binlog option is enabled. Fixes an
assertion failure in the innodb_unsafe_binlog testcase
when compiled with UNIV_DEBUG.
storage/innobase/row/row0upd.c:
Applied innodb-5.1-ss660 snapshot.
storage/innobase/trx/trx0roll.c:
Applied innodb-5.1-ss660 snapshot.
trx_sig_send() always succeeds or asserts.
storage/innobase/trx/trx0trx.c:
Applied innodb-5.1-ss660 snapshot.
trx_sig_send() always succeeds or asserts.
storage/innobase/ut/ut0ut.c:
Applied innodb-5.1-ss660 snapshot.
Document better the "bool table_id" flags.
mysql-test/mysql-test-run.pl:
Fix problem with checking that all im processes has shutdown cleanly
When it was detected that one of "im mysqlds" didn't shutdown, last was called to break the loop, but it only broke the inner loop.
Remove the while(0) loop and make this easier by setting $clean_shutdown to 0 if any such problem is detected.
innobase/btr/btr0cur.c:
Applied innodb-5.0-ss660 snapshot.
btr_cur_search_to_nth_level(): Reacquire btr_search_latch after
inserting to the insert buffer. This was noticed while analyzing
Bug#19081 but this shold not fix this bug since according to
Heikki, btr_search_latch is not reserved during an insert.
innobase/ibuf/ibuf0ibuf.c:
Applied innodb-5.0-ss660 snapshot.
ibuf_fixed_addr_page(): Add parameter space. As the insert buffer
B-tree is only located in the system tablespace (space 0),
IBUF_TREE_ROOT_PAGE_NO is only special in space 0.
innobase/include/sync0rw.ic:
Applied innodb-5.0-ss660 snapshot.
rw_lock_s_unlock_func(): Change a debug assertion to a
production assertion in order to track down Bug#19081.
innobase/ibuf/ibuf0ibuf.c:
Applied innodb-4.1-ss32 snapshot.
ibuf_fixed_addr_page(): Add parameter space. As the insert
buffer B-tree is only located in the system tablespace
(space 0), IBUF_TREE_ROOT_PAGE_NO is only special in space 0.
The problem was in that opt_sum_query() replaced MIN/MAX functions
with the corresponding constant found in a key, but due to imprecise
representation of float numbers, when evaluating the where clause,
this comparison failed.
When MIN/MAX optimization detects that all tables can be removed,
also remove all conjuncts in a where clause that refer to these
tables. As a result of this fix, these conditions are not evaluated
twice, and in the case of float number comparisons we do not discard
result rows due to imprecise float representation.
As a side-effect this fix also corrects an unnoticed problem in
bug 12882.
mysql-test/r/func_group.result:
BUG#20954 - test result adjustment.
Adjusted the test result of bug 12882 which was not preperly fixed.
The current patch corrects the problem that was fully corrected by the
patch for 12882.
The problem was that opt_sum_query() indicated that the optimizer may
remove all tables because all MIN/MAX/COUNT functions are constants,
but this lead to an empty result instead of NULL because the WHERE
clause was still evaluated.
The current fix removes all conjuncts in the where clause that
reference the removed tables, and thus corrects the problem.
mysql-test/r/select.result:
BUG#20954 - added test
mysql-test/r/subselect.result:
BUG#20954 - test result adjustment.
The fix removes those conditions in a where clause that refer to
tables optimized away by MIN/MAX optimization (opt_sum_query()).
mysql-test/t/select.test:
BUG#20954 - added test
sql/sql_select.cc:
Fix for BUG#20954: avg(keyval) retuns 0.38 but max(keyval) returns an empty set
When MIN/MAX optimization detects that all tables can be removed,
also remove all conjuncts in a where clause that refer to these
tables. As a result of this fix, these conditions are not evaluated
twice, and in the case of float number comparisons we do not discard
result rows due to imprecise float representation.
As a side-effect this fix also corrects an unnoticed problem in
bug 12882.
When there is no index defined filesort is used to sort the result of a
query. If there is a function in the select list and the result set should be
ordered by it's value then this function will be evaluated twice. First time to
get the value of the sort key and second time to send its value to a user.
This happens because filesort when sorts a table remembers only values of its
fields but not values of functions.
All functions are affected. But taking into account that SP and UDF functions
can be both expensive and non-deterministic a temporary table should be used
to store their results and then sort it to avoid twice SP evaluation and to
get a correct result.
If an expression referenced in an ORDER clause contains a SP or UDF
function, force the use of a temporary table.
A new Item_processor function called func_type_checker_processor is added
to check whether the expression contains a function of a particular type.
mysql-test/t/udf.test:
Added test case for bug#19862: Sort with filesort by function evaluates function twice
mysql-test/t/sp.test:
Added test case for bug#19862: Sort with filesort by function evaluates function twice
mysql-test/r/sp.result:
Added test case for bug#19862: Sort with filesort by function evaluates function twice
mysql-test/r/udf.result:
Added test case for bug#19862: Sort with filesort by function evaluates function twice
sql/sql_select.cc:
Fixed bug#19862: Sort with filesort by function evaluates function twice
If an expression referenced in an ORDER clause contains a SP or UDF
function, force the use of a temporary table.
sql/item_func.h:
Fixed bug#19862: Sort with filesort by function evaluates function twice
A new Item_processor function called func_type_checker_processor is added
to check whether the expression contains a function of a particular type.
sql/item.h:
Fixed bug#19862: Sort with filesort by function evaluates function twice
A new Item_processor function called func_type_checker_processor is added
to check whether the expression contains a function of a particular type.
sql/item_func.cc:
Fixed bug#19862: Sort with filesort by function evaluates function twice
A new Item_processor function called func_type_checker_processor is added
to check whether the expression contains a function of a particular type.
When executing INSERT over a view with calculated columns it was assuming all
elements of the fields collection are actually Item_field instances.
This may not be true when inserting into a view and that view has columns that are
such expressions that allow updating (like setting a collation for example).
Corrected to access field information through the filed_for_view_update() function and
retrieve correctly the field info even for "update-friendly" non-Item_field items.
mysql-test/r/view.result:
Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
- test suite
mysql-test/t/view.test:
Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
- test suite
sql/item_strfunc.h:
Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
- obvious typo fixed
sql/sql_base.cc:
Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called
- must access field information through the filed_for_view_update() function to retrieve
correctly the field info even for "update-friendly" non-Item_field items.
Emit an error instead of doing ASSERT
mysql-test/r/create_not_windows.result:
update result
mysql-test/t/create_not_windows.test:
Add test case for bug #16532: mysql server assert in debug if table definition is removed
sql/sql_table.cc:
it could happen that an user deletes the frm file on OS level.
In addition if the table was already opened, the file system level
check for existance of table.frm will pass but get_cached_table_share()
will return non-NULL value. In this case we will emit the standard
error that the table exist. The error case is quite obscure but error
message is better than a sigabort.
(Re-apply a patch from the general tree to the clone.)
mysql-test/mysql-test-run.pl:
"mysql-test-run.pl" must write a "Logging:" line for the evaluation of RPM build tests.
(Re-apply a patch from the general tree to the clone.)
BUG#20850: Assert during slave shutdown in many rpl_* tests
This patch has already been applied to 5.1.
sql/slave.cc:
BUG#20850: Assert during slave shutdown in many rpl_* tests
This patch has already been applied to 5.1.
when calculating GROUP_CONCAT all blob fields are transformed
to varchar when making the temp table.
However a varchar has at max 2 bytes for length.
This fix makes the conversion only for blobs whose max length
is below that limit.
Otherwise blob field is created by make_string_field() call.
mysql-test/r/func_gconcat.result:
Bug#16712: group_concat returns odd srting insead of intended result
* testsuite for the bug
mysql-test/t/func_gconcat.test:
Bug#16712: group_concat returns odd srting insead of intended result
* testsuite for the bug
sql/item_sum.cc:
Bug#16712: group_concat returns odd srting insead of intended result
* force blob->varchar conversion for small enough blobs only
sql/sql_select.cc:
Bug#16712: group_concat returns odd srting insead of intended result
* force blob->varchar conversion for small enough blobs only
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint
mysql-test/mysql-test-run.pl:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
a non-correlated single-row subquery over information schema.
The function get_all_tables filling all information schema
tables reset lex->sql_command to SQLCOM_SHOW_FIELDS. After
this the function could evaluate partial conditions related to
some columns. If these conditions contained a subquery over
information schema it led to a wrong evaluation and a wrong
result set.
This bug was already fixed in 5.1.
This patch follows the way how it was done in 5.1 where
the value of lex->sql_command is set to SQLCOM_SHOW_FIELDS
in get_all_tables only for the calls of the function
open_normal_and_derived_tables and is restored after these
calls.
mysql-test/r/information_schema.result:
Added a test case for bug #21231.
mysql-test/t/information_schema.test:
Added a test case for bug #21231.
- Fix problems in the "Interval walking" partition interval analyzer.
mysql-test/r/partition_pruning.result:
BUG#20257: Add more testcases for partition pruning
mysql-test/t/partition_pruning.test:
BUG#20257: Add more testcases for partition pruning
sql/sql_partition.cc:
BUG#20257: Fix partition pruning for BIGINT UNSIGNED, interval walking:
- provide special handling for an edge case of interval of size 4G-1.
- Store interval size in ulonglong, not uint (it was possible to miss partitions this way)
- In get_next_partition_via_walking(), interpret the value of walked-over field as having the
same "signedness" as field (this is so because this value was obtained by calling field->val_int())
- Remove out of date todo comment.
- Send confusing output to /dev/null
mysql-test/t/mysqlbinlog.test:
Send confusing error messages to /dev/null so they don't appear in erro log if test case fails
into trift2.:/M50/merge-4.1-to-5.0
VC++Files/libmysqld/libmysqld.dsp:
Auto merged
VC++Files/libmysqld/libmysqld.vcproj:
Auto merged
VC++Files/libmysqld/libmysqld_ia64.dsp:
Auto merged
VC++Files/mysqldemb/mysqldemb.dsp:
Auto merged
VC++Files/sql/mysqld.dsp:
Auto merged
VC++Files/sql/mysqld.vcproj:
Auto merged
VC++Files/sql/mysqld_ia64.dsp:
Auto merged
VC++Files/sql/mysqldmax.dsp:
Auto merged
sql/field.cc:
Merge a backport == Null-merge == "ul".
sql/field.h:
Merge a backport == Null-merge == "ul".
sql/sql_locale.cc:
Changes were already present (and even better) == Null-merge == "ul".
into trift2.:/M50/merge-4.1-to-5.0
strings/strtod.c:
Manual merge: Null merge with header file cleanup ("my_base.h" includes "my_global.h", so we do not need both).
into trift2.:/M50/merge-4.1-to-5.0
mysql-test/r/date_formats.result:
Auto merged
mysql-test/t/date_formats.test:
Auto merged
sql/item_strfunc.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_locale.cc:
Auto merged
sql/item_timefunc.cc:
Merging by "ul", as asked in the original changeset.
support-files/mysql.spec.sh:
Manual merge, keeping alphabetic order.