Add a testcase and backport this fix:
Bug#14338686: MYSQL IS GENERATING DIFFERENT AND SLOWER
(IN NEWER VERSIONS) EXECUTION PLAN
PROBLEM:
While checking for an index to sort for the order by clause
in this query
"SELECT datestamp FROM contractStatusHistory WHERE
contract_id = contracts.id ORDER BY datestamp asc limit 1;"
we do not calculate the number of rows to be examined correctly.
As a result we choose index 'idx_contractStatusHistory_datestamp'
defined on the 'datestamp' field, rather than choosing index
'contract_id'. And hence the lower performance.
ANALYSIS:
While checking if an index is present to give the records in
sorted order(datestamp), we consider the selectivity of the
'ref_key'(contract_id here) using 'table->quick_condition_rows'.
'ref_key' here can be an index from 'REF_ACCESS' or from 'RANGE'.
As this is a 'REF_ACCESS', 'table->quick_condition_rows' is not
set to the actual value which is 2. Instead is set to the number
of tuples present in the table indicating that every row that
is selected would be satisfying the condition present in the query.
Hence, the selectivity becomes 1 even when we choose the index
on the order by column instead of the join_condition.
But, in reality as only 2 rows satisy the condition, we need to
examine half of the entire data set to get one tuple when we
choose index on the order by column.
Had we chosen the 'REF_ACCESS' we would have examined only 2 tuples.
Hence the delay in executing the query specified.
FIX:
While calculating the selectivity of the ref_key:
For REF_ACCESS consider quick_rows[ref_key] if range
optimizer has an estimate for this key. Else consider
'rec_per_key' statistic.
For RANGE ACCESS consider 'table->quick_condition_rows'.
- Make JOIN::const_key_parts include keyparts for which
the WHERE clause has an equality in form
"t.key_part=reference_outside_this_select"
- This allows to avoid filesort'ing in some cases (and also
avoid a difficult choice between using filesort or using an index)
includes:
* remove some remnants of "Bug#14521864: MYSQL 5.1 TO 5.5 BUGS PARTITIONING"
* introduce LOCK_share, now LOCK_ha_data is strictly for engines
* rea_create_table() always creates .par file (even in "frm-only" mode)
* fix a 5.6 bug, temp file leak on dummy ALTER TABLE
Analysis:
The reason for the inefficent plan was that Item_subselect::is_expensive()
didn't detect the special case when a subquery was optimized, but had no
join plan because it either has no table, or its tables have been optimized
away, or the optimizer detected that the result set is empty.
Solution:
Identify the special cases above in the Item_subselect::is_expensive(),
and consider such degenerate subqueries inexpensive.
The fix backports from MWL#182: Explain running statements the logic that
saves the original JOIN_TAB array of a query plan after optimization. This
array is later used during EXPLAIN to iterate over the original JOIN plan
nodes in the cases when this plan could be changed by early subquery
execution during the optimization phase of the outer query.
Analysis:
When a subquery that needs a temp table is executed during
the prepare or optimize phase of the outer query, at the end
of the subquery execution all the JOIN_TABs of the subquery
are replaced by a new JOIN_TAB that selects from the temp table.
However that temp table has no corresponding TABLE_LIST.
Once EXPLAIN execution reaches its last phase, it tries to print
the names of the subquery tables through its TABLE_LISTs, but in
the case of this bug there is no such TABLE_LIST (it is NULL),
hence a crash.
Solution:
The fix is to block subquery evaluation inside
Item_func_like::fix_fields and Item_func_like::select_optimize()
using the Item::is_expensive() test.
The patch enables back constant subquery execution during
query optimization after it was disabled during the development
of MWL#89 (cost-based choice of IN-TO-EXISTS vs MATERIALIZATION).
The main idea is that constant subqueries are allowed to be executed
during optimization if their execution is not expensive.
The approach is as follows:
- Constant subqueries are recursively optimized in the beginning of
JOIN::optimize of the outer query. This is done by the new method
JOIN::optimize_constant_subqueries(). This is done so that the cost
of executing these queries can be estimated.
- Optimization of the outer query proceeds normally. During this phase
the optimizer may request execution of non-expensive constant subqueries.
Each place where the optimizer may potentially execute an expensive
expression is guarded with the predicate Item::is_expensive().
- The implementation of Item_subselect::is_expensive has been extended
to use the number of examined rows (estimated by the optimizer) as a
way to determine whether the subquery is expensive or not.
- The new system variable "expensive_subquery_limit" controls how many
examined rows are considered to be not expensive. The default is 100.
In addition, multiple changes were needed to make this solution work
in the light of the changes made by MWL#89. These changes were needed
to fix various crashes and wrong results, and legacy bugs discovered
during development.
Bug#13639204 64111: CRASH ON SELECT SUBQUERY WITH NON UNIQUE INDEX
The crash happened due to wrong calculation
of key length during creation of reference for
sort order index. The problem is that
keyuse->used_tables can have OUTER_REF_TABLE_BIT enabled
but used_tables parameter(create_ref_for_key() func) does
not have it. So key parts which have OUTER_REF_TABLE_BIT
are ommited and it could lead to incorrect key length
calculation(zero key length).
mysql-test/r/subselect_innodb.result:
test result
mysql-test/t/subselect_innodb.test:
test case
sql/sql_select.cc:
added OUTER_REF_TABLE_BIT to the used_tables parameter
for create_ref_for_key() function.
storage/innobase/handler/ha_innodb.cc:
added assertion, request from Inno team
storage/innodb_plugin/handler/ha_innodb.cc:
added assertion, request from Inno team
The patch differs from the original MySQL patch as follows:
- All test case differences have been reviewed one by one, and
care has been taken to restore the original plan so that each
test case executes the code path it was designed for.
- A bug was found and fixed in MariaDB 5.3 in
Item_allany_subselect::cleanup().
- ORDER BY is not removed because we are unsure of all effects,
and it would prevent enabling ORDER BY ... LIMIT subqueries.
- ref_pointer_array.m_size is not adjusted because we don't do
array bounds checking, and because it looks risky.
Original comment by Jorgen Loland:
-------------------------------------------------------------
WL#5953 - Optimize away useless subquery clauses
For IN/ALL/ANY/SOME/EXISTS subqueries, the following clauses are
meaningless:
* ORDER BY (since we don't support LIMIT in these subqueries)
* DISTINCT
* GROUP BY if there is no HAVING clause and no aggregate
functions
This WL detects and optimizes away these useless parts of the
query during JOIN::prepare()
sql/sql_insert.cc:
CREATE ... IF NOT EXISTS may do nothing, but
it is still not a failure. don't forget to my_ok it.
******
CREATE ... IF NOT EXISTS may do nothing, but
it is still not a failure. don't forget to my_ok it.
sql/sql_table.cc:
small cleanup
******
small cleanup
Analysis:
The crash is a result of the same cause as all similar
bugs (lp:827416, lp:718763, lp:778413, lp:806943,
lp:611690). The general pattern is that some optimization
requires the evaluation of some condition (e.g. the WHERE
clause), and this condition contains a subquery, such that
the subquery itself requires a temporary table for its
execution. During the subquery execution the original
tables in the FROM clause are replaced by the temporary
table needed for the final GROUP or ORDER operation. All
this happens during optimization of the outer query. Later
when EXPLAIN is run for the subquery, explain attempts to
print the name of the tables in the FROM clause, but it
finds there a temporary table without a corresponding
TABLE_LIST object. The attempt to print the name of a
NULL table list results in a crash.
Solution:
This patch extends the fix to bug lp:702301, and dissalows
constant substitution of aggregate functions if the filter
condition used to check MIN/MAX keys is an expensive condition.
Analysis:
Constant table optimization of the outer query finds that
the right side of the equality is a constant that can
be used for an eq_ref access to fetch one row from t1,
and substitute t1 with a constant. Thus constant optimization
triggers evaluation of the subquery during the optimize
phase of the outer query.
The innermost subquery requires a plan with a temporary
table because with InnoDB tables the exact count of rows
is not known, and the empty tables cannot be optimzied
way. JOIN::exec for the innermost subquery substitutes
the subquery tables with a temporary table.
When EXPLAIN gets to print the tables in the innermost
subquery, EXPLAIN needs to print the name of each table
through the corresponding TABLE_LIST object. However,
the temporary table created during execution doesn't
have a corresponding TABLE_LIST, so we get a null
pointer exception.
Solution:
The solution is to forbid using expensive constant
expressions for eq_ref access for contant table
optimization. Notice that eq_ref with a subquery
providing the value is still possible during regular
execution.
- Set the default
- Adjust the testcases so that 'new' tests are run with optimizations turned on.
- Pull out relevant tests from "irrelevant" tests and run them with optimizations on.
- Run range.test and innodb.test with both mrr=on and mrr=off
This assumption in Item_cache_datetime::cache_value_int
was wrong:
- /* Assume here that the underlying item will do correct conversion.*/
- int_value= example->val_int_result();
mysql-test/r/subselect_innodb.result:
New test case.
mysql-test/t/subselect_innodb.test:
New test case.
sql/item.cc:
In Item_cache_datetime::cache_value_int()
- call get_time() or get_date() depending on desired type
- convert the returned MYSQL_TIME value to longlong depending on desired type
sql/item.h:
The cached int_value in Item_cache_datetime should not be unsigned:
- it is used mostly in signed context
- it can actually have negative value (for TIME data type)
sql/item_cmpfunc.cc:
Add comment on Bug#59685
sql/item_subselect.cc:
Add some DBUG_TRACE for easier bug-hunting.
Cleanup the sideeffects from most of the testcases with sideeffects.
mysql-test/mysql-test-run.pl:
Add option "check-testcases" to mysql-test-run.pl
Will execute "include/check-testcase.test" once before each tescase and record the output into "var/tmp/check-testcase.result"
After the teastcase it will run again and this time compare the output with previously recorded file.
mysql-test/r/analyze.result:
Drop table t1 at end of test
mysql-test/r/create_select_tmp.result:
Drop table t1 at end of test
mysql-test/r/ctype_cp932.result:
Drop table t1 at end of test
mysql-test/r/ctype_recoding.result:
Drop table t1 at end of test
mysql-test/r/grant2.result:
Drop user mysqltest_2 and mysqltest_A@'%'
mysql-test/r/join_outer.result:
Drop view v1 to cleanup
mysql-test/r/ps_1general.result:
Drop table t1 at end of test
mysql-test/r/query_cache.result:
Drop function "f1"
mysql-test/r/read_only.result:
Reset the "read_only" flag
mysql-test/r/rpl000001.result:
Remove user "blafasel2"
mysql-test/r/rpl000017.result:
Remove user "replicate"
mysql-test/r/rpl_failed_optimize.result:
Drop table t1 to cleanup
mysql-test/r/rpl_flush_tables.result:
Drop tables t3, t4, t5
mysql-test/r/rpl_ignore_revoke.result:
Delete user "user_foo"
mysql-test/r/rpl_insert_id.result:
Drop table t1 to cleanup
mysql-test/r/rpl_loaddata.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_m.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_loaddata_rule_s.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_misc_functions.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_multi_update3.result:
Drop tyable t1 and t2 to cleanup
mysql-test/r/rpl_replicate_do.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_skip_error.result:
Drop tyable t1 to cleanup
mysql-test/r/rpl_slave_status.result:
Drop tyable t1 to cleanup
mysql-test/r/sp-prelocking.result:
Drop view v1 and tables t1, t2, t3 and t4 to cleanup
mysql-test/r/sp-security.result:
Delete users to cleanup
Delete remaining traces in tables_priv and procs_priv
mysql-test/r/subselect_innodb.result:
Drop procedure p1 to cleanup
mysql-test/r/trigger-compat.result:
Drop trigger wl2818_trg1 and wl2818_trg2.
Drop table t1, t2
Drop database mysqltest_db1
And the users "mysqltest_dfn@localhost" and "mysqltest_inv@localhost"
mysql-test/r/type_bit.result:
Drop tables t1 and t2 to cleanup
mysql-test/r/variables.result:
Set GLOBAL max_join_size to 10 as it originally was in variables-master.opt
mysql-test/r/view_grant.result:
Dop user "test@localhost" to cleanup
mysql-test/t/analyze.test:
Drop table t1 to cleanup
mysql-test/t/create_select_tmp.test:
Drop table t1 to cleanup
mysql-test/t/ctype_cp932.test:
Drop table t1 to cleanup
mysql-test/t/ctype_recoding.test:
Drop table t1 to cleanup
mysql-test/t/fulltext_var.test:
Restore the original ft_boolean_syntax
mysql-test/t/grant2.test:
Drop users "mysqltest_2" and "mysqltest_A@'%'" to cleanup
mysql-test/t/innodb_cache.test:
Reset query_cache_size to original value
mysql-test/t/join_outer.test:
Drop view v1 to cleanup
mysql-test/t/ps_1general.test:
Drop table t1 to cleanup
mysql-test/t/query_cache.test:
Drop function "f1" to cleanup
mysql-test/t/read_only.test:
Reset the readonly flag
mysql-test/t/rpl000001.test:
Delete user "blafasel2" to cleanup
mysql-test/t/rpl000017.test:
Delete user "replicate" to cleanup
mysql-test/t/rpl_failed_optimize.test:
Drop table t1 to cleanup
mysql-test/t/rpl_flush_tables.test:
Droip table t3, t4 and t5 to cleanup
mysql-test/t/rpl_ignore_revoke.test:
Delet user "user_foo" to cleanup
mysql-test/t/rpl_insert_id.test:
drop table t1 to cleanup
mysql-test/t/rpl_loaddata.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_m.test:
Drop table t1 to cleanup
mysql-test/t/rpl_loaddata_rule_s.test:
Drop table t1 to cleanup
mysql-test/t/rpl_misc_functions.test:
Drop table t1 to cleanup
mysql-test/t/rpl_multi_update3.test:
Drop table t1 and t2 to cleanup
mysql-test/t/rpl_replicate_do.test:
Drop table t1 to cleanup
mysql-test/t/rpl_skip_error.test:
Drop table t1 to cleanup
mysql-test/t/rpl_slave_status.test:
Drop table t1 to cleanup
mysql-test/t/sp-prelocking.test:
Drop table t1, t2 t3 and t4 to cleanup
Drop view v1
mysql-test/t/sp-security.test:
Delete test users from mysql.user, mysql.db, mysql.procs_priv and mysql.tables_priv
Drop table t1 to cleanup
mysql-test/t/subselect_innodb.test:
Drop procedure p1 to cleanup
mysql-test/t/trigger-compat.test:
Drop trigger wl2818_trg1 and wl2818_trg2 to cleanup
Drop table t1, t2
Drop users
drop database mysqltest_db1
mysql-test/t/type_bit.test:
drop table t1 and t2 to cleanup
mysql-test/t/variables-master.opt:
Increase max_join_size to 100.
mysql-test/t/variables.test:
Set max_join_size to 10, which was the original value in variables-master.opt
mysql-test/t/view_grant.test:
Drop the user "test@localhost"
mysql-test/include/check-testcase.test:
New BitKeeper file ``mysql-test/include/check-testcase.test''
mysql-test/r/subselect_innodb.result:
BUG#14342 test case
mysql-test/t/subselect_innodb.test:
BUG#14342 test case
sql/opt_range.cc:
avoiding of calling Item::val_* methods family with opt_range mem_root, because its life time is too short.
The bug was in JOIN::join_free which was wrongly determining that
all joins have been already executed and therefore all used tables
can be closed.
mysql-test/r/subselect_innodb.result:
- test results fixed (Bug#12736 "Server crash during a select
mysql-test/t/subselect_innodb.test:
- a test case for Bug#12736 "Server crash during a select": test
that ha_index_or_rnd_end and mysql_unlock_tables are called
for all used tables in proper order.
sql/item_subselect.cc:
- implement subselect_union_engine::is_executed
sql/item_subselect.h:
- implement Item_subselect::is_evaluated. This function is used
to check whether we can clean up a non-correlated join of a subquery
when cleaning up the join of the outer query
sql/sql_lex.h:
- declare st_select_lex::cleanup_all_joins
sql/sql_select.cc:
- remove an argument from JOIN::join_free, it's now not used
- reimplement JOIN::join_free to not unlock tables if there
is a subquery that has not yet been evaluated. Make sure that the
new implementation calls ha_index_or_rnd_end for every table in
the join and inner joins, because all table cursors must be closed
before mysql_unlock_tables.
sql/sql_select.h:
- JOIN::join_free signature changed
sql/sql_union.cc:
- implement a helper method st_select_lex::cleanup_all_joins, which
recursively walks over a tree of joins and calls cleanup() for
each join.
mysql-test/r/subselect.result:
test depends on innodb moved from 'subselect' to 'subselect_innodb'
mysql-test/r/subselect_innodb.result:
test depends on innodb moved from 'subselect' to 'subselect_innodb'
mysql-test/t/subselect.test:
test depends on innodb moved from 'subselect' to 'subselect_innodb'
mysql-test/t/subselect_innodb.test:
test depends on innodb moved from 'subselect' to 'subselect_innodb'
mysql-test/r/subselect_innodb.result:
test of unlocking innodb tables and subquery in HAVING clause
mysql-test/t/subselect_innodb.test:
test of unlocking innodb tables and subquery in HAVING clause
sql/item_subselect.cc:
mark SELECT with subquery in HAVING clause
sql/sql_lex.cc:
mark SELECT with subquery in HAVING clause
sql/sql_lex.h:
mark SELECT with subquery in HAVING clause
sql/sql_select.cc:
do not unlock tables early if we have subquery in HAVING clause
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
check of memory allocation operation was added
mysql-test/r/subselect_innodb.result:
switched to new syntax
mysql-test/t/subselect_innodb.test:
switched to new syntax
sql/sql_select.cc:
check of memory allocation operation
into sanja.is.com.ua:/home/bell/mysql/bk/work-sub-4.1
mysql-test/r/subselect_innodb.result:
Auto merged
mysql-test/t/subselect_innodb.test:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_union.cc:
Auto merged
(BUG#2089)
mysql-test/r/subselect_innodb.result:
correct results
sql/mysql_priv.h:
new parameter for setup_tables()
sql/sql_base.cc:
new parameter for setup_tables() added to avoid dropping query_id of fields during reinitialization subquery
sql/sql_class.cc:
layout fixed
sql/sql_help.cc:
new parameter for setup_tables()
sql/sql_insert.cc:
new parameter for setup_tables()
sql/sql_lex.cc:
removed incorrect code
sql/sql_load.cc:
new parameter for setup_tables()
sql/sql_olap.cc:
new parameter for setup_tables()
sql/sql_prepare.cc:
new parameter for setup_tables()
sql/sql_select.cc:
new parameter for setup_tables()
sql/sql_update.cc:
new parameter for setup_tables()
mysql-test/r/subselect_innodb.result:
bug 2048 test
mysql-test/t/subselect_innodb.test:
bug 2048 test
sql/item_subselect.cc:
do not unlock tables for subqueries
sql/sql_derived.cc:
derived table tables can be unlocked
sql/sql_lex.h:
new interface to pass additional options
sql/sql_union.cc:
new interface to pass additional options
do not unlock tables for UNION
Deprecate the use of TYPE=... Preferred syntax is ENGINE=
include/mysqld_error.h:
New warning for deprecated syntax
sql/lex.h:
Introduce ENGINE keyword
Sort order of symbols
sql/share/czech/errmsg.txt:
New warning for deprecated syntax
sql/share/danish/errmsg.txt:
New warning for deprecated syntax
sql/share/dutch/errmsg.txt:
New warning for deprecated syntax
sql/share/english/errmsg.txt:
New warning for deprecated syntax
sql/share/estonian/errmsg.txt:
New warning for deprecated syntax
sql/share/french/errmsg.txt:
New warning for deprecated syntax
sql/share/german/errmsg.txt:
New warning for deprecated syntax
sql/share/greek/errmsg.txt:
New warning for deprecated syntax
sql/share/hungarian/errmsg.txt:
New warning for deprecated syntax
sql/share/italian/errmsg.txt:
New warning for deprecated syntax
sql/share/japanese/errmsg.txt:
New warning for deprecated syntax
sql/share/korean/errmsg.txt:
New warning for deprecated syntax
sql/share/norwegian-ny/errmsg.txt:
New warning for deprecated syntax
sql/share/norwegian/errmsg.txt:
New warning for deprecated syntax
sql/share/polish/errmsg.txt:
New warning for deprecated syntax
sql/share/portuguese/errmsg.txt:
New warning for deprecated syntax
sql/share/romanian/errmsg.txt:
New warning for deprecated syntax
sql/share/russian/errmsg.txt:
New warning for deprecated syntax
sql/share/serbian/errmsg.txt:
New warning for deprecated syntax
sql/share/slovak/errmsg.txt:
New warning for deprecated syntax
sql/share/spanish/errmsg.txt:
New warning for deprecated syntax
sql/share/swedish/errmsg.txt:
New warning for deprecated syntax
sql/share/ukrainian/errmsg.txt:
New warning for deprecated syntax
sql/sql_show.cc:
Change TYPE= with ENGINE=
sql/sql_yacc.yy:
Introduce ENGINE keyword,
Deprecate TYPE= syntax,
Introduce SHOW ENGINE syntax,
Deprecate SHOW INNODB/BDB syntax.
mysql-test/r/alias.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/alter_table.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/auto_increment.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/bdb-alter-table-1.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/bdb-crash.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/bdb-deadlock.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/bdb.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/bdb_cache.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/case.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/cast.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/constraints.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/create.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_collate.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_latin1_de.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_many.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_mb.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_recoding.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/ctype_ucs.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/delete.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/distinct.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/fulltext.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/fulltext2.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/fulltext_distinct.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/fulltext_left_join.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_compress.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_date_add.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_group.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_if.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_str.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_system.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_test.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/func_time.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/gis-rtree.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/group_by.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/handler.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/heap.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/heap_auto_increment.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/heap_btree.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/heap_hash.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/help.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/innodb-deadlock.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/innodb.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/innodb_cache.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/innodb_handler.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/insert_select.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/isam.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/join.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/join_crash.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/join_outer.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/key.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/lock.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/lock_tables_lost_commit.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/merge.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/mix_innodb_myisam_binlog.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/multi_update.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/myisam.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/null.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/null_key.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/order_by.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/query_cache.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/range.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/repair_part1.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/replace.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/rollback.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/rpl000006.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/rpl_flush_tables.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/rpl_insert_id.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/rpl_relayrotate.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/select.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/select_found.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/show_check.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/sql_mode.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/status.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/subselect.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/subselect2.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/subselect_innodb.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/symlink.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/temp_table.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/type_blob.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/type_datetime.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/type_enum.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/type_nchar.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/type_set.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/union.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/update.result:
Change occurances of TYPE= to ENGINE=
mysql-test/r/warnings.result:
Change occurances of TYPE= to ENGINE=
mysql-test/t/alias.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/alter_table.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/auto_increment.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/bdb-alter-table-1.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/bdb-crash.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/bdb-deadlock.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/bdb.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/bdb_cache.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/create.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/ctype_ucs.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/delete.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/distinct.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/fulltext.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/fulltext2.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/fulltext_distinct.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/fulltext_left_join.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_compress.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_date_add.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_group.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_if.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_str.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_test.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/func_time.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/gis-rtree.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/group_by.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/handler.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/heap.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/heap_auto_increment.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/heap_btree.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/heap_hash.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/help.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/innodb-deadlock.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/innodb.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/innodb_cache.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/innodb_handler.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/insert_select.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/isam.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/join.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/join_crash.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/join_outer.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/key.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/lock.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/lock_tables_lost_commit.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/merge.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/mix_innodb_myisam_binlog.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/multi_update.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/myisam.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/null.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/null_key.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/order_by.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/outfile.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/query_cache.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/query_cache_merge.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/range.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/repair_part1.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/replace.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/rollback.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/rpl000006.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/rpl_flush_tables.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/rpl_insert_id.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/rpl_relayrotate.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/select.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/select_found.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/show_check.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/sql_mode.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/status.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/subselect.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/subselect2.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/subselect_innodb.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/symlink.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/temp_table.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/type_datetime.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/type_set.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/union.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/update.test:
Change occurances of TYPE= to ENGINE=
mysql-test/t/warnings.test:
Change occurances of TYPE= to ENGINE=
New test for deprecated syntax