Merge quad.:/mnt/raid/alik/MySQL/devel/5.1
into quad.:/mnt/raid/alik/MySQL/devel/5.1-rt-merged client/mysqltest.c: Auto merged mysql-test/r/view.result: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_ndbcluster_binlog.cc: Auto merged sql/handler.cc: Auto merged sql/log_event.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_connect.cc: Auto merged sql/sql_parse.cc: Auto merged tests/mysql_client_test.c: Auto merged mysql-test/suite/rpl_ndb/t/disabled.def: Manually merged. mysql-test/t/disabled.def: Manually merged.
This commit is contained in:
commit
336f2c7e51
@ -6333,6 +6333,8 @@ int util_query(MYSQL* org_mysql, const char* query){
|
||||
if (!(mysql= mysql_init(mysql)))
|
||||
die("Failed in mysql_init()");
|
||||
|
||||
/* enable local infile, in non-binary builds often disabled by default */
|
||||
mysql_options(mysql, MYSQL_OPT_LOCAL_INFILE, 0);
|
||||
safe_connect(mysql, "util", org_mysql->host, org_mysql->user,
|
||||
org_mysql->passwd, org_mysql->db, org_mysql->port,
|
||||
org_mysql->unix_socket);
|
||||
|
45
dbug/dbug.c
45
dbug/dbug.c
@ -412,15 +412,11 @@ void _db_process_(const char *name)
|
||||
cs->process= name;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
* _db_set_ set current debugger settings
|
||||
*
|
||||
* SYNOPSIS
|
||||
*
|
||||
* VOID _db_set_(control)
|
||||
* char *control;
|
||||
* DbugParse parse control string and set current debugger setting
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
@ -444,7 +440,7 @@ void _db_process_(const char *name)
|
||||
*
|
||||
*/
|
||||
|
||||
void _db_set_(CODE_STATE *cs, const char *control)
|
||||
static void DbugParse(CODE_STATE *cs, const char *control)
|
||||
{
|
||||
const char *end;
|
||||
int rel=0;
|
||||
@ -671,6 +667,35 @@ void _db_set_(CODE_STATE *cs, const char *control)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
* _db_set_ set current debugger settings
|
||||
*
|
||||
* SYNOPSIS
|
||||
*
|
||||
* VOID _db_set_(control)
|
||||
* char *control;
|
||||
*
|
||||
* DESCRIPTION
|
||||
*
|
||||
* Given pointer to a debug control string in "control",
|
||||
* parses the control string, and sets up a current debug
|
||||
* settings. Pushes a new debug settings if the current is
|
||||
* set to the initial debugger settings.
|
||||
*/
|
||||
|
||||
void _db_set_(CODE_STATE *cs, const char *control)
|
||||
{
|
||||
get_code_state_or_return;
|
||||
|
||||
if (cs->stack == &init_settings)
|
||||
PushState(cs);
|
||||
|
||||
DbugParse(cs, control);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
@ -685,7 +710,7 @@ void _db_set_(CODE_STATE *cs, const char *control)
|
||||
*
|
||||
* Given pointer to a debug control string in "control", pushes
|
||||
* the current debug settings, parses the control string, and sets
|
||||
* up a new debug settings with _db_set_()
|
||||
* up a new debug settings with DbugParse()
|
||||
*
|
||||
*/
|
||||
|
||||
@ -694,7 +719,7 @@ void _db_push_(const char *control)
|
||||
CODE_STATE *cs=0;
|
||||
get_code_state_or_return;
|
||||
PushState(cs);
|
||||
_db_set_(cs, control);
|
||||
DbugParse(cs, control);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -717,7 +742,7 @@ void _db_set_init_(const char *control)
|
||||
CODE_STATE tmp_cs;
|
||||
bzero((uchar*) &tmp_cs, sizeof(tmp_cs));
|
||||
tmp_cs.stack= &init_settings;
|
||||
_db_set_(&tmp_cs, control);
|
||||
DbugParse(&tmp_cs, control);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -730,8 +730,9 @@ warning will be given. The DBUG_POP macro has no arguments.
|
||||
EX:\ \fCDBUG_POP\ ();\fR
|
||||
.SP 1
|
||||
.LI DBUG_SET\
|
||||
Modifies the current debugger state on top of the stack using the
|
||||
debug control string passed as the macro argument. Unless
|
||||
Modifies the current debugger state on top of the stack or pushes
|
||||
a new state if the current is set to the initial settings, using
|
||||
the debug control string passed as the macro argument. Unless
|
||||
.I incremental
|
||||
control string is used (see below), it's equivalent to a combination of
|
||||
DBUG_POP and DBUG_PUSH.
|
||||
|
742
mysql-test/include/commit.inc
Normal file
742
mysql-test/include/commit.inc
Normal file
@ -0,0 +1,742 @@
|
||||
## Bug#12713 (Error in a stored function called from a SELECT doesn't cause
|
||||
## ROLLBACK of statem)
|
||||
|
||||
##
|
||||
## Pre-Requisites :
|
||||
## - $engine_type should be set
|
||||
##
|
||||
|
||||
set sql_mode=no_engine_substitution;
|
||||
eval set storage_engine = $engine_type;
|
||||
set autocommit=1;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
drop table if exists t3;
|
||||
drop function if exists f2;
|
||||
drop procedure if exists bug12713_call;
|
||||
drop procedure if exists bug12713_dump_spvars;
|
||||
drop procedure if exists dummy;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a int);
|
||||
create table t2 (a int unique);
|
||||
create table t3 (a int);
|
||||
|
||||
# a workaround for Bug#32633: Can not create any routine if
|
||||
# SQL_MODE=no_engine_substitution
|
||||
|
||||
set sql_mode=default;
|
||||
|
||||
insert into t1 (a) values (1), (2);
|
||||
insert into t3 (a) values (1), (2);
|
||||
|
||||
delimiter |;
|
||||
|
||||
## Cause a failure every time
|
||||
create function f2(x int) returns int
|
||||
begin
|
||||
insert into t2 (a) values (x);
|
||||
insert into t2 (a) values (x);
|
||||
return x;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
set autocommit=0;
|
||||
|
||||
flush status;
|
||||
##============================================================================
|
||||
## Design notes
|
||||
##
|
||||
## In each case, statement rollback is expected.
|
||||
## for transactional engines, the rollback should be properly executed
|
||||
## for non transactional engines, the rollback may cause warnings.
|
||||
##
|
||||
## The test pattern is as follows
|
||||
## - insert 1000+N
|
||||
## - statement with a side effect, that fails to insert N twice
|
||||
## - a statement rollback is expected (expecting 1 row 1000+N only) in t2
|
||||
## - a rollback is performed
|
||||
## - expecting a clean table t2.
|
||||
##============================================================================
|
||||
|
||||
insert into t2 (a) values (1001);
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 (a) values (f2(1));
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1002);
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t3 (a) select f2(2) from t1;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1003);
|
||||
--error ER_DUP_ENTRY
|
||||
update t1 set a= a + f2(3);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1004);
|
||||
--error ER_DUP_ENTRY
|
||||
update t1, t3 set t1.a = 0, t3.a = 0 where (f2(4) = 4) and (t1.a = t3.a);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1005);
|
||||
--error ER_DUP_ENTRY
|
||||
delete from t1 where (a = f2(5));
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1006);
|
||||
--error ER_DUP_ENTRY
|
||||
delete from t1, t3 using t1, t3 where (f2(6) = 6) ;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1007);
|
||||
--error ER_DUP_ENTRY
|
||||
replace t1 values (f2(7));
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1008);
|
||||
--error ER_DUP_ENTRY
|
||||
replace into t3 (a) select f2(8) from t1;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1009);
|
||||
--error ER_DUP_ENTRY
|
||||
select f2(9) from t1 ;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1010);
|
||||
--error ER_DUP_ENTRY
|
||||
show databases where (f2(10) = 10);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1011);
|
||||
--error ER_DUP_ENTRY
|
||||
show tables where (f2(11) = 11);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1012);
|
||||
--error ER_DUP_ENTRY
|
||||
show triggers where (f2(12) = 12);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1013);
|
||||
--error ER_DUP_ENTRY
|
||||
show table status where (f2(13) = 13);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1014);
|
||||
--error ER_DUP_ENTRY
|
||||
show open tables where (f2(14) = 14);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1015);
|
||||
--error ER_DUP_ENTRY
|
||||
show columns in mysql.proc where (f2(15) = 15);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1016);
|
||||
--error ER_DUP_ENTRY
|
||||
show status where (f2(16) = 16);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1017);
|
||||
--error ER_DUP_ENTRY
|
||||
show variables where (f2(17) = 17);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1018);
|
||||
--error ER_DUP_ENTRY
|
||||
show charset where (f2(18) = 18);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1019);
|
||||
--error ER_DUP_ENTRY
|
||||
show collation where (f2(19) = 19);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
--echo # We need at least one procedure to make sure the WHERE clause is
|
||||
--echo # evaluated
|
||||
create procedure dummy() begin end;
|
||||
insert into t2 (a) values (1020);
|
||||
--error ER_DUP_ENTRY
|
||||
show procedure status where (f2(20) = 20);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
drop procedure dummy;
|
||||
|
||||
insert into t2 (a) values (1021);
|
||||
--error ER_DUP_ENTRY
|
||||
show function status where (f2(21) = 21);
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1022);
|
||||
prepare stmt from "insert into t1 (a) values (f2(22))";
|
||||
--error ER_DUP_ENTRY
|
||||
execute stmt;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
insert into t2 (a) values (1023);
|
||||
do (f2(23));
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
## Please note :
|
||||
## This will insert a record 1024 in t1 (statement commit)
|
||||
## This will insert a record 24 in t1 (statement commit)
|
||||
## then will rollback the second insert only (24) (statement rollback)
|
||||
## then will rollback the complete transaction (transaction rollback)
|
||||
|
||||
delimiter |;
|
||||
|
||||
create procedure bug12713_call ()
|
||||
begin
|
||||
insert into t2 (a) values (24);
|
||||
insert into t2 (a) values (24);
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
insert into t2 (a) values (1024);
|
||||
--error ER_DUP_ENTRY
|
||||
call bug12713_call();
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
--echo =======================================================================
|
||||
--echo Testing select_to_file
|
||||
--echo =======================================================================
|
||||
|
||||
insert into t2 (a) values (1025);
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR ..
|
||||
--error ER_DUP_ENTRY
|
||||
eval select f2(25) into outfile "$MYSQLTEST_VARDIR/tmp/dml.out" from t1;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/dml.out
|
||||
|
||||
insert into t2 (a) values (1026);
|
||||
--replace_result $MYSQLTEST_VARDIR ..
|
||||
--error ER_DUP_ENTRY
|
||||
eval load data infile "../std_data_ln/words.dat" into table t1 (a) set a:=f2(26);
|
||||
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
--echo =======================================================================
|
||||
--echo Testing select_dumpvar
|
||||
--echo =======================================================================
|
||||
|
||||
insert into t2 (a) values (1027);
|
||||
--error ER_DUP_ENTRY
|
||||
select f2(27) into @foo;
|
||||
select * from t2;
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
--echo =======================================================================
|
||||
--echo Testing Select_fetch_into_spvars
|
||||
--echo =======================================================================
|
||||
|
||||
delimiter |;
|
||||
|
||||
create procedure bug12713_dump_spvars ()
|
||||
begin
|
||||
declare foo int;
|
||||
|
||||
declare continue handler for sqlexception
|
||||
begin
|
||||
select "Exception trapped";
|
||||
end;
|
||||
|
||||
select f2(28) into foo;
|
||||
select * from t2;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
insert into t2 (a) values (1028);
|
||||
call bug12713_dump_spvars ();
|
||||
rollback;
|
||||
select * from t2;
|
||||
|
||||
--echo =======================================================================
|
||||
--echo Cleanup
|
||||
--echo =======================================================================
|
||||
|
||||
set autocommit=default;
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
drop function f2;
|
||||
drop procedure bug12713_call;
|
||||
drop procedure bug12713_dump_spvars;
|
||||
--echo #
|
||||
--echo # Bug#12713 Error in a stored function called from a SELECT doesn't
|
||||
--echo # cause ROLLBACK of statem
|
||||
--echo #
|
||||
--echo # Verify that two-phase commit is not issued for read-only
|
||||
--echo # transactions.
|
||||
--echo #
|
||||
--echo # Verify that two-phase commit is issued for read-write transactions,
|
||||
--echo # even if the change is done inside a stored function called from
|
||||
--echo # SELECT or SHOW statement.
|
||||
--echo #
|
||||
set autocommit=0;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
drop function if exists f1;
|
||||
drop procedure if exists p_verify_status_increment;
|
||||
--enable_warnings
|
||||
|
||||
set sql_mode=no_engine_substitution;
|
||||
create table t1 (a int unique);
|
||||
create table t2 (a int) engine=myisam;
|
||||
set sql_mode=default;
|
||||
--echo #
|
||||
--echo # An auxiliary procedure to track Handler_prepare and Handler_commit
|
||||
--echo # statistics.
|
||||
--echo #
|
||||
delimiter |;
|
||||
create procedure
|
||||
p_verify_status_increment(commit_inc_mixed int, prepare_inc_mixed int,
|
||||
commit_inc_row int, prepare_inc_row int)
|
||||
begin
|
||||
declare commit_inc int;
|
||||
declare prepare_inc int;
|
||||
declare old_commit_count int default ifnull(@commit_count, 0);
|
||||
declare old_prepare_count int default ifnull(@prepare_count, 0);
|
||||
declare c_res int;
|
||||
# Use a cursor to have just one access to I_S instead of 2, it is very slow
|
||||
# and amounts for over 90% of test CPU time
|
||||
declare c cursor for
|
||||
select variable_value
|
||||
from information_schema.session_status
|
||||
where variable_name='Handler_commit' or variable_name='Handler_prepare'
|
||||
order by variable_name;
|
||||
|
||||
if @@global.binlog_format = 'ROW' then
|
||||
set commit_inc= commit_inc_row;
|
||||
set prepare_inc= prepare_inc_row;
|
||||
else
|
||||
set commit_inc= commit_inc_mixed;
|
||||
set prepare_inc= prepare_inc_mixed;
|
||||
end if;
|
||||
|
||||
open c;
|
||||
fetch c into c_res;
|
||||
set @commit_count=c_res;
|
||||
fetch c into c_res;
|
||||
set @prepare_count=c_res;
|
||||
close c;
|
||||
|
||||
if old_commit_count + commit_inc <> @commit_count then
|
||||
select concat("Expected commit increment: ", commit_inc,
|
||||
" actual: ", @commit_count - old_commit_count)
|
||||
as 'ERROR';
|
||||
elseif old_prepare_count + prepare_inc <> @prepare_count then
|
||||
select concat("Expected prepare increment: ", prepare_inc,
|
||||
" actual: ", @prepare_count - old_prepare_count)
|
||||
as 'ERROR';
|
||||
else
|
||||
select '' as 'SUCCESS';
|
||||
end if;
|
||||
end|
|
||||
delimiter ;|
|
||||
--echo # Reset Handler_commit and Handler_prepare counters
|
||||
flush status;
|
||||
--echo #
|
||||
--echo # 1. Read-only statement: SELECT
|
||||
--echo #
|
||||
select * from t1;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 2. Read-write statement: INSERT, insert 1 row.
|
||||
--echo #
|
||||
insert into t1 (a) values (1);
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 3. Read-write statement: UPDATE, update 1 row.
|
||||
--echo #
|
||||
update t1 set a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 4. Read-write statement: UPDATE, update 0 rows, 1 row matches WHERE
|
||||
--echo #
|
||||
--echo # Note the wrong Handler_prepare/Handler_commit count is due to
|
||||
--echo # Bug#29157 "UPDATE, changed rows incorrect" and
|
||||
--echo # Bug#Bug #33846 UPDATE word:Wrong 'Changed rows' if InnoDB, unique
|
||||
--echo # key and no rows qualify WHERE
|
||||
--echo #
|
||||
update t1 set a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 5. Read-write statement: UPDATE, update 0 rows, 0 rows match WHERE
|
||||
--echo #
|
||||
--echo # In mixed replication mode, there is a read-only transaction
|
||||
--echo # in InnoDB and also the statement is written to the binary log.
|
||||
--echo # So we have two commits but no 2pc, since the first engine's
|
||||
--echo # transaction is read-only.
|
||||
--echo # In the row level replication mode, we only have the read-only
|
||||
--echo # transaction in InnoDB and nothing is written to the binary log.
|
||||
--echo #
|
||||
update t1 set a=3 where a=1;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 6. Read-write statement: DELETE, delete 0 rows.
|
||||
--echo #
|
||||
delete from t1 where a=1;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 7. Read-write statement: DELETE, delete 1 row.
|
||||
--echo #
|
||||
delete from t1 where a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 8. Read-write statement: unqualified DELETE
|
||||
--echo #
|
||||
--echo # In statement or mixed replication mode, we call
|
||||
--echo # handler::ha_delete_all_rows() and write statement text
|
||||
--echo # to the binary log. This results in two read-write transactions.
|
||||
--echo # In row level replication mode, we do not call
|
||||
--echo # handler::ha_delete_all_rows(), but delete rows one by one.
|
||||
--echo # Since there are no rows, nothing is written to the binary log.
|
||||
--echo # Thus we have just one read-only transaction in InnoDB.
|
||||
delete from t1;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
|
||||
--echo # 9. Read-write statement: REPLACE, change 1 row.
|
||||
--echo #
|
||||
replace t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 10. Read-write statement: REPLACE, change 0 rows.
|
||||
--echo #
|
||||
replace t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 11. Read-write statement: IODKU, change 1 row.
|
||||
--echo #
|
||||
insert t1 set a=1 on duplicate key update a=a+1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
select * from t1;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 12. Read-write statement: IODKU, change 0 rows.
|
||||
--echo #
|
||||
insert t1 set a=2 on duplicate key update a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
||||
--echo #
|
||||
insert ignore t1 set a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 14. Read-write statement: INSERT IGNORE, change 1 row.
|
||||
--echo #
|
||||
insert ignore t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
--echo # 15. Read-write statement: UPDATE IGNORE, change 0 rows.
|
||||
--echo #
|
||||
update ignore t1 set a=2 where a=1;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
--echo #
|
||||
--echo # Create a stored function that modifies a
|
||||
--echo # non-transactional table. Demonstrate that changes in
|
||||
--echo # non-transactional tables do not affect the two phase commit
|
||||
--echo # algorithm.
|
||||
--echo #
|
||||
delimiter |;
|
||||
create function f1() returns int
|
||||
begin
|
||||
insert t2 set a=2;
|
||||
return 2;
|
||||
end|
|
||||
delimiter ;|
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo # 16. A function changes non-trans-table.
|
||||
--echo #
|
||||
select f1();
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo # 17. Read-only statement, a function changes non-trans-table.
|
||||
--echo #
|
||||
select f1() from t1;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 18. Read-write statement: UPDATE, change 0 (transactional) rows.
|
||||
--echo #
|
||||
select count(*) from t2;
|
||||
update t1 set a=2 where a=f1()+10;
|
||||
select count(*) from t2;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
--echo #
|
||||
--echo # Replace the non-transactional table with a temporary
|
||||
--echo # transactional table. Demonstrate that a change to a temporary
|
||||
--echo # transactional table does not provoke 2-phase commit, although
|
||||
--echo # does trigger a commit and a binlog write (in statement mode).
|
||||
--echo #
|
||||
drop table t2;
|
||||
set sql_mode=no_engine_substitution;
|
||||
create temporary table t2 (a int);
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
set sql_mode=default;
|
||||
--echo # 19. A function changes temp-trans-table.
|
||||
--echo #
|
||||
select f1();
|
||||
--echo # Two commits because a binary log record is written
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 20. Read-only statement, a function changes non-trans-table.
|
||||
--echo #
|
||||
select f1() from t1;
|
||||
--echo # Two commits because a binary log record is written
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 21. Read-write statement: UPDATE, change 0 (transactional) rows.
|
||||
--echo #
|
||||
update t1 set a=2 where a=f1()+10;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 22. DDL: ALTER TEMPORARY TABLE, should not cause a 2pc
|
||||
--echo #
|
||||
alter table t2 add column b int default 5;
|
||||
--echo # A commit is done internally by ALTER.
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
commit;
|
||||
--echo # There is nothing left to commit
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo # 23. DDL: RENAME TEMPORARY TABLE, does not start a transaction
|
||||
--echo
|
||||
--echo # No test because of Bug#8729 "rename table fails on temporary table"
|
||||
|
||||
--echo # 24. DDL: TRUNCATE TEMPORARY TABLE, does not start a transaction
|
||||
--echo
|
||||
truncate table t2;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
commit;
|
||||
--echo # There is nothing left to commit
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo # 25. Read-write statement: unqualified DELETE
|
||||
--echo
|
||||
delete from t2;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
commit;
|
||||
--echo # There is nothing left to commit
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
|
||||
--echo # 25. DDL: DROP TEMPORARY TABLE, does not start a transaction
|
||||
--echo #
|
||||
drop temporary table t2;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo # 26. Verify that SET AUTOCOMMIT issues an implicit commit
|
||||
--echo #
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
set autocommit=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
rollback;
|
||||
select a from t1 where a=3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
delete from t1 where a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
set autocommit=0;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
--echo # Sic: not actually changing the value of autocommit
|
||||
set autocommit=0;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
rollback;
|
||||
select a from t1 where a=3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 27. Savepoint management
|
||||
--echo #
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
savepoint a;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
insert t1 set a=4;
|
||||
--echo # Sic: a bug. Binlog did not register itself this time.
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
release savepoint a;
|
||||
rollback;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
select a from t1 where a=3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
|
||||
--echo # 28. Read-write statement: DO
|
||||
--echo #
|
||||
create table t2 (a int);
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
do (select f1() from t1 where a=2);
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
|
||||
--echo # 29. Read-write statement: MULTI-DELETE
|
||||
--echo #
|
||||
delete t1, t2 from t1 join t2 on (t1.a=t2.a) where t1.a=2;
|
||||
commit;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
|
||||
--echo # 30. Read-write statement: INSERT-SELECT, MULTI-UPDATE, REPLACE-SELECT
|
||||
--echo #
|
||||
insert into t2 select a from t1;
|
||||
commit;
|
||||
replace into t2 select a from t1;
|
||||
commit;
|
||||
call p_verify_status_increment(8, 8, 8, 8);
|
||||
#
|
||||
# Multi-update is one of the few remaining statements that still
|
||||
# locks the tables at prepare step (and hence starts the transaction.
|
||||
# Disable the PS protocol, since in this protocol we get a different
|
||||
# number of commmits (there is an extra commit after prepare
|
||||
#
|
||||
--disable_ps_protocol
|
||||
update t1, t2 set t1.a=4, t2.a=8 where t1.a=t2.a and t1.a=1;
|
||||
--enable_ps_protocol
|
||||
commit;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
|
||||
--echo # 31. DDL: various DDL with transactional tables
|
||||
--echo #
|
||||
--echo # Sic: no table is created.
|
||||
create table if not exists t2 (a int) select 6 union select 7;
|
||||
--echo # Sic: first commits the statement, and then the transaction.
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
create table t3 select a from t2;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
alter table t3 add column (b int);
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
alter table t3 rename t4;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
rename table t4 to t3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
truncate table t3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
create view v1 as select * from t2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
check table t1;
|
||||
call p_verify_status_increment(3, 0, 3, 0);
|
||||
--echo # Sic: after this bug is fixed, CHECK leaves no pending transaction
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
check table t1, t2, t3;
|
||||
call p_verify_status_increment(6, 0, 6, 0);
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
drop view v1;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
|
||||
--echo #
|
||||
--echo # Cleanup
|
||||
--echo #
|
||||
drop table t1;
|
||||
drop procedure p_verify_status_increment;
|
||||
drop function f1;
|
@ -9,6 +9,10 @@ SHOW CREATE VIEW v1|
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
|
||||
--echo
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
|
||||
# - Check INFORMATION_SCHEMA;
|
||||
|
||||
--echo
|
||||
@ -20,6 +24,10 @@ SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
|
||||
# - Execute the views;
|
||||
|
||||
--echo
|
||||
@ -30,3 +38,7 @@ SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
--echo
|
||||
|
||||
SELECT COLLATION(c1) FROM v2|
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM v3|
|
||||
|
@ -1410,4 +1410,33 @@ SELECT * FROM t1 WHERE tid = 1 AND vid = 3 ORDER BY idx DESC;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#21704: Renaming column does not update FK definition.
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1(id INT PRIMARY KEY)
|
||||
ENGINE=innodb;
|
||||
|
||||
CREATE TABLE t2(
|
||||
t1_id INT PRIMARY KEY,
|
||||
CONSTRAINT fk1 FOREIGN KEY (t1_id) REFERENCES t1(id))
|
||||
ENGINE=innodb;
|
||||
|
||||
--echo
|
||||
|
||||
--disable_result_log
|
||||
--error ER_ERROR_ON_RENAME
|
||||
ALTER TABLE t1 CHANGE id id2 INT;
|
||||
--enable_result_log
|
||||
|
||||
--echo
|
||||
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -27,7 +27,7 @@ explain extended select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" E
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select (case 1 when 1 then _latin1'one' when 2 then _latin1'two' else _latin1'more' end) AS `CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END`
|
||||
Note 1003 select (case 1 when 1 then 'one' when 2 then 'two' else 'more' end) AS `CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END`
|
||||
select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
|
||||
CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END
|
||||
two
|
||||
@ -147,7 +147,7 @@ COALESCE('a' COLLATE latin1_bin,'b');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select coalesce(1) AS `COALESCE(1)`,coalesce(1.0) AS `COALESCE(1.0)`,coalesce(_latin1'a') AS `COALESCE('a')`,coalesce(1,1.0) AS `COALESCE(1,1.0)`,coalesce(1,_latin1'1') AS `COALESCE(1,'1')`,coalesce(1.1,_latin1'1') AS `COALESCE(1.1,'1')`,coalesce((_latin1'a' collate latin1_bin),_latin1'b') AS `COALESCE('a' COLLATE latin1_bin,'b')`
|
||||
Note 1003 select coalesce(1) AS `COALESCE(1)`,coalesce(1.0) AS `COALESCE(1.0)`,coalesce('a') AS `COALESCE('a')`,coalesce(1,1.0) AS `COALESCE(1,1.0)`,coalesce(1,'1') AS `COALESCE(1,'1')`,coalesce(1.1,'1') AS `COALESCE(1.1,'1')`,coalesce(('a' collate latin1_bin),'b') AS `COALESCE('a' COLLATE latin1_bin,'b')`
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
|
888
mysql-test/r/commit_1innodb.result
Normal file
888
mysql-test/r/commit_1innodb.result
Normal file
@ -0,0 +1,888 @@
|
||||
set sql_mode=no_engine_substitution;
|
||||
set storage_engine = InnoDB;
|
||||
set autocommit=1;
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
drop table if exists t3;
|
||||
drop function if exists f2;
|
||||
drop procedure if exists bug12713_call;
|
||||
drop procedure if exists bug12713_dump_spvars;
|
||||
drop procedure if exists dummy;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int unique);
|
||||
create table t3 (a int);
|
||||
set sql_mode=default;
|
||||
insert into t1 (a) values (1), (2);
|
||||
insert into t3 (a) values (1), (2);
|
||||
create function f2(x int) returns int
|
||||
begin
|
||||
insert into t2 (a) values (x);
|
||||
insert into t2 (a) values (x);
|
||||
return x;
|
||||
end|
|
||||
set autocommit=0;
|
||||
flush status;
|
||||
insert into t2 (a) values (1001);
|
||||
insert into t1 (a) values (f2(1));
|
||||
ERROR 23000: Duplicate entry '1' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1001
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1002);
|
||||
insert into t3 (a) select f2(2) from t1;
|
||||
ERROR 23000: Duplicate entry '2' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1002
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1003);
|
||||
update t1 set a= a + f2(3);
|
||||
ERROR 23000: Duplicate entry '3' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1003
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1004);
|
||||
update t1, t3 set t1.a = 0, t3.a = 0 where (f2(4) = 4) and (t1.a = t3.a);
|
||||
ERROR 23000: Duplicate entry '4' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1004
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1005);
|
||||
delete from t1 where (a = f2(5));
|
||||
ERROR 23000: Duplicate entry '5' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1005
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1006);
|
||||
delete from t1, t3 using t1, t3 where (f2(6) = 6) ;
|
||||
ERROR 23000: Duplicate entry '6' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1006
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1007);
|
||||
replace t1 values (f2(7));
|
||||
ERROR 23000: Duplicate entry '7' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1007
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1008);
|
||||
replace into t3 (a) select f2(8) from t1;
|
||||
ERROR 23000: Duplicate entry '8' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1008
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1009);
|
||||
select f2(9) from t1 ;
|
||||
ERROR 23000: Duplicate entry '9' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1009
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1010);
|
||||
show databases where (f2(10) = 10);
|
||||
ERROR 23000: Duplicate entry '10' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1010
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1011);
|
||||
show tables where (f2(11) = 11);
|
||||
ERROR 23000: Duplicate entry '11' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1011
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1012);
|
||||
show triggers where (f2(12) = 12);
|
||||
ERROR 23000: Duplicate entry '12' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1012
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1013);
|
||||
show table status where (f2(13) = 13);
|
||||
ERROR 23000: Duplicate entry '13' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1013
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1014);
|
||||
show open tables where (f2(14) = 14);
|
||||
ERROR 23000: Duplicate entry '14' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1014
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1015);
|
||||
show columns in mysql.proc where (f2(15) = 15);
|
||||
ERROR 23000: Duplicate entry '15' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1015
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1016);
|
||||
show status where (f2(16) = 16);
|
||||
ERROR 23000: Duplicate entry '16' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1016
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1017);
|
||||
show variables where (f2(17) = 17);
|
||||
ERROR 23000: Duplicate entry '17' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1017
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1018);
|
||||
show charset where (f2(18) = 18);
|
||||
ERROR 23000: Duplicate entry '18' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1018
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1019);
|
||||
show collation where (f2(19) = 19);
|
||||
ERROR 23000: Duplicate entry '19' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1019
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
# We need at least one procedure to make sure the WHERE clause is
|
||||
# evaluated
|
||||
create procedure dummy() begin end;
|
||||
insert into t2 (a) values (1020);
|
||||
show procedure status where (f2(20) = 20);
|
||||
ERROR 23000: Duplicate entry '20' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1020
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
drop procedure dummy;
|
||||
insert into t2 (a) values (1021);
|
||||
show function status where (f2(21) = 21);
|
||||
ERROR 23000: Duplicate entry '21' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1021
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1022);
|
||||
prepare stmt from "insert into t1 (a) values (f2(22))";
|
||||
execute stmt;
|
||||
ERROR 23000: Duplicate entry '22' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1022
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1023);
|
||||
do (f2(23));
|
||||
Warnings:
|
||||
Error 1062 Duplicate entry '23' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1023
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
create procedure bug12713_call ()
|
||||
begin
|
||||
insert into t2 (a) values (24);
|
||||
insert into t2 (a) values (24);
|
||||
end|
|
||||
insert into t2 (a) values (1024);
|
||||
call bug12713_call();
|
||||
ERROR 23000: Duplicate entry '24' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
24
|
||||
1024
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
=======================================================================
|
||||
Testing select_to_file
|
||||
=======================================================================
|
||||
insert into t2 (a) values (1025);
|
||||
select f2(25) into outfile "../tmp/dml.out" from t1;
|
||||
ERROR 23000: Duplicate entry '25' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1025
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
insert into t2 (a) values (1026);
|
||||
load data infile "../std_data_ln/words.dat" into table t1 (a) set a:=f2(26);
|
||||
ERROR 23000: Duplicate entry '26' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1026
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
=======================================================================
|
||||
Testing select_dumpvar
|
||||
=======================================================================
|
||||
insert into t2 (a) values (1027);
|
||||
select f2(27) into @foo;
|
||||
ERROR 23000: Duplicate entry '27' for key 'a'
|
||||
select * from t2;
|
||||
a
|
||||
1027
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
=======================================================================
|
||||
Testing Select_fetch_into_spvars
|
||||
=======================================================================
|
||||
create procedure bug12713_dump_spvars ()
|
||||
begin
|
||||
declare foo int;
|
||||
declare continue handler for sqlexception
|
||||
begin
|
||||
select "Exception trapped";
|
||||
end;
|
||||
select f2(28) into foo;
|
||||
select * from t2;
|
||||
end|
|
||||
insert into t2 (a) values (1028);
|
||||
call bug12713_dump_spvars ();
|
||||
Exception trapped
|
||||
Exception trapped
|
||||
a
|
||||
1028
|
||||
rollback;
|
||||
select * from t2;
|
||||
a
|
||||
=======================================================================
|
||||
Cleanup
|
||||
=======================================================================
|
||||
set autocommit=default;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
drop function f2;
|
||||
drop procedure bug12713_call;
|
||||
drop procedure bug12713_dump_spvars;
|
||||
#
|
||||
# Bug#12713 Error in a stored function called from a SELECT doesn't
|
||||
# cause ROLLBACK of statem
|
||||
#
|
||||
# Verify that two-phase commit is not issued for read-only
|
||||
# transactions.
|
||||
#
|
||||
# Verify that two-phase commit is issued for read-write transactions,
|
||||
# even if the change is done inside a stored function called from
|
||||
# SELECT or SHOW statement.
|
||||
#
|
||||
set autocommit=0;
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
drop function if exists f1;
|
||||
drop procedure if exists p_verify_status_increment;
|
||||
set sql_mode=no_engine_substitution;
|
||||
create table t1 (a int unique);
|
||||
create table t2 (a int) engine=myisam;
|
||||
set sql_mode=default;
|
||||
#
|
||||
# An auxiliary procedure to track Handler_prepare and Handler_commit
|
||||
# statistics.
|
||||
#
|
||||
create procedure
|
||||
p_verify_status_increment(commit_inc_mixed int, prepare_inc_mixed int,
|
||||
commit_inc_row int, prepare_inc_row int)
|
||||
begin
|
||||
declare commit_inc int;
|
||||
declare prepare_inc int;
|
||||
declare old_commit_count int default ifnull(@commit_count, 0);
|
||||
declare old_prepare_count int default ifnull(@prepare_count, 0);
|
||||
declare c_res int;
|
||||
# Use a cursor to have just one access to I_S instead of 2, it is very slow
|
||||
# and amounts for over 90% of test CPU time
|
||||
declare c cursor for
|
||||
select variable_value
|
||||
from information_schema.session_status
|
||||
where variable_name='Handler_commit' or variable_name='Handler_prepare'
|
||||
order by variable_name;
|
||||
if @@global.binlog_format = 'ROW' then
|
||||
set commit_inc= commit_inc_row;
|
||||
set prepare_inc= prepare_inc_row;
|
||||
else
|
||||
set commit_inc= commit_inc_mixed;
|
||||
set prepare_inc= prepare_inc_mixed;
|
||||
end if;
|
||||
open c;
|
||||
fetch c into c_res;
|
||||
set @commit_count=c_res;
|
||||
fetch c into c_res;
|
||||
set @prepare_count=c_res;
|
||||
close c;
|
||||
if old_commit_count + commit_inc <> @commit_count then
|
||||
select concat("Expected commit increment: ", commit_inc,
|
||||
" actual: ", @commit_count - old_commit_count)
|
||||
as 'ERROR';
|
||||
elseif old_prepare_count + prepare_inc <> @prepare_count then
|
||||
select concat("Expected prepare increment: ", prepare_inc,
|
||||
" actual: ", @prepare_count - old_prepare_count)
|
||||
as 'ERROR';
|
||||
else
|
||||
select '' as 'SUCCESS';
|
||||
end if;
|
||||
end|
|
||||
# Reset Handler_commit and Handler_prepare counters
|
||||
flush status;
|
||||
#
|
||||
# 1. Read-only statement: SELECT
|
||||
#
|
||||
select * from t1;
|
||||
a
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 2. Read-write statement: INSERT, insert 1 row.
|
||||
#
|
||||
insert into t1 (a) values (1);
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 3. Read-write statement: UPDATE, update 1 row.
|
||||
#
|
||||
update t1 set a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 4. Read-write statement: UPDATE, update 0 rows, 1 row matches WHERE
|
||||
#
|
||||
# Note the wrong Handler_prepare/Handler_commit count is due to
|
||||
# Bug#29157 "UPDATE, changed rows incorrect" and
|
||||
# Bug#Bug #33846 UPDATE word:Wrong 'Changed rows' if InnoDB, unique
|
||||
# key and no rows qualify WHERE
|
||||
#
|
||||
update t1 set a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 5. Read-write statement: UPDATE, update 0 rows, 0 rows match WHERE
|
||||
#
|
||||
# In mixed replication mode, there is a read-only transaction
|
||||
# in InnoDB and also the statement is written to the binary log.
|
||||
# So we have two commits but no 2pc, since the first engine's
|
||||
# transaction is read-only.
|
||||
# In the row level replication mode, we only have the read-only
|
||||
# transaction in InnoDB and nothing is written to the binary log.
|
||||
#
|
||||
update t1 set a=3 where a=1;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 6. Read-write statement: DELETE, delete 0 rows.
|
||||
#
|
||||
delete from t1 where a=1;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 7. Read-write statement: DELETE, delete 1 row.
|
||||
#
|
||||
delete from t1 where a=2;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 8. Read-write statement: unqualified DELETE
|
||||
#
|
||||
# In statement or mixed replication mode, we call
|
||||
# handler::ha_delete_all_rows() and write statement text
|
||||
# to the binary log. This results in two read-write transactions.
|
||||
# In row level replication mode, we do not call
|
||||
# handler::ha_delete_all_rows(), but delete rows one by one.
|
||||
# Since there are no rows, nothing is written to the binary log.
|
||||
# Thus we have just one read-only transaction in InnoDB.
|
||||
delete from t1;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 9. Read-write statement: REPLACE, change 1 row.
|
||||
#
|
||||
replace t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 10. Read-write statement: REPLACE, change 0 rows.
|
||||
#
|
||||
replace t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 11. Read-write statement: IODKU, change 1 row.
|
||||
#
|
||||
insert t1 set a=1 on duplicate key update a=a+1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
select * from t1;
|
||||
a
|
||||
2
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 12. Read-write statement: IODKU, change 0 rows.
|
||||
#
|
||||
insert t1 set a=2 on duplicate key update a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 13. Read-write statement: INSERT IGNORE, change 0 rows.
|
||||
#
|
||||
insert ignore t1 set a=2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 14. Read-write statement: INSERT IGNORE, change 1 row.
|
||||
#
|
||||
insert ignore t1 set a=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 15. Read-write statement: UPDATE IGNORE, change 0 rows.
|
||||
#
|
||||
update ignore t1 set a=2 where a=1;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
#
|
||||
# Create a stored function that modifies a
|
||||
# non-transactional table. Demonstrate that changes in
|
||||
# non-transactional tables do not affect the two phase commit
|
||||
# algorithm.
|
||||
#
|
||||
create function f1() returns int
|
||||
begin
|
||||
insert t2 set a=2;
|
||||
return 2;
|
||||
end|
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
# 16. A function changes non-trans-table.
|
||||
#
|
||||
select f1();
|
||||
f1()
|
||||
2
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
# 17. Read-only statement, a function changes non-trans-table.
|
||||
#
|
||||
select f1() from t1;
|
||||
f1()
|
||||
2
|
||||
2
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 18. Read-write statement: UPDATE, change 0 (transactional) rows.
|
||||
#
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
3
|
||||
update t1 set a=2 where a=f1()+10;
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
5
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
#
|
||||
# Replace the non-transactional table with a temporary
|
||||
# transactional table. Demonstrate that a change to a temporary
|
||||
# transactional table does not provoke 2-phase commit, although
|
||||
# does trigger a commit and a binlog write (in statement mode).
|
||||
#
|
||||
drop table t2;
|
||||
set sql_mode=no_engine_substitution;
|
||||
create temporary table t2 (a int);
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
set sql_mode=default;
|
||||
# 19. A function changes temp-trans-table.
|
||||
#
|
||||
select f1();
|
||||
f1()
|
||||
2
|
||||
# Two commits because a binary log record is written
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 20. Read-only statement, a function changes non-trans-table.
|
||||
#
|
||||
select f1() from t1;
|
||||
f1()
|
||||
2
|
||||
2
|
||||
# Two commits because a binary log record is written
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 21. Read-write statement: UPDATE, change 0 (transactional) rows.
|
||||
#
|
||||
update t1 set a=2 where a=f1()+10;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 22. DDL: ALTER TEMPORARY TABLE, should not cause a 2pc
|
||||
#
|
||||
alter table t2 add column b int default 5;
|
||||
# A commit is done internally by ALTER.
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
# There is nothing left to commit
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
# 23. DDL: RENAME TEMPORARY TABLE, does not start a transaction
|
||||
|
||||
# No test because of Bug#8729 "rename table fails on temporary table"
|
||||
# 24. DDL: TRUNCATE TEMPORARY TABLE, does not start a transaction
|
||||
|
||||
truncate table t2;
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
# There is nothing left to commit
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
# 25. Read-write statement: unqualified DELETE
|
||||
|
||||
delete from t2;
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
# There is nothing left to commit
|
||||
call p_verify_status_increment(2, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 25. DDL: DROP TEMPORARY TABLE, does not start a transaction
|
||||
#
|
||||
drop temporary table t2;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
# 26. Verify that SET AUTOCOMMIT issues an implicit commit
|
||||
#
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
set autocommit=1;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
rollback;
|
||||
select a from t1 where a=3;
|
||||
a
|
||||
3
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
delete from t1 where a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
set autocommit=0;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# Sic: not actually changing the value of autocommit
|
||||
set autocommit=0;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
rollback;
|
||||
select a from t1 where a=3;
|
||||
a
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 27. Savepoint management
|
||||
#
|
||||
insert t1 set a=3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
savepoint a;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
insert t1 set a=4;
|
||||
# Sic: a bug. Binlog did not register itself this time.
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
release savepoint a;
|
||||
rollback;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
select a from t1 where a=3;
|
||||
a
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
# 28. Read-write statement: DO
|
||||
#
|
||||
create table t2 (a int);
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
do (select f1() from t1 where a=2);
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
# 29. Read-write statement: MULTI-DELETE
|
||||
#
|
||||
delete t1, t2 from t1 join t2 on (t1.a=t2.a) where t1.a=2;
|
||||
commit;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
SUCCESS
|
||||
|
||||
# 30. Read-write statement: INSERT-SELECT, MULTI-UPDATE, REPLACE-SELECT
|
||||
#
|
||||
insert into t2 select a from t1;
|
||||
commit;
|
||||
replace into t2 select a from t1;
|
||||
commit;
|
||||
call p_verify_status_increment(8, 8, 8, 8);
|
||||
SUCCESS
|
||||
|
||||
update t1, t2 set t1.a=4, t2.a=8 where t1.a=t2.a and t1.a=1;
|
||||
commit;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
SUCCESS
|
||||
|
||||
# 31. DDL: various DDL with transactional tables
|
||||
#
|
||||
# Sic: no table is created.
|
||||
create table if not exists t2 (a int) select 6 union select 7;
|
||||
Warnings:
|
||||
Note 1050 Table 't2' already exists
|
||||
# Sic: first commits the statement, and then the transaction.
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
SUCCESS
|
||||
|
||||
create table t3 select a from t2;
|
||||
call p_verify_status_increment(4, 4, 4, 4);
|
||||
SUCCESS
|
||||
|
||||
alter table t3 add column (b int);
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
alter table t3 rename t4;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
rename table t4 to t3;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
truncate table t3;
|
||||
call p_verify_status_increment(2, 2, 2, 2);
|
||||
SUCCESS
|
||||
|
||||
create view v1 as select * from t2;
|
||||
call p_verify_status_increment(1, 0, 1, 0);
|
||||
SUCCESS
|
||||
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
call p_verify_status_increment(3, 0, 3, 0);
|
||||
SUCCESS
|
||||
|
||||
# Sic: after this bug is fixed, CHECK leaves no pending transaction
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
check table t1, t2, t3;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
test.t2 check status OK
|
||||
test.t3 check status OK
|
||||
call p_verify_status_increment(6, 0, 6, 0);
|
||||
SUCCESS
|
||||
|
||||
commit;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
drop view v1;
|
||||
call p_verify_status_increment(0, 0, 0, 0);
|
||||
SUCCESS
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
drop table t1;
|
||||
drop procedure p_verify_status_increment;
|
||||
drop function f1;
|
@ -1511,7 +1511,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -1789,4 +1789,48 @@ DROP TABLE t2;
|
||||
|
||||
# -- End of test case for Bug#21380.
|
||||
|
||||
# --
|
||||
# -- Bug#18834: ALTER TABLE ADD INDEX on table with two timestamp fields
|
||||
# --
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t3;
|
||||
|
||||
CREATE TABLE t1(c1 TIMESTAMP, c2 TIMESTAMP);
|
||||
|
||||
SET sql_mode = NO_ZERO_DATE;
|
||||
|
||||
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0);
|
||||
ERROR 42000: Invalid default value for 'c2'
|
||||
|
||||
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP);
|
||||
ERROR 42000: Invalid default value for 'c2'
|
||||
|
||||
# -- Check that NULL column still can be created.
|
||||
CREATE TABLE t2(c1 TIMESTAMP NULL);
|
||||
|
||||
# -- Check ALTER TABLE.
|
||||
ALTER TABLE t1 ADD INDEX(c1);
|
||||
ERROR 42000: Invalid default value for 'c2'
|
||||
|
||||
# -- Check DATETIME.
|
||||
SET sql_mode = '';
|
||||
|
||||
CREATE TABLE t3(c1 DATETIME NOT NULL);
|
||||
INSERT INTO t3 VALUES (0);
|
||||
|
||||
SET sql_mode = TRADITIONAL;
|
||||
|
||||
ALTER TABLE t3 ADD INDEX(c1);
|
||||
ERROR 22007: Incorrect datetime value: '0000-00-00 00:00:00' for column 'c1' at row 1
|
||||
|
||||
# -- Cleanup.
|
||||
SET sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
|
||||
# -- End of Bug#18834.
|
||||
|
||||
End of 5.1 tests
|
||||
|
@ -519,7 +519,7 @@ explain extended SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select charset(_latin1'a') AS `charset('a')`,collation(_latin1'a') AS `collation('a')`,coercibility(_latin1'a') AS `coercibility('a')`,(_latin1'a' = _latin1'A') AS `'a'='A'`
|
||||
Note 1003 select charset('a') AS `charset('a')`,collation('a') AS `collation('a')`,coercibility('a') AS `coercibility('a')`,('a' = 'A') AS `'a'='A'`
|
||||
SET CHARACTER SET koi8r;
|
||||
SHOW VARIABLES LIKE 'collation_client';
|
||||
Variable_name Value
|
||||
|
@ -445,7 +445,7 @@ explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM",
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select makedate(1997,1) AS `makedate(1997,1)`,addtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'1 1.1.1.000002') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'1 1.1.1.000002') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff(_latin1'01.01.97 11:59:59.000001 PM',_latin1'31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date(_latin1'15-01-2001 12:59:59',_latin1'%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond(_latin1'1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
|
||||
Note 1003 select makedate(1997,1) AS `makedate(1997,1)`,addtime('31.12.97 11.59.59.999999 PM','1 1.1.1.000002') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime('31.12.97 11.59.59.999999 PM','1 1.1.1.000002') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff('01.01.97 11:59:59.000001 PM','31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date('15-01-2001 12:59:59','%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond('1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
|
||||
create table t1 (d date);
|
||||
insert into t1 values ('2004-07-14'),('2005-07-14');
|
||||
select date_format(d,"%d") from t1 order by 1;
|
||||
|
@ -16,25 +16,34 @@ FROM t1|
|
||||
|
||||
CREATE VIEW v2 AS SELECT _utf8'теÑ<C2B5>Ñ‚' as c1|
|
||||
|
||||
CREATE VIEW v3 AS SELECT _utf8'теÑ<C2B5>Ñ‚'|
|
||||
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _koi8r'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _utf8'теÑ<C2B5>Ñ‚' AS `c1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _utf8'теÑ<C2B5>Ñ‚' AS `ÔÅÓÔ` koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2
|
||||
FROM t1 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
NULL mysqltest1 v1 select 'ÔÅÓÔ' AS `c1`,`mysqltest1`.`t1`.`ËÏÌ` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 SELECT 'ÔÅÓÔ' as c1 NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
NULL mysqltest1 v2 select 'ÔÅÓÔ' AS `c1` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'ÔÅÓÔ' AS `ÔÅÓÔ` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
@ -45,6 +54,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
utf8_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
ÔÅÓÔ
|
||||
ÔÅÓÔ
|
||||
|
||||
|
||||
ALTER DATABASE mysqltest1 COLLATE cp866_general_ci|
|
||||
|
||||
@ -54,27 +67,35 @@ SET @@character_set_results= cp1251|
|
||||
SET @@collation_connection= cp1251_general_ci|
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
use mysqltest1|
|
||||
set names koi8r|
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _koi8r'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _utf8'теÑ<C2B5>Ñ‚' AS `c1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _utf8'теÑ<C2B5>Ñ‚' AS `ÔÅÓÔ` koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 SELECT 'ÔÅÓÔ' AS c1, ËÏÌ AS c2
|
||||
FROM t1 NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
NULL mysqltest1 v1 select 'ÔÅÓÔ' AS `c1`,`mysqltest1`.`t1`.`ËÏÌ` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 SELECT 'ÔÅÓÔ' as c1 NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
NULL mysqltest1 v2 select 'ÔÅÓÔ' AS `c1` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'ÔÅÓÔ' AS `ÔÅÓÔ` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
@ -85,6 +106,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
utf8_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
ÔÅÓÔ
|
||||
ÔÅÓÔ
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_koi8r.views.mysqltest1.sql
|
||||
|
||||
|
||||
@ -99,27 +124,36 @@ SET @@character_set_results= cp1251|
|
||||
SET @@collation_connection= cp1251_general_ci|
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
use mysqltest1|
|
||||
set names koi8r|
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _koi8r'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _utf8'теÑ<C2B5>Ñ‚' AS `c1` koi8r koi8r_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _utf8'теÑ<C2B5>Ñ‚' AS `ÔÅÓÔ` koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 select 'ÔÅÓÔ' AS `c1`,`t1`.`ËÏÌ` AS `c2` from `t1` NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
NULL mysqltest1 v1 select 'ÔÅÓÔ' AS `c1`,`mysqltest1`.`t1`.`ËÏÌ` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 select 'ÔÅÓÔ' AS `c1` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'ÔÅÓÔ' AS `ÔÅÓÔ` NONE NO root@localhost DEFINER koi8r koi8r_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
COLLATION(c1) COLLATION(c2)
|
||||
@ -129,6 +163,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
utf8_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
ÔÅÓÔ
|
||||
ÔÅÓÔ
|
||||
|
||||
---> connection: default
|
||||
use test|
|
||||
DROP DATABASE mysqltest1|
|
||||
|
@ -16,25 +16,34 @@ FROM t1|
|
||||
|
||||
CREATE VIEW v2 AS SELECT _koi8r'ÔÅÓÔ' as c1|
|
||||
|
||||
CREATE VIEW v3 AS SELECT _koi8r'ÔÅÓÔ'|
|
||||
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _utf8'тест' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'теÑ<C2B5>Ñ‚' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _koi8r'ÔÅÓÔ' AS `c1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _koi8r'ÔÅÓÔ' AS `теÑ<C2B5>Ñ‚` utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 SELECT 'тест' AS c1, кол AS c2
|
||||
FROM t1 NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
NULL mysqltest1 v1 select 'теÑ<C2B5>Ñ‚' AS `c1`,`mysqltest1`.`t1`.`кол` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 SELECT 'тест' as c1 NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
NULL mysqltest1 v2 select 'теÑ<C2B5>Ñ‚' AS `c1` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'теÑ<C2B5>Ñ‚' AS `теÑ<C2B5>Ñ‚` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
@ -45,6 +54,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
koi8r_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
|
||||
|
||||
ALTER DATABASE mysqltest1 COLLATE cp866_general_ci|
|
||||
|
||||
@ -54,27 +67,35 @@ SET @@character_set_results= cp1251|
|
||||
SET @@collation_connection= cp1251_general_ci|
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
use mysqltest1|
|
||||
set names utf8|
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _utf8'тест' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'теÑ<C2B5>Ñ‚' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _koi8r'ÔÅÓÔ' AS `c1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _koi8r'ÔÅÓÔ' AS `теÑ<C2B5>Ñ‚` utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 SELECT 'тест' AS c1, кол AS c2
|
||||
FROM t1 NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
NULL mysqltest1 v1 select 'теÑ<C2B5>Ñ‚' AS `c1`,`mysqltest1`.`t1`.`кол` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 SELECT 'тест' as c1 NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
NULL mysqltest1 v2 select 'теÑ<C2B5>Ñ‚' AS `c1` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'теÑ<C2B5>Ñ‚' AS `теÑ<C2B5>Ñ‚` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
@ -85,6 +106,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
koi8r_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_utf8views.mysqltest1.sql
|
||||
|
||||
|
||||
@ -99,27 +124,36 @@ SET @@character_set_results= cp1251|
|
||||
SET @@collation_connection= cp1251_general_ci|
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
use mysqltest1|
|
||||
set names utf8|
|
||||
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _utf8'тест' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'теÑ<C2B5>Ñ‚' AS `c1`,`t1`.`кол` AS `c2` from `t1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
View Create View character_set_client collation_connection
|
||||
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select _koi8r'ÔÅÓÔ' AS `c1` utf8 utf8_general_ci
|
||||
|
||||
SHOW CREATE VIEW v3|
|
||||
View Create View character_set_client collation_connection
|
||||
v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select _koi8r'ÔÅÓÔ' AS `теÑ<C2B5>Ñ‚` utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v1 select 'тест' AS `c1`,`t1`.`кол` AS `c2` from `t1` NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
NULL mysqltest1 v1 select 'теÑ<EFBFBD>Ñ‚' AS `c1`,`mysqltest1`.`t1`.`кол` AS `c2` from `mysqltest1`.`t1` NONE YES root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v2 select 'теÑ<C2B5>Ñ‚' AS `c1` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v3'|
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL mysqltest1 v3 select 'теÑ<C2B5>Ñ‚' AS `теÑ<C2B5>Ñ‚` NONE NO root@localhost DEFINER utf8 utf8_general_ci
|
||||
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
COLLATION(c1) COLLATION(c2)
|
||||
@ -129,6 +163,10 @@ SELECT COLLATION(c1) FROM v2|
|
||||
COLLATION(c1)
|
||||
koi8r_general_ci
|
||||
|
||||
SELECT * FROM v3|
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
теÑ<EFBFBD>Ñ‚
|
||||
|
||||
---> connection: default
|
||||
use test|
|
||||
DROP DATABASE mysqltest1|
|
||||
|
@ -17,7 +17,7 @@ explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 fulltext a a 0 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against (_latin1'collections'))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against ('collections'))
|
||||
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
||||
a b
|
||||
Full-text indexes are called collections
|
||||
@ -87,7 +87,7 @@ explain extended select * from t1 where MATCH(a,b) AGAINST("support -collections
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 fulltext a a 0 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against (_latin1'support -collections' in boolean mode))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against ('support -collections' in boolean mode))
|
||||
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
|
||||
a b
|
||||
MySQL has now support for full-text search
|
||||
|
@ -91,7 +91,7 @@ explain extended select password('idkfa '), old_password('idkfa');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select password(_latin1'idkfa ') AS `password('idkfa ')`,old_password(_latin1'idkfa') AS `old_password('idkfa')`
|
||||
Note 1003 select password('idkfa ') AS `password('idkfa ')`,old_password('idkfa') AS `old_password('idkfa')`
|
||||
select encrypt('1234','_.');
|
||||
encrypt('1234','_.')
|
||||
#
|
||||
|
@ -182,4 +182,4 @@ explain extended select des_decrypt(des_encrypt("hello",4),'password2'), des_dec
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select des_decrypt(des_encrypt(_latin1'hello',4),_latin1'password2') AS `des_decrypt(des_encrypt("hello",4),'password2')`,des_decrypt(des_encrypt(_latin1'hello',_latin1'hidden')) AS `des_decrypt(des_encrypt("hello","hidden"))`
|
||||
Note 1003 select des_decrypt(des_encrypt('hello',4),'password2') AS `des_decrypt(des_encrypt("hello",4),'password2')`,des_decrypt(des_encrypt('hello','hidden')) AS `des_decrypt(des_encrypt("hello","hidden"))`
|
||||
|
@ -43,7 +43,7 @@ explain extended select if(u=1,st,binary st) s from t1 where st like "%a%" order
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 100.00 Using where; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select if((`test`.`t1`.`u` = 1),`test`.`t1`.`st`,cast(`test`.`t1`.`st` as char charset binary)) AS `s` from `test`.`t1` where (`test`.`t1`.`st` like _latin1'%a%') order by if((`test`.`t1`.`u` = 1),`test`.`t1`.`st`,cast(`test`.`t1`.`st` as char charset binary))
|
||||
Note 1003 select if((`test`.`t1`.`u` = 1),`test`.`t1`.`st`,cast(`test`.`t1`.`st` as char charset binary)) AS `s` from `test`.`t1` where (`test`.`t1`.`st` like '%a%') order by if((`test`.`t1`.`u` = 1),`test`.`t1`.`st`,cast(`test`.`t1`.`st` as char charset binary))
|
||||
select nullif(u, 1) from t1;
|
||||
nullif(u, 1)
|
||||
NULL
|
||||
|
@ -146,7 +146,7 @@ explain extended select * from t1 where 'a' in (a,b,c collate latin1_bin);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (_latin1'a' in (`test`.`t1`.`a`,`test`.`t1`.`b`,(`test`.`t1`.`c` collate latin1_bin)))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ('a' in (`test`.`t1`.`a`,`test`.`t1`.`b`,(`test`.`t1`.`c` collate latin1_bin)))
|
||||
drop table t1;
|
||||
set names utf8;
|
||||
create table t1 (a char(10) character set utf8 not null);
|
||||
|
@ -5,12 +5,12 @@ explain extended select * from t1 where a like 'abc%';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index a a 13 NULL 5 20.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` like _latin1'abc%')
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` like 'abc%')
|
||||
explain extended select * from t1 where a like concat('abc','%');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index a a 13 NULL 5 20.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` like concat(_latin1'abc',_latin1'%'))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` like concat('abc','%'))
|
||||
select * from t1 where a like "abc%";
|
||||
a
|
||||
abc
|
||||
|
@ -52,7 +52,7 @@ explain extended select * from t1 where xxx regexp('is a test of some long text
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1 100.00
|
||||
Warnings:
|
||||
Note 1003 select 'this is a test of some long text to see what happens' AS `xxx` from `test`.`t1` where ('this is a test of some long text to see what happens' regexp _latin1'is a test of some long text to')
|
||||
Note 1003 select 'this is a test of some long text to see what happens' AS `xxx` from `test`.`t1` where ('this is a test of some long text to see what happens' regexp 'is a test of some long text to')
|
||||
select * from t1 where xxx regexp('is a test of some long text to ');
|
||||
xxx
|
||||
this is a test of some long text to see what happens
|
||||
|
@ -5,7 +5,7 @@ explain extended select INTERVAL(55,10,20,30,40,50,60,70,80,90,100),interval(3,1
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select interval((55,10,20,30,40,50,60,70,80,90,100)) AS `INTERVAL(55,10,20,30,40,50,60,70,80,90,100)`,interval((3,1,(1 + 1),(((1 + 1) + 1) + 1))) AS `interval(3,1,1+1,1+1+1+1)`,field(_latin1'IBM',_latin1'NCA',_latin1'ICL',_latin1'SUN',_latin1'IBM',_latin1'DIGITAL') AS `field("IBM","NCA","ICL","SUN","IBM","DIGITAL")`,field(_latin1'A',_latin1'B',_latin1'C') AS `field("A","B","C")`,elt(2,_latin1'ONE',_latin1'TWO',_latin1'THREE') AS `elt(2,"ONE","TWO","THREE")`,interval((0,1,2,3,4)) AS `interval(0,1,2,3,4)`,(elt(1,1,2,3) | 0) AS `elt(1,1,2,3)|0`,(elt(1,1.1,1.2,1.3) + 0) AS `elt(1,1.1,1.2,1.3)+0`
|
||||
Note 1003 select interval((55,10,20,30,40,50,60,70,80,90,100)) AS `INTERVAL(55,10,20,30,40,50,60,70,80,90,100)`,interval((3,1,(1 + 1),(((1 + 1) + 1) + 1))) AS `interval(3,1,1+1,1+1+1+1)`,field('IBM','NCA','ICL','SUN','IBM','DIGITAL') AS `field("IBM","NCA","ICL","SUN","IBM","DIGITAL")`,field('A','B','C') AS `field("A","B","C")`,elt(2,'ONE','TWO','THREE') AS `elt(2,"ONE","TWO","THREE")`,interval((0,1,2,3,4)) AS `interval(0,1,2,3,4)`,(elt(1,1,2,3) | 0) AS `elt(1,1,2,3)|0`,(elt(1,1.1,1.2,1.3) + 0) AS `elt(1,1.1,1.2,1.3)+0`
|
||||
SELECT INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56);
|
||||
INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56)
|
||||
1
|
||||
|
@ -817,57 +817,57 @@ explain extended select md5('hello');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select md5(_latin1'hello') AS `md5('hello')`
|
||||
Note 1003 select md5('hello') AS `md5('hello')`
|
||||
explain extended select sha('abc');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sha(_latin1'abc') AS `sha('abc')`
|
||||
Note 1003 select sha('abc') AS `sha('abc')`
|
||||
explain extended select sha1('abc');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select sha(_latin1'abc') AS `sha1('abc')`
|
||||
Note 1003 select sha('abc') AS `sha1('abc')`
|
||||
explain extended select soundex('');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select soundex(_latin1'') AS `soundex('')`
|
||||
Note 1003 select soundex('') AS `soundex('')`
|
||||
explain extended select 'mood' sounds like 'mud';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select (soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`
|
||||
Note 1003 select (soundex('mood') = soundex('mud')) AS `'mood' sounds like 'mud'`
|
||||
explain extended select aes_decrypt(aes_encrypt('abc','1'),'1');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`
|
||||
Note 1003 select aes_decrypt(aes_encrypt('abc','1'),'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`
|
||||
explain extended select concat('*',space(5),'*');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`
|
||||
Note 1003 select concat('*',repeat(' ',5),'*') AS `concat('*',space(5),'*')`
|
||||
explain extended select reverse('abc');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select reverse(_latin1'abc') AS `reverse('abc')`
|
||||
Note 1003 select reverse('abc') AS `reverse('abc')`
|
||||
explain extended select rpad('a',4,'1');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`
|
||||
Note 1003 select rpad('a',4,'1') AS `rpad('a',4,'1')`
|
||||
explain extended select lpad('a',4,'1');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`
|
||||
Note 1003 select lpad('a',4,'1') AS `lpad('a',4,'1')`
|
||||
explain extended select concat_ws(',','',NULL,'a');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`
|
||||
Note 1003 select concat_ws(',','',NULL,'a') AS `concat_ws(',','',NULL,'a')`
|
||||
explain extended select make_set(255,_latin2'a', _latin2'b', _latin2'c');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -882,7 +882,7 @@ explain extended select locate("a","b",2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`
|
||||
Note 1003 select locate('a','b',2) AS `locate("a","b",2)`
|
||||
explain extended select format(130,10);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -907,7 +907,7 @@ explain extended select binary 'HE';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select cast(_latin1'HE' as char charset binary) AS `binary 'HE'`
|
||||
Note 1003 select cast('HE' as char charset binary) AS `binary 'HE'`
|
||||
explain extended select export_set(255,_latin2'y', _latin2'n', _latin2' ');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -917,7 +917,7 @@ explain extended select FIELD('b' COLLATE latin1_bin,'A','B');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select field((_latin1'b' collate latin1_bin),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`
|
||||
Note 1003 select field(('b' collate latin1_bin),'A','B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`
|
||||
explain extended select FIND_IN_SET(_latin1'B', _latin1'a,b,c,d');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -937,37 +937,37 @@ explain extended select length('\n\t\r\b\0\_\%\\');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`
|
||||
Note 1003 select length('\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`
|
||||
explain extended select bit_length('\n\t\r\b\0\_\%\\');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`
|
||||
Note 1003 select bit_length('\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`
|
||||
explain extended select bit_length('\n\t\r\b\0\_\%\\');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`
|
||||
Note 1003 select bit_length('\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`
|
||||
explain extended select concat('monty',' was here ','again');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`
|
||||
Note 1003 select concat('monty',' was here ','again') AS `concat('monty',' was here ','again')`
|
||||
explain extended select length('hello');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select length(_latin1'hello') AS `length('hello')`
|
||||
Note 1003 select length('hello') AS `length('hello')`
|
||||
explain extended select char(ascii('h'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select char(ascii(_latin1'h')) AS `char(ascii('h'))`
|
||||
Note 1003 select char(ascii('h')) AS `char(ascii('h'))`
|
||||
explain extended select ord('h');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select ord(_latin1'h') AS `ord('h')`
|
||||
Note 1003 select ord('h') AS `ord('h')`
|
||||
explain extended select quote(1/0);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -977,17 +977,17 @@ explain extended select crc32("123");
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select crc32(_latin1'123') AS `crc32("123")`
|
||||
Note 1003 select crc32('123') AS `crc32("123")`
|
||||
explain extended select replace('aaaa','a','b');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`
|
||||
Note 1003 select replace('aaaa','a','b') AS `replace('aaaa','a','b')`
|
||||
explain extended select insert('txs',2,1,'hi');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`
|
||||
Note 1003 select insert('txs',2,1,'hi') AS `insert('txs',2,1,'hi')`
|
||||
explain extended select left(_latin2'a',1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -1012,12 +1012,12 @@ explain extended select SUBSTR('abcdefg',3,2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`
|
||||
Note 1003 select substr('abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`
|
||||
explain extended select substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select substring_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`
|
||||
Note 1003 select substring_index('1abcd;2abcd;3abcd;4abcd',';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`
|
||||
explain extended select trim(_latin2' a ');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
@ -1037,7 +1037,7 @@ explain extended select decode(encode(repeat("a",100000),"monty"),"monty");
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select decode(encode(repeat(_latin1'a',100000),_latin1'monty'),_latin1'monty') AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
||||
Note 1003 select decode(encode(repeat('a',100000),'monty'),'monty') AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
||||
SELECT lpad(12345, 5, "#");
|
||||
lpad(12345, 5, "#")
|
||||
12345
|
||||
@ -1282,39 +1282,39 @@ EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(`test`.`t1`.`s`) > _latin1'ab')
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(`test`.`t1`.`s`) > 'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM('y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both 'y' from `test`.`t1`.`s`) > 'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(LEADING 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(leading _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(leading 'y' from `test`.`t1`.`s`) > 'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(TRAILING 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(trailing _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(trailing 'y' from `test`.`t1`.`s`) > 'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both 'y' from `test`.`t1`.`s`) > 'ab')
|
||||
DROP TABLE t1;
|
||||
create table t1(f1 varchar(4));
|
||||
explain extended select encode(f1,'zxcv') as 'enc' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
Warnings:
|
||||
Note 1003 select encode('',_latin1'zxcv') AS `enc` from `test`.`t1`
|
||||
Note 1003 select encode('','zxcv') AS `enc` from `test`.`t1`
|
||||
explain extended select decode(f1,'zxcv') as 'enc' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
Warnings:
|
||||
Note 1003 select decode('',_latin1'zxcv') AS `enc` from `test`.`t1`
|
||||
Note 1003 select decode('','zxcv') AS `enc` from `test`.`t1`
|
||||
drop table t1;
|
||||
create table t1 (a bigint not null)engine=myisam;
|
||||
insert into t1 set a = 1024*1024*1024*4;
|
||||
@ -1390,7 +1390,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 12 const 1 100.00 Using index
|
||||
1 SIMPLE t1 ref code code 13 const 3 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`code` AS `code`,'a12' AS `id` from `test`.`t1` join `test`.`t2` where ((`test`.`t1`.`code` = _latin1'a12') and (length(`test`.`t1`.`code`) = 5))
|
||||
Note 1003 select `test`.`t1`.`code` AS `code`,'a12' AS `id` from `test`.`t1` join `test`.`t2` where ((`test`.`t1`.`code` = 'a12') and (length(`test`.`t1`.`code`) = 5))
|
||||
DROP TABLE t1,t2;
|
||||
select encode(NULL, NULL);
|
||||
encode(NULL, NULL)
|
||||
|
@ -839,7 +839,7 @@ explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_d
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(curdate()) - weekday(now())) AS `weekday(curdate())-weekday(now())`,dayname(_latin1'1962-03-03') AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
||||
Note 1003 select period_add('9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,'9404') AS `period_diff(199505,"9404")`,from_days(to_days('960101')) AS `from_days(to_days("960101"))`,dayofmonth('1997-01-02') AS `dayofmonth("1997-01-02")`,month('1997-01-02') AS `month("1997-01-02")`,monthname('1972-03-04') AS `monthname("1972-03-04")`,dayofyear('0000-00-00') AS `dayofyear("0000-00-00")`,hour('1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute('23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week('1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek('2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year('98-02-03') AS `year("98-02-03")`,(weekday(curdate()) - weekday(now())) AS `weekday(curdate())-weekday(now())`,dayname('1962-03-03') AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec('0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format('1997-01-02 03:04:05','%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp('1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,('1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,('1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,('1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from '1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,('1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
||||
SET @TMP='2007-08-01 12:22:49';
|
||||
CREATE TABLE t1 (d DATETIME);
|
||||
INSERT INTO t1 VALUES ('2007-08-01 12:22:59');
|
||||
@ -1069,7 +1069,7 @@ timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select timestampdiff(WEEK,_latin1'2001-02-01',_latin1'2001-05-01') AS `a1`,timestampdiff(SECOND_FRAC,_latin1'2001-02-01 12:59:59.120000',_latin1'2001-05-01 12:58:58.119999') AS `a2`
|
||||
Note 1003 select timestampdiff(WEEK,'2001-02-01','2001-05-01') AS `a1`,timestampdiff(SECOND_FRAC,'2001-02-01 12:59:59.120000','2001-05-01 12:58:58.119999') AS `a2`
|
||||
select time_format('100:00:00', '%H %k %h %I %l');
|
||||
time_format('100:00:00', '%H %k %h %I %l')
|
||||
100 100 04 04 4
|
||||
|
@ -439,12 +439,12 @@ explain extended SELECT AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)'))))`
|
||||
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext('POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)'))))`
|
||||
explain extended SELECT AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))))`
|
||||
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext('POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))))`
|
||||
SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
|
||||
SRID(GeomFromText('LineString(1 1,2 2)',101))
|
||||
101
|
||||
@ -452,7 +452,7 @@ explain extended SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select srid(geometryfromtext(_latin1'LineString(1 1,2 2)',101)) AS `SRID(GeomFromText('LineString(1 1,2 2)',101))`
|
||||
Note 1003 select srid(geometryfromtext('LineString(1 1,2 2)',101)) AS `SRID(GeomFromText('LineString(1 1,2 2)',101))`
|
||||
explain extended select issimple(MultiPoint(Point(3, 6), Point(4, 10))), issimple(Point(3, 6));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
|
@ -1562,7 +1562,7 @@ explain extended select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index NULL idx_t1_1 163 NULL 128 50.78 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`c` = _latin1'i121') and (`test`.`t1`.`b` = _latin1'a') and (`test`.`t1`.`a2` >= _latin1'b'))
|
||||
Note 1003 select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`c` = 'i121') and (`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
|
||||
explain select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 147 NULL 14 Using where; Using index for group-by
|
||||
@ -1579,7 +1579,7 @@ explain extended select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 index NULL idx_t2_1 163 NULL 164 50.61 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = _latin1'i121') and (`test`.`t2`.`b` = _latin1'a') and (`test`.`t2`.`a2` >= _latin1'b'))
|
||||
Note 1003 select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = 'i121') and (`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b'))
|
||||
explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range idx_t2_0,idx_t2_1,idx_t2_2 idx_t2_1 146 NULL # Using where; Using index for group-by
|
||||
@ -1808,7 +1808,7 @@ explain extended select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`) AS `count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`b` = _latin1'c') and (`test`.`t1`.`a1` > _latin1'a') and (`test`.`t1`.`a2` > _latin1'a'))
|
||||
Note 1003 select count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`) AS `count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a'))
|
||||
explain select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL idx_t1_2 147 NULL 128 Using where; Using index
|
||||
@ -1816,7 +1816,7 @@ explain extended select ord(a1) + count(distinct a1,a2,b) from t1 where (a1 > 'a
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select (ord(`test`.`t1`.`a1`) + count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`)) AS `ord(a1) + count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`a1` > _latin1'a') and (`test`.`t1`.`a2` > _latin1'a'))
|
||||
Note 1003 select (ord(`test`.`t1`.`a1`) + count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`)) AS `ord(a1) + count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a'))
|
||||
select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');
|
||||
count(distinct a1,a2,b)
|
||||
4
|
||||
@ -1924,19 +1924,19 @@ where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a1
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 130 NULL 76 85.53 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,min(`test`.`t1`.`b`) AS `min(b)`,max(`test`.`t1`.`b`) AS `max(b)` from `test`.`t1` where (((`test`.`t1`.`a1` = _latin1'b') or (`test`.`t1`.`a1` = _latin1'd') or (`test`.`t1`.`a1` = _latin1'a') or (`test`.`t1`.`a1` = _latin1'c')) and (`test`.`t1`.`a2` > _latin1'a') and (`test`.`t1`.`c` > _latin1'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,min(`test`.`t1`.`b`) AS `min(b)`,max(`test`.`t1`.`b`) AS `max(b)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`c` > 'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
|
||||
explain extended select a1,a2,b,min(c),max(c) from t1
|
||||
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL idx_t1_0,idx_t1_1,idx_t1_2 NULL NULL NULL 128 50.78 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` = _latin1'b') or (`test`.`t1`.`a1` = _latin1'd') or (`test`.`t1`.`a1` = _latin1'a') or (`test`.`t1`.`a1` = _latin1'c')) and (`test`.`t1`.`a2` > _latin1'a') and (`test`.`t1`.`d` > _latin1'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`d` > 'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
explain extended select a1,a2,b,c from t1
|
||||
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b,c;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL idx_t1_0,idx_t1_1,idx_t1_2 NULL NULL NULL 128 50.78 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (((`test`.`t1`.`a1` = _latin1'b') or (`test`.`t1`.`a1` = _latin1'd') or (`test`.`t1`.`a1` = _latin1'a') or (`test`.`t1`.`a1` = _latin1'c')) and (`test`.`t1`.`a2` > _latin1'a') and (`test`.`t1`.`d` > _latin1'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`,`test`.`t1`.`c`
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`d` > 'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`,`test`.`t1`.`c`
|
||||
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b < 'b') group by a1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL idx_t2_1 163 NULL 164 Using where; Using index
|
||||
@ -1944,7 +1944,7 @@ explain extended select a1,a2,b from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a'
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 range idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_1 130 NULL 76 85.53 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (((`test`.`t1`.`a1` = _latin1'b') or (`test`.`t1`.`a1` = _latin1'd') or (`test`.`t1`.`a1` = _latin1'a') or (`test`.`t1`.`a1` = _latin1'c')) and (`test`.`t1`.`a2` > _latin1'a') and (`test`.`t1`.`c` > _latin1'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`c` > 'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
explain select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index NULL idx_t2_1 163 NULL 164 Using where; Using index
|
||||
@ -1968,12 +1968,12 @@ explain extended select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,count(`test`.`t1`.`a2`) AS `count(a2)` from `test`.`t1` where (`test`.`t1`.`a1` > _latin1'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,count(`test`.`t1`.`a2`) AS `count(a2)` from `test`.`t1` where (`test`.`t1`.`a1` > 'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
explain extended select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index idx_t1_0,idx_t1_1,idx_t1_2 idx_t1_2 147 NULL 128 75.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select sum(ord(`test`.`t1`.`a1`)) AS `sum(ord(a1))` from `test`.`t1` where (`test`.`t1`.`a1` > _latin1'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
Note 1003 select sum(ord(`test`.`t1`.`a1`)) AS `sum(ord(a1))` from `test`.`t1` where (`test`.`t1`.`a1` > 'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
|
||||
explain select distinct(a1) from t1 where ord(a2) = 98;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index NULL idx_t1_2 147 NULL 128 Using where; Using index
|
||||
|
@ -387,15 +387,11 @@ show keys from v4;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
select * from information_schema.views where TABLE_NAME like "v%";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL test v0 select schema_name from information_schema.schemata NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v1 select table_name from information_schema.tables
|
||||
where table_name="v1" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select column_name from information_schema.columns
|
||||
where table_name="v2" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v3 select CHARACTER_SET_NAME from information_schema.character_sets
|
||||
where CHARACTER_SET_NAME like "latin1%" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v4 select COLLATION_NAME from information_schema.collations
|
||||
where COLLATION_NAME like "latin1%" NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v0 select `schemata`.`SCHEMA_NAME` AS `c` from `information_schema`.`schemata` NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v1 select `tables`.`TABLE_NAME` AS `c` from `information_schema`.`tables` where (`tables`.`TABLE_NAME` = 'v1') NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select `columns`.`COLUMN_NAME` AS `c` from `information_schema`.`columns` where (`columns`.`TABLE_NAME` = 'v2') NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v3 select `character_sets`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`character_sets` where (`character_sets`.`CHARACTER_SET_NAME` like 'latin1%') NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v4 select `collations`.`COLLATION_NAME` AS `c` from `information_schema`.`collations` where (`collations`.`COLLATION_NAME` like 'latin1%') NONE NO root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
drop view v0, v1, v2, v3, v4;
|
||||
create table t1 (a int);
|
||||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||||
@ -488,9 +484,9 @@ create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
select * from information_schema.views;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL test v1 select a from t1 with check option CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select a from t1 WITH LOCAL CHECK OPTION LOCAL YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v3 select a from t1 WITH CASCADED CHECK OPTION CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v1 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v3 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
grant select (a) on test.t1 to joe@localhost with grant option;
|
||||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
@ -1175,7 +1171,7 @@ select * from information_schema.views
|
||||
where table_name='v1' or table_name='v2';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL test v1 NONE YES root@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select 1 NONE NO mysqltest_1@localhost DEFINER latin1 latin1_swedish_ci
|
||||
NULL test v2 select 1 AS `1` NONE NO mysqltest_1@localhost DEFINER latin1 latin1_swedish_ci
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
drop user mysqltest_1@localhost;
|
||||
@ -1559,8 +1555,7 @@ AS SELECT *
|
||||
FROM INFORMATION_SCHEMA.TABLES;
|
||||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS where TABLE_NAME = 'v1';
|
||||
VIEW_DEFINITION
|
||||
SELECT *
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
select `TABLES`.`TABLE_CATALOG` AS `TABLE_CATALOG`,`TABLES`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`,`TABLES`.`TABLE_NAME` AS `TABLE_NAME`,`TABLES`.`TABLE_TYPE` AS `TABLE_TYPE`,`TABLES`.`ENGINE` AS `ENGINE`,`TABLES`.`VERSION` AS `VERSION`,`TABLES`.`ROW_FORMAT` AS `ROW_FORMAT`,`TABLES`.`TABLE_ROWS` AS `TABLE_ROWS`,`TABLES`.`AVG_ROW_LENGTH` AS `AVG_ROW_LENGTH`,`TABLES`.`DATA_LENGTH` AS `DATA_LENGTH`,`TABLES`.`MAX_DATA_LENGTH` AS `MAX_DATA_LENGTH`,`TABLES`.`INDEX_LENGTH` AS `INDEX_LENGTH`,`TABLES`.`DATA_FREE` AS `DATA_FREE`,`TABLES`.`AUTO_INCREMENT` AS `AUTO_INCREMENT`,`TABLES`.`CREATE_TIME` AS `CREATE_TIME`,`TABLES`.`UPDATE_TIME` AS `UPDATE_TIME`,`TABLES`.`CHECK_TIME` AS `CHECK_TIME`,`TABLES`.`TABLE_COLLATION` AS `TABLE_COLLATION`,`TABLES`.`CHECKSUM` AS `CHECKSUM`,`TABLES`.`CREATE_OPTIONS` AS `CREATE_OPTIONS`,`TABLES`.`TABLE_COMMENT` AS `TABLE_COMMENT` from `INFORMATION_SCHEMA`.`TABLES`
|
||||
DROP VIEW v1;
|
||||
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
|
||||
WHERE SCHEMA_NAME ='information_schema';
|
||||
|
@ -210,7 +210,7 @@ v2
|
||||
select view_definition from information_schema.views a
|
||||
where a.table_name = 'v2';
|
||||
view_definition
|
||||
select f1 from testdb_1.v1
|
||||
select `v1`.`f1` AS `f1` from `testdb_1`.`v1`
|
||||
select view_definition from information_schema.views a
|
||||
where a.table_name = 'testdb_1.v1';
|
||||
view_definition
|
||||
|
@ -1634,4 +1634,17 @@ vid tid idx name type
|
||||
3 1 2 c1 NULL
|
||||
3 1 1 pk NULL
|
||||
DROP TABLE t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
CREATE TABLE t1(id INT PRIMARY KEY)
|
||||
ENGINE=innodb;
|
||||
CREATE TABLE t2(
|
||||
t1_id INT PRIMARY KEY,
|
||||
CONSTRAINT fk1 FOREIGN KEY (t1_id) REFERENCES t1(id))
|
||||
ENGINE=innodb;
|
||||
|
||||
ALTER TABLE t1 CHANGE id id2 INT;
|
||||
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
@ -1,3 +1,4 @@
|
||||
set @@global.concurrent_insert= 0;
|
||||
drop table if exists t1, t2, t3;
|
||||
create table t1 (kill_id int);
|
||||
insert into t1 values(connection_id());
|
||||
|
@ -2011,7 +2011,7 @@ SET character_set_client = @saved_cs_client;
|
||||
/*!50001 SET collation_connection = latin1_swedish_ci */;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like 'a%') */
|
||||
/*!50002 WITH CASCADED CHECK OPTION */;
|
||||
/*!50001 SET character_set_client = @saved_cs_client */;
|
||||
/*!50001 SET character_set_results = @saved_cs_results */;
|
||||
@ -2182,7 +2182,7 @@ SET character_set_client = @saved_cs_client;
|
||||
/*!50001 SET collation_connection = latin1_swedish_ci */;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like 'a%') */
|
||||
/*!50002 WITH CASCADED CHECK OPTION */;
|
||||
/*!50001 SET character_set_client = @saved_cs_client */;
|
||||
/*!50001 SET character_set_results = @saved_cs_results */;
|
||||
@ -4230,6 +4230,40 @@ LOCK TABLES `test` WRITE;
|
||||
UNLOCK TABLES;
|
||||
drop database `test-database`;
|
||||
use test;
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#30217: Views: changes in metadata behaviour between 5.0 and 5.1.
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
DROP DATABASE IF EXISTS mysqldump_test_db;
|
||||
CREATE DATABASE mysqldump_test_db;
|
||||
use mysqldump_test_db;
|
||||
|
||||
CREATE VIEW v1(x, y) AS SELECT 'a', 'a';
|
||||
|
||||
SELECT view_definition
|
||||
FROM INFORMATION_SCHEMA.VIEWS
|
||||
WHERE table_schema = 'mysqldump_test_db' AND table_name = 'v1';
|
||||
view_definition
|
||||
select 'a' AS `x`,'a' AS `y`
|
||||
|
||||
---> Dumping mysqldump_test_db to bug30217.sql
|
||||
|
||||
DROP DATABASE mysqldump_test_db;
|
||||
use test;
|
||||
|
||||
---> Restoring mysqldump_test_db...
|
||||
|
||||
SELECT view_definition
|
||||
FROM INFORMATION_SCHEMA.VIEWS
|
||||
WHERE table_schema = 'mysqldump_test_db' AND table_name = 'v1';
|
||||
view_definition
|
||||
select 'a' AS `x`,'a' AS `y`
|
||||
|
||||
DROP DATABASE mysqldump_test_db;
|
||||
|
||||
# -- End of test case for Bug#32538.
|
||||
|
||||
#
|
||||
# End of 5.1 tests
|
||||
#
|
||||
|
@ -1505,7 +1505,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -387,5 +387,5 @@ explain extended select a, not(not(a)), not(a <= 2 and not(a)), not(a not like "
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index NULL a 5 NULL 5 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,(`test`.`t1`.`a` <> 0) AS `not(not(a))`,((`test`.`t1`.`a` > 2) or `test`.`t1`.`a`) AS `not(a <= 2 and not(a))`,(`test`.`t1`.`a` like _latin1'1') AS `not(a not like "1")`,(`test`.`t1`.`a` in (1,2)) AS `not (a not in (1,2))`,(`test`.`t1`.`a` = 2) AS `not(a != 2)` from `test`.`t1` where `test`.`t1`.`a` having `test`.`t1`.`a`
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,(`test`.`t1`.`a` <> 0) AS `not(not(a))`,((`test`.`t1`.`a` > 2) or `test`.`t1`.`a`) AS `not(a <= 2 and not(a))`,(`test`.`t1`.`a` like '1') AS `not(a not like "1")`,(`test`.`t1`.`a` in (1,2)) AS `not (a not in (1,2))`,(`test`.`t1`.`a` = 2) AS `not(a != 2)` from `test`.`t1` where `test`.`t1`.`a` having `test`.`t1`.`a`
|
||||
drop table t1;
|
||||
|
@ -3,3 +3,10 @@ execute stmt1;
|
||||
ID USER HOST DB COMMAND TIME STATE INFO
|
||||
number root localhost test Query time executing SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND!='Daemon'
|
||||
deallocate prepare stmt1;
|
||||
FLUSH STATUS;
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
Variable_name Value
|
||||
Com_select 102
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
Variable_name Value
|
||||
Com_select 102
|
||||
|
@ -6,7 +6,7 @@ explain extended select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnu
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select NULL AS `NULL`,NULL AS `NULL`,isnull(NULL) AS `isnull(null)`,isnull((1 / 0)) AS `isnull(1/0)`,isnull(((1 / 0) = NULL)) AS `isnull(1/0 = null)`,ifnull(NULL,1) AS `ifnull(null,1)`,ifnull(NULL,_latin1'TRUE') AS `ifnull(null,"TRUE")`,ifnull(_latin1'TRUE',_latin1'ERROR') AS `ifnull("TRUE","ERROR")`,isnull((1 / 0)) AS `1/0 is null`,(1 is not null) AS `1 is not null`
|
||||
Note 1003 select NULL AS `NULL`,NULL AS `NULL`,isnull(NULL) AS `isnull(null)`,isnull((1 / 0)) AS `isnull(1/0)`,isnull(((1 / 0) = NULL)) AS `isnull(1/0 = null)`,ifnull(NULL,1) AS `ifnull(null,1)`,ifnull(NULL,'TRUE') AS `ifnull(null,"TRUE")`,ifnull('TRUE','ERROR') AS `ifnull("TRUE","ERROR")`,isnull((1 / 0)) AS `1/0 is null`,(1 is not null) AS `1 is not null`
|
||||
select 1 | NULL,1 & NULL,1+NULL,1-NULL;
|
||||
1 | NULL 1 & NULL 1+NULL 1-NULL
|
||||
NULL NULL NULL NULL
|
||||
@ -49,7 +49,7 @@ explain extended select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),ine
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select inet_ntoa(NULL) AS `inet_ntoa(null)`,inet_aton(NULL) AS `inet_aton(null)`,inet_aton(_latin1'122.256') AS `inet_aton("122.256")`,inet_aton(_latin1'122.226.') AS `inet_aton("122.226.")`,inet_aton(_latin1'') AS `inet_aton("")`
|
||||
Note 1003 select inet_ntoa(NULL) AS `inet_ntoa(null)`,inet_aton(NULL) AS `inet_aton(null)`,inet_aton('122.256') AS `inet_aton("122.256")`,inet_aton('122.226.') AS `inet_aton("122.226.")`,inet_aton('') AS `inet_aton("")`
|
||||
create table t1 (x int);
|
||||
insert into t1 values (null);
|
||||
select * from t1 where x != 0;
|
||||
|
@ -1733,6 +1733,158 @@ a b
|
||||
9999999999999999 14632475938453979136
|
||||
deallocate 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 View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` latin1 latin1_swedish_ci
|
||||
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 View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c d
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `c`,`t1`.`b` AS `d` from `t1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c d
|
||||
drop view v1;
|
||||
prepare stmt from "create view v1 (c) as select b+1 from t1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select (`t1`.`b` + 1) AS `c` from `t1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c
|
||||
drop 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 View character_set_client collation_connection
|
||||
v1 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` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c d e f
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 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` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
c d e f
|
||||
drop view v1;
|
||||
prepare stmt from "create or replace view v1 as select 1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
1
|
||||
1
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` latin1 latin1_swedish_ci
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
1
|
||||
1
|
||||
drop view v1;
|
||||
prepare stmt from "create view v1 as select 1, 1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
1 My_exp_1
|
||||
1 1
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`,1 AS `My_exp_1` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
1 My_exp_1
|
||||
1 1
|
||||
drop 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 View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1) latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
x
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `x` from `t1` where (`t1`.`a` > 1) latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
x
|
||||
drop view v1;
|
||||
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
a b
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `b`.`a` AS `a`,`b`.`b` AS `b` from `t1` `b` latin1 latin1_swedish_ci
|
||||
select * from v1;
|
||||
a b
|
||||
drop 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 counts
|
||||
execute stmt;
|
||||
ERROR HY000: View's SELECT and view's field list have different column counts
|
||||
deallocate 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 exist
|
||||
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
End of 5.0 tests.
|
||||
create procedure proc_1() reset query cache;
|
||||
call proc_1();
|
||||
|
@ -1507,7 +1507,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -1505,7 +1505,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -1075,7 +1075,7 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is
|
||||
def VIEWS TABLE_CATALOG TABLE_CATALOG 253 1536 0 Y 0 0 33
|
||||
def VIEWS TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33
|
||||
def VIEWS TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33
|
||||
def VIEWS VIEW_DEFINITION VIEW_DEFINITION 252 589815 8 N 17 0 33
|
||||
def VIEWS VIEW_DEFINITION VIEW_DEFINITION 252 589815 15 N 17 0 33
|
||||
def VIEWS CHECK_OPTION CHECK_OPTION 253 24 4 N 1 0 33
|
||||
def VIEWS IS_UPDATABLE IS_UPDATABLE 253 9 2 N 1 0 33
|
||||
def VIEWS DEFINER DEFINER 253 231 14 N 1 0 33
|
||||
@ -1083,7 +1083,7 @@ def VIEWS SECURITY_TYPE SECURITY_TYPE 253 21 7 N 1 0 33
|
||||
def VIEWS CHARACTER_SET_CLIENT CHARACTER_SET_CLIENT 253 96 6 N 1 0 33
|
||||
def VIEWS COLLATION_CONNECTION COLLATION_CONNECTION 253 96 6 N 1 0 33
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION
|
||||
NULL test v1 SELECT 1 NONE NO root@localhost DEFINER binary binary
|
||||
NULL test v1 select 1 AS `1` NONE NO root@localhost DEFINER binary binary
|
||||
----------------------------------------------------------------
|
||||
SHOW CREATE PROCEDURE p1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
@ -1404,7 +1404,7 @@ CREATE EVENT ev1 ON SCHEDULE AT '2030-01-01 00:00:00' DO SELECT '
|
||||
set names utf8;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _koi8r'тест' AS `test` koi8r koi8r_general_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'тест' AS `test` koi8r koi8r_general_ci
|
||||
SHOW CREATE PROCEDURE p1;
|
||||
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
|
||||
p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
|
@ -324,29 +324,29 @@ Pos Instruction
|
||||
0 set str@1 NULL
|
||||
1 set_case_expr (12) 0 i@0
|
||||
2 jump_if_not 5(12) (case_expr@0 = 1)
|
||||
3 set str@1 _latin1'1'
|
||||
3 set str@1 '1'
|
||||
4 jump 12
|
||||
5 jump_if_not 8(12) (case_expr@0 = 2)
|
||||
6 set str@1 _latin1'2'
|
||||
6 set str@1 '2'
|
||||
7 jump 12
|
||||
8 jump_if_not 11(12) (case_expr@0 = 3)
|
||||
9 set str@1 _latin1'3'
|
||||
9 set str@1 '3'
|
||||
10 jump 12
|
||||
11 set str@1 _latin1'unknown'
|
||||
11 set str@1 'unknown'
|
||||
12 stmt 0 "SELECT str"
|
||||
SHOW PROCEDURE CODE proc_19194_searched;
|
||||
Pos Instruction
|
||||
0 set str@1 NULL
|
||||
1 jump_if_not 4(11) (i@0 = 1)
|
||||
2 set str@1 _latin1'1'
|
||||
2 set str@1 '1'
|
||||
3 jump 11
|
||||
4 jump_if_not 7(11) (i@0 = 2)
|
||||
5 set str@1 _latin1'2'
|
||||
5 set str@1 '2'
|
||||
6 jump 11
|
||||
7 jump_if_not 10(11) (i@0 = 3)
|
||||
8 set str@1 _latin1'3'
|
||||
8 set str@1 '3'
|
||||
9 jump 11
|
||||
10 set str@1 _latin1'unknown'
|
||||
10 set str@1 'unknown'
|
||||
11 stmt 0 "SELECT str"
|
||||
SHOW PROCEDURE CODE proc_19194_nested_1;
|
||||
Pos Instruction
|
||||
@ -354,59 +354,59 @@ Pos Instruction
|
||||
1 set str_j@3 NULL
|
||||
2 set_case_expr (27) 0 i@0
|
||||
3 jump_if_not 6(27) (case_expr@0 = 10)
|
||||
4 set str_i@2 _latin1'10'
|
||||
4 set str_i@2 '10'
|
||||
5 jump 27
|
||||
6 jump_if_not 20(27) (case_expr@0 = 20)
|
||||
7 set str_i@2 _latin1'20'
|
||||
7 set str_i@2 '20'
|
||||
8 jump_if_not 11(18) (j@1 = 1)
|
||||
9 set str_j@3 _latin1'1'
|
||||
9 set str_j@3 '1'
|
||||
10 jump 18
|
||||
11 jump_if_not 14(18) (j@1 = 2)
|
||||
12 set str_j@3 _latin1'2'
|
||||
12 set str_j@3 '2'
|
||||
13 jump 18
|
||||
14 jump_if_not 17(18) (j@1 = 3)
|
||||
15 set str_j@3 _latin1'3'
|
||||
15 set str_j@3 '3'
|
||||
16 jump 18
|
||||
17 set str_j@3 _latin1'unknown'
|
||||
17 set str_j@3 'unknown'
|
||||
18 stmt 0 "select "i was 20""
|
||||
19 jump 27
|
||||
20 jump_if_not 23(27) (case_expr@0 = 30)
|
||||
21 set str_i@2 _latin1'30'
|
||||
21 set str_i@2 '30'
|
||||
22 jump 27
|
||||
23 jump_if_not 26(27) (case_expr@0 = 40)
|
||||
24 set str_i@2 _latin1'40'
|
||||
24 set str_i@2 '40'
|
||||
25 jump 27
|
||||
26 set str_i@2 _latin1'unknown'
|
||||
26 set str_i@2 'unknown'
|
||||
27 stmt 0 "SELECT str_i, str_j"
|
||||
SHOW PROCEDURE CODE proc_19194_nested_2;
|
||||
Pos Instruction
|
||||
0 set str_i@2 NULL
|
||||
1 set str_j@3 NULL
|
||||
2 jump_if_not 5(27) (i@0 = 10)
|
||||
3 set str_i@2 _latin1'10'
|
||||
3 set str_i@2 '10'
|
||||
4 jump 27
|
||||
5 jump_if_not 20(27) (i@0 = 20)
|
||||
6 set str_i@2 _latin1'20'
|
||||
6 set str_i@2 '20'
|
||||
7 set_case_expr (18) 0 j@1
|
||||
8 jump_if_not 11(18) (case_expr@0 = 1)
|
||||
9 set str_j@3 _latin1'1'
|
||||
9 set str_j@3 '1'
|
||||
10 jump 18
|
||||
11 jump_if_not 14(18) (case_expr@0 = 2)
|
||||
12 set str_j@3 _latin1'2'
|
||||
12 set str_j@3 '2'
|
||||
13 jump 18
|
||||
14 jump_if_not 17(18) (case_expr@0 = 3)
|
||||
15 set str_j@3 _latin1'3'
|
||||
15 set str_j@3 '3'
|
||||
16 jump 18
|
||||
17 set str_j@3 _latin1'unknown'
|
||||
17 set str_j@3 'unknown'
|
||||
18 stmt 0 "select "i was 20""
|
||||
19 jump 27
|
||||
20 jump_if_not 23(27) (i@0 = 30)
|
||||
21 set str_i@2 _latin1'30'
|
||||
21 set str_i@2 '30'
|
||||
22 jump 27
|
||||
23 jump_if_not 26(27) (i@0 = 40)
|
||||
24 set str_i@2 _latin1'40'
|
||||
24 set str_i@2 '40'
|
||||
25 jump 27
|
||||
26 set str_i@2 _latin1'unknown'
|
||||
26 set str_i@2 'unknown'
|
||||
27 stmt 0 "SELECT str_i, str_j"
|
||||
SHOW PROCEDURE CODE proc_19194_nested_3;
|
||||
Pos Instruction
|
||||
@ -414,59 +414,59 @@ Pos Instruction
|
||||
1 set str_j@3 NULL
|
||||
2 set_case_expr (28) 0 i@0
|
||||
3 jump_if_not 6(28) (case_expr@0 = 10)
|
||||
4 set str_i@2 _latin1'10'
|
||||
4 set str_i@2 '10'
|
||||
5 jump 28
|
||||
6 jump_if_not 21(28) (case_expr@0 = 20)
|
||||
7 set str_i@2 _latin1'20'
|
||||
7 set str_i@2 '20'
|
||||
8 set_case_expr (19) 1 j@1
|
||||
9 jump_if_not 12(19) (case_expr@1 = 1)
|
||||
10 set str_j@3 _latin1'1'
|
||||
10 set str_j@3 '1'
|
||||
11 jump 19
|
||||
12 jump_if_not 15(19) (case_expr@1 = 2)
|
||||
13 set str_j@3 _latin1'2'
|
||||
13 set str_j@3 '2'
|
||||
14 jump 19
|
||||
15 jump_if_not 18(19) (case_expr@1 = 3)
|
||||
16 set str_j@3 _latin1'3'
|
||||
16 set str_j@3 '3'
|
||||
17 jump 19
|
||||
18 set str_j@3 _latin1'unknown'
|
||||
18 set str_j@3 'unknown'
|
||||
19 stmt 0 "select "i was 20""
|
||||
20 jump 28
|
||||
21 jump_if_not 24(28) (case_expr@0 = 30)
|
||||
22 set str_i@2 _latin1'30'
|
||||
22 set str_i@2 '30'
|
||||
23 jump 28
|
||||
24 jump_if_not 27(28) (case_expr@0 = 40)
|
||||
25 set str_i@2 _latin1'40'
|
||||
25 set str_i@2 '40'
|
||||
26 jump 28
|
||||
27 set str_i@2 _latin1'unknown'
|
||||
27 set str_i@2 'unknown'
|
||||
28 stmt 0 "SELECT str_i, str_j"
|
||||
SHOW PROCEDURE CODE proc_19194_nested_4;
|
||||
Pos Instruction
|
||||
0 set str_i@2 NULL
|
||||
1 set str_j@3 NULL
|
||||
2 jump_if_not 5(26) (i@0 = 10)
|
||||
3 set str_i@2 _latin1'10'
|
||||
3 set str_i@2 '10'
|
||||
4 jump 26
|
||||
5 jump_if_not 19(26) (i@0 = 20)
|
||||
6 set str_i@2 _latin1'20'
|
||||
6 set str_i@2 '20'
|
||||
7 jump_if_not 10(17) (j@1 = 1)
|
||||
8 set str_j@3 _latin1'1'
|
||||
8 set str_j@3 '1'
|
||||
9 jump 17
|
||||
10 jump_if_not 13(17) (j@1 = 2)
|
||||
11 set str_j@3 _latin1'2'
|
||||
11 set str_j@3 '2'
|
||||
12 jump 17
|
||||
13 jump_if_not 16(17) (j@1 = 3)
|
||||
14 set str_j@3 _latin1'3'
|
||||
14 set str_j@3 '3'
|
||||
15 jump 17
|
||||
16 set str_j@3 _latin1'unknown'
|
||||
16 set str_j@3 'unknown'
|
||||
17 stmt 0 "select "i was 20""
|
||||
18 jump 26
|
||||
19 jump_if_not 22(26) (i@0 = 30)
|
||||
20 set str_i@2 _latin1'30'
|
||||
20 set str_i@2 '30'
|
||||
21 jump 26
|
||||
22 jump_if_not 25(26) (i@0 = 40)
|
||||
23 set str_i@2 _latin1'40'
|
||||
23 set str_i@2 '40'
|
||||
24 jump 26
|
||||
25 set str_i@2 _latin1'unknown'
|
||||
25 set str_i@2 'unknown'
|
||||
26 stmt 0 "SELECT str_i, str_j"
|
||||
CALL proc_19194_nested_1(10, 1);
|
||||
str_i str_j
|
||||
@ -793,7 +793,7 @@ end while;
|
||||
end//
|
||||
show procedure code proc_33618_h;
|
||||
Pos Instruction
|
||||
0 set count1@1 _latin1'0'
|
||||
0 set count1@1 '0'
|
||||
1 set vb@2 NULL
|
||||
2 set last_row@3 NULL
|
||||
3 jump_if_not 24(24) (num@0 >= 1)
|
||||
@ -818,7 +818,7 @@ Pos Instruction
|
||||
22 jump 3
|
||||
show procedure code proc_33618_c;
|
||||
Pos Instruction
|
||||
0 set count1@1 _latin1'0'
|
||||
0 set count1@1 '0'
|
||||
1 set vb@2 NULL
|
||||
2 set last_row@3 NULL
|
||||
3 jump_if_not 23(23) (num@0 >= 1)
|
||||
|
@ -1508,7 +1508,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -1511,7 +1511,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> _latin1''))
|
||||
Note 1003 select count(0) AS `count(*)`,min(`test`.`t2`.`fld4`) AS `min(fld4)`,max(`test`.`t2`.`fld4`) AS `max(fld4)`,sum(`test`.`t2`.`fld1`) AS `sum(fld1)`,avg(`test`.`t2`.`fld1`) AS `avg(fld1)`,std(`test`.`t2`.`fld1`) AS `std(fld1)`,variance(`test`.`t2`.`fld1`) AS `variance(fld1)` from `test`.`t2` where ((`test`.`t2`.`companynr` = 34) and (`test`.`t2`.`fld4` <> ''))
|
||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||
|
@ -393,13 +393,13 @@ EXPLAIN EXTENDED SELECT DISTINCT date FROM t1 WHERE date='2002-08-03';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 index NULL PRIMARY 43 NULL 2 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select distinct `test`.`t1`.`date` AS `date` from `test`.`t1` where (`test`.`t1`.`date` = _latin1'2002-08-03')
|
||||
Note 1003 select distinct `test`.`t1`.`date` AS `date` from `test`.`t1` where (`test`.`t1`.`date` = '2002-08-03')
|
||||
EXPLAIN EXTENDED SELECT (SELECT DISTINCT date FROM t1 WHERE date='2002-08-03');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
2 SUBQUERY t1 index NULL PRIMARY 43 NULL 2 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select (select distinct `test`.`t1`.`date` AS `date` from `test`.`t1` where (`test`.`t1`.`date` = _latin1'2002-08-03')) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')`
|
||||
Note 1003 select (select distinct `test`.`t1`.`date` AS `date` from `test`.`t1` where (`test`.`t1`.`date` = '2002-08-03')) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')`
|
||||
SELECT DISTINCT date FROM t1 WHERE date='2002-08-03';
|
||||
date
|
||||
2002-08-03
|
||||
@ -540,13 +540,13 @@ EXPLAIN EXTENDED SELECT MAX(numreponse) FROM t1 WHERE numeropost='1';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
Warnings:
|
||||
Note 1003 select max(`test`.`t1`.`numreponse`) AS `MAX(numreponse)` from `test`.`t1` where (`test`.`t1`.`numeropost` = _latin1'1')
|
||||
Note 1003 select max(`test`.`t1`.`numreponse`) AS `MAX(numreponse)` from `test`.`t1` where (`test`.`t1`.`numeropost` = '1')
|
||||
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 const PRIMARY,numreponse PRIMARY 7 const,const 1 100.00 Using index
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
Warnings:
|
||||
Note 1003 select '3' AS `numreponse` from `test`.`t1` where (('1' = _latin1'1'))
|
||||
Note 1003 select '3' AS `numreponse` from `test`.`t1` where (('1' = '1'))
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int(1));
|
||||
INSERT INTO t1 VALUES (1);
|
||||
@ -1024,7 +1024,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
Warnings:
|
||||
Note 1003 select (select encrypt(_latin1'test') AS `ENCRYPT('test')` from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1`
|
||||
Note 1003 select (select encrypt('test') AS `ENCRYPT('test')` from `test`.`t1`) AS `(SELECT ENCRYPT('test') FROM t1)` from `test`.`t1`
|
||||
EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 0.00 const row not found
|
||||
@ -1481,7 +1481,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 100.00 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 100.00 Using index; Using where; Full scan on NULL key
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2') having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < 'a2') having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
drop table t1,t2;
|
||||
create table t2 (a int, b int);
|
||||
create table t3 (a int);
|
||||
@ -2820,19 +2820,19 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and (<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = 'N') and (<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))
|
||||
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) and trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = '0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) and trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a char(5), b char(5));
|
||||
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
|
||||
|
@ -112,7 +112,7 @@ v1 CREATE TEMPORARY TABLE `v1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show create view v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'This is view' AS `A` latin1 latin1_swedish_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'This is view' AS `A` latin1 latin1_swedish_ci
|
||||
drop view v1;
|
||||
select * from v1;
|
||||
A
|
||||
|
@ -2016,4 +2016,42 @@ i j
|
||||
10 10
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
drop table if exists t1, t2;
|
||||
drop trigger if exists trg1;
|
||||
drop trigger if exists trg2;
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
create trigger trg1 after update on t1 for each row set @a= @a+1;
|
||||
create trigger trg2 after update on t2 for each row set @b= @b+1;
|
||||
insert into t1 values (1), (2), (3);
|
||||
insert into t2 values (1), (2), (3);
|
||||
set @a= 0;
|
||||
set @b= 0;
|
||||
update t1, t2 set t1.a= t1.a, t2.b= t2.b;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
3 3
|
||||
update t1, t2 set t1.a= t2.b, t2.b= t1.a;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
6 6
|
||||
update t1 set a= a;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
9 6
|
||||
update t2 set b= b;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
9 9
|
||||
update t1 set a= 1;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
12 9
|
||||
update t2 set b= 1;
|
||||
select @a, @b;
|
||||
@a @b
|
||||
12 12
|
||||
drop trigger trg1;
|
||||
drop trigger trg2;
|
||||
drop table t1, t2;
|
||||
End of 5.1 tests.
|
||||
|
@ -519,7 +519,7 @@ coercibility(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select charset(load_file(_latin1'MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `charset(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`,collation(load_file(_latin1'MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `collation(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`,coercibility(load_file(_latin1'MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `coercibility(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`
|
||||
Note 1003 select charset(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `charset(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`,collation(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `collation(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`,coercibility(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat')) AS `coercibility(load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat'))`
|
||||
update t1 set imagem=load_file('MYSQLTEST_VARDIR/std_data_ln/words.dat') where id=1;
|
||||
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
|
||||
if(imagem is null, "ERROR", "OK") length(imagem)
|
||||
|
12
mysql-test/r/variables_debug.result
Normal file
12
mysql-test/r/variables_debug.result
Normal file
@ -0,0 +1,12 @@
|
||||
set debug= 'T';
|
||||
select @@debug;
|
||||
@@debug
|
||||
T
|
||||
set debug= '+P';
|
||||
select @@debug;
|
||||
@@debug
|
||||
P:T
|
||||
set debug= '-P';
|
||||
select @@debug;
|
||||
@@debug
|
||||
T
|
@ -3061,7 +3061,7 @@ TheEnd
|
||||
TheEnd
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'The\ZEnd' AS `TheEnd` latin1 latin1_swedish_ci
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 'The\ZEnd' AS `TheEnd` latin1 latin1_swedish_ci
|
||||
DROP VIEW v1;
|
||||
CREATE TABLE t1 (mydate DATETIME);
|
||||
INSERT INTO t1 VALUES
|
||||
@ -3613,7 +3613,26 @@ ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default val
|
||||
set @@sql_mode=@old_mode;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
End of 5.0 tests.
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#34337: Server crash when Altering a view using a table name.
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
CREATE TABLE t1(c1 INT);
|
||||
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
ALTER ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW t1 (c2) AS SELECT (1);
|
||||
ERROR HY000: 'test.t1' is not VIEW
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# -- End of test case for Bug#34337.
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.0 tests.
|
||||
# -----------------------------------------------------------------
|
||||
DROP DATABASE IF EXISTS `d-1`;
|
||||
CREATE DATABASE `d-1`;
|
||||
USE `d-1`;
|
||||
@ -3676,4 +3695,59 @@ DROP TABLE t1;
|
||||
|
||||
# End of test case for Bug#26676.
|
||||
|
||||
End of 5.1 tests.
|
||||
# -----------------------------------------------------------------
|
||||
# -- Bug#32538: View definition picks up character set, but not collation
|
||||
# -----------------------------------------------------------------
|
||||
|
||||
DROP VIEW IF EXISTS v1;
|
||||
|
||||
SET collation_connection = latin1_general_ci;
|
||||
CREATE VIEW v1 AS SELECT _latin1 'text1' AS c1, 'text2' AS c2;
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1;
|
||||
COLLATION(c1) COLLATION(c2)
|
||||
latin1_swedish_ci latin1_general_ci
|
||||
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'text1' AS `c1`,'text2' AS `c2` latin1 latin1_general_ci
|
||||
|
||||
SELECT * FROM v1 WHERE c1 = 'text1';
|
||||
ERROR HY000: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (latin1_general_ci,COERCIBLE) for operation '='
|
||||
|
||||
SELECT * FROM v1 WHERE c2 = 'text2';
|
||||
c1 c2
|
||||
text1 text2
|
||||
|
||||
use test;
|
||||
SET names latin1;
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1;
|
||||
COLLATION(c1) COLLATION(c2)
|
||||
latin1_swedish_ci latin1_general_ci
|
||||
|
||||
SELECT * FROM v1 WHERE c1 = 'text1';
|
||||
c1 c2
|
||||
text1 text2
|
||||
|
||||
SELECT * FROM v1 WHERE c2 = 'text2';
|
||||
ERROR HY000: Illegal mix of collations (latin1_general_ci,COERCIBLE) and (latin1_swedish_ci,COERCIBLE) for operation '='
|
||||
|
||||
DROP VIEW v1;
|
||||
|
||||
# -- End of test case for Bug#32538.
|
||||
|
||||
drop view if exists a;
|
||||
drop procedure if exists p;
|
||||
create procedure p()
|
||||
begin
|
||||
declare continue handler for sqlexception begin end;
|
||||
create view a as select 1;
|
||||
end|
|
||||
call p();
|
||||
call p();
|
||||
drop view a;
|
||||
drop procedure p;
|
||||
# -----------------------------------------------------------------
|
||||
# -- End of 5.1 tests.
|
||||
# -----------------------------------------------------------------
|
||||
|
@ -469,6 +469,7 @@ use test;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
drop view if exists v1;
|
||||
drop table if exists t1;
|
||||
create table t1 as select * from mysql.user where user='';
|
||||
delete from mysql.user where user='';
|
||||
flush privileges;
|
||||
|
@ -379,7 +379,7 @@ master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; COMMIT
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t2
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
@ -391,7 +391,7 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; COMMIT
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
|
||||
|
@ -73,7 +73,7 @@ explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 fulltext a a 0 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against (_latin1'collections'))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (match `test`.`t1`.`a`,`test`.`t1`.`b` against ('collections'))
|
||||
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
||||
a b
|
||||
Full-text indexes are called collections
|
||||
|
@ -251,7 +251,7 @@ master-bin.000001 # Query # # use `test`; drop table t1,t2
|
||||
master-bin.000001 # Query # # use `test`; create temporary table ti (a int) engine=innodb
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values(1)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; COMMIT
|
||||
master-bin.000001 # Query # # use `test`; create temporary table t1 (a int) engine=myisam
|
||||
master-bin.000001 # Query # # use `test`; insert t1 values (1)
|
||||
master-bin.000001 # Query # # use `test`; create table t0 (n int)
|
||||
@ -358,11 +358,11 @@ master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (8,8)
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (9,9)
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE table t2
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; COMMIT
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 values (10,10)
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t2 values (100,100)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; COMMIT
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1,t2
|
||||
reset master;
|
||||
create table t1 (a int) engine=innodb;
|
||||
|
@ -25,7 +25,7 @@ explain extended select is_free_lock("lock"), is_used_lock("lock");
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
|
||||
Note 1003 select is_free_lock('lock') AS `is_free_lock("lock")`,is_used_lock('lock') AS `is_used_lock("lock")`
|
||||
select is_free_lock("lock2");
|
||||
is_free_lock("lock2")
|
||||
1
|
||||
|
@ -11,7 +11,7 @@ explain extended select master_pos_wait('master-bin.999999',0,2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
||||
Note 1003 select master_pos_wait('master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
||||
select master_pos_wait('master-bin.999999',0);
|
||||
stop slave sql_thread;
|
||||
master_pos_wait('master-bin.999999',0)
|
||||
|
@ -10,6 +10,7 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
rpl_ndb_circular : Bug#33849 COMMIT event missing in cluster circular replication.
|
||||
rpl_ndb_circular_simplex : Bug#33849 COMMIT event missing in cluster circular replication.
|
||||
|
||||
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
|
||||
|
@ -33,3 +33,14 @@ SELECT IS_USED_LOCK('bug31418') = CONNECTION_ID();
|
||||
--change_user
|
||||
SELECT IS_FREE_LOCK('bug31418');
|
||||
SELECT IS_USED_LOCK('bug31418');
|
||||
|
||||
#
|
||||
# Bug#31222: com_% global status counters behave randomly with
|
||||
# mysql_change_user.
|
||||
#
|
||||
# Moved to not_embedded_server.test due to Bug#34517: SHOW GLOBAL STATUS does
|
||||
# not work properly in embedded server.
|
||||
#
|
||||
# TODO: move it back when Bug#34517 is fixed (don't forget to add
|
||||
# --force-restart into change_user-master.opt).
|
||||
#
|
||||
|
6
mysql-test/t/commit_1innodb.test
Normal file
6
mysql-test/t/commit_1innodb.test
Normal file
@ -0,0 +1,6 @@
|
||||
-- source include/have_log_bin.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
let $engine_type = InnoDB;
|
||||
|
||||
-- source include/commit.inc
|
@ -1385,4 +1385,68 @@ DROP TABLE t2;
|
||||
--echo # -- End of test case for Bug#21380.
|
||||
--echo
|
||||
|
||||
--echo # --
|
||||
--echo # -- Bug#18834: ALTER TABLE ADD INDEX on table with two timestamp fields
|
||||
--echo # --
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t3;
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1(c1 TIMESTAMP, c2 TIMESTAMP);
|
||||
|
||||
--echo
|
||||
|
||||
SET sql_mode = NO_ZERO_DATE;
|
||||
|
||||
--echo
|
||||
--error ER_INVALID_DEFAULT
|
||||
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0);
|
||||
|
||||
--echo
|
||||
--error ER_INVALID_DEFAULT
|
||||
CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP);
|
||||
|
||||
--echo
|
||||
--echo # -- Check that NULL column still can be created.
|
||||
CREATE TABLE t2(c1 TIMESTAMP NULL);
|
||||
|
||||
--echo
|
||||
--echo # -- Check ALTER TABLE.
|
||||
--error ER_INVALID_DEFAULT
|
||||
ALTER TABLE t1 ADD INDEX(c1);
|
||||
|
||||
--echo
|
||||
--echo # -- Check DATETIME.
|
||||
SET sql_mode = '';
|
||||
|
||||
--echo
|
||||
|
||||
CREATE TABLE t3(c1 DATETIME NOT NULL);
|
||||
INSERT INTO t3 VALUES (0);
|
||||
|
||||
--echo
|
||||
SET sql_mode = TRADITIONAL;
|
||||
|
||||
--echo
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
ALTER TABLE t3 ADD INDEX(c1);
|
||||
|
||||
--echo
|
||||
--echo # -- Cleanup.
|
||||
|
||||
SET sql_mode = '';
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
|
||||
--echo
|
||||
--echo # -- End of Bug#18834.
|
||||
--echo
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -85,6 +85,10 @@ CREATE VIEW v2 AS SELECT _utf8'тест' as c1|
|
||||
|
||||
--echo
|
||||
|
||||
CREATE VIEW v3 AS SELECT _utf8'тест'|
|
||||
|
||||
--echo
|
||||
|
||||
#
|
||||
# First-round checks.
|
||||
#
|
||||
@ -120,6 +124,7 @@ SET @@collation_connection= cp1251_general_ci|
|
||||
--disable_result_log
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
--enable_result_log
|
||||
|
||||
use mysqltest1|
|
||||
@ -168,7 +173,7 @@ DROP DATABASE mysqltest1|
|
||||
--echo
|
||||
--echo ---> connection: con3
|
||||
|
||||
# - Switch environment variables and trigger loading stored procedures;
|
||||
# - Switch environment variables and trigger loading views;
|
||||
|
||||
SET @@character_set_client= cp1251|
|
||||
SET @@character_set_results= cp1251|
|
||||
@ -177,6 +182,7 @@ SET @@collation_connection= cp1251_general_ci|
|
||||
--disable_result_log
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
--enable_result_log
|
||||
|
||||
use mysqltest1|
|
||||
|
@ -85,6 +85,10 @@ CREATE VIEW v2 AS SELECT _koi8r'
|
||||
|
||||
--echo
|
||||
|
||||
CREATE VIEW v3 AS SELECT _koi8r'ÔÅÓÔ'|
|
||||
|
||||
--echo
|
||||
|
||||
#
|
||||
# First-round checks.
|
||||
#
|
||||
@ -120,6 +124,7 @@ SET @@collation_connection= cp1251_general_ci|
|
||||
--disable_result_log
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
--enable_result_log
|
||||
|
||||
use mysqltest1|
|
||||
@ -168,7 +173,7 @@ DROP DATABASE mysqltest1|
|
||||
--echo
|
||||
--echo ---> connection: con3
|
||||
|
||||
# - Switch environment variables and trigger loading stored procedures;
|
||||
# - Switch environment variables and trigger loading views;
|
||||
|
||||
SET @@character_set_client= cp1251|
|
||||
SET @@character_set_results= cp1251|
|
||||
@ -177,6 +182,7 @@ SET @@collation_connection= cp1251_general_ci|
|
||||
--disable_result_log
|
||||
SELECT * FROM mysqltest1.v1|
|
||||
SELECT * FROM mysqltest1.v2|
|
||||
SELECT * FROM mysqltest1.v3|
|
||||
--enable_result_log
|
||||
|
||||
use mysqltest1|
|
||||
|
@ -16,11 +16,9 @@ ctype_big5 : BUG#26711 2007-06-21 Lars Test has never worked on Do
|
||||
|
||||
federated_transactions : Bug#29523 Transactions do not work
|
||||
lowercase_table3 : Bug#32667 lowercase_table3.test reports to error log
|
||||
kill : Bug#29149: Test "kill" fails on Windows
|
||||
innodb_mysql : Bug#32724: innodb_mysql.test fails randomly
|
||||
wait_timeout : Bug#32801 wait_timeout.test fails randomly
|
||||
ctype_create : Bug#32965 main.ctype_create fails
|
||||
status : Bug#32966 main.status fails
|
||||
ps_ddl : Bug#12093 2007-12-14 pending WL#4165 / WL#4166
|
||||
csv_alter_table : Bug#33696 2008-01-21 pcrews no .result file - bug allows NULL columns in CSV tables
|
||||
query_cache_debug : Bug#34424: query_cache_debug.test leads to valgrind warnings
|
||||
|
@ -6,6 +6,10 @@
|
||||
#
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# Disable concurrent inserts to avoid test failures when reading the
|
||||
# connection id which was inserted into a table by another thread.
|
||||
set @@global.concurrent_insert= 0;
|
||||
|
||||
connect (con1, localhost, root,,);
|
||||
connect (con2, localhost, root,,);
|
||||
|
||||
|
@ -396,6 +396,9 @@ unlock tables;
|
||||
connection insert;
|
||||
--reap
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from t1;
|
||||
--source include/wait_condition.inc
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
disconnect flush;
|
||||
|
@ -1 +1 @@
|
||||
--log=$MYSQLTEST_VARDIR/log/master.log --log-output=FILE
|
||||
--log=$MYSQLTEST_VARDIR/log/master.log --log-output=FILE,TABLE
|
||||
|
@ -1799,6 +1799,61 @@ create table test (a int);
|
||||
drop database `test-database`;
|
||||
use test;
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- Bug#30217: Views: changes in metadata behaviour between 5.0 and 5.1.
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mysqldump_test_db;
|
||||
--enable_warnings
|
||||
|
||||
CREATE DATABASE mysqldump_test_db;
|
||||
use mysqldump_test_db;
|
||||
|
||||
--echo
|
||||
|
||||
CREATE VIEW v1(x, y) AS SELECT 'a', 'a';
|
||||
|
||||
--echo
|
||||
|
||||
SELECT view_definition
|
||||
FROM INFORMATION_SCHEMA.VIEWS
|
||||
WHERE table_schema = 'mysqldump_test_db' AND table_name = 'v1';
|
||||
|
||||
--echo
|
||||
|
||||
--echo ---> Dumping mysqldump_test_db to bug30217.sql
|
||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --databases mysqldump_test_db > $MYSQLTEST_VARDIR/tmp/bug30217.sql
|
||||
|
||||
--echo
|
||||
|
||||
DROP DATABASE mysqldump_test_db;
|
||||
use test;
|
||||
|
||||
--echo
|
||||
|
||||
--echo ---> Restoring mysqldump_test_db...
|
||||
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug30217.sql
|
||||
|
||||
--echo
|
||||
|
||||
SELECT view_definition
|
||||
FROM INFORMATION_SCHEMA.VIEWS
|
||||
WHERE table_schema = 'mysqldump_test_db' AND table_name = 'v1';
|
||||
|
||||
--echo
|
||||
|
||||
DROP DATABASE mysqldump_test_db;
|
||||
|
||||
--echo
|
||||
--echo # -- End of test case for Bug#32538.
|
||||
--echo
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.1 tests
|
||||
|
@ -20,4 +20,38 @@ prepare stmt1 from ' SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND!
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#31222: com_% global status counters behave randomly with
|
||||
# mysql_change_user.
|
||||
#
|
||||
# Moved from change_user.test due to Bug#34517: SHOW GLOBAL STATUS does not
|
||||
# work properly in embedded server.
|
||||
#
|
||||
# TODO: move it back when Bug#34517 is fixed.
|
||||
#
|
||||
|
||||
FLUSH STATUS;
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
let $i = 100;
|
||||
|
||||
while ($i)
|
||||
{
|
||||
dec $i;
|
||||
|
||||
SELECT 1;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
|
||||
--change_user
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
|
||||
# End of 5.1 tests
|
||||
|
@ -1838,6 +1838,129 @@ select * from t1 where a = @a and b = @b;
|
||||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#32890 Crash after repeated create and drop of tables and views
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop view if exists v1;
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
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;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 (c,d) as select a,b from t1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 (c) as select b+1 from t1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop 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;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create or replace view v1 as select 1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 as select 1, 1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 (x) as select a from t1 where a > 1";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||
execute stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
show create view v1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
|
||||
prepare stmt from "create view v1 (a,b,c) as select * from t1";
|
||||
--error ER_VIEW_WRONG_LIST
|
||||
execute stmt;
|
||||
--error ER_VIEW_WRONG_LIST
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
drop table t1;
|
||||
create temporary table t1 (a int, b int);
|
||||
|
||||
prepare stmt from "create view v1 as select * from t1";
|
||||
--error ER_VIEW_SELECT_TMPTABLE
|
||||
execute stmt;
|
||||
--error ER_VIEW_SELECT_TMPTABLE
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--error ER_NO_SUCH_TABLE
|
||||
prepare stmt from "create view v1 as select * from t1";
|
||||
--error ER_NO_SUCH_TABLE
|
||||
prepare stmt from "create view v1 as select * from `t1` `b`";
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
@ -2304,4 +2304,37 @@ unlock tables;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#23771 AFTER UPDATE trigger not invoked when there are no changes of the data
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
drop trigger if exists trg1;
|
||||
drop trigger if exists trg2;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
create trigger trg1 after update on t1 for each row set @a= @a+1;
|
||||
create trigger trg2 after update on t2 for each row set @b= @b+1;
|
||||
insert into t1 values (1), (2), (3);
|
||||
insert into t2 values (1), (2), (3);
|
||||
set @a= 0;
|
||||
set @b= 0;
|
||||
update t1, t2 set t1.a= t1.a, t2.b= t2.b;
|
||||
select @a, @b;
|
||||
update t1, t2 set t1.a= t2.b, t2.b= t1.a;
|
||||
select @a, @b;
|
||||
update t1 set a= a;
|
||||
select @a, @b;
|
||||
update t2 set b= b;
|
||||
select @a, @b;
|
||||
update t1 set a= 1;
|
||||
select @a, @b;
|
||||
update t2 set b= 1;
|
||||
select @a, @b;
|
||||
drop trigger trg1;
|
||||
drop trigger trg2;
|
||||
drop table t1, t2;
|
||||
|
||||
--echo End of 5.1 tests.
|
||||
|
12
mysql-test/t/variables_debug.test
Normal file
12
mysql-test/t/variables_debug.test
Normal file
@ -0,0 +1,12 @@
|
||||
--source include/have_debug.inc
|
||||
|
||||
#
|
||||
# Bug#34678 @@debug variable's incremental mode
|
||||
#
|
||||
|
||||
set debug= 'T';
|
||||
select @@debug;
|
||||
set debug= '+P';
|
||||
select @@debug;
|
||||
set debug= '-P';
|
||||
select @@debug;
|
@ -3468,7 +3468,41 @@ set @@sql_mode=@old_mode;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
###########################################################################
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- Bug#34337: Server crash when Altering a view using a table name.
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
|
||||
CREATE TABLE t1(c1 INT);
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
--error ER_WRONG_OBJECT
|
||||
ALTER ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW t1 (c2) AS SELECT (1);
|
||||
|
||||
--echo
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo
|
||||
--echo # -- End of test case for Bug#34337.
|
||||
--echo
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- End of 5.0 tests.
|
||||
--echo # -----------------------------------------------------------------
|
||||
|
||||
#
|
||||
# Bug#21370 View renaming lacks tablename_to_filename encoding
|
||||
@ -3540,4 +3574,88 @@ DROP TABLE t1;
|
||||
--echo # End of test case for Bug#26676.
|
||||
--echo
|
||||
|
||||
--echo End of 5.1 tests.
|
||||
###########################################################################
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- Bug#32538: View definition picks up character set, but not collation
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo
|
||||
|
||||
--disable_warnings
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
|
||||
SET collation_connection = latin1_general_ci;
|
||||
CREATE VIEW v1 AS SELECT _latin1 'text1' AS c1, 'text2' AS c2;
|
||||
|
||||
--echo
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1;
|
||||
|
||||
--echo
|
||||
|
||||
SHOW CREATE VIEW v1;
|
||||
|
||||
--echo
|
||||
|
||||
--error ER_CANT_AGGREGATE_2COLLATIONS
|
||||
SELECT * FROM v1 WHERE c1 = 'text1';
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM v1 WHERE c2 = 'text2';
|
||||
|
||||
--echo
|
||||
|
||||
use test;
|
||||
SET names latin1;
|
||||
|
||||
--echo
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1;
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM v1 WHERE c1 = 'text1';
|
||||
|
||||
--echo
|
||||
|
||||
--error ER_CANT_AGGREGATE_2COLLATIONS
|
||||
SELECT * FROM v1 WHERE c2 = 'text2';
|
||||
|
||||
--echo
|
||||
|
||||
DROP VIEW v1;
|
||||
|
||||
--echo
|
||||
--echo # -- End of test case for Bug#32538.
|
||||
--echo
|
||||
|
||||
#
|
||||
# Bug#34587 Creating a view inside a stored procedure leads to a server crash
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop view if exists a;
|
||||
drop procedure if exists p;
|
||||
--enable_warnings
|
||||
|
||||
delimiter |;
|
||||
create procedure p()
|
||||
begin
|
||||
declare continue handler for sqlexception begin end;
|
||||
create view a as select 1;
|
||||
end|
|
||||
delimiter ;|
|
||||
call p();
|
||||
call p();
|
||||
drop view a;
|
||||
drop procedure p;
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo # -----------------------------------------------------------------
|
||||
--echo # -- End of 5.1 tests.
|
||||
--echo # -----------------------------------------------------------------
|
||||
|
@ -614,6 +614,7 @@ drop database mysqltest;
|
||||
#
|
||||
--disable_warnings
|
||||
drop view if exists v1;
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
# Backup anonymous users and remove them. (They get in the way of
|
||||
|
@ -332,6 +332,7 @@ void my_thread_end(void)
|
||||
/* tmp->dbug is allocated inside DBUG library */
|
||||
if (tmp->dbug)
|
||||
{
|
||||
DBUG_POP();
|
||||
free(tmp->dbug);
|
||||
tmp->dbug=0;
|
||||
}
|
||||
|
@ -2736,7 +2736,15 @@ get_info:
|
||||
#ifdef MYSQL_CLIENT
|
||||
if (field_count == NULL_LENGTH) /* LOAD DATA LOCAL INFILE */
|
||||
{
|
||||
int error=handle_local_infile(mysql,(char*) pos);
|
||||
int error;
|
||||
|
||||
if (!(mysql->options.client_flag & CLIENT_LOCAL_FILES))
|
||||
{
|
||||
set_mysql_error(mysql, CR_MALFORMED_PACKET, unknown_sqlstate);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
error= handle_local_infile(mysql,(char*) pos);
|
||||
if ((length= cli_safe_read(mysql)) == packet_error || error)
|
||||
DBUG_RETURN(1);
|
||||
goto get_info; /* Get info packet */
|
||||
|
@ -60,8 +60,16 @@ extern "C" int event_queue_element_compare_q(void *, uchar *, uchar *);
|
||||
|
||||
int event_queue_element_compare_q(void *vptr, uchar* a, uchar *b)
|
||||
{
|
||||
my_time_t lhs = ((Event_queue_element *)a)->execute_at;
|
||||
my_time_t rhs = ((Event_queue_element *)b)->execute_at;
|
||||
Event_queue_element *left = (Event_queue_element *)a;
|
||||
Event_queue_element *right = (Event_queue_element *)b;
|
||||
my_time_t lhs = left->execute_at;
|
||||
my_time_t rhs = right->execute_at;
|
||||
|
||||
if (left->status == Event_queue_element::DISABLED)
|
||||
return right->status != Event_queue_element::DISABLED;
|
||||
|
||||
if (right->status == Event_queue_element::DISABLED)
|
||||
return 1;
|
||||
|
||||
return (lhs < rhs ? -1 : (lhs > rhs ? 1 : 0));
|
||||
}
|
||||
@ -434,8 +442,34 @@ Event_queue::recalculate_activation_times(THD *thd)
|
||||
((Event_queue_element*)queue_element(&queue, i))->update_timing_fields(thd);
|
||||
}
|
||||
queue_fix(&queue);
|
||||
/*
|
||||
The disabled elements are moved to the end during the `fix`.
|
||||
Start from the end and remove all of the elements which are
|
||||
disabled. When we find the first non-disabled one we break, as we
|
||||
have removed all. The queue has been ordered in a way the disabled
|
||||
events are at the end.
|
||||
*/
|
||||
for (i= queue.elements; i > 0; i--)
|
||||
{
|
||||
Event_queue_element *element = (Event_queue_element*)queue_element(&queue, i - 1);
|
||||
if (element->status != Event_queue_element::DISABLED)
|
||||
break;
|
||||
/*
|
||||
This won't cause queue re-order, because we remove
|
||||
always the last element.
|
||||
*/
|
||||
queue_remove(&queue, i - 1);
|
||||
delete element;
|
||||
}
|
||||
UNLOCK_QUEUE_DATA();
|
||||
|
||||
/*
|
||||
XXX: The events are dropped only from memory and not from disk
|
||||
even if `drop_list[j]->dropped` is TRUE. There will be still on the
|
||||
disk till next server restart.
|
||||
Please add code here to do it.
|
||||
*/
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -737,7 +737,7 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
|
||||
if (protocol->write())
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
send_eof(thd);
|
||||
my_eof(thd);
|
||||
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
@ -1185,7 +1185,12 @@ Events::load_events_from_db(THD *thd)
|
||||
{
|
||||
/*
|
||||
If not created, a stale event - drop if immediately if
|
||||
ON COMPLETION NOT PRESERVE
|
||||
ON COMPLETION NOT PRESERVE.
|
||||
XXX: This won't be replicated, thus the drop won't appear in
|
||||
in the slave. When the slave is restarted it will drop events.
|
||||
However, as the slave will be "out of sync", it might happen that
|
||||
an event created on the master, after master restart, won't be
|
||||
replicated to the slave correctly, as the create will fail there.
|
||||
*/
|
||||
int rc= table->file->ha_delete_row(table->record[0]);
|
||||
if (rc)
|
||||
|
@ -9454,7 +9454,7 @@ ha_ndbcluster::cond_push(const COND *cond)
|
||||
my_errno= HA_ERR_OUT_OF_MEM;
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
DBUG_EXECUTE("where",print_where((COND *)cond, m_tabname););
|
||||
DBUG_EXECUTE("where",print_where((COND *)cond, m_tabname, QT_ORDINARY););
|
||||
DBUG_RETURN(m_cond->cond_push(cond, table, (NDBTAB *)m_table));
|
||||
}
|
||||
|
||||
|
@ -283,6 +283,7 @@ static void run_query(THD *thd, char *buf, char *end,
|
||||
thd_ndb->m_error_code,
|
||||
(int) thd->is_error(), thd->is_slave_error);
|
||||
}
|
||||
close_thread_tables(thd);
|
||||
/*
|
||||
XXX: this code is broken. mysql_parse()/mysql_reset_thd_for_next_command()
|
||||
can not be called from within a statement, and
|
||||
|
619
sql/handler.cc
619
sql/handler.cc
File diff suppressed because it is too large
Load Diff
122
sql/handler.h
122
sql/handler.h
@ -721,14 +721,14 @@ struct handlerton
|
||||
#define HTON_SUPPORT_LOG_TABLES (1 << 7) //Engine supports log tables
|
||||
#define HTON_NO_PARTITION (1 << 8) //You can not partition these tables
|
||||
|
||||
typedef struct st_thd_trans
|
||||
class Ha_trx_info;
|
||||
|
||||
struct THD_TRANS
|
||||
{
|
||||
/* number of entries in the ht[] */
|
||||
uint nht;
|
||||
/* true is not all entries in the ht[] support 2pc */
|
||||
bool no_2pc;
|
||||
/* storage engines that registered themselves for this transaction */
|
||||
handlerton *ht[MAX_HA];
|
||||
/* storage engines that registered in this transaction */
|
||||
Ha_trx_info *ha_list;
|
||||
/*
|
||||
The purpose of this flag is to keep track of non-transactional
|
||||
tables that were modified in scope of:
|
||||
@ -758,7 +758,106 @@ typedef struct st_thd_trans
|
||||
saved value.
|
||||
*/
|
||||
bool modified_non_trans_table;
|
||||
} THD_TRANS;
|
||||
|
||||
void reset() { no_2pc= FALSE; modified_non_trans_table= FALSE; }
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Either statement transaction or normal transaction - related
|
||||
thread-specific storage engine data.
|
||||
|
||||
If a storage engine participates in a statement/transaction,
|
||||
an instance of this class is present in
|
||||
thd->transaction.{stmt|all}.ha_list. The addition to
|
||||
{stmt|all}.ha_list is made by trans_register_ha().
|
||||
|
||||
When it's time to commit or rollback, each element of ha_list
|
||||
is used to access storage engine's prepare()/commit()/rollback()
|
||||
methods, and also to evaluate if a full two phase commit is
|
||||
necessary.
|
||||
|
||||
@sa General description of transaction handling in handler.cc.
|
||||
*/
|
||||
|
||||
class Ha_trx_info
|
||||
{
|
||||
public:
|
||||
/** Register this storage engine in the given transaction context. */
|
||||
void register_ha(THD_TRANS *trans, handlerton *ht_arg)
|
||||
{
|
||||
DBUG_ASSERT(m_flags == 0);
|
||||
DBUG_ASSERT(m_ht == NULL);
|
||||
DBUG_ASSERT(m_next == NULL);
|
||||
|
||||
m_ht= ht_arg;
|
||||
m_flags= (int) TRX_READ_ONLY; /* Assume read-only at start. */
|
||||
|
||||
m_next= trans->ha_list;
|
||||
trans->ha_list= this;
|
||||
}
|
||||
|
||||
/** Clear, prepare for reuse. */
|
||||
void reset()
|
||||
{
|
||||
m_next= NULL;
|
||||
m_ht= NULL;
|
||||
m_flags= 0;
|
||||
}
|
||||
|
||||
Ha_trx_info() { reset(); }
|
||||
|
||||
void set_trx_read_write()
|
||||
{
|
||||
DBUG_ASSERT(is_started());
|
||||
m_flags|= (int) TRX_READ_WRITE;
|
||||
}
|
||||
bool is_trx_read_write() const
|
||||
{
|
||||
DBUG_ASSERT(is_started());
|
||||
return m_flags & (int) TRX_READ_WRITE;
|
||||
}
|
||||
bool is_started() const { return m_ht != NULL; }
|
||||
/** Mark this transaction read-write if the argument is read-write. */
|
||||
void coalesce_trx_with(const Ha_trx_info *stmt_trx)
|
||||
{
|
||||
/*
|
||||
Must be called only after the transaction has been started.
|
||||
Can be called many times, e.g. when we have many
|
||||
read-write statements in a transaction.
|
||||
*/
|
||||
DBUG_ASSERT(is_started());
|
||||
if (stmt_trx->is_trx_read_write())
|
||||
set_trx_read_write();
|
||||
}
|
||||
Ha_trx_info *next() const
|
||||
{
|
||||
DBUG_ASSERT(is_started());
|
||||
return m_next;
|
||||
}
|
||||
handlerton *ht() const
|
||||
{
|
||||
DBUG_ASSERT(is_started());
|
||||
return m_ht;
|
||||
}
|
||||
private:
|
||||
enum { TRX_READ_ONLY= 0, TRX_READ_WRITE= 1 };
|
||||
/** Auxiliary, used for ha_list management */
|
||||
Ha_trx_info *m_next;
|
||||
/**
|
||||
Although a given Ha_trx_info instance is currently always used
|
||||
for the same storage engine, 'ht' is not-NULL only when the
|
||||
corresponding storage is a part of a transaction.
|
||||
*/
|
||||
handlerton *m_ht;
|
||||
/**
|
||||
Transaction flags related to this engine.
|
||||
Not-null only if this instance is a part of transaction.
|
||||
May assume a combination of enum values above.
|
||||
*/
|
||||
uchar m_flags;
|
||||
};
|
||||
|
||||
|
||||
enum enum_tx_isolation { ISO_READ_UNCOMMITTED, ISO_READ_COMMITTED,
|
||||
ISO_REPEATABLE_READ, ISO_SERIALIZABLE};
|
||||
@ -1640,7 +1739,14 @@ protected:
|
||||
provide useful functionality.
|
||||
*/
|
||||
virtual int rename_table(const char *from, const char *to);
|
||||
/**
|
||||
Delete a table in the engine. Called for base as well as temporary
|
||||
tables.
|
||||
*/
|
||||
virtual int delete_table(const char *name);
|
||||
private:
|
||||
/* Private helpers */
|
||||
inline void mark_trx_read_write();
|
||||
private:
|
||||
/*
|
||||
Low-level primitives for storage engines. These should be
|
||||
@ -1821,9 +1927,7 @@ extern TYPELIB tx_isolation_typelib;
|
||||
extern TYPELIB myisam_stats_method_typelib;
|
||||
extern ulong total_ha, total_ha_2pc;
|
||||
|
||||
/* Wrapper functions */
|
||||
#define ha_commit_stmt(thd) (ha_commit_trans((thd), FALSE))
|
||||
#define ha_rollback_stmt(thd) (ha_rollback_trans((thd), FALSE))
|
||||
/* Wrapper functions */
|
||||
#define ha_commit(thd) (ha_commit_trans((thd), TRUE))
|
||||
#define ha_rollback(thd) (ha_rollback_trans((thd), TRUE))
|
||||
|
||||
|
104
sql/item.cc
104
sql/item.cc
@ -442,9 +442,10 @@ uint Item::decimal_precision() const
|
||||
}
|
||||
|
||||
|
||||
void Item::print_item_w_name(String *str)
|
||||
void Item::print_item_w_name(String *str, enum_query_type query_type)
|
||||
{
|
||||
print(str);
|
||||
print(str, query_type);
|
||||
|
||||
if (name)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
@ -1128,7 +1129,7 @@ Item_splocal::this_item_addr(THD *thd, Item **)
|
||||
}
|
||||
|
||||
|
||||
void Item_splocal::print(String *str)
|
||||
void Item_splocal::print(String *str, enum_query_type)
|
||||
{
|
||||
str->reserve(m_name.length+8);
|
||||
str->append(m_name.str, m_name.length);
|
||||
@ -1182,7 +1183,7 @@ Item_case_expr::this_item_addr(THD *thd, Item **)
|
||||
}
|
||||
|
||||
|
||||
void Item_case_expr::print(String *str)
|
||||
void Item_case_expr::print(String *str, enum_query_type)
|
||||
{
|
||||
if (str->reserve(MAX_INT_WIDTH + sizeof("case_expr@")))
|
||||
return; /* purecov: inspected */
|
||||
@ -1276,12 +1277,12 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref)
|
||||
}
|
||||
|
||||
|
||||
void Item_name_const::print(String *str)
|
||||
void Item_name_const::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("NAME_CONST("));
|
||||
name_item->print(str);
|
||||
name_item->print(str, query_type);
|
||||
str->append(',');
|
||||
value_item->print(str);
|
||||
value_item->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -1298,12 +1299,12 @@ public:
|
||||
const char *table_name_arg, const char *field_name_arg)
|
||||
:Item_ref(context_arg, item, table_name_arg, field_name_arg) {}
|
||||
|
||||
void print (String *str)
|
||||
virtual inline void print (String *str, enum_query_type query_type)
|
||||
{
|
||||
if (ref)
|
||||
(*ref)->print(str);
|
||||
(*ref)->print(str, query_type);
|
||||
else
|
||||
Item_ident::print(str);
|
||||
Item_ident::print(str, query_type);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1455,7 +1456,9 @@ bool DTCollation::aggregate(DTCollation &dt, uint flags)
|
||||
set(dt);
|
||||
}
|
||||
else
|
||||
; // Do nothing
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
else if ((flags & MY_COLL_ALLOW_SUPERSET_CONV) &&
|
||||
left_is_superset(this, &dt))
|
||||
@ -1872,7 +1875,7 @@ const char *Item_ident::full_name() const
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void Item_ident::print(String *str)
|
||||
void Item_ident::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
char d_name_buff[MAX_ALIAS_NAME], t_name_buff[MAX_ALIAS_NAME];
|
||||
@ -2134,7 +2137,7 @@ String *Item_int::val_str(String *str)
|
||||
return str;
|
||||
}
|
||||
|
||||
void Item_int::print(String *str)
|
||||
void Item_int::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
// my_charset_bin is good enough for numbers
|
||||
str_value.set(value, &my_charset_bin);
|
||||
@ -2165,7 +2168,7 @@ String *Item_uint::val_str(String *str)
|
||||
}
|
||||
|
||||
|
||||
void Item_uint::print(String *str)
|
||||
void Item_uint::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
// latin1 is good enough for numbers
|
||||
str_value.set((ulonglong) value, default_charset());
|
||||
@ -2257,7 +2260,7 @@ String *Item_decimal::val_str(String *result)
|
||||
return result;
|
||||
}
|
||||
|
||||
void Item_decimal::print(String *str)
|
||||
void Item_decimal::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
my_decimal2string(E_DEC_FATAL_ERROR, &decimal_value, 0, 0, 0, &str_value);
|
||||
str->append(str_value);
|
||||
@ -2310,12 +2313,39 @@ my_decimal *Item_float::val_decimal(my_decimal *decimal_value)
|
||||
}
|
||||
|
||||
|
||||
void Item_string::print(String *str)
|
||||
void Item_string::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('_');
|
||||
str->append(collation.collation->csname);
|
||||
if (query_type == QT_ORDINARY && is_cs_specified())
|
||||
{
|
||||
str->append('_');
|
||||
str->append(collation.collation->csname);
|
||||
}
|
||||
|
||||
str->append('\'');
|
||||
str_value.print(str);
|
||||
|
||||
if (query_type == QT_ORDINARY ||
|
||||
my_charset_same(str_value.charset(), system_charset_info))
|
||||
{
|
||||
str_value.print(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
LEX_STRING utf8_lex_str;
|
||||
|
||||
thd->convert_string(&utf8_lex_str,
|
||||
system_charset_info,
|
||||
str_value.c_ptr_safe(),
|
||||
str_value.length(),
|
||||
str_value.charset());
|
||||
|
||||
String utf8_str(utf8_lex_str.str,
|
||||
utf8_lex_str.length,
|
||||
system_charset_info);
|
||||
|
||||
utf8_str.print(str);
|
||||
}
|
||||
|
||||
str->append('\'');
|
||||
}
|
||||
|
||||
@ -3082,7 +3112,7 @@ Item_param::eq(const Item *arg, bool binary_cmp) const
|
||||
|
||||
/* End of Item_param related */
|
||||
|
||||
void Item_param::print(String *str)
|
||||
void Item_param::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (state == NO_VALUE)
|
||||
{
|
||||
@ -4795,7 +4825,7 @@ int Item_float::save_in_field(Field *field, bool no_conversions)
|
||||
}
|
||||
|
||||
|
||||
void Item_float::print(String *str)
|
||||
void Item_float::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (presentation)
|
||||
{
|
||||
@ -4913,7 +4943,7 @@ warn:
|
||||
}
|
||||
|
||||
|
||||
void Item_hex_string::print(String *str)
|
||||
void Item_hex_string::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
char *end= (char*) str_value.ptr() + str_value.length(),
|
||||
*ptr= end - min(str_value.length(), sizeof(longlong));
|
||||
@ -5175,7 +5205,7 @@ Item *Item_field::update_value_transformer(uchar *select_arg)
|
||||
}
|
||||
|
||||
|
||||
void Item_field::print(String *str)
|
||||
void Item_field::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (field && field->table->const_table)
|
||||
{
|
||||
@ -5187,7 +5217,7 @@ void Item_field::print(String *str)
|
||||
str->append('\'');
|
||||
return;
|
||||
}
|
||||
Item_ident::print(str);
|
||||
Item_ident::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -5527,7 +5557,7 @@ void Item_ref::cleanup()
|
||||
}
|
||||
|
||||
|
||||
void Item_ref::print(String *str)
|
||||
void Item_ref::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (ref)
|
||||
{
|
||||
@ -5538,10 +5568,10 @@ void Item_ref::print(String *str)
|
||||
append_identifier(thd, str, name, (uint) strlen(name));
|
||||
}
|
||||
else
|
||||
(*ref)->print(str);
|
||||
(*ref)->print(str, query_type);
|
||||
}
|
||||
else
|
||||
Item_ident::print(str);
|
||||
Item_ident::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -5731,11 +5761,11 @@ Item *Item_ref::get_tmp_table_item(THD *thd)
|
||||
}
|
||||
|
||||
|
||||
void Item_ref_null_helper::print(String *str)
|
||||
void Item_ref_null_helper::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("<ref_null_helper>("));
|
||||
if (ref)
|
||||
(*ref)->print(str);
|
||||
(*ref)->print(str, query_type);
|
||||
else
|
||||
str->append('?');
|
||||
str->append(')');
|
||||
@ -5927,7 +5957,7 @@ error:
|
||||
}
|
||||
|
||||
|
||||
void Item_default_value::print(String *str)
|
||||
void Item_default_value::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (!arg)
|
||||
{
|
||||
@ -5935,7 +5965,7 @@ void Item_default_value::print(String *str)
|
||||
return;
|
||||
}
|
||||
str->append(STRING_WITH_LEN("default("));
|
||||
arg->print(str);
|
||||
arg->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -6071,10 +6101,10 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void Item_insert_value::print(String *str)
|
||||
void Item_insert_value::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("values("));
|
||||
arg->print(str);
|
||||
arg->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -6195,7 +6225,7 @@ bool Item_trigger_field::fix_fields(THD *thd, Item **items)
|
||||
}
|
||||
|
||||
|
||||
void Item_trigger_field::print(String *str)
|
||||
void Item_trigger_field::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append((row_version == NEW_ROW) ? "NEW" : "OLD", 3);
|
||||
str->append('.');
|
||||
@ -6385,13 +6415,13 @@ Item_cache* Item_cache::get_cache(const Item *item)
|
||||
}
|
||||
|
||||
|
||||
void Item_cache::print(String *str)
|
||||
void Item_cache::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("<cache>("));
|
||||
if (example)
|
||||
example->print(str);
|
||||
example->print(str, query_type);
|
||||
else
|
||||
Item::print(str);
|
||||
Item::print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
176
sql/item.h
176
sql/item.h
@ -113,7 +113,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*
|
||||
A framework to easily handle different return types for hybrid items
|
||||
@ -769,20 +768,24 @@ public:
|
||||
*/
|
||||
virtual bool const_during_execution() const
|
||||
{ return (used_tables() & ~PARAM_TABLE_BIT) == 0; }
|
||||
/*
|
||||
This is an essential method for correct functioning of VIEWS.
|
||||
To save a view in an .frm file we need its unequivocal
|
||||
definition in SQL that takes into account sql_mode and
|
||||
environmental settings. Currently such definition is restored
|
||||
by traversing through the parsed tree of a view and
|
||||
print()'ing SQL syntax of every node to a String buffer. This
|
||||
method is used to print the SQL definition of an item. The
|
||||
second use of this method is for EXPLAIN EXTENDED, to print
|
||||
the SQL of a query after all optimizations of the parsed tree
|
||||
have been done.
|
||||
|
||||
/**
|
||||
This method is used for to:
|
||||
- to generate a view definition query (SELECT-statement);
|
||||
- to generate a SQL-query for EXPLAIN EXTENDED;
|
||||
- to generate a SQL-query to be shown in INFORMATION_SCHEMA;
|
||||
- debug.
|
||||
|
||||
For more information about view definition query, INFORMATION_SCHEMA
|
||||
query and why they should be generated from the Item-tree, @see
|
||||
mysql_register_view().
|
||||
*/
|
||||
virtual void print(String *str_arg) { str_arg->append(full_name()); }
|
||||
void print_item_w_name(String *);
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(full_name());
|
||||
}
|
||||
|
||||
void print_item_w_name(String *, enum_query_type query_type);
|
||||
virtual void update_used_tables() {}
|
||||
virtual void split_sum_func(THD *thd, Item **ref_pointer_array,
|
||||
List<Item> &fields) {}
|
||||
@ -1010,6 +1013,23 @@ public:
|
||||
class sp_head;
|
||||
|
||||
|
||||
class Item_basic_constant :public Item
|
||||
{
|
||||
public:
|
||||
/* to prevent drop fixed flag (no need parent cleanup call) */
|
||||
void cleanup()
|
||||
{
|
||||
/*
|
||||
Restore the original field name as it might not have been allocated
|
||||
in the statement memory. If the name is auto generated, it must be
|
||||
done again between subsequent executions of a prepared statement.
|
||||
*/
|
||||
if (orig_name)
|
||||
name= orig_name;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
The class is a base class for representation of stored routine variables in
|
||||
the Item-hierarchy. There are the following kinds of SP-vars:
|
||||
@ -1134,7 +1154,7 @@ public:
|
||||
const Item *this_item() const;
|
||||
Item **this_item_addr(THD *thd, Item **);
|
||||
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
public:
|
||||
inline const LEX_STRING *my_name() const;
|
||||
@ -1203,7 +1223,7 @@ public:
|
||||
Item_case_expr can not occur in views, so here it is only for debug
|
||||
purposes.
|
||||
*/
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
private:
|
||||
uint m_case_expr_id;
|
||||
@ -1261,7 +1281,7 @@ public:
|
||||
String *val_str(String *sp);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool is_null();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
Item_result result_type() const
|
||||
{
|
||||
@ -1292,7 +1312,7 @@ bool agg_item_charsets(DTCollation &c, const char *name,
|
||||
Item **items, uint nitems, uint flags, int item_sep);
|
||||
|
||||
|
||||
class Item_num: public Item
|
||||
class Item_num: public Item_basic_constant
|
||||
{
|
||||
public:
|
||||
Item_num() {} /* Remove gcc warning */
|
||||
@ -1343,7 +1363,7 @@ public:
|
||||
const char *full_name() const;
|
||||
void cleanup();
|
||||
bool remove_dependence_processor(uchar * arg);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
virtual bool change_context_processor(uchar *cntx)
|
||||
{ context= (Name_resolution_context *)cntx; return FALSE; }
|
||||
friend bool insert_fields(THD *thd, Name_resolution_context *context,
|
||||
@ -1473,7 +1493,7 @@ public:
|
||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
int fix_outer_field(THD *thd, Field **field, Item **reference);
|
||||
virtual Item *update_value_transformer(uchar *select_arg);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Field::geometry_type get_geometry_type() const
|
||||
{
|
||||
DBUG_ASSERT(field_type() == MYSQL_TYPE_GEOMETRY);
|
||||
@ -1484,7 +1504,7 @@ public:
|
||||
friend class st_select_lex_unit;
|
||||
};
|
||||
|
||||
class Item_null :public Item
|
||||
class Item_null :public Item_basic_constant
|
||||
{
|
||||
public:
|
||||
Item_null(char *name_par=0)
|
||||
@ -1506,12 +1526,15 @@ public:
|
||||
bool send(Protocol *protocol, String *str);
|
||||
enum Item_result result_type () const { return STRING_RESULT; }
|
||||
enum_field_types field_type() const { return MYSQL_TYPE_NULL; }
|
||||
/* to prevent drop fixed flag (no need parent cleanup call) */
|
||||
void cleanup() {}
|
||||
bool basic_const_item() const { return 1; }
|
||||
Item *clone_item() { return new Item_null(name); }
|
||||
bool is_null() { return 1; }
|
||||
void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("NULL"));
|
||||
}
|
||||
|
||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
};
|
||||
@ -1645,7 +1668,7 @@ public:
|
||||
*/
|
||||
virtual table_map used_tables() const
|
||||
{ return state != NO_VALUE ? (table_map)0 : PARAM_TABLE_BIT; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool is_null()
|
||||
{ DBUG_ASSERT(state != NO_VALUE); return state == NULL_VALUE; }
|
||||
bool basic_const_item() const;
|
||||
@ -1701,9 +1724,7 @@ public:
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
bool basic_const_item() const { return 1; }
|
||||
Item *clone_item() { return new Item_int(name,value,max_length); }
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item_num *neg() { value= -value; return this; }
|
||||
uint decimal_precision() const
|
||||
{ return (uint)(max_length - test(value < 0)); }
|
||||
@ -1723,7 +1744,7 @@ public:
|
||||
String *val_str(String*);
|
||||
Item *clone_item() { return new Item_uint(name, value, max_length); }
|
||||
int save_in_field(Field *field, bool no_conversions);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item_num *neg ();
|
||||
uint decimal_precision() const { return max_length; }
|
||||
bool check_partition_func_processor(uchar *bool_arg) { return FALSE;}
|
||||
@ -1757,9 +1778,7 @@ public:
|
||||
{
|
||||
return new Item_decimal(name, &decimal_value, decimals, max_length);
|
||||
}
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item_num *neg()
|
||||
{
|
||||
my_decimal_neg(&decimal_value);
|
||||
@ -1813,12 +1832,10 @@ public:
|
||||
String *val_str(String*);
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool basic_const_item() const { return 1; }
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
Item *clone_item()
|
||||
{ return new Item_float(name, value, decimals, max_length); }
|
||||
Item_num *neg() { value= -value; return this; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool eq(const Item *, bool binary_cmp) const;
|
||||
};
|
||||
|
||||
@ -1831,17 +1848,23 @@ public:
|
||||
uint length)
|
||||
:Item_float(NullS, val_arg, decimal_par, length), func_name(str)
|
||||
{}
|
||||
void print(String *str) { str->append(func_name); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name);
|
||||
}
|
||||
|
||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
};
|
||||
|
||||
|
||||
class Item_string :public Item
|
||||
class Item_string :public Item_basic_constant
|
||||
{
|
||||
public:
|
||||
Item_string(const char *str,uint length,
|
||||
CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE,
|
||||
uint repertoire= MY_REPERTOIRE_UNICODE30)
|
||||
: m_cs_specified(FALSE)
|
||||
{
|
||||
str_value.set_or_copy_aligned(str, length, cs);
|
||||
collation.set(cs, dv, repertoire);
|
||||
@ -1860,6 +1883,7 @@ public:
|
||||
}
|
||||
/* Just create an item and do not fill string representation */
|
||||
Item_string(CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE)
|
||||
: m_cs_specified(FALSE)
|
||||
{
|
||||
collation.set(cs, dv);
|
||||
max_length= 0;
|
||||
@ -1870,6 +1894,7 @@ public:
|
||||
Item_string(const char *name_par, const char *str, uint length,
|
||||
CHARSET_INFO *cs, Derivation dv= DERIVATION_COERCIBLE,
|
||||
uint repertoire= MY_REPERTOIRE_UNICODE30)
|
||||
: m_cs_specified(FALSE)
|
||||
{
|
||||
str_value.set_or_copy_aligned(str, length, cs);
|
||||
collation.set(cs, dv, repertoire);
|
||||
@ -1919,10 +1944,50 @@ public:
|
||||
str_value.append(str, length);
|
||||
max_length= str_value.numchars() * collation.collation->mbmaxlen;
|
||||
}
|
||||
void print(String *str);
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
|
||||
/**
|
||||
Return TRUE if character-set-introducer was explicitly specified in the
|
||||
original query for this item (text literal).
|
||||
|
||||
This operation is to be called from Item_string::print(). The idea is
|
||||
that when a query is generated (re-constructed) from the Item-tree,
|
||||
character-set-introducers should appear only for those literals, where
|
||||
they were explicitly specified by the user. Otherwise, that may lead to
|
||||
loss collation information (character set introducers implies default
|
||||
collation for the literal).
|
||||
|
||||
Basically, that makes sense only for views and hopefully will be gone
|
||||
one day when we start using original query as a view definition.
|
||||
|
||||
@return This operation returns the value of m_cs_specified attribute.
|
||||
@retval TRUE if character set introducer was explicitly specified in
|
||||
the original query.
|
||||
@retval FALSE otherwise.
|
||||
*/
|
||||
inline bool is_cs_specified() const
|
||||
{
|
||||
return m_cs_specified;
|
||||
}
|
||||
|
||||
/**
|
||||
Set the value of m_cs_specified attribute.
|
||||
|
||||
m_cs_specified attribute shows whether character-set-introducer was
|
||||
explicitly specified in the original query for this text literal or
|
||||
not. The attribute makes sense (is used) only for views.
|
||||
|
||||
This operation is to be called from the parser during parsing an input
|
||||
query.
|
||||
*/
|
||||
inline void set_cs_specified(bool cs_specified)
|
||||
{
|
||||
m_cs_specified= cs_specified;
|
||||
}
|
||||
|
||||
private:
|
||||
bool m_cs_specified;
|
||||
};
|
||||
|
||||
|
||||
@ -1936,7 +2001,12 @@ public:
|
||||
:Item_string(NullS, str, length, cs, dv), func_name(name_par)
|
||||
{}
|
||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
void print(String *str) { str->append(func_name); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name);
|
||||
}
|
||||
|
||||
bool check_partition_func_processor(uchar *int_arg) {return TRUE;}
|
||||
};
|
||||
|
||||
@ -2005,10 +2075,10 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class Item_hex_string: public Item
|
||||
class Item_hex_string: public Item_basic_constant
|
||||
{
|
||||
public:
|
||||
Item_hex_string(): Item() {}
|
||||
Item_hex_string() {}
|
||||
Item_hex_string(const char *str,uint str_length);
|
||||
enum Type type() const { return VARBIN_ITEM; }
|
||||
double val_real()
|
||||
@ -2024,9 +2094,7 @@ public:
|
||||
enum Item_result result_type () const { return STRING_RESULT; }
|
||||
enum Item_result cast_to_int_type() const { return INT_RESULT; }
|
||||
enum_field_types field_type() const { return MYSQL_TYPE_VARCHAR; }
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
virtual Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
@ -2147,7 +2215,7 @@ public:
|
||||
}
|
||||
bool walk(Item_processor processor, bool walk_subquery, uchar *arg)
|
||||
{ return (*ref)->walk(processor, walk_subquery, arg); }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool result_as_longlong()
|
||||
{
|
||||
return (*ref)->result_as_longlong();
|
||||
@ -2294,7 +2362,7 @@ public:
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool val_bool();
|
||||
bool get_date(MYSQL_TIME *ltime, uint fuzzydate);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
/*
|
||||
we add RAND_TABLE_BIT to prevent moving this item from HAVING to WHERE
|
||||
*/
|
||||
@ -2469,7 +2537,7 @@ public:
|
||||
enum Type type() const { return DEFAULT_VALUE_ITEM; }
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
bool fix_fields(THD *, Item **);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
int save_in_field(Field *field_arg, bool no_conversions);
|
||||
table_map used_tables() const { return (table_map)0L; }
|
||||
|
||||
@ -2502,7 +2570,7 @@ public:
|
||||
arg(a) {}
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
bool fix_fields(THD *, Item **);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
int save_in_field(Field *field_arg, bool no_conversions)
|
||||
{
|
||||
return Item_field::save_in_field(field_arg, no_conversions);
|
||||
@ -2573,7 +2641,7 @@ public:
|
||||
enum Type type() const { return TRIGGER_FIELD_ITEM; }
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
bool fix_fields(THD *, Item **);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
table_map used_tables() const { return (table_map)0L; }
|
||||
Field *get_tmp_table_field() { return 0; }
|
||||
Item *copy_or_same(THD *thd) { return this; }
|
||||
@ -2617,7 +2685,7 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class Item_cache: public Item
|
||||
class Item_cache: public Item_basic_constant
|
||||
{
|
||||
protected:
|
||||
Item *example;
|
||||
@ -2664,9 +2732,7 @@ public:
|
||||
static Item_cache* get_cache(const Item *item);
|
||||
table_map used_tables() const { return used_table_map; }
|
||||
virtual void keep_array() {}
|
||||
// to prevent drop fixed flag (no need parent cleanup call)
|
||||
void cleanup() {}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool eq_def(Field *field)
|
||||
{
|
||||
return cached_field ? cached_field->eq_def (field) : FALSE;
|
||||
|
@ -286,10 +286,10 @@ longlong Item_func_not::val_int()
|
||||
higher than the precedence of NOT.
|
||||
*/
|
||||
|
||||
void Item_func_not::print(String *str)
|
||||
void Item_func_not::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
Item_func::print(str);
|
||||
Item_func::print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -321,12 +321,12 @@ bool Item_func_not_all::empty_underlying_subquery()
|
||||
(test_sub_item && !test_sub_item->any_value()));
|
||||
}
|
||||
|
||||
void Item_func_not_all::print(String *str)
|
||||
void Item_func_not_all::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (show)
|
||||
Item_func::print(str);
|
||||
Item_func::print(str, query_type);
|
||||
else
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -1422,10 +1422,10 @@ void Item_func_truth::fix_length_and_dec()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_truth::print(String *str)
|
||||
void Item_func_truth::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" is "));
|
||||
if (! affirmative)
|
||||
str->append(STRING_WITH_LEN("not "));
|
||||
@ -2109,16 +2109,16 @@ longlong Item_func_between::val_int()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_between::print(String *str)
|
||||
void Item_func_between::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
if (negated)
|
||||
str->append(STRING_WITH_LEN(" not"));
|
||||
str->append(STRING_WITH_LEN(" between "));
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" and "));
|
||||
args[2]->print(str);
|
||||
args[2]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -2763,26 +2763,26 @@ uint Item_func_case::decimal_precision() const
|
||||
Fix this so that it prints the whole CASE expression
|
||||
*/
|
||||
|
||||
void Item_func_case::print(String *str)
|
||||
void Item_func_case::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("(case "));
|
||||
if (first_expr_num != -1)
|
||||
{
|
||||
args[first_expr_num]->print(str);
|
||||
args[first_expr_num]->print(str, query_type);
|
||||
str->append(' ');
|
||||
}
|
||||
for (uint i=0 ; i < ncases ; i+=2)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("when "));
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" then "));
|
||||
args[i+1]->print(str);
|
||||
args[i+1]->print(str, query_type);
|
||||
str->append(' ');
|
||||
}
|
||||
if (else_expr_num != -1)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("else "));
|
||||
args[else_expr_num]->print(str);
|
||||
args[else_expr_num]->print(str, query_type);
|
||||
str->append(' ');
|
||||
}
|
||||
str->append(STRING_WITH_LEN("end)"));
|
||||
@ -3706,14 +3706,14 @@ void Item_func_in::fix_length_and_dec()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_in::print(String *str)
|
||||
void Item_func_in::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
if (negated)
|
||||
str->append(STRING_WITH_LEN(" not"));
|
||||
str->append(STRING_WITH_LEN(" in ("));
|
||||
print_args(str, 1);
|
||||
print_args(str, 1, query_type);
|
||||
str->append(STRING_WITH_LEN("))"));
|
||||
}
|
||||
|
||||
@ -4084,19 +4084,19 @@ void Item_cond::update_used_tables()
|
||||
}
|
||||
|
||||
|
||||
void Item_cond::print(String *str)
|
||||
void Item_cond::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
List_iterator_fast<Item> li(list);
|
||||
Item *item;
|
||||
if ((item=li++))
|
||||
item->print(str);
|
||||
item->print(str, query_type);
|
||||
while ((item=li++))
|
||||
{
|
||||
str->append(' ');
|
||||
str->append(func_name());
|
||||
str->append(' ');
|
||||
item->print(str);
|
||||
item->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -4279,10 +4279,10 @@ longlong Item_func_isnotnull::val_int()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_isnotnull::print(String *str)
|
||||
void Item_func_isnotnull::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" is not null)"));
|
||||
}
|
||||
|
||||
@ -5276,24 +5276,24 @@ Item *Item_equal::transform(Item_transformer transformer, uchar *arg)
|
||||
return Item_func::transform(transformer, arg);
|
||||
}
|
||||
|
||||
void Item_equal::print(String *str)
|
||||
void Item_equal::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
List_iterator_fast<Item_field> it(fields);
|
||||
Item *item;
|
||||
if (const_item)
|
||||
const_item->print(str);
|
||||
const_item->print(str, query_type);
|
||||
else
|
||||
{
|
||||
item= it++;
|
||||
item->print(str);
|
||||
item->print(str, query_type);
|
||||
}
|
||||
while ((item= it++))
|
||||
{
|
||||
str->append(',');
|
||||
str->append(' ');
|
||||
item->print(str);
|
||||
item->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
|
@ -123,7 +123,7 @@ public:
|
||||
virtual bool val_bool();
|
||||
virtual longlong val_int();
|
||||
virtual void fix_length_and_dec();
|
||||
virtual void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
protected:
|
||||
Item_func_truth(Item *a, bool a_value, bool a_affirmative)
|
||||
@ -338,7 +338,12 @@ public:
|
||||
optimize_type select_optimize() const { return OPTIMIZE_OP; }
|
||||
virtual enum Functype rev_functype() const { return UNKNOWN_FUNC; }
|
||||
bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; }
|
||||
void print(String *str) { Item_func::print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
Item_func::print_op(str, query_type);
|
||||
}
|
||||
|
||||
bool is_null() { return test(args[0]->is_null() || args[1]->is_null()); }
|
||||
bool is_bool_func() { return 1; }
|
||||
CHARSET_INFO *compare_collation() { return cmp.cmp_collation.collation; }
|
||||
@ -368,7 +373,7 @@ public:
|
||||
enum Functype functype() const { return NOT_FUNC; }
|
||||
const char *func_name() const { return "not"; }
|
||||
Item *neg_transformer(THD *thd);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
class Item_maxmin_subselect;
|
||||
@ -433,7 +438,7 @@ public:
|
||||
longlong val_int();
|
||||
enum Functype functype() const { return NOT_ALL_FUNC; }
|
||||
const char *func_name() const { return "<not>"; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
||||
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; };
|
||||
bool empty_underlying_subquery();
|
||||
@ -594,7 +599,7 @@ public:
|
||||
const char *func_name() const { return "between"; }
|
||||
bool fix_fields(THD *, Item **);
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool is_bool_func() { return 1; }
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
uint decimal_precision() const { return 1; }
|
||||
@ -608,7 +613,11 @@ public:
|
||||
longlong val_int();
|
||||
optimize_type select_optimize() const { return OPTIMIZE_NONE; }
|
||||
const char *func_name() const { return "strcmp"; }
|
||||
void print(String *str) { Item_func::print(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
Item_func::print(str, query_type);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -711,7 +720,12 @@ public:
|
||||
void fix_length_and_dec();
|
||||
uint decimal_precision() const { return args[0]->decimal_precision(); }
|
||||
const char *func_name() const { return "nullif"; }
|
||||
void print(String *str) { Item_func::print(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
Item_func::print(str, query_type);
|
||||
}
|
||||
|
||||
table_map not_null_tables() const { return 0; }
|
||||
bool is_null();
|
||||
};
|
||||
@ -1141,7 +1155,7 @@ public:
|
||||
enum Item_result result_type () const { return cached_result_type; }
|
||||
enum_field_types field_type() const { return cached_field_type; }
|
||||
const char *func_name() const { return "case"; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item *find_item(String *str);
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
void cleanup();
|
||||
@ -1208,7 +1222,7 @@ public:
|
||||
}
|
||||
optimize_type select_optimize() const
|
||||
{ return OPTIMIZE_KEY; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
enum Functype functype() const { return IN_FUNC; }
|
||||
const char *func_name() const { return " IN "; }
|
||||
bool nulls_in_row();
|
||||
@ -1330,7 +1344,7 @@ public:
|
||||
table_map not_null_tables() const
|
||||
{ return abort_on_null ? not_null_tables_cache : 0; }
|
||||
Item *neg_transformer(THD *thd);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
CHARSET_INFO *compare_collation() { return args[0]->collation.collation; }
|
||||
void top_level_item() { abort_on_null=1; }
|
||||
};
|
||||
@ -1395,7 +1409,12 @@ public:
|
||||
longlong val_int();
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
const char *func_name() const { return "regexp"; }
|
||||
void print(String *str) { print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
print_op(str, query_type);
|
||||
}
|
||||
|
||||
CHARSET_INFO *compare_collation() { return cmp_collation.collation; }
|
||||
};
|
||||
|
||||
@ -1407,7 +1426,11 @@ public:
|
||||
Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b) {}
|
||||
longlong val_int() { return 0;}
|
||||
const char *func_name() const { return "regex"; }
|
||||
void print(String *str) { print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
print_op(str, query_type);
|
||||
}
|
||||
};
|
||||
|
||||
#endif /* USE_REGEX */
|
||||
@ -1444,7 +1467,7 @@ public:
|
||||
List<Item>* argument_list() { return &list; }
|
||||
table_map used_tables() const;
|
||||
void update_used_tables();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void split_sum_func(THD *thd, Item **ref_pointer_array, List<Item> &fields);
|
||||
friend int setup_conds(THD *thd, TABLE_LIST *tables, TABLE_LIST *leaves,
|
||||
COND **conds);
|
||||
@ -1568,7 +1591,7 @@ public:
|
||||
void update_used_tables();
|
||||
bool walk(Item_processor processor, bool walk_subquery, uchar *arg);
|
||||
Item *transform(Item_transformer transformer, uchar *arg);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
CHARSET_INFO *compare_collation()
|
||||
{ return fields.head()->collation.collation; }
|
||||
};
|
||||
|
@ -374,37 +374,37 @@ table_map Item_func::not_null_tables() const
|
||||
}
|
||||
|
||||
|
||||
void Item_func::print(String *str)
|
||||
void Item_func::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
print_args(str, 0);
|
||||
print_args(str, 0, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
void Item_func::print_args(String *str, uint from)
|
||||
void Item_func::print_args(String *str, uint from, enum_query_type query_type)
|
||||
{
|
||||
for (uint i=from ; i < arg_count ; i++)
|
||||
{
|
||||
if (i != from)
|
||||
str->append(',');
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Item_func::print_op(String *str)
|
||||
void Item_func::print_op(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
for (uint i=0 ; i < arg_count-1 ; i++)
|
||||
{
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
str->append(' ');
|
||||
str->append(func_name());
|
||||
str->append(' ');
|
||||
}
|
||||
args[arg_count-1]->print(str);
|
||||
args[arg_count-1]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -884,10 +884,10 @@ my_decimal *Item_func_numhybrid::val_decimal(my_decimal *decimal_value)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_signed::print(String *str)
|
||||
void Item_func_signed::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as signed)"));
|
||||
|
||||
}
|
||||
@ -955,10 +955,10 @@ longlong Item_func_signed::val_int()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_unsigned::print(String *str)
|
||||
void Item_func_unsigned::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as unsigned)"));
|
||||
|
||||
}
|
||||
@ -1064,7 +1064,7 @@ err:
|
||||
}
|
||||
|
||||
|
||||
void Item_decimal_typecast::print(String *str)
|
||||
void Item_decimal_typecast::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
char len_buf[20*3 + 1];
|
||||
char *end;
|
||||
@ -1072,7 +1072,7 @@ void Item_decimal_typecast::print(String *str)
|
||||
uint precision= my_decimal_length_to_precision(max_length, decimals,
|
||||
unsigned_flag);
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as decimal("));
|
||||
|
||||
end=int10_to_str(precision, len_buf,10);
|
||||
@ -2537,16 +2537,16 @@ longlong Item_func_locate::val_int()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_locate::print(String *str)
|
||||
void Item_func_locate::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("locate("));
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(',');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
if (arg_count == 3)
|
||||
{
|
||||
str->append(',');
|
||||
args[2]->print(str);
|
||||
args[2]->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -3095,7 +3095,7 @@ void Item_udf_func::cleanup()
|
||||
}
|
||||
|
||||
|
||||
void Item_udf_func::print(String *str)
|
||||
void Item_udf_func::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
@ -3103,7 +3103,7 @@ void Item_udf_func::print(String *str)
|
||||
{
|
||||
if (i != 0)
|
||||
str->append(',');
|
||||
args[i]->print_item_w_name(str);
|
||||
args[i]->print_item_w_name(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -3683,12 +3683,12 @@ longlong Item_func_benchmark::val_int()
|
||||
}
|
||||
|
||||
|
||||
void Item_func_benchmark::print(String *str)
|
||||
void Item_func_benchmark::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("benchmark("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(',');
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -4264,22 +4264,23 @@ my_decimal *Item_func_set_user_var::val_decimal_result(my_decimal *val)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_set_user_var::print(String *str)
|
||||
void Item_func_set_user_var::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("(@"));
|
||||
str->append(name.str, name.length);
|
||||
str->append(STRING_WITH_LEN(":="));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
void Item_func_set_user_var::print_as_stmt(String *str)
|
||||
void Item_func_set_user_var::print_as_stmt(String *str,
|
||||
enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("set @"));
|
||||
str->append(name.str, name.length);
|
||||
str->append(STRING_WITH_LEN(":="));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -4652,7 +4653,7 @@ enum Item_result Item_func_get_user_var::result_type() const
|
||||
}
|
||||
|
||||
|
||||
void Item_func_get_user_var::print(String *str)
|
||||
void Item_func_get_user_var::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("(@"));
|
||||
str->append(name.str,name.length);
|
||||
@ -4750,7 +4751,7 @@ my_decimal* Item_user_var_as_out_param::val_decimal(my_decimal *decimal_buffer)
|
||||
}
|
||||
|
||||
|
||||
void Item_user_var_as_out_param::print(String *str)
|
||||
void Item_user_var_as_out_param::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('@');
|
||||
str->append(name.str,name.length);
|
||||
@ -5089,12 +5090,12 @@ double Item_func_match::val_real()
|
||||
table->record[0], 0));
|
||||
}
|
||||
|
||||
void Item_func_match::print(String *str)
|
||||
void Item_func_match::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("(match "));
|
||||
print_args(str, 1);
|
||||
print_args(str, 1, query_type);
|
||||
str->append(STRING_WITH_LEN(" against ("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
if (flags & FT_BOOL)
|
||||
str->append(STRING_WITH_LEN(" in boolean mode"));
|
||||
else if (flags & FT_EXPAND)
|
||||
@ -5505,7 +5506,7 @@ Item_result
|
||||
Item_func_sp::result_type() const
|
||||
{
|
||||
DBUG_ENTER("Item_func_sp::result_type");
|
||||
DBUG_PRINT("info", ("m_sp = %p", m_sp));
|
||||
DBUG_PRINT("info", ("m_sp = %p", (void *) m_sp));
|
||||
DBUG_ASSERT(sp_result_field);
|
||||
DBUG_RETURN(sp_result_field->result_type());
|
||||
}
|
||||
|
@ -140,9 +140,9 @@ public:
|
||||
inline uint argument_count() const { return arg_count; }
|
||||
inline void remove_arguments() { arg_count=0; }
|
||||
void split_sum_func(THD *thd, Item **ref_pointer_array, List<Item> &fields);
|
||||
void print(String *str);
|
||||
void print_op(String *str);
|
||||
void print_args(String *str, uint from);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void print_op(String *str, enum_query_type query_type);
|
||||
void print_args(String *str, uint from, enum_query_type query_type);
|
||||
virtual void fix_num_length_and_dec();
|
||||
void count_only_length();
|
||||
void count_real_length();
|
||||
@ -293,7 +293,12 @@ class Item_num_op :public Item_func_numhybrid
|
||||
public:
|
||||
Item_num_op(Item *a,Item *b) :Item_func_numhybrid(a, b) {}
|
||||
virtual void result_precision()= 0;
|
||||
void print(String *str) { print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
print_op(str, query_type);
|
||||
}
|
||||
|
||||
void find_num_type();
|
||||
String *str_op(String *str) { DBUG_ASSERT(0); return 0; }
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
@ -339,7 +344,7 @@ public:
|
||||
longlong val_int_from_str(int *error);
|
||||
void fix_length_and_dec()
|
||||
{ max_length=args[0]->max_length; unsigned_flag=0; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
uint decimal_precision() const { return args[0]->decimal_precision(); }
|
||||
};
|
||||
|
||||
@ -352,7 +357,7 @@ public:
|
||||
void fix_length_and_dec()
|
||||
{ max_length=args[0]->max_length; unsigned_flag=1; }
|
||||
longlong val_int();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -373,7 +378,7 @@ public:
|
||||
enum_field_types field_type() const { return MYSQL_TYPE_NEWDECIMAL; }
|
||||
void fix_length_and_dec() {};
|
||||
const char *func_name() const { return "decimal_typecast"; }
|
||||
void print(String *);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -441,7 +446,12 @@ public:
|
||||
longlong val_int();
|
||||
const char *func_name() const { return "DIV"; }
|
||||
void fix_length_and_dec();
|
||||
void print(String *str) { print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
print_op(str, query_type);
|
||||
}
|
||||
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
};
|
||||
|
||||
@ -843,7 +853,7 @@ public:
|
||||
const char *func_name() const { return "locate"; }
|
||||
longlong val_int();
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -900,7 +910,11 @@ public:
|
||||
Item_func_bit(Item *a, Item *b) :Item_int_func(a, b) {}
|
||||
Item_func_bit(Item *a) :Item_int_func(a) {}
|
||||
void fix_length_and_dec() { unsigned_flag= 1; }
|
||||
void print(String *str) { print_op(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
print_op(str, query_type);
|
||||
}
|
||||
};
|
||||
|
||||
class Item_func_bit_or :public Item_func_bit
|
||||
@ -950,7 +964,11 @@ public:
|
||||
Item_func_bit_neg(Item *a) :Item_func_bit(a) {}
|
||||
longlong val_int();
|
||||
const char *func_name() const { return "~"; }
|
||||
void print(String *str) { Item_func::print(str); }
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
Item_func::print(str, query_type);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -979,7 +997,7 @@ public:
|
||||
longlong val_int();
|
||||
const char *func_name() const { return "benchmark"; }
|
||||
void fix_length_and_dec() { max_length=1; maybe_null=0; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -1076,7 +1094,7 @@ public:
|
||||
Item_result result_type () const { return udf.result_type(); }
|
||||
table_map not_null_tables() const { return 0; }
|
||||
bool is_expensive() { return 1; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -1313,8 +1331,8 @@ public:
|
||||
enum Item_result result_type () const { return cached_result_type; }
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
void print_as_stmt(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void print_as_stmt(String *str, enum_query_type query_type);
|
||||
const char *func_name() const { return "set_user_var"; }
|
||||
int save_in_field(Field *field, bool no_conversions,
|
||||
bool can_use_result_field);
|
||||
@ -1344,7 +1362,7 @@ public:
|
||||
my_decimal *val_decimal(my_decimal*);
|
||||
String *val_str(String* str);
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
enum Item_result result_type() const;
|
||||
/*
|
||||
We must always return variables as strings to guard against selects of type
|
||||
@ -1389,7 +1407,7 @@ public:
|
||||
my_decimal *val_decimal(my_decimal *decimal_buffer);
|
||||
/* fix_fields() binds variable name with its entry structure */
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void set_null_value(CHARSET_INFO* cs);
|
||||
void set_value(const char *str, uint length, CHARSET_INFO* cs);
|
||||
};
|
||||
@ -1467,7 +1485,7 @@ public:
|
||||
/* The following should be safe, even if we compare doubles */
|
||||
longlong val_int() { DBUG_ASSERT(fixed == 1); return val_real() != 0.0; }
|
||||
double val_real();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
bool fix_index();
|
||||
void init_search(bool no_order);
|
||||
|
@ -224,8 +224,13 @@ public:
|
||||
DBUG_ASSERT(0); // Should never happened
|
||||
return "sp_unknown";
|
||||
}
|
||||
}
|
||||
void print(String *str) { Item_func::print(str); }
|
||||
}
|
||||
|
||||
virtual inline void print(String *str, enum_query_type query_type)
|
||||
{
|
||||
Item_func::print(str, query_type);
|
||||
}
|
||||
|
||||
void fix_length_and_dec() { maybe_null= 1; }
|
||||
bool is_null() { (void) val_int(); return null_value; }
|
||||
};
|
||||
|
@ -134,14 +134,14 @@ bool Item_row::check_cols(uint c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Item_row::print(String *str)
|
||||
void Item_row::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
for (uint i= 0; i < arg_count; i++)
|
||||
{
|
||||
if (i)
|
||||
str->append(',');
|
||||
items[i]->print(str);
|
||||
items[i]->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ public:
|
||||
bool const_item() const { return const_item_cache; };
|
||||
enum Item_result result_type() const { return ROW_RESULT; }
|
||||
void update_used_tables();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
bool walk(Item_processor processor, bool walk_subquery, uchar *arg);
|
||||
Item *transform(Item_transformer transformer, uchar *arg);
|
||||
|
@ -1594,20 +1594,20 @@ void Item_func_trim::fix_length_and_dec()
|
||||
}
|
||||
}
|
||||
|
||||
void Item_func_trim::print(String *str)
|
||||
void Item_func_trim::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (arg_count == 1)
|
||||
{
|
||||
Item_func::print(str);
|
||||
Item_func::print(str, query_type);
|
||||
return;
|
||||
}
|
||||
str->append(Item_func_trim::func_name());
|
||||
str->append('(');
|
||||
str->append(mode_name());
|
||||
str->append(' ');
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" from "));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -2116,12 +2116,12 @@ String *Item_func_format::val_str(String *str)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_format::print(String *str)
|
||||
void Item_func_format::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("format("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(',');
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -2292,14 +2292,14 @@ Item *Item_func_make_set::transform(Item_transformer transformer, uchar *arg)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_make_set::print(String *str)
|
||||
void Item_func_make_set::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("make_set("));
|
||||
item->print(str);
|
||||
item->print(str, query_type);
|
||||
if (arg_count)
|
||||
{
|
||||
str->append(',');
|
||||
print_args(str, 0);
|
||||
print_args(str, 0, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -2710,10 +2710,10 @@ void Item_func_conv_charset::fix_length_and_dec()
|
||||
max_length = args[0]->max_length*conv_charset->mbmaxlen;
|
||||
}
|
||||
|
||||
void Item_func_conv_charset::print(String *str)
|
||||
void Item_func_conv_charset::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("convert("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" using "));
|
||||
str->append(conv_charset->csname);
|
||||
str->append(')');
|
||||
@ -2781,10 +2781,10 @@ bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
|
||||
}
|
||||
|
||||
|
||||
void Item_func_set_collation::print(String *str)
|
||||
void Item_func_set_collation::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" collate "));
|
||||
DBUG_ASSERT(args[1]->basic_const_item() &&
|
||||
args[1]->type() == Item::STRING_ITEM);
|
||||
@ -2903,10 +2903,10 @@ String *Item_func_unhex::val_str(String *str)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_binary::print(String *str)
|
||||
void Item_func_binary::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as binary)"));
|
||||
}
|
||||
|
||||
|
@ -225,7 +225,7 @@ public:
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "trim"; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
virtual const char *mode_name() const { return "both"; }
|
||||
};
|
||||
|
||||
@ -482,7 +482,7 @@ public:
|
||||
Item_str_func::walk(processor, walk_subquery, arg);
|
||||
}
|
||||
Item *transform(Item_transformer transformer, uchar *arg);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -494,7 +494,7 @@ public:
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "format"; }
|
||||
void print(String *);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -617,7 +617,7 @@ public:
|
||||
collation.set(&my_charset_bin);
|
||||
max_length=args[0]->max_length;
|
||||
}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
const char *func_name() const { return "cast_as_binary"; }
|
||||
};
|
||||
|
||||
@ -719,7 +719,7 @@ public:
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "convert"; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
class Item_func_set_collation :public Item_str_func
|
||||
@ -731,7 +731,7 @@ public:
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
const char *func_name() const { return "collate"; }
|
||||
enum Functype functype() const { return COLLATE_FUNC; }
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
Item_field *filed_for_view_update()
|
||||
{
|
||||
/* this function is transparent for view updating */
|
||||
|
@ -306,10 +306,10 @@ void Item_subselect::update_used_tables()
|
||||
}
|
||||
|
||||
|
||||
void Item_subselect::print(String *str)
|
||||
void Item_subselect::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
engine->print(str);
|
||||
engine->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -391,10 +391,10 @@ void Item_maxmin_subselect::cleanup()
|
||||
}
|
||||
|
||||
|
||||
void Item_maxmin_subselect::print(String *str)
|
||||
void Item_maxmin_subselect::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(max?"<max>":"<min>", 5);
|
||||
Item_singlerow_subselect::print(str);
|
||||
Item_singlerow_subselect::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -630,10 +630,10 @@ Item_exists_subselect::Item_exists_subselect(st_select_lex *select_lex):
|
||||
}
|
||||
|
||||
|
||||
void Item_exists_subselect::print(String *str)
|
||||
void Item_exists_subselect::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("exists"));
|
||||
Item_subselect::print(str);
|
||||
Item_subselect::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -1553,16 +1553,16 @@ err:
|
||||
}
|
||||
|
||||
|
||||
void Item_in_subselect::print(String *str)
|
||||
void Item_in_subselect::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (transformed)
|
||||
str->append(STRING_WITH_LEN("<exists>"));
|
||||
else
|
||||
{
|
||||
left_expr->print(str);
|
||||
left_expr->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" in "));
|
||||
}
|
||||
Item_subselect::print(str);
|
||||
Item_subselect::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -1587,18 +1587,18 @@ Item_allany_subselect::select_transformer(JOIN *join)
|
||||
}
|
||||
|
||||
|
||||
void Item_allany_subselect::print(String *str)
|
||||
void Item_allany_subselect::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (transformed)
|
||||
str->append(STRING_WITH_LEN("<exists>"));
|
||||
else
|
||||
{
|
||||
left_expr->print(str);
|
||||
left_expr->print(str, query_type);
|
||||
str->append(' ');
|
||||
str->append(func->symbol(all));
|
||||
str->append(all ? " all " : " any ", 5);
|
||||
}
|
||||
Item_subselect::print(str);
|
||||
Item_subselect::print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
@ -2384,22 +2384,24 @@ table_map subselect_union_engine::upper_select_const_tables()
|
||||
}
|
||||
|
||||
|
||||
void subselect_single_select_engine::print(String *str)
|
||||
void subselect_single_select_engine::print(String *str,
|
||||
enum_query_type query_type)
|
||||
{
|
||||
select_lex->print(thd, str);
|
||||
select_lex->print(thd, str, query_type);
|
||||
}
|
||||
|
||||
|
||||
void subselect_union_engine::print(String *str)
|
||||
void subselect_union_engine::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
unit->print(str);
|
||||
unit->print(str, query_type);
|
||||
}
|
||||
|
||||
|
||||
void subselect_uniquesubquery_engine::print(String *str)
|
||||
void subselect_uniquesubquery_engine::print(String *str,
|
||||
enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("<primary_index_lookup>("));
|
||||
tab->ref.items[0]->print(str);
|
||||
tab->ref.items[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" in "));
|
||||
str->append(tab->table->s->table_name.str, tab->table->s->table_name.length);
|
||||
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
||||
@ -2408,16 +2410,17 @@ void subselect_uniquesubquery_engine::print(String *str)
|
||||
if (cond)
|
||||
{
|
||||
str->append(STRING_WITH_LEN(" where "));
|
||||
cond->print(str);
|
||||
cond->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
void subselect_indexsubquery_engine::print(String *str)
|
||||
void subselect_indexsubquery_engine::print(String *str,
|
||||
enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("<index_lookup>("));
|
||||
tab->ref.items[0]->print(str);
|
||||
tab->ref.items[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" in "));
|
||||
str->append(tab->table->s->table_name.str, tab->table->s->table_name.length);
|
||||
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
||||
@ -2428,12 +2431,12 @@ void subselect_indexsubquery_engine::print(String *str)
|
||||
if (cond)
|
||||
{
|
||||
str->append(STRING_WITH_LEN(" where "));
|
||||
cond->print(str);
|
||||
cond->print(str, query_type);
|
||||
}
|
||||
if (having)
|
||||
{
|
||||
str->append(STRING_WITH_LEN(" having "));
|
||||
having->print(str);
|
||||
having->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ public:
|
||||
inline bool get_const_item_cache() { return const_item_cache; }
|
||||
Item *get_tmp_table_item(THD *thd);
|
||||
void update_used_tables();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
virtual bool have_guarded_conds() { return FALSE; }
|
||||
bool change_engine(subselect_engine *eng)
|
||||
{
|
||||
@ -203,7 +203,7 @@ protected:
|
||||
public:
|
||||
Item_maxmin_subselect(THD *thd, Item_subselect *parent,
|
||||
st_select_lex *select_lex, bool max);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void cleanup();
|
||||
bool any_value() { return was_values; }
|
||||
void register_value() { was_values= TRUE; }
|
||||
@ -234,7 +234,7 @@ public:
|
||||
my_decimal *val_decimal(my_decimal *);
|
||||
bool val_bool();
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
|
||||
friend class select_exists_subselect;
|
||||
friend class subselect_uniquesubquery_engine;
|
||||
@ -312,7 +312,7 @@ public:
|
||||
void top_level_item() { abort_on_null=1; }
|
||||
inline bool is_top_level_item() { return abort_on_null; }
|
||||
bool test_limit(st_select_lex_unit *unit);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
|
||||
friend class Item_ref_null_helper;
|
||||
@ -335,7 +335,7 @@ public:
|
||||
// only ALL subquery has upper not
|
||||
subs_type substype() { return all?ALL_SUBS:ANY_SUBS; }
|
||||
trans_res select_transformer(JOIN *join);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -399,7 +399,7 @@ public:
|
||||
virtual bool may_be_null() { return maybe_null; };
|
||||
virtual table_map upper_select_const_tables()= 0;
|
||||
static table_map calc_const_tables(TABLE_LIST *);
|
||||
virtual void print(String *str)= 0;
|
||||
virtual void print(String *str, enum_query_type query_type)= 0;
|
||||
virtual bool change_result(Item_subselect *si, select_subselect *result)= 0;
|
||||
virtual bool no_tables()= 0;
|
||||
virtual bool is_executed() const { return FALSE; }
|
||||
@ -430,7 +430,7 @@ public:
|
||||
uint8 uncacheable();
|
||||
void exclude();
|
||||
table_map upper_select_const_tables();
|
||||
void print (String *str);
|
||||
virtual void print (String *str, enum_query_type query_type);
|
||||
bool change_result(Item_subselect *si, select_subselect *result);
|
||||
bool no_tables();
|
||||
bool may_be_null();
|
||||
@ -454,7 +454,7 @@ public:
|
||||
uint8 uncacheable();
|
||||
void exclude();
|
||||
table_map upper_select_const_tables();
|
||||
void print (String *str);
|
||||
virtual void print (String *str, enum_query_type query_type);
|
||||
bool change_result(Item_subselect *si, select_subselect *result);
|
||||
bool no_tables();
|
||||
bool is_executed() const;
|
||||
@ -511,7 +511,7 @@ public:
|
||||
uint8 uncacheable() { return UNCACHEABLE_DEPENDENT; }
|
||||
void exclude();
|
||||
table_map upper_select_const_tables() { return 0; }
|
||||
void print (String *str);
|
||||
virtual void print (String *str, enum_query_type query_type);
|
||||
bool change_result(Item_subselect *si, select_subselect *result);
|
||||
bool no_tables();
|
||||
int scan_table();
|
||||
@ -565,7 +565,7 @@ public:
|
||||
having(having_arg)
|
||||
{}
|
||||
int exec();
|
||||
void print (String *str);
|
||||
virtual void print (String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
|
@ -359,14 +359,14 @@ void Item_sum::make_field(Send_field *tmp_field)
|
||||
}
|
||||
|
||||
|
||||
void Item_sum::print(String *str)
|
||||
void Item_sum::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
for (uint i=0 ; i < arg_count ; i++)
|
||||
{
|
||||
if (i)
|
||||
str->append(',');
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -2716,7 +2716,7 @@ void Item_udf_sum::cleanup()
|
||||
}
|
||||
|
||||
|
||||
void Item_udf_sum::print(String *str)
|
||||
void Item_udf_sum::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
@ -2724,7 +2724,7 @@ void Item_udf_sum::print(String *str)
|
||||
{
|
||||
if (i)
|
||||
str->append(',');
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -3460,7 +3460,7 @@ String* Item_func_group_concat::val_str(String* str)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_group_concat::print(String *str)
|
||||
void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("group_concat("));
|
||||
if (distinct)
|
||||
@ -3469,7 +3469,7 @@ void Item_func_group_concat::print(String *str)
|
||||
{
|
||||
if (i)
|
||||
str->append(',');
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
}
|
||||
if (arg_count_order)
|
||||
{
|
||||
@ -3478,7 +3478,7 @@ void Item_func_group_concat::print(String *str)
|
||||
{
|
||||
if (i)
|
||||
str->append(',');
|
||||
(*order[i]->item)->print(str);
|
||||
(*order[i]->item)->print(str, query_type);
|
||||
if (order[i]->asc)
|
||||
str->append(STRING_WITH_LEN(" ASC"));
|
||||
else
|
||||
|
@ -343,7 +343,7 @@ public:
|
||||
}
|
||||
virtual bool const_item() const { return forced_const; }
|
||||
void make_field(Send_field *field);
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void fix_num_length_and_dec();
|
||||
|
||||
/*
|
||||
@ -984,7 +984,7 @@ public:
|
||||
void reset_field() {};
|
||||
void update_field() {};
|
||||
void cleanup();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -1257,7 +1257,7 @@ public:
|
||||
String* val_str(String* str);
|
||||
Item *copy_or_same(THD* thd);
|
||||
void no_rows_in_result() {}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
virtual bool change_context_processor(uchar *cntx)
|
||||
{ context= (Name_resolution_context *)cntx; return FALSE; }
|
||||
};
|
||||
|
@ -2217,23 +2217,23 @@ static const char *interval_names[]=
|
||||
"second_microsecond"
|
||||
};
|
||||
|
||||
void Item_date_add_interval::print(String *str)
|
||||
void Item_date_add_interval::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append('(');
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(date_sub_interval?" - interval ":" + interval ");
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(' ');
|
||||
str->append(interval_names[int_type]);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
void Item_extract::print(String *str)
|
||||
void Item_extract::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("extract("));
|
||||
str->append(interval_names[int_type]);
|
||||
str->append(STRING_WITH_LEN(" from "));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -2374,20 +2374,20 @@ bool Item_char_typecast::eq(const Item *item, bool binary_cmp) const
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Item_typecast::print(String *str)
|
||||
void Item_typecast::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as "));
|
||||
str->append(cast_type());
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
void Item_char_typecast::print(String *str)
|
||||
void Item_char_typecast::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("cast("));
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(STRING_WITH_LEN(" as char"));
|
||||
if (cast_length >= 0)
|
||||
{
|
||||
@ -2822,7 +2822,7 @@ null_date:
|
||||
}
|
||||
|
||||
|
||||
void Item_func_add_time::print(String *str)
|
||||
void Item_func_add_time::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
if (is_date)
|
||||
{
|
||||
@ -2836,9 +2836,9 @@ void Item_func_add_time::print(String *str)
|
||||
else
|
||||
str->append(STRING_WITH_LEN("subtime("));
|
||||
}
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(',');
|
||||
args[1]->print(str);
|
||||
args[1]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
@ -3083,7 +3083,7 @@ null_date:
|
||||
}
|
||||
|
||||
|
||||
void Item_func_timestamp_diff::print(String *str)
|
||||
void Item_func_timestamp_diff::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
@ -3123,7 +3123,7 @@ void Item_func_timestamp_diff::print(String *str)
|
||||
for (uint i=0 ; i < 2 ; i++)
|
||||
{
|
||||
str->append(',');
|
||||
args[i]->print(str);
|
||||
args[i]->print(str, query_type);
|
||||
}
|
||||
str->append(')');
|
||||
}
|
||||
@ -3163,7 +3163,7 @@ String *Item_func_get_format::val_str(String *str)
|
||||
}
|
||||
|
||||
|
||||
void Item_func_get_format::print(String *str)
|
||||
void Item_func_get_format::print(String *str, enum_query_type query_type)
|
||||
{
|
||||
str->append(func_name());
|
||||
str->append('(');
|
||||
@ -3181,7 +3181,7 @@ void Item_func_get_format::print(String *str)
|
||||
default:
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
args[0]->print(str);
|
||||
args[0]->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
@ -694,7 +694,7 @@ public:
|
||||
longlong val_int();
|
||||
bool get_date(MYSQL_TIME *res, uint fuzzy_date);
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -711,7 +711,7 @@ class Item_extract :public Item_int_func
|
||||
const char *func_name() const { return "extract"; }
|
||||
void fix_length_and_dec();
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||
};
|
||||
|
||||
@ -735,7 +735,7 @@ public:
|
||||
max_length=args[0]->max_length;
|
||||
}
|
||||
virtual const char* cast_type() const= 0;
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -767,7 +767,7 @@ public:
|
||||
const char* cast_type() const { return "char"; };
|
||||
String *val_str(String *a);
|
||||
void fix_length_and_dec();
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -901,7 +901,7 @@ public:
|
||||
{
|
||||
return tmp_table_field_from_field_type(table, 0);
|
||||
}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
const char *func_name() const { return "add_time"; }
|
||||
double val_real() { return val_real_from_decimal(); }
|
||||
my_decimal *val_decimal(my_decimal *decimal_value)
|
||||
@ -977,7 +977,7 @@ public:
|
||||
decimals=0;
|
||||
maybe_null=1;
|
||||
}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
@ -1001,7 +1001,7 @@ public:
|
||||
decimals=0;
|
||||
max_length=17*MY_CHARSET_BIN_MB_MAXLEN;
|
||||
}
|
||||
void print(String *str);
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
};
|
||||
|
||||
|
||||
|
10
sql/log.cc
10
sql/log.cc
@ -3383,6 +3383,16 @@ THD::binlog_start_trans_and_stmt()
|
||||
if (options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||
trans_register_ha(this, TRUE, binlog_hton);
|
||||
trans_register_ha(this, FALSE, binlog_hton);
|
||||
/*
|
||||
Mark statement transaction as read/write. We never start
|
||||
a binary log transaction and keep it read-only,
|
||||
therefore it's best to mark the transaction read/write just
|
||||
at the same time we start it.
|
||||
Not necessary to mark the normal transaction read/write
|
||||
since the statement-level flag will be propagated automatically
|
||||
inside ha_commit_trans.
|
||||
*/
|
||||
ha_data[binlog_hton->slot].ha_info[0].set_trx_read_write();
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -3116,7 +3116,7 @@ int Format_description_log_event::do_apply_event(Relay_log_info const *rli)
|
||||
original place when it comes to us; we'll know this by checking
|
||||
log_pos ("artificial" events have log_pos == 0).
|
||||
*/
|
||||
if (!artificial_event && created && thd->transaction.all.nht)
|
||||
if (!artificial_event && created && thd->transaction.all.ha_list)
|
||||
{
|
||||
/* This is not an error (XA is safe), just an information */
|
||||
rli->report(INFORMATION_LEVEL, 0,
|
||||
|
@ -44,6 +44,19 @@
|
||||
#include "sql_plugin.h"
|
||||
#include "scheduler.h"
|
||||
|
||||
/**
|
||||
Query type constants.
|
||||
|
||||
QT_ORDINARY -- ordinary SQL query.
|
||||
QT_IS -- SQL query to be shown in INFORMATION_SCHEMA (in utf8 and without
|
||||
character set introducers).
|
||||
*/
|
||||
enum enum_query_type
|
||||
{
|
||||
QT_ORDINARY,
|
||||
QT_IS
|
||||
};
|
||||
|
||||
/* TODO convert all these three maps to Bitmap classes */
|
||||
typedef ulonglong table_map; /* Used for table bits in join */
|
||||
#if MAX_INDEXES <= 64
|
||||
@ -1711,7 +1724,7 @@ bool mysql_manager_submit(void (*action)());
|
||||
|
||||
/* sql_test.cc */
|
||||
#ifndef DBUG_OFF
|
||||
void print_where(COND *cond,const char *info);
|
||||
void print_where(COND *cond,const char *info, enum_query_type query_type);
|
||||
void print_cached_tables(void);
|
||||
void TEST_filesort(SORT_FIELD *sortorder,uint s_length);
|
||||
void print_plan(JOIN* join,uint idx, double record_count, double read_time,
|
||||
|
@ -2734,8 +2734,18 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
|
||||
(TABLE_LIST*) 0, ¬_used); // Flush logs
|
||||
}
|
||||
/* reenable logs after the options were reloaded */
|
||||
logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_TABLE:LOG_NONE,
|
||||
opt_log ? LOG_TABLE:LOG_NONE);
|
||||
if (log_output_options & LOG_NONE)
|
||||
{
|
||||
logger.set_handlers(LOG_FILE,
|
||||
opt_slow_log ? LOG_TABLE : LOG_NONE,
|
||||
opt_log ? LOG_TABLE : LOG_NONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.set_handlers(LOG_FILE,
|
||||
opt_slow_log ? log_output_options : LOG_NONE,
|
||||
opt_log ? log_output_options : LOG_NONE);
|
||||
}
|
||||
break;
|
||||
#ifdef USE_ONE_SIGNAL_HAND
|
||||
case THR_SERVER_ALARM:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user