 bug#10466: Datatype "timestamp" displays "YYYYMMDDHHMMSS" irrespective of display sizes.
- Print warning that says display width is not supported for datatype TIMESTAMP, if user tries to create a TIMESTAMP column with display width.
- Use display width for TIMESTAMP only in type_timestamp test to make sure warning is displayed correctly.
mysql-test/include/ps_create.inc:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/alias.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/func_date_add.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/func_str.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/func_time.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/group_by.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/innodb.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_1general.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_2myisam.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_3innodb.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_4heap.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_5merge.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_6bdb.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/ps_7ndb.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/select.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/r/type_timestamp.result:
When display width is used for a TIMESTAMP column a warning is printed that the display width will be ignored.
mysql-test/r/update.result:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/alias.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/func_date_add.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/func_str.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/func_time.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/group_by.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/innodb.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/ps.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/ps_4heap.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/ps_5merge.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/select.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
mysql-test/t/update.test:
Reove all uses of display width in for TIMESTAMP columns, except in the type_timestamp test.
sql/share/errmsg.txt:
Correct swedish error message
sql/sql_parse.cc:
Print warning if datatype is TIMESTAMP and display width is used.
21 years ago  Fix for bug#4912 "mysqld crashs in case a statement is executed
a second time". The bug was caused by incompatibility of
negations elimination algorithm and PS: during first statement
execute a subtree with negation was replaced with equivalent
subtree without NOTs.
The problem was that although this transformation was permanent,
items of the new subtree were created in execute-local memory.
The patch adds means to check if it is the first execute of a
prepared statement, and if this is the case, to allocate items
in memory of the prepared statement.
The implementation:
- backports Item_arena from 5.0
- adds Item_arena::is_stmt_prepare(),
Item_arena::is_first_stmt_execute().
- deletes THD::allocate_temporary_pool_for_ps_preparing(),
THD::free_temporary_pool_for_ps_preparing(); they
were redundant.
and adds a few invariants:
- thd->free_list never contains junk (= freed items)
- thd->current_arena is never null. If there is no
prepared statement, it points at the thd.
The rest of the patch contains mainly mechanical changes and
cleanups.
mysql-test/r/ps.result:
Test results updated (test case for Bug#4912)
mysql-test/t/ps.test:
A test case for Bug#4912 "mysqld crashs in case a statement is
executed a second time"
sql/item_cmpfunc.cc:
current_statement -> current_arena
sql/item_subselect.cc:
Statement -> Item_arena, current_statement -> current_arena
sql/item_subselect.h:
Item_subselect does not need to save thd->current_statement.
sql/item_sum.cc:
Statement -> Item_arena
sql/item_sum.h:
Statement -> Item_arena
sql/mysql_priv.h:
Statement -> Item_arena
sql/sql_base.cc:
current_statement -> current_arena
sql/sql_class.cc:
- Item_arena
- convenient set_n_backup_statement, restore_backup_statement
(nice idea, Sanja)
sql/sql_class.h:
- Item_arena: backport from 5.0
- allocate_temporary_pool_for_ps_preparing,
free_temporary_pool_for_ps_preparing removed.
sql/sql_derived.cc:
current_statement -> current_arena
sql/sql_lex.cc:
current_statement -> current_arena
sql/sql_parse.cc:
Deploy invariant that thd->free_list never contains junk items
(backport from 5.0).
sql/sql_prepare.cc:
- backporting Item_arena
- no need to allocate_temporary_pool_for_ps_preparing().
sql/sql_select.cc:
Fix for bug#4912 "mysqld crashs in case a statement is
executed a second time": if this is the first execute of
a prepared statement, negation elimination is
done in memory of the prepared statement.
sql/sql_union.cc:
Backporting Item_arena from 5.0.
22 years ago  A fix and test case for Bug#5987 "subselect in bool function
crashes server (prepared statements)": the bug was that all boolean
items always recovered its original arguments at statement cleanup
stage.
This collided with Item_subselect::select_transformer, which tries to
permanently change the item tree to use a transformed subselect instead of
original one.
So we had this call sequence for prepare:
mysql_stmt_prepare -> JOIN::prepare ->
Item_subselect::fix_fields -> the item tree gets transformed ->
Item_bool_rowready_func2::cleanup, item tree is recovered to original
state, while it shouldn't have been;
mysql_stmt_execute -> attempts to execute a broken tree -> crash.
Now instead of bluntly recovering all arguments of bool functions in
Item_bool_rowready_func2::cleanup, we recover only those
which were changed, and do it in one place.
There still would exist a possibility for a collision with subselect
tranformation, if permanent and temporary changes were performed at the
same stage.
But fortunately subselect transformation is always done first, so it
doesn't conflict with the optimization done by propogate_cond_constants.
Now we have:
mysql_stmt_prepare -> JOIN::prepare -> subselect transformation
permanently changes the tree -> cleanup doesn't recover anything,
because nothing was registered for recovery.
mysql_stmt_execute -> JOIN::prepare (the tree is already transformed,
so it doesn't change), JOIN::optimize ->
propogate_cond_constants -> temporary changes the item tree
with constants -> JOIN::execute -> cleanup ->
the changes done by propogate_cond_constants are recovered, as
they were registered for recovery.
mysql-test/r/ps.result:
Bug#5987: test results fixed.
mysql-test/t/ps.test:
A test for bug#5987 "subselect in bool function crashes server
(prepared statements)"
sql/item.cc:
resolve_const_item is now responsible to register all changes of the
item tree for recovery
sql/item.h:
resolve_const_item signagture changed
sql/item_cmpfunc.h:
Arguments of boolean functions are now recovered using the
centralized registry of THD.
sql/sql_class.cc:
It's crucial to add new items to the beginning of the recovery list,
so that the recovery is performed in LIFO mode: otherwise if we
change one node of a tree twice, it will be recovered to some intermediate
state.
sql/sql_select.cc:
change_cond_ref_to_const and propogate_cond_constants are now responsible
to register all changes of the item tree for recovery.
The recovery is done using the centralized THD registry of
changed tree items.
21 years ago  Bug#31177: Server variables can't be set to their current values
Default values of variables were not subject to upper/lower bounds
and step, while setting variables was. Bounds and step are also
applied to defaults now; defaults are corrected quietly, values
given by the user are corrected, and a correction-warning is thrown
as needed. Lastly, very large values could wrap around, starting
from 0 again. They are bounded at the maximum value for the
respective data-type now if no lower maximum is specified in the
variable's definition.
client/mysql.cc:
correct maxima in options array
client/mysqltest.c:
adjust minimum for "sleep" option so default value is no longer
out of bounds.
include/m_string.h:
ullstr() - the unsigned brother of llstr()
include/my_getopt.h:
Flag if we bounded the value (that is, correct anything aside from
making value a multiple of block-size)
mysql-test/r/delayed.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/index_merge.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/innodb.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/innodb_mysql.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/key_cache.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/packet.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/ps.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/subselect.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/type_bit.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/type_bit_innodb.result:
We throw a warning now when we adjust out of range parameters.
mysql-test/r/variables.result:
correct results: bounds and step apply to variables' default values, too
mysql-test/t/variables.test:
correct results: bounds and step apply to variables' default values, too
mysys/my_getopt.c:
- apply bounds/step to default values of variables (based on work by serg)
- print complaints about incorrect values for variables (truncation etc.,
by requestion of consulting)
- if no lower maximum is specified in variable definition, bound unsigned
values at their maximum to prevent wrap-around
- some calls to error_reporter had a \n, some didn't. remove \n from calls,
let reporter-function handle it, so the default reporter behaves like that
in mysqld
sql/mysql_priv.h:
correct RANGE_ALLOC_BLOCK_SIZE (cleared with monty)
sql/mysqld.cc:
correct maxima to correct data-type.
correct minima where higher than default.
correct range-alloc-block-size.
correct inno variables so GET_* corresponds to actual variable's type.
sql/set_var.cc:
When the new value for a variable is out of bounds, we'll send the
client a warning (but not if the value was simply not a multiple of
'blocksize'). sys_var_thd_ulong had this, sys_var_long_ptr_global
didn't; broken out and streamlined to avoid duplication of code.
strings/llstr.c:
ullstr() - the unsigned brother of llstr()
18 years ago  A fix and a test case for Bug#16365 "Prepared Statements: DoS with
too many open statements". The patch adds a new global variable
@@max_prepared_stmt_count. This variable limits the total number
of prepared statements in the server. The default value of
@@max_prepared_stmt_count is 16382. 16382 small statements
(a select against 3 tables with GROUP, ORDER and LIMIT) consume
100MB of RAM. Once this limit has been reached, the server will
refuse to prepare a new statement and return ER_UNKNOWN_ERROR
(unfortunately, we can't add new errors to 4.1 without breaking 5.0). The limit is changeable after startup
and can accept any value from 0 to 1 million. In case
the new value of the limit is less than the current
statement count, no new statements can be added, while the old
still can be used. Additionally, the current count of prepared
statements is now available through a global read-only variable
@@prepared_stmt_count.
mysql-test/r/ps.result:
Test results fixed (a test case for Bug#16365)
mysql-test/t/ps.test:
A test case for Bug#16365 "Prepared Statements: DoS with too many
open statements". Also fix statement leaks in other tests.
sql/mysql_priv.h:
Add declarations for new global variables.
sql/mysqld.cc:
Add definitions of max_prepared_stmt_count, prepared_stmt_count.
sql/set_var.cc:
Implement support for @@prepared_stmt_count and
@@max_prepared_stmt_count. Currently these variables are queried
without acquiring LOCK_prepared_stmt_count due to limitations of
the set_var/sys_var class design. Updates are, however, protected
with a lock.
sql/set_var.h:
New declarations to add support for @@max_prepared_stmt_count.
Implement a new class, where the lock to be used when updating
a variable is a parameter.
sql/sql_class.cc:
Add accounting of the total number of prepared statements in the
server to the methods of Statement_map.
sql/sql_class.h:
Add accounting of the total number of prepared statements in the
server to the methods of Statement_map.
sql/sql_prepare.cc:
Statement_map::insert will now send a message in case of an
error.
20 years ago  A fix and test cases for
Bug#4968 "Stored procedure crash if cursor opened on altered table"
Bug#19733 "Repeated alter, or repeated create/drop, fails"
Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from
stored procedure."
Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
Test cases for bugs 4968, 19733, 6895 will be added in 5.0.
Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE
statements in stored routines or as prepared statements caused
incorrect results (and crashes in versions prior to 5.0.25).
In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
The problem of bugs 4968, 19733, 19282 and 6895 was that functions
mysql_prepare_table, mysql_create_table and mysql_alter_table were not
re-execution friendly: during their operation they used to modify contents
of LEX (members create_info, alter_info, key_list, create_list),
thus making the LEX unusable for the next execution.
In particular, these functions removed processed columns and keys from
create_list, key_list and drop_list. Search the code in sql_table.cc
for drop_it.remove() and similar patterns to find evidence.
The fix is to supply to these functions a usable copy of each of the
above structures at every re-execution of an SQL statement.
To simplify memory management, LEX::key_list and LEX::create_list
were added to LEX::alter_info, a fresh copy of which is created for
every execution.
The problem of crashing bug 22060 stemmed from the fact that the above
metnioned functions were not only modifying HA_CREATE_INFO structure in
LEX, but also were changing it to point to areas in volatile memory of
the execution memory root.
The patch solves this problem by creating and using an on-stack
copy of HA_CREATE_INFO (note that code in 5.1 already creates and
uses a copy of this structure in mysql_create_table()/alter_table(),
but this approach didn't work well for CREATE TABLE SELECT statement).
mysql-test/r/ps.result:
Update test results (Bug#19182, Bug#22060)
mysql-test/t/ps.test:
Add a test case for Bug#19182, Bug#22060 (4.1-only parts)
sql/mysql_priv.h:
LEX::key_list and LEX::create_list were moved to LEX::alter_info.
Update declarations to use LEX::alter_info instead of these two
members.
sql/sql_class.h:
Replace pair<columns, keys> with an instance of Alter_info in
select_create constructor. We create a new copy of Alter_info
each time we re-execute SELECT .. CREATE prepared statement.
sql/sql_insert.cc:
Adjust to a new signature of create_table_from_items.
sql/sql_lex.cc:
Implement Alter_info::Alter_info that would make a "deep" copy
of all definition lists (keys, columns).
sql/sql_lex.h:
Move key_list and create_list to class Alter_info. Implement
Alter_info::Alter_info that can be used with PS and SP.
sql/sql_list.h:
Implement a copy constructor of class List that makes a deep copy
of all list nodes.
sql/sql_parse.cc:
Adjust to new signatures of mysql_create_table, mysql_alter_table,
select_create. Functions mysql_create_index and mysql_drop_index has
become identical after initialization of alter_info was moved to the
parser, and were merged. Flag enable_slow_log was not updated for
SQLCOM_DROP_INDEX, which is a bug. Just like CREATE INDEX, DROP INDEX
is currently done via complete table rebuild and is rightfully a slow
administrative statement.
sql/sql_show.cc:
Adjust mysqld_show_create_db to a new signature.
sql/sql_table.cc:
Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
mysql_prepare_table to new signatures.
sql/sql_yacc.yy:
LEX::key_list and LEX::create_list moved to class Alter_info
19 years ago  A fix and test cases for
Bug#4968 "Stored procedure crash if cursor opened on altered table"
Bug#19733 "Repeated alter, or repeated create/drop, fails"
Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from
stored procedure."
Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
Test cases for bugs 4968, 19733, 6895 will be added in 5.0.
Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE
statements in stored routines or as prepared statements caused
incorrect results (and crashes in versions prior to 5.0.25).
In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
The problem of bugs 4968, 19733, 19282 and 6895 was that functions
mysql_prepare_table, mysql_create_table and mysql_alter_table were not
re-execution friendly: during their operation they used to modify contents
of LEX (members create_info, alter_info, key_list, create_list),
thus making the LEX unusable for the next execution.
In particular, these functions removed processed columns and keys from
create_list, key_list and drop_list. Search the code in sql_table.cc
for drop_it.remove() and similar patterns to find evidence.
The fix is to supply to these functions a usable copy of each of the
above structures at every re-execution of an SQL statement.
To simplify memory management, LEX::key_list and LEX::create_list
were added to LEX::alter_info, a fresh copy of which is created for
every execution.
The problem of crashing bug 22060 stemmed from the fact that the above
metnioned functions were not only modifying HA_CREATE_INFO structure in
LEX, but also were changing it to point to areas in volatile memory of
the execution memory root.
The patch solves this problem by creating and using an on-stack
copy of HA_CREATE_INFO (note that code in 5.1 already creates and
uses a copy of this structure in mysql_create_table()/alter_table(),
but this approach didn't work well for CREATE TABLE SELECT statement).
mysql-test/r/ps.result:
Update test results (Bug#19182, Bug#22060)
mysql-test/t/ps.test:
Add a test case for Bug#19182, Bug#22060 (4.1-only parts)
sql/mysql_priv.h:
LEX::key_list and LEX::create_list were moved to LEX::alter_info.
Update declarations to use LEX::alter_info instead of these two
members.
sql/sql_class.h:
Replace pair<columns, keys> with an instance of Alter_info in
select_create constructor. We create a new copy of Alter_info
each time we re-execute SELECT .. CREATE prepared statement.
sql/sql_insert.cc:
Adjust to a new signature of create_table_from_items.
sql/sql_lex.cc:
Implement Alter_info::Alter_info that would make a "deep" copy
of all definition lists (keys, columns).
sql/sql_lex.h:
Move key_list and create_list to class Alter_info. Implement
Alter_info::Alter_info that can be used with PS and SP.
sql/sql_list.h:
Implement a copy constructor of class List that makes a deep copy
of all list nodes.
sql/sql_parse.cc:
Adjust to new signatures of mysql_create_table, mysql_alter_table,
select_create. Functions mysql_create_index and mysql_drop_index has
become identical after initialization of alter_info was moved to the
parser, and were merged. Flag enable_slow_log was not updated for
SQLCOM_DROP_INDEX, which is a bug. Just like CREATE INDEX, DROP INDEX
is currently done via complete table rebuild and is rightfully a slow
administrative statement.
sql/sql_show.cc:
Adjust mysqld_show_create_db to a new signature.
sql/sql_table.cc:
Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
mysql_prepare_table to new signatures.
sql/sql_yacc.yy:
LEX::key_list and LEX::create_list moved to class Alter_info
19 years ago  A fix and test cases for
Bug#4968 "Stored procedure crash if cursor opened on altered table"
Bug#19733 "Repeated alter, or repeated create/drop, fails"
Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from
stored procedure."
Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
Test cases for bugs 4968, 19733, 6895 will be added in 5.0.
Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE
statements in stored routines or as prepared statements caused
incorrect results (and crashes in versions prior to 5.0.25).
In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
The problem of bugs 4968, 19733, 19282 and 6895 was that functions
mysql_prepare_table, mysql_create_table and mysql_alter_table were not
re-execution friendly: during their operation they used to modify contents
of LEX (members create_info, alter_info, key_list, create_list),
thus making the LEX unusable for the next execution.
In particular, these functions removed processed columns and keys from
create_list, key_list and drop_list. Search the code in sql_table.cc
for drop_it.remove() and similar patterns to find evidence.
The fix is to supply to these functions a usable copy of each of the
above structures at every re-execution of an SQL statement.
To simplify memory management, LEX::key_list and LEX::create_list
were added to LEX::alter_info, a fresh copy of which is created for
every execution.
The problem of crashing bug 22060 stemmed from the fact that the above
metnioned functions were not only modifying HA_CREATE_INFO structure in
LEX, but also were changing it to point to areas in volatile memory of
the execution memory root.
The patch solves this problem by creating and using an on-stack
copy of HA_CREATE_INFO (note that code in 5.1 already creates and
uses a copy of this structure in mysql_create_table()/alter_table(),
but this approach didn't work well for CREATE TABLE SELECT statement).
mysql-test/r/ps.result:
Update test results (Bug#19182, Bug#22060)
mysql-test/t/ps.test:
Add a test case for Bug#19182, Bug#22060 (4.1-only parts)
sql/mysql_priv.h:
LEX::key_list and LEX::create_list were moved to LEX::alter_info.
Update declarations to use LEX::alter_info instead of these two
members.
sql/sql_class.h:
Replace pair<columns, keys> with an instance of Alter_info in
select_create constructor. We create a new copy of Alter_info
each time we re-execute SELECT .. CREATE prepared statement.
sql/sql_insert.cc:
Adjust to a new signature of create_table_from_items.
sql/sql_lex.cc:
Implement Alter_info::Alter_info that would make a "deep" copy
of all definition lists (keys, columns).
sql/sql_lex.h:
Move key_list and create_list to class Alter_info. Implement
Alter_info::Alter_info that can be used with PS and SP.
sql/sql_list.h:
Implement a copy constructor of class List that makes a deep copy
of all list nodes.
sql/sql_parse.cc:
Adjust to new signatures of mysql_create_table, mysql_alter_table,
select_create. Functions mysql_create_index and mysql_drop_index has
become identical after initialization of alter_info was moved to the
parser, and were merged. Flag enable_slow_log was not updated for
SQLCOM_DROP_INDEX, which is a bug. Just like CREATE INDEX, DROP INDEX
is currently done via complete table rebuild and is rightfully a slow
administrative statement.
sql/sql_show.cc:
Adjust mysqld_show_create_db to a new signature.
sql/sql_table.cc:
Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
mysql_prepare_table to new signatures.
sql/sql_yacc.yy:
LEX::key_list and LEX::create_list moved to class Alter_info
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  BUG#26976 - Missing table in merge not noted in related error msg +
SHOW CREATE TABLE fails
Underlying table names, that merge engine fails to open were not
reported.
With this fix CHECK TABLE issued against merge table reports all
underlying table names that it fails to open. Other statements
are unaffected, that is underlying table names are not included
into error message.
This fix doesn't solve SHOW CREATE TABLE issue.
myisammrg/myrg_def.h:
Added myrg_print_wrong_table declaration.
myisammrg/myrg_open.c:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
mysql-test/r/backup.result:
Updated test result.
mysql-test/r/key_cache.result:
Updated test result - removed duplicate error.
mysql-test/r/lock.result:
Updated test result - added summary row.
mysql-test/r/merge.result:
A test case for BUG#26976.
mysql-test/r/preload.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/ps.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/repair.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/rpl_failed_optimize.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/sp.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/r/view.result:
Updated test result - removed duplicate error, added summary row.
mysql-test/t/merge.test:
A test case for BUG#26976.
sql/ha_myisam.cc:
Do not report same error twice.
sql/ha_myisammrg.cc:
If HA_OPEN_FOR_REPAIR is passed to merge engine open function,
report names of tables that we fail to open.
Added dummy ha_myisammrg::check to not confuse users with
"not implemented" error in case all underlying tables are
fine.
sql/ha_myisammrg.h:
Added ha_myisammrg::check declaration.
sql/share/errmsg.txt:
Added ER_ADMIN_WRONG_MRG_TABLE errno. It is used instead
of ER_WRONG_MRG_TABLE in case HA_OPEN_FOR_REPAIR is
passed to merge engine handler open function.
sql/sql_error.cc:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_error.h:
warning_level_* are now public. It is required by mysql_admin_table to
report message level.
sql/sql_table.cc:
Reorder mysql_admin_table arguments to meet it's definition.
Report errors that are pending in thd->warn_list as results of
admin function.
19 years ago  A fix and a test case for
Bug#19022 "Memory bug when switching db during trigger execution"
Bug#17199 "Problem when view calls function from another database."
Bug#18444 "Fully qualified stored function names don't work correctly in
SELECT statements"
Documentation note: this patch introduces a change in behaviour of prepared
statements.
This patch adds a few new invariants with regard to how THD::db should
be used. These invariants should be preserved in future:
- one should never refer to THD::db by pointer and always make a deep copy
(strmake, strdup)
- one should never compare two databases by pointer, but use strncmp or
my_strncasecmp
- TABLE_LIST object table->db should be always initialized in the parser or
by creator of the object.
For prepared statements it means that if the current database is changed
after a statement is prepared, the database that was current at prepare
remains active. This also means that you can not prepare a statement that
implicitly refers to the current database if the latter is not set.
This is not documented, and therefore needs documentation. This is NOT a
change in behavior for almost all SQL statements except:
- ALTER TABLE t1 RENAME t2
- OPTIMIZE TABLE t1
- ANALYZE TABLE t1
- TRUNCATE TABLE t1 --
until this patch t1 or t2 could be evaluated at the first execution of
prepared statement.
CURRENT_DATABASE() still works OK and is evaluated at every execution
of prepared statement.
Note, that in stored routines this is not an issue as the default
database is the database of the stored procedure and "use" statement
is prohibited in stored routines.
This patch makes obsolete the use of check_db_used (it was never used in the
old code too) and all other places that check for table->db and assign it
from THD::db if it's NULL, except the parser.
How this patch was created: THD::{db,db_length} were replaced with a
LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
manually checked and:
- if the place uses thd->db by pointer, it was fixed to make a deep copy
- if a place compared two db pointers, it was fixed to compare them by value
(via strcmp/my_strcasecmp, whatever was approproate)
Then this intermediate patch was used to write a smaller patch that does the
same thing but without a rename.
TODO in 5.1:
- remove check_db_used
- deploy THD::set_db in mysql_change_db
See also comments to individual files.
mysql-test/r/create.result:
Modify the result file: a database can never be NULL.
mysql-test/r/ps.result:
Update test results (Bug#17199 et al)
mysql-test/r/sp.result:
Update test results (Bug#17199 et al)
mysql-test/t/create.test:
Update the id of the returned error.
mysql-test/t/ps.test:
Add test coverage for prepared statements and current database. In scope of
work on Bug#17199 "Problem when view calls function from another database."
mysql-test/t/sp.test:
Add a test case for Bug#17199 "Problem when view calls function from another
database." and Bug#18444 "Fully qualified stored function names don't work
correctly in SELECT statements". Test a complementary problem.
sql/item_strfunc.cc:
Touch the code that reads thd->db (cleanup).
sql/log_event.cc:
While we are at it, replace direct access to thd->db with a method.
Should simplify future conversion of THD::db to LEX_STRING.
sql/slave.cc:
While we are at it, replace direct access to thd->db with a method.
Should simplify future conversion of THD::db to LEX_STRING.
sql/slave.h:
Remove a declaration for a method that is used only in one module.
sql/sp.cc:
Rewrite sp_use_new_db: this is a cleanup that I needed in order to understand
this function and ensure that it has no bugs.
sql/sp.h:
Add a new declaration for sp_use_new_db (uses LEX_STRINGs) and a comment.
sql/sp_head.cc:
- drop sp_name_current_db_new - a creator of sp_name class that was used
when sp_name was created for an identifier without an explicitly initialized
database. Now we pass thd->db to constructor of sp_name right in the
parser.
- rewrite sp_head::init_strings: name->m_db is always set now
- use the new variant of sp_use_new_db
- we don't need to update thd->db with SP MEM_ROOT pointer anymore when
parsing a stored procedure, as noone will refer to it (yes!)
sql/sp_head.h:
- remove unneded methods and members
sql/sql_class.h:
- introduce 3 THD methods to work with THD::db:
.set_db to assign the current database
.reset_db to reset the current database (temporarily) or set it to NULL
.opt_copy_db_to - to deep-copy thd->db to a pointer if it's not NULL
sql/sql_db.cc:
While we are at it, replace direct access to thd->db with a method.
Should simplify future conversion of THD::db to LEX_STRING.
sql/sql_insert.cc:
- replace checks with asserts: table_list->db must be always set in the parser.
sql/sql_lex.h:
- add a comment
sql/sql_parse.cc:
- implement the invariant described in the changeset comment.
- remove juggling with lex->sphead in SQLCOM_CREATE_PROCEDURE:
now db_load_routine uses its own LEX object and doesn't damage the main
LEX.
- add DBUG_ASSERT(0) to unused "check_db_used"
sql/sql_table.cc:
- replace a check with an assert (table_ident->db)
sql/sql_trigger.cc:
While we are at it, replace direct access to thd->db with a method.
Should simplify future conversion of THD::db to LEX_STRING.
sql/sql_udf.cc:
- use thd->set_db instead of direct modification of to thd->db
sql/sql_view.cc:
- replace a check with an assert (view->db)
sql/sql_yacc.yy:
- make sure that we always copy table->db or name->db or ident->db or
select_lex->db from thd->db if the former is not set. If thd->db
is not set but is accessed, return an error.
sql/tztime.cc:
- be nice, never copy thd->db by pointer.
20 years ago |
|
drop table if exists t1,t2;drop database if exists client_test_db;create table t1(a int primary key,b char(10));insert into t1 values (1,'one');insert into t1 values (2,'two');insert into t1 values (3,'three');insert into t1 values (4,'four');set @a=2;prepare stmt1 from 'select * from t1 where a <= ?';execute stmt1 using @a;a b1 one2 twoset @a=3;execute stmt1 using @a;a b1 one2 two3 threedeallocate prepare no_such_statement;ERROR HY000: Unknown prepared statement handler (no_such_statement) given to DEALLOCATE PREPAREexecute stmt1;ERROR HY000: Incorrect arguments to EXECUTEprepare stmt2 from 'prepare nested_stmt from "select 1"';ERROR HY000: This command is not supported in the prepared statement protocol yetprepare stmt2 from 'execute stmt1';ERROR HY000: This command is not supported in the prepared statement protocol yetprepare stmt2 from 'deallocate prepare z';ERROR HY000: This command is not supported in the prepared statement protocol yetprepare stmt3 from 'insert into t1 values (?,?)';set @arg1=5, @arg2='five';execute stmt3 using @arg1, @arg2;select * from t1 where a>3;a b4 four5 fiveprepare stmt4 from 'update t1 set a=? where b=?';set @arg1=55, @arg2='five';execute stmt4 using @arg1, @arg2;select * from t1 where a>3;a b4 four55 fiveprepare stmt4 from 'create table t2 (a int)';execute stmt4;prepare stmt4 from 'drop table t2';execute stmt4;execute stmt4;ERROR 42S02: Unknown table 't2'prepare stmt5 from 'select ? + a from t1';set @a=1;execute stmt5 using @a;? + a234556execute stmt5 using @no_such_var;? + aNULLNULLNULLNULLNULLset @nullvar=1;set @nullvar=NULL;execute stmt5 using @nullvar;? + aNULLNULLNULLNULLNULLset @nullvar2=NULL;execute stmt5 using @nullvar2;? + aNULLNULLNULLNULLNULLprepare stmt6 from 'select 1; select2';ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select2' at line 1prepare stmt6 from 'insert into t1 values (5,"five"); select2';ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select2' at line 1explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 'insert into t1 values (5,"five"); select2'' at line 1create table t2(a int);insert into t2 values (0);set @arg00=NULL ;prepare stmt1 from 'select 1 FROM t2 where a=?' ;execute stmt1 using @arg00 ;1prepare stmt1 from @nosuchvar;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1set @ivar= 1234;prepare stmt1 from @ivar;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1234' at line 1set @fvar= 123.4567;prepare stmt1 from @fvar;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123.4567' at line 1drop table t1,t2;deallocate prepare stmt3;deallocate prepare stmt4;deallocate prepare stmt5;PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?";set @var='A';EXECUTE stmt1 USING @var;_utf8 'A' collate utf8_bin = ?1DEALLOCATE PREPARE stmt1;create table t1 (id int);prepare stmt1 from "select FOUND_ROWS()";select SQL_CALC_FOUND_ROWS * from t1;idexecute stmt1;FOUND_ROWS()0insert into t1 values (1);select SQL_CALC_FOUND_ROWS * from t1;id1execute stmt1;FOUND_ROWS()1execute stmt1;FOUND_ROWS()1deallocate prepare stmt1;drop table t1;create table t1 (c1 tinyint, c2 smallint, c3 mediumint, c4 int,c5 integer, c6 bigint, c7 float, c8 double,c9 double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),c13 date, c14 datetime, c15 timestamp, c16 time,c17 year, c18 bit, c19 bool, c20 char,c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,c25 blob, c26 text, c27 mediumblob, c28 mediumtext,c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),c32 set('monday', 'tuesday', 'wednesday')) engine = MYISAM ;create table t2 like t1;set @stmt= ' explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25 ' ;prepare stmt1 from @stmt ;execute stmt1 ;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesexecute stmt1 ;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesexplain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25;id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found3 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tablesdeallocate prepare stmt1;drop tables t1,t2;set @arg00=1;prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;execute stmt1 ;select m from t1;m1drop table t1;prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;execute stmt1 using @arg00;select m from t1;m1deallocate prepare stmt1;drop table t1;create table t1 (id int(10) unsigned NOT NULL default '0',name varchar(64) NOT NULL default '',PRIMARY KEY (id), UNIQUE KEY `name` (`name`));insert into t1 values (1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7');prepare stmt1 from 'select name from t1 where id=? or id=?';set @id1=1,@id2=6;execute stmt1 using @id1, @id2;name16select name from t1 where id=1 or id=6;name16deallocate prepare stmt1;drop table t1;create table t1 ( a int primary key, b varchar(30)) engine = MYISAM ;prepare stmt1 from ' show table status from test like ''t1%'' ';execute stmt1;Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Commentt1 MyISAM 10 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL show table status from test like 't1%' ;Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Commentt1 MyISAM 10 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL deallocate prepare stmt1 ;drop table t1;create table t1(a varchar(2), b varchar(3));prepare stmt1 from "select a, b from t1 where (not (a='aa' and b < 'zzz'))";execute stmt1;a bexecute stmt1;a bdeallocate prepare stmt1;drop table t1;prepare stmt1 from "select 1 into @var";execute stmt1;execute stmt1;prepare stmt1 from "create table t1 select 1 as i";execute stmt1;drop table t1;execute stmt1;prepare stmt1 from "insert into t1 select i from t1";execute stmt1;execute stmt1;prepare stmt1 from "select * from t1 into outfile 'f1.txt'";execute stmt1;deallocate prepare stmt1;drop table t1;prepare stmt1 from 'select 1';prepare STMT1 from 'select 2';execute sTmT1;22deallocate prepare StMt1;deallocate prepare Stmt1;ERROR HY000: Unknown prepared statement handler (Stmt1) given to DEALLOCATE PREPAREset names utf8;prepare `ü` from 'select 1234';execute `ü` ;12341234set names latin1;execute `�`;12341234deallocate prepare `�`;set names default;create table t1 (a varchar(10)) charset=utf8;insert into t1 (a) values ('yahoo');set character_set_connection=latin1;prepare stmt from 'select a from t1 where a like ?';set @var='google';execute stmt using @var;aexecute stmt using @var;adeallocate prepare stmt;drop table t1;create table t1 (a bigint(20) not null primary key auto_increment);insert into t1 (a) values (null);select * from t1;a1prepare stmt from "insert into t1 (a) values (?)";set @var=null;execute stmt using @var;select * from t1;a12drop table t1;create table t1 (a timestamp not null);prepare stmt from "insert into t1 (a) values (?)";execute stmt using @var;select * from t1;deallocate prepare stmt;drop table t1;prepare stmt from "select 'abc' like convert('abc' using utf8)";execute stmt;'abc' like convert('abc' using utf8)1execute stmt;'abc' like convert('abc' using utf8)1deallocate prepare stmt;create table t1 ( a bigint );prepare stmt from 'select a from t1 where a between ? and ?';set @a=1;execute stmt using @a, @a;aexecute stmt using @a, @a;aexecute stmt using @a, @a;adrop table t1;deallocate prepare stmt;create table t1 (a int);prepare stmt from "select * from t1 where 1 > (1 in (SELECT * FROM t1))";execute stmt;aexecute stmt;aexecute stmt;adrop table t1;deallocate prepare stmt;create table t1 (a int, b int);insert into t1 (a, b) values (1,1), (1,2), (2,1), (2,2);prepare stmt from"explain select * from t1 where t1.a=2 and t1.a=t1.b and t1.b > 1 + ?";set @v=5;execute stmt using @v;id select_type table type possible_keys key key_len ref rows Extra- - - - - - - - NULL Impossible WHEREset @v=0;execute stmt using @v;id select_type table type possible_keys key key_len ref rows Extra- - - - - - - - 4 Using whereset @v=5;execute stmt using @v;id select_type table type possible_keys key key_len ref rows Extra- - - - - - - - NULL Impossible WHEREdrop table t1;deallocate prepare stmt;create table t1 (a int);insert into t1 (a) values (1), (2), (3), (4);set @precision=10000000000;select rand(), cast(rand(10)*@precision as unsigned integer) from t1;rand() cast(rand(10)*@precision as unsigned integer)- 6570515220- 1282061302- 6698761160- 9647622201prepare stmt from"select rand(), cast(rand(10)*@precision as unsigned integer), cast(rand(?)*@precision as unsigned integer) from t1";set @var=1;execute stmt using @var;rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)- 6570515220 -- 1282061302 -- 6698761160 -- 9647622201 -set @var=2;execute stmt using @var;rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)- 6570515220 6555866465- 1282061302 1223466193- 6698761160 6449731874- 9647622201 8578261098set @var=3;execute stmt using @var;rand() cast(rand(10)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)- 6570515220 9057697560- 1282061302 3730790581- 6698761160 1480860535- 9647622201 6211931236drop table t1;deallocate prepare stmt;create database mysqltest1;create table t1 (a int);create table mysqltest1.t1 (a int);select * from t1, mysqltest1.t1;a aprepare stmt from "select * from t1, mysqltest1.t1";execute stmt;a aexecute stmt;a aexecute stmt;a adrop table t1;drop table mysqltest1.t1;drop database mysqltest1;deallocate prepare stmt;select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2';a a1.1 1.22.1 2.2prepare stmt from"select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'";execute stmt;a a1.1 1.22.1 2.2execute stmt;a a1.1 1.22.1 2.2execute stmt;a a1.1 1.22.1 2.2deallocate prepare stmt;create table t1 (a int);insert into t1 values (1),(2),(3);create table t2 select * from t1;prepare stmt FROM 'create table t2 select * from t1';drop table t2;execute stmt;drop table t2;execute stmt;execute stmt;ERROR 42S01: Table 't2' already existsdrop table t2;execute stmt;drop table t1,t2;deallocate prepare stmt;create table t1 (a int);insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);prepare stmt from "select sql_calc_found_rows * from t1 limit 2";execute stmt;a12select found_rows();found_rows()10execute stmt;a12select found_rows();found_rows()10execute stmt;a12select found_rows();found_rows()10deallocate prepare stmt;drop table t1;CREATE TABLE t1 (N int, M tinyint);INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0);PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2';EXECUTE stmt;DEALLOCATE PREPARE stmt;DROP TABLE t1;prepare stmt from "select ? is null, ? is not null, ?";select @no_such_var is null, @no_such_var is not null, @no_such_var;@no_such_var is null @no_such_var is not null @no_such_var1 0 NULLexecute stmt using @no_such_var, @no_such_var, @no_such_var;? is null ? is not null ?1 0 NULLset @var='abc';select @var is null, @var is not null, @var;@var is null @var is not null @var0 1 abcexecute stmt using @var, @var, @var;? is null ? is not null ?0 1 abcset @var=null;select @var is null, @var is not null, @var;@var is null @var is not null @var1 0 NULLexecute stmt using @var, @var, @var;? is null ? is not null ?1 0 NULLcreate table t1 (pnum char(3));create table t2 (pnum char(3));prepare stmt from "select pnum from t2 having pnum in (select 'p1' from t1)";execute stmt;pnumexecute stmt;pnumexecute stmt;pnumdeallocate prepare stmt;drop table t1, t2;drop table if exists t1;create temporary table if not exists t1 (a1 int);prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;deallocate prepare stmt;create table t1 (a varchar(20));insert into t1 values ('foo');prepare stmt FROM 'SELECT char_length (a) FROM t1';ERROR 42000: FUNCTION test.char_length does not existdrop table t1;prepare stmt from "SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0";execute stmt;fooSELECT FOUND_ROWS();FOUND_ROWS()2execute stmt;fooSELECT FOUND_ROWS();FOUND_ROWS()2deallocate prepare stmt;drop table if exists t1;Warnings:Note 1051 Unknown table 't1'create table t1 (c1 int(11) not null, c2 int(11) not null,primary key (c1,c2), key c2 (c2), key c1 (c1));insert into t1 values (200887, 860);insert into t1 values (200887, 200887);select * from t1 where (c1=200887 and c2=200887) or c2=860;c1 c2200887 860200887 200887prepare stmt from"select * from t1 where (c1=200887 and c2=200887) or c2=860";execute stmt;c1 c2200887 860200887 200887prepare stmt from"select * from t1 where (c1=200887 and c2=?) or c2=?";set @a=200887, @b=860;execute stmt using @a, @b;c1 c2200887 860200887 200887deallocate prepare stmt;drop table t1;create table t1 (id bigint(20) not null auto_increment,code varchar(20) character set utf8 collate utf8_bin not null default '',company_name varchar(250) character set utf8 collate utf8_bin default null,setup_mode tinyint(4) default null,start_date datetime default null,primary key (id), unique key code (code));create table t2 (id bigint(20) not null auto_increment,email varchar(250) character set utf8 collate utf8_bin default null,name varchar(250) character set utf8 collate utf8_bin default null,t1_id bigint(20) default null,password varchar(250) character set utf8 collate utf8_bin default null,primary_contact tinyint(4) not null default '0',email_opt_in tinyint(4) not null default '1',primary key (id), unique key email (email), key t1_id (t1_id),constraint t2_fk1 foreign key (t1_id) references t1 (id));insert into t1 values(1, 'demo', 'demo s', 0, current_date()),(2, 'code2', 'name 2', 0, current_date()),(3, 'code3', 'name 3', 0, current_date());insert into t2 values(2, 'email1', 'name1', 3, 'password1', 0, 0),(3, 'email2', 'name1', 1, 'password2', 1, 0),(5, 'email3', 'name3', 2, 'password3', 0, 0);prepare stmt from 'select t2.id from t2, t1 where (t1.id=? and t2.t1_id=t1.id)';set @a=1;execute stmt using @a;id3select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);id3deallocate prepare stmt;drop table t1, t2;create table t1 (id int);prepare stmt from "insert into t1 (id) select id from t1 union select id from t1";execute stmt;execute stmt;deallocate prepare stmt;drop table t1;create table t1 (id int(11) unsigned not null primary key auto_increment,partner_id varchar(35) not null,t1_status_id int(10) unsigned);insert into t1 values ("1", "partner1", "10"), ("2", "partner2", "10"),("3", "partner3", "10"), ("4", "partner4", "10");create table t2 (id int(11) unsigned not null default '0',t1_line_id int(11) unsigned not null default '0',article_id varchar(20),sequence int(11) not null default '0',primary key (id,t1_line_id));insert into t2 values ("1", "1", "sup", "0"), ("2", "1", "sup", "1"),("2", "2", "sup", "2"), ("2", "3", "sup", "3"),("2", "4", "imp", "4"), ("3", "1", "sup", "0"),("4", "1", "sup", "0");create table t3 (id int(11) not null default '0',preceeding_id int(11) not null default '0',primary key (id,preceeding_id));create table t4 (user_id varchar(50) not null,article_id varchar(20) not null,primary key (user_id,article_id));insert into t4 values("nicke", "imp");prepare stmt from'select distinct t1.partner_idfrom t1 left join t3 on t1.id = t3.id left join t1 pp on pp.id = t3.preceeding_idwhere exists ( select * from t2 as pl_inner where pl_inner.id = t1.id and pl_inner.sequence <= ( select min(sequence) from t2 pl_seqnr where pl_seqnr.id = t1.id ) and exists ( select * from t4 where t4.article_id = pl_inner.article_id and t4.user_id = ? ) ) and t1.id = ?group by t1.idhaving count(pp.id) = 0';set @user_id = 'nicke';set @id = '2';execute stmt using @user_id, @id;partner_idexecute stmt using @user_id, @id;partner_iddeallocate prepare stmt;drop table t1, t2, t3, t4;prepare stmt from 'select ?=?';set @a='CHRISTINE ';set @b='CHRISTINE';execute stmt using @a, @b;?=?1execute stmt using @a, @b;?=?1set @a=1, @b=2;execute stmt using @a, @b;?=?0set @a='CHRISTINE ';set @b='CHRISTINE';execute stmt using @a, @b;?=?1deallocate prepare stmt;create table t1 (a int);prepare stmt from "select ??";ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1prepare stmt from "select ?FROM t1";ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?FROM t1' at line 1prepare stmt from "select FROM t1 WHERE?=1";ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM t1 WHERE?=1' at line 1prepare stmt from "update t1 set a=a+?WHERE 1";ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?WHERE 1' at line 1select ?;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1select ??;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??' at line 1select ? from t1;ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? from t1' at line 1drop table t1;prepare stmt from "select @@time_zone";execute stmt;@@time_zoneSYSTEMset @@time_zone:='Japan';execute stmt;@@time_zoneJapanprepare stmt from "select @@tx_isolation";execute stmt;@@tx_isolationREPEATABLE-READset transaction isolation level read committed;execute stmt;@@tx_isolationREAD-COMMITTEDset transaction isolation level serializable;execute stmt;@@tx_isolationSERIALIZABLEset @@tx_isolation=default;execute stmt;@@tx_isolationREPEATABLE-READdeallocate prepare stmt;prepare stmt from "create temporary table t1 (letter enum('','a','b','c')not null)";execute stmt;drop table t1;execute stmt;drop table t1;execute stmt;drop table t1;set names latin1;prepare stmt from "create table t1 (a enum('test') default 'test') character set utf8";execute stmt;drop table t1;execute stmt;drop table t1;execute stmt;drop table t1;set names default;deallocate prepare stmt;create table t1 (word_id mediumint(8) unsigned not null default '0',formatted varchar(20) not null default '');insert into t1 values(80,'pendant'), (475,'pretendants'), (989,'tendances'),(1019,'cependant'),(1022,'abondance'),(1205,'independants'),(13,'lessiver'),(25,'lambiner'),(46,'situer'),(71,'terminer'),(82,'decrocher');select count(*) from t1 where formatted like '%NDAN%';count(*)6select count(*) from t1 where formatted like '%ER';count(*)5prepare stmt from "select count(*) from t1 where formatted like ?";set @like="%NDAN%";execute stmt using @like;count(*)6set @like="%ER";execute stmt using @like;count(*)5set @like="%NDAN%";execute stmt using @like;count(*)6set @like="%ER";execute stmt using @like;count(*)5deallocate prepare stmt;drop table t1;prepare stmt from 'create table t1 (a varchar(10) character set utf8)';execute stmt;insert into t1 (a) values (repeat('a', 20));select length(a) from t1;length(a)10drop table t1;execute stmt;insert into t1 (a) values (repeat('a', 20));select length(a) from t1;length(a)10drop table t1;deallocate prepare stmt;create table t1 (col1 integer, col2 integer);insert into t1 values(100,100),(101,101),(102,102),(103,103);prepare stmt from 'select col1, col2 from t1 where (col1, col2) in ((?,?))';set @a=100, @b=100;execute stmt using @a,@b;col1 col2100 100set @a=101, @b=101;execute stmt using @a,@b;col1 col2101 101set @a=102, @b=102;execute stmt using @a,@b;col1 col2102 102set @a=102, @b=103;execute stmt using @a,@b;col1 col2deallocate prepare stmt;drop table t1;set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;show variables like 'max_prepared_stmt_count';Variable_name Valuemax_prepared_stmt_count 16382show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0select @@max_prepared_stmt_count;@@max_prepared_stmt_count16382set global max_prepared_stmt_count=-1;select @@max_prepared_stmt_count;@@max_prepared_stmt_count0set global max_prepared_stmt_count=10000000000000000;Warnings:Warning 1292 Truncated incorrect max_prepared_stmt_count value: '10000000000000000'select @@max_prepared_stmt_count;@@max_prepared_stmt_count1048576set global max_prepared_stmt_count=default;select @@max_prepared_stmt_count;@@max_prepared_stmt_count16382set @@max_prepared_stmt_count=1;ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBALset max_prepared_stmt_count=1;ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBALset local max_prepared_stmt_count=1;ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBALset global max_prepared_stmt_count=1;select @@max_prepared_stmt_count;@@max_prepared_stmt_count1set global max_prepared_stmt_count=0;select @@max_prepared_stmt_count;@@max_prepared_stmt_count0show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0prepare stmt from "select 1";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0set global max_prepared_stmt_count=1;prepare stmt from "select 1";show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 1prepare stmt1 from "select 1";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 1)show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 1deallocate prepare stmt;show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0prepare stmt from "select 1";show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 1prepare stmt from "select 2";show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 1show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 1select @@max_prepared_stmt_count;@@max_prepared_stmt_count1set global max_prepared_stmt_count=0;prepare stmt from "select 1";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)execute stmt;ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTEshow status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0prepare stmt from "select 1";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0set global max_prepared_stmt_count=3;select @@max_prepared_stmt_count;@@max_prepared_stmt_count3show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 0prepare stmt from "select 1";prepare stmt from "select 2";prepare stmt1 from "select 3";prepare stmt2 from "select 4";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)prepare stmt2 from "select 4";ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)select @@max_prepared_stmt_count;@@max_prepared_stmt_count3show status like 'prepared_stmt_count';Variable_name ValuePrepared_stmt_count 3deallocate prepare stmt;set global max_prepared_stmt_count= @old_max_prepared_stmt_count;drop table if exists t1;create temporary table if not exists t1 (a1 int);prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;create temporary table if not exists t1 (a1 int);execute stmt;drop temporary table t1;deallocate prepare stmt;CREATE TABLE t1(ID int(10) unsigned NOT NULL auto_increment,Member_ID varchar(15) NOT NULL default '',Action varchar(12) NOT NULL,Action_Date datetime NOT NULL,Track varchar(15) default NULL,User varchar(12) default NULL,Date_Updated timestamp NOT NULL default CURRENT_TIMESTAMP on updateCURRENT_TIMESTAMP,PRIMARY KEY (ID),KEY Action (Action),KEY Action_Date (Action_Date));INSERT INTO t1(Member_ID, Action, Action_Date, Track) VALUES('111111', 'Disenrolled', '2006-03-01', 'CAD' ),('111111', 'Enrolled', '2006-03-01', 'CAD' ),('111111', 'Disenrolled', '2006-07-03', 'CAD' ),('222222', 'Enrolled', '2006-03-07', 'CAD' ),('222222', 'Enrolled', '2006-03-07', 'CHF' ),('222222', 'Disenrolled', '2006-08-02', 'CHF' ),('333333', 'Enrolled', '2006-03-01', 'CAD' ),('333333', 'Disenrolled', '2006-03-01', 'CAD' ),('444444', 'Enrolled', '2006-03-01', 'CAD' ),('555555', 'Disenrolled', '2006-03-01', 'CAD' ),('555555', 'Enrolled', '2006-07-21', 'CAD' ),('555555', 'Disenrolled', '2006-03-01', 'CHF' ),('666666', 'Enrolled', '2006-02-09', 'CAD' ),('666666', 'Enrolled', '2006-05-12', 'CHF' ),('666666', 'Disenrolled', '2006-06-01', 'CAD' );PREPARE STMT FROM"SELECT GROUP_CONCAT(Track SEPARATOR ', ') FROM t1 WHERE Member_ID=? AND Action='Enrolled' AND (Track,Action_Date) IN (SELECT Track, MAX(Action_Date) FROM t1 WHERE Member_ID=? GROUP BY Track HAVING Track>='CAD' AND MAX(Action_Date)>'2006-03-01')";SET @id='111111';EXECUTE STMT USING @id,@id;GROUP_CONCAT(Track SEPARATOR ', ')NULLSET @id='222222';EXECUTE STMT USING @id,@id;GROUP_CONCAT(Track SEPARATOR ', ')CADDEALLOCATE PREPARE STMT;DROP TABLE t1;DROP TABLE IF EXISTS t1;CREATE TABLE t1 (i INT, INDEX(i));INSERT INTO t1 VALUES (1);PREPARE stmt FROM "SELECT (COUNT(i) = 1), COUNT(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(COUNT(i) = 1) COUNT(i)0 0SET @a = 1;EXECUTE stmt USING @a;(COUNT(i) = 1) COUNT(i)1 1SET @a = 0;EXECUTE stmt USING @a;(COUNT(i) = 1) COUNT(i)0 0PREPARE stmt FROM "SELECT (AVG(i) = 1), AVG(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(AVG(i) = 1) AVG(i)NULL NULLSET @a = 1;EXECUTE stmt USING @a;(AVG(i) = 1) AVG(i)1 1.0000SET @a = 0;EXECUTE stmt USING @a;(AVG(i) = 1) AVG(i)NULL NULLPREPARE stmt FROM "SELECT (VARIANCE(i) = 1), VARIANCE(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(VARIANCE(i) = 1) VARIANCE(i)NULL NULLSET @a = 1;EXECUTE stmt USING @a;(VARIANCE(i) = 1) VARIANCE(i)0 0.0000SET @a = 0;EXECUTE stmt USING @a;(VARIANCE(i) = 1) VARIANCE(i)NULL NULLPREPARE stmt FROM "SELECT (STDDEV(i) = 1), STDDEV(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(STDDEV(i) = 1) STDDEV(i)NULL NULLSET @a = 1;EXECUTE stmt USING @a;(STDDEV(i) = 1) STDDEV(i)0 0.0000SET @a = 0;EXECUTE stmt USING @a;(STDDEV(i) = 1) STDDEV(i)NULL NULLPREPARE stmt FROM "SELECT (BIT_OR(i) = 1), BIT_OR(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(BIT_OR(i) = 1) BIT_OR(i)0 0SET @a = 1;EXECUTE stmt USING @a;(BIT_OR(i) = 1) BIT_OR(i)1 1SET @a = 0;EXECUTE stmt USING @a;(BIT_OR(i) = 1) BIT_OR(i)0 0PREPARE stmt FROM "SELECT (BIT_AND(i) = 1), BIT_AND(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(BIT_AND(i) = 1) BIT_AND(i)0 18446744073709551615SET @a = 1;EXECUTE stmt USING @a;(BIT_AND(i) = 1) BIT_AND(i)1 1SET @a = 0;EXECUTE stmt USING @a;(BIT_AND(i) = 1) BIT_AND(i)0 18446744073709551615PREPARE stmt FROM "SELECT (BIT_XOR(i) = 1), BIT_XOR(i) FROM t1 WHERE i = ?";SET @a = 0;EXECUTE stmt USING @a;(BIT_XOR(i) = 1) BIT_XOR(i)0 0SET @a = 1;EXECUTE stmt USING @a;(BIT_XOR(i) = 1) BIT_XOR(i)1 1SET @a = 0;EXECUTE stmt USING @a;(BIT_XOR(i) = 1) BIT_XOR(i)0 0DEALLOCATE PREPARE stmt;DROP TABLE t1;DROP TABLE IF EXISTS t1, t2;CREATE TABLE t1 (i INT);PREPARE st_19182FROM "CREATE TABLE t2 (i INT, j INT, KEY (i), KEY(j)) SELECT i FROM t1";EXECUTE st_19182;DESC t2;Field Type Null Key Default Extraj int(11) YES MUL NULL i int(11) YES MUL NULL DROP TABLE t2;EXECUTE st_19182;DESC t2;Field Type Null Key Default Extraj int(11) YES MUL NULL i int(11) YES MUL NULL DEALLOCATE PREPARE st_19182;DROP TABLE t2, t1;drop database if exists mysqltest;drop table if exists t1, t2;create database mysqltest character set utf8;prepare stmt1 from "create table mysqltest.t1 (c char(10))";prepare stmt2 from "create table mysqltest.t2 select 'test'";execute stmt1;execute stmt2;show create table mysqltest.t1;Table Create Tablet1 CREATE TABLE `t1` ( `c` char(10) default NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8show create table mysqltest.t2;Table Create Tablet2 CREATE TABLE `t2` ( `test` varchar(4) character set latin1 NOT NULL default '') ENGINE=MyISAM DEFAULT CHARSET=utf8drop table mysqltest.t1;drop table mysqltest.t2;alter database mysqltest character set latin1;execute stmt1;execute stmt2;show create table mysqltest.t1;Table Create Tablet1 CREATE TABLE `t1` ( `c` char(10) character set utf8 default NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1show create table mysqltest.t2;Table Create Tablet2 CREATE TABLE `t2` ( `test` varchar(4) NOT NULL default '') ENGINE=MyISAM DEFAULT CHARSET=latin1drop database mysqltest;deallocate prepare stmt1;deallocate prepare stmt2;execute stmt;show create table t1;drop table t1;execute stmt;show create table t1;drop table t1;deallocate prepare stmt;CREATE TABLE t1(a int);INSERT INTO t1 VALUES (2), (3), (1);PREPARE st1 FROM'(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';EXECUTE st1;a123111213EXECUTE st1;a123111213DEALLOCATE PREPARE st1;DROP TABLE t1;create table t1 (a int, b tinyint);prepare st1 from 'update t1 set b= (str_to_date(a, a))';execute st1;deallocate prepare st1;drop table t1;End of 4.1 tests.create table t1 (a varchar(20));insert into t1 values ('foo');prepare stmt FROM 'SELECT char_length (a) FROM t1';ERROR 42000: FUNCTION test.char_length does not existdrop table t1;create table t1 (a char(3) not null, b char(3) not null,c char(3) not null, primary key (a, b, c));create table t2 like t1;prepare stmt from"select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b) where t1.a=1";execute stmt;aexecute stmt;aexecute stmt;aprepare stmt from"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from(t1 left outer join t2 on t2.a=? and t1.b=t2.b)left outer join t2 t3 on t3.a=? where t1.a=?";set @a:=1, @b:=1, @c:=1;execute stmt using @a, @b, @c;a b c a b cexecute stmt using @a, @b, @c;a b c a b cexecute stmt using @a, @b, @c;a b c a b cdeallocate prepare stmt;drop table t1,t2;SET @aux= "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS A, INFORMATION_SCHEMA.COLUMNS B WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA AND A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME AND A.TABLE_NAME = 'user'";prepare my_stmt from @aux;execute my_stmt;COUNT(*)37execute my_stmt;COUNT(*)37execute my_stmt;COUNT(*)37deallocate prepare my_stmt;drop procedure if exists p1|drop table if exists t1|create table t1 (id int)|insert into t1 values(1)|create procedure p1(a int, b int)begindeclare c int;select max(id)+1 into c from t1;insert into t1 select a+b;insert into t1 select a-b;insert into t1 select a-c;end|set @a= 3, @b= 4|prepare stmt from "call p1(?, ?)"|execute stmt using @a, @b|execute stmt using @a, @b|select * from t1|id17-117-1-5deallocate prepare stmt|drop procedure p1|drop table t1|create table t1 (a int);insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);prepare stmt from "select * from t1 limit ?, ?";set @offset=0, @limit=1;execute stmt using @offset, @limit;a1select * from t1 limit 0, 1;a1set @offset=3, @limit=2;execute stmt using @offset, @limit;a45select * from t1 limit 3, 2;a45prepare stmt from "select * from t1 limit ?";execute stmt using @limit;a12prepare stmt from "select * from t1 where a in (select a from t1 limit ?)";ERROR 42000: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'prepare stmt from "select * from t1 union all select * from t1 limit ?, ?";set @offset=9;set @limit=2;execute stmt using @offset, @limit;a101prepare stmt from "(select * from t1 limit ?, ?) union all (select * from t1 limit ?, ?) order by a limit ?";execute stmt using @offset, @limit, @offset, @limit, @limit;a1010drop table t1;deallocate prepare stmt;CREATE TABLE b12651_T1(a int) ENGINE=MYISAM;CREATE TABLE b12651_T2(b int) ENGINE=MYISAM;CREATE VIEW b12651_V1 as SELECT b FROM b12651_T2;PREPARE b12651 FROM 'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)';EXECUTE b12651;1DROP VIEW b12651_V1;DROP TABLE b12651_T1, b12651_T2;DEALLOCATE PREPARE b12651;create table t1 (id int);prepare ins_call from "insert into t1 (id) values (1)";execute ins_call;select row_count();row_count()1drop table t1;create table t1 (a int, b int);insert into t1 (a,b) values (2,8),(1,9),(3,7);prepare stmt from "select * from t1 order by ?";set @a=NULL;execute stmt using @a;a b2 81 93 7set @a=1;execute stmt using @a;a b1 92 83 7set @a=2;execute stmt using @a;a b3 72 81 9deallocate prepare stmt;select * from t1 order by 1;a b1 92 83 7prepare stmt from "select * from t1 order by ?+1";set @a=0;execute stmt using @a;a b2 81 93 7set @a=1;execute stmt using @a;a b2 81 93 7deallocate prepare stmt;select * from t1 order by 1+1;a b2 81 93 7drop table t1;create table t1 (a int);create table t2 like t1;create table t3 like t2;prepare stmt from "repair table t1";execute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKexecute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKprepare stmt from "optimize table t1";execute stmt;Table Op Msg_type Msg_texttest.t1 optimize status OKexecute stmt;Table Op Msg_type Msg_texttest.t1 optimize status Table is already up to dateprepare stmt from "analyze table t1";execute stmt;Table Op Msg_type Msg_texttest.t1 analyze status Table is already up to dateexecute stmt;Table Op Msg_type Msg_texttest.t1 analyze status Table is already up to dateprepare stmt from "repair table t1, t2, t3";execute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKtest.t2 repair status OKtest.t3 repair status OKexecute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKtest.t2 repair status OKtest.t3 repair status OKprepare stmt from "optimize table t1, t2, t3";execute stmt;Table Op Msg_type Msg_texttest.t1 optimize status OKtest.t2 optimize status OKtest.t3 optimize status OKexecute stmt;Table Op Msg_type Msg_texttest.t1 optimize status Table is already up to datetest.t2 optimize status Table is already up to datetest.t3 optimize status Table is already up to dateprepare stmt from "analyze table t1, t2, t3";execute stmt;Table Op Msg_type Msg_texttest.t1 analyze status Table is already up to datetest.t2 analyze status Table is already up to datetest.t3 analyze status Table is already up to dateexecute stmt;Table Op Msg_type Msg_texttest.t1 analyze status Table is already up to datetest.t2 analyze status Table is already up to datetest.t3 analyze status Table is already up to dateprepare stmt from "repair table t1, t4, t3";execute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKtest.t4 repair Error Table 'test.t4' doesn't existtest.t4 repair error Corrupttest.t3 repair status OKexecute stmt;Table Op Msg_type Msg_texttest.t1 repair status OKtest.t4 repair Error Table 'test.t4' doesn't existtest.t4 repair error Corrupttest.t3 repair status OKprepare stmt from "optimize table t1, t3, t4";execute stmt;Table Op Msg_type Msg_texttest.t1 optimize status OKtest.t3 optimize status OKtest.t4 optimize Error Table 'test.t4' doesn't existtest.t4 optimize error Corruptexecute stmt;Table Op Msg_type Msg_texttest.t1 optimize status Table is already up to datetest.t3 optimize status Table is already up to datetest.t4 optimize Error Table 'test.t4' doesn't existtest.t4 optimize error Corruptprepare stmt from "analyze table t4, t1";execute stmt;Table Op Msg_type Msg_texttest.t4 analyze Error Table 'test.t4' doesn't existtest.t4 analyze error Corrupttest.t1 analyze status Table is already up to dateexecute stmt;Table Op Msg_type Msg_texttest.t4 analyze Error Table 'test.t4' doesn't existtest.t4 analyze error Corrupttest.t1 analyze status Table is already up to datedeallocate prepare stmt;drop table t1, t2, t3;create database mysqltest_long_database_name_to_thrash_heap;use test;create table t1 (i int);prepare stmt from "alter table test.t1 rename t1";use mysqltest_long_database_name_to_thrash_heap;execute stmt;show tables like 't1';Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)prepare stmt from "alter table test.t1 rename t1";use test;execute stmt;show tables like 't1';Tables_in_test (t1)use mysqltest_long_database_name_to_thrash_heap;show tables like 't1';Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)t1deallocate prepare stmt;use mysqltest_long_database_name_to_thrash_heap;prepare stmt_create from "create table t1 (i int)";prepare stmt_insert from "insert into t1 (i) values (1)";prepare stmt_update from "update t1 set i=2";prepare stmt_delete from "delete from t1 where i=2";prepare stmt_select from "select * from t1";prepare stmt_alter from "alter table t1 add column (b int)";prepare stmt_alter1 from "alter table t1 drop column b";prepare stmt_analyze from "analyze table t1";prepare stmt_optimize from "optimize table t1";prepare stmt_show from "show tables like 't1'";prepare stmt_truncate from "truncate table t1";prepare stmt_drop from "drop table t1";drop table t1;use test;execute stmt_create;show tables like 't1';Tables_in_test (t1)use mysqltest_long_database_name_to_thrash_heap;show tables like 't1';Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)t1use test;execute stmt_insert;select * from mysqltest_long_database_name_to_thrash_heap.t1;i1execute stmt_update;select * from mysqltest_long_database_name_to_thrash_heap.t1;i2execute stmt_delete;execute stmt_select;iexecute stmt_alter;show columns from mysqltest_long_database_name_to_thrash_heap.t1;Field Type Null Key Default Extrai int(11) YES NULL b int(11) YES NULL execute stmt_alter1;show columns from mysqltest_long_database_name_to_thrash_heap.t1;Field Type Null Key Default Extrai int(11) YES NULL execute stmt_analyze;Table Op Msg_type Msg_textmysqltest_long_database_name_to_thrash_heap.t1 analyze status Table is already up to dateexecute stmt_optimize;Table Op Msg_type Msg_textmysqltest_long_database_name_to_thrash_heap.t1 optimize status Table is already up to dateexecute stmt_show;Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)t1execute stmt_truncate;execute stmt_drop;show tables like 't1';Tables_in_test (t1)use mysqltest_long_database_name_to_thrash_heap;show tables like 't1';Tables_in_mysqltest_long_database_name_to_thrash_heap (t1)drop database mysqltest_long_database_name_to_thrash_heap;prepare stmt_create from "create table t1 (i int)";ERROR 3D000: No database selectedprepare stmt_insert from "insert into t1 (i) values (1)";ERROR 3D000: No database selectedprepare stmt_update from "update t1 set i=2";ERROR 3D000: No database selectedprepare stmt_delete from "delete from t1 where i=2";ERROR 3D000: No database selectedprepare stmt_select from "select * from t1";ERROR 3D000: No database selectedprepare stmt_alter from "alter table t1 add column (b int)";ERROR 3D000: No database selectedprepare stmt_alter1 from "alter table t1 drop column b";ERROR 3D000: No database selectedprepare stmt_analyze from "analyze table t1";ERROR 3D000: No database selectedprepare stmt_optimize from "optimize table t1";ERROR 3D000: No database selectedprepare stmt_show from "show tables like 't1'";ERROR 3D000: No database selectedprepare stmt_truncate from "truncate table t1";ERROR 3D000: No database selectedprepare stmt_drop from "drop table t1";ERROR 3D000: No database selectedcreate temporary table t1 (i int);ERROR 3D000: No database selecteduse test;DROP TABLE IF EXISTS t1, t2, t3;CREATE TABLE t1 (i BIGINT, j BIGINT);CREATE TABLE t2 (i BIGINT);CREATE TABLE t3 (i BIGINT, j BIGINT);PREPARE stmt FROM "SELECT * FROM t1 JOIN t2 ON (t2.i = t1.i) LEFT JOIN t3 ON ((t3.i, t3.j) = (t1.i, t1.j)) WHERE t1.i = ?";SET @a= 1;EXECUTE stmt USING @a;i j i i jEXECUTE stmt USING @a;i j i i jDEALLOCATE PREPARE stmt;DROP TABLE IF EXISTS t1, t2, t3;DROP TABLE IF EXISTS t1, t2;CREATE TABLE t1 (i INT KEY);CREATE TABLE t2 (i INT);INSERT INTO t1 VALUES (1), (2);INSERT INTO t2 VALUES (1);PREPARE stmt FROM "SELECT t2.i FROM t1 LEFT JOIN t2 ON t2.i = t1.i WHERE t1.i = ?";SET @arg= 1;EXECUTE stmt USING @arg;i1SET @arg= 2;EXECUTE stmt USING @arg;iNULLSET @arg= 1;EXECUTE stmt USING @arg;i1DEALLOCATE PREPARE stmt;DROP TABLE t1, t2;CREATE TABLE t1 (i INT);CREATE VIEW v1 AS SELECT * FROM t1;INSERT INTO t1 VALUES (1), (2);SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.iWHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1);i1PREPARE stmt FROM "SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.iWHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1)";EXECUTE stmt;i1EXECUTE stmt;i1DEALLOCATE PREPARE stmt;DROP VIEW v1;DROP TABLE t1;DROP PROCEDURE IF EXISTS p1;flush status;prepare sq from 'show status like "slow_queries"';execute sq;Variable_name ValueSlow_queries 0prepare no_index from 'select 1 from information_schema.tables limit 1';execute sq;Variable_name ValueSlow_queries 0execute no_index;11execute sq;Variable_name ValueSlow_queries 1deallocate prepare no_index;deallocate prepare sq;CREATE TABLE t1 (a int);INSERT INTO t1 VALUES (1), (2);CREATE TABLE t2 (b int);INSERT INTO t2 VALUES (NULL);SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL;a12PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL';EXECUTE stmt;a12DEALLOCATE PREPARE stmt;PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL';SET @arg=1;EXECUTE stmt USING @arg;a12DEALLOCATE PREPARE stmt;DROP TABLE t1,t2;drop table if exists t1;create table t1 (s1 char(20));prepare stmt from "alter table t1 modify s1 int";execute stmt;execute stmt;drop table t1;deallocate prepare stmt;drop table if exists t1;create table t1 (a int, b int);prepare s_6895 from "alter table t1 drop column b";execute s_6895;show columns from t1;Field Type Null Key Default Extraa int(11) YES NULL drop table t1;create table t1 (a int, b int);execute s_6895;show columns from t1;Field Type Null Key Default Extraa int(11) YES NULL drop table t1;create table t1 (a int, b int);execute s_6895;show columns from t1;Field Type Null Key Default Extraa int(11) YES NULL deallocate prepare s_6895;drop table t1;create table t1 (i int primary key auto_increment) comment='comment for table t1';create table t2 (i int, j int, k int);prepare stmt from "alter table t1 auto_increment=100";execute stmt;show create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `i` int(11) NOT NULL auto_increment, PRIMARY KEY (`i`)) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 COMMENT='comment for table t1'flush tables;select * from t2;i j kexecute stmt;show create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `i` int(11) NOT NULL auto_increment, PRIMARY KEY (`i`)) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 COMMENT='comment for table t1'deallocate prepare stmt;drop table t1, t2;drop tables if exists t1;create table t1 (id int primary key auto_increment, value varchar(10));insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'";execute stmt;ERROR 42S22: Unknown column 'v' in 'field list'execute stmt;ERROR 42S22: Unknown column 'v' in 'field list'deallocate prepare stmt;prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'";execute stmt;ERROR 42S22: Unknown column 'y.value' in 'field list'execute stmt;ERROR 42S22: Unknown column 'y.value' in 'field list'deallocate prepare stmt;drop tables t1;prepare stmt from "create table t1 select ?";set @a=1.0;execute stmt using @a;show create table t1;Table Create Tablet1 CREATE TABLE `t1` ( `?` decimal(2,1) default NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1drop table t1;drop table if exists t1;create table t1 (a bigint unsigned, b bigint(20) unsigned);prepare stmt from "insert into t1 values (?,?)";set @a= 9999999999999999;set @b= 14632475938453979136;insert into t1 values (@a, @b);select * from t1 where a = @a and b = @b;a b9999999999999999 14632475938453979136execute stmt using @a, @b;select * from t1 where a = @a and b = @b;a b9999999999999999 146324759384539791369999999999999999 14632475938453979136deallocate prepare stmt;drop table t1;drop view if exists v1;drop table if exists t1;create table t1 (a int, b int);insert into t1 values (1,1), (2,2), (3,3);insert into t1 values (3,1), (1,2), (2,3);prepare stmt from "create view v1 as select * from t1";execute stmt;drop table t1;create table t1 (a int, b int);drop view v1;execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1`drop view v1;prepare stmt from "create view v1 (c,d) as select a,b from t1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1`select * from v1;c ddrop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1`select * from v1;c ddrop view v1;prepare stmt from "create view v1 (c) as select b+1 from t1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1`select * from v1;cdrop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1`select * from v1;cdrop view v1;prepare stmt from "create view v1 (c,d,e,f) as select a,b,a in (select a+2 from t1), a = all (select a from t1) from t1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1`select * from v1;c d e fdrop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d`,`t1`.`a` in (select (`t1`.`a` + 2) AS `a+2` from `t1`) AS `e`,`t1`.`a` = all (select `t1`.`a` AS `a` from `t1`) AS `f` from `t1`select * from v1;c d e fdrop view v1;prepare stmt from "create or replace view v1 as select 1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`select * from v1;11execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`select * from v1;11drop view v1;prepare stmt from "create view v1 as select 1, 1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1`select * from v1;1 My_exp_11 1drop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1`select * from v1;1 My_exp_11 1drop view v1;prepare stmt from "create view v1 (x) as select a from t1 where a > 1";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1)select * from v1;xdrop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1)select * from v1;xdrop view v1;prepare stmt from "create view v1 as select * from `t1` `b`";execute stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b`select * from v1;a bdrop view v1;execute stmt;deallocate prepare stmt;show create view v1;View Create Viewv1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b`select * from v1;a bdrop view v1;prepare stmt from "create view v1 (a,b,c) as select * from t1";execute stmt;ERROR HY000: View's SELECT and view's field list have different column countsexecute stmt;ERROR HY000: View's SELECT and view's field list have different column countsdeallocate prepare stmt;drop table t1;create temporary table t1 (a int, b int);prepare stmt from "create view v1 as select * from t1";execute stmt;ERROR HY000: View's SELECT refers to a temporary table 't1'execute stmt;ERROR HY000: View's SELECT refers to a temporary table 't1'deallocate prepare stmt;drop table t1;prepare stmt from "create view v1 as select * from t1";ERROR 42S02: Table 'test.t1' doesn't existprepare stmt from "create view v1 as select * from `t1` `b`";ERROR 42S02: Table 'test.t1' doesn't existprepare stmt from "select ?";set @arg= 123456789.987654321;select @arg;@arg123456789.987654321execute stmt using @arg;?123456789.987654321set @arg= "string";select @arg;@argstringexecute stmt using @arg;?stringset @arg= 123456;select @arg;@arg123456execute stmt using @arg;?123456set @arg= cast(-12345.54321 as decimal(20, 10));select @arg;@arg-12345.5432100000execute stmt using @arg;?-12345.5432100000deallocate prepare stmt;End of 5.0 tests.
|