mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-runtime
into moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-bug23159
This commit is contained in:
@ -775,12 +775,12 @@ set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
show variables like 'max_prepared_stmt_count';
|
||||
Variable_name Value
|
||||
max_prepared_stmt_count 16382
|
||||
show variables like 'prepared_stmt_count';
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
prepared_stmt_count 0
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
16382 0
|
||||
Prepared_stmt_count 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
16382
|
||||
set global max_prepared_stmt_count=-1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
@ -799,67 +799,70 @@ set max_prepared_stmt_count=1;
|
||||
ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set local max_prepared_stmt_count=1;
|
||||
ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set local prepared_stmt_count=0;
|
||||
ERROR HY000: Variable 'prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set @@prepared_stmt_count=0;
|
||||
ERROR HY000: Variable 'prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set global prepared_stmt_count=1;
|
||||
ERROR 42000: Incorrect argument type to variable 'prepared_stmt_count'
|
||||
set global max_prepared_stmt_count=1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
1
|
||||
set global max_prepared_stmt_count=0;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
0 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
ERROR HY000: Unknown error
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
set global max_prepared_stmt_count=1;
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
prepare stmt1 from "select 1";
|
||||
ERROR HY000: Unknown error
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
deallocate prepare stmt;
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
prepare stmt from "select 2";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
1
|
||||
select @@prepared_stmt_count, @@max_prepared_stmt_count;
|
||||
@@prepared_stmt_count @@max_prepared_stmt_count
|
||||
1 1
|
||||
set global max_prepared_stmt_count=0;
|
||||
prepare stmt from "select 1";
|
||||
ERROR HY000: Unknown error
|
||||
execute stmt;
|
||||
ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
ERROR HY000: Unknown error
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
set global max_prepared_stmt_count=3;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
3
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
prepare stmt from "select 2";
|
||||
prepare stmt1 from "select 3";
|
||||
@ -867,13 +870,13 @@ prepare stmt2 from "select 4";
|
||||
ERROR HY000: Unknown error
|
||||
prepare stmt2 from "select 4";
|
||||
ERROR HY000: Unknown error
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 3
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
3
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 3
|
||||
deallocate prepare stmt;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 0
|
||||
set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
|
||||
drop table if exists t1;
|
||||
create temporary table if not exists t1 (a1 int);
|
||||
|
@ -811,6 +811,9 @@ drop table t1;
|
||||
# Bug#16365 Prepared Statements: DoS with too many open statements
|
||||
# Check that the limit @@max_prpeared_stmt_count works.
|
||||
#
|
||||
# This is also the test for bug#23159 prepared_stmt_count should be
|
||||
# status variable.
|
||||
#
|
||||
# Save the old value
|
||||
set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
#
|
||||
@ -820,17 +823,17 @@ set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
#
|
||||
--disable_ps_protocol
|
||||
#
|
||||
# A. Check that the new variables are present in SHOW VARIABLES list.
|
||||
# A. Check that the new variables are present in SHOW VARIABLES and
|
||||
# SHOW STATUS lists.
|
||||
#
|
||||
show variables like 'max_prepared_stmt_count';
|
||||
show variables like 'prepared_stmt_count';
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# B. Check that the new variables are selectable.
|
||||
# B. Check that the new system variable is selectable.
|
||||
#
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
#
|
||||
# C. Check that max_prepared_stmt_count is settable (global only),
|
||||
# whereas prepared_stmt_count is readonly.
|
||||
# C. Check that max_prepared_stmt_count is settable (global only).
|
||||
#
|
||||
set global max_prepared_stmt_count=-1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@ -844,12 +847,6 @@ set @@max_prepared_stmt_count=1;
|
||||
set max_prepared_stmt_count=1;
|
||||
--error 1229 # ER_GLOBAL_VARIABLE
|
||||
set local max_prepared_stmt_count=1;
|
||||
--error 1229 # ER_GLOBAL_VARIABLE
|
||||
set local prepared_stmt_count=0;
|
||||
--error 1229 # ER_GLOBAL_VARIABLE
|
||||
set @@prepared_stmt_count=0;
|
||||
--error 1232 # ER_WRONG_TYPE_FOR_VAR
|
||||
set global prepared_stmt_count=1;
|
||||
# set to a reasonable limit works
|
||||
set global max_prepared_stmt_count=1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@ -857,47 +854,50 @@ select @@max_prepared_stmt_count;
|
||||
# D. Check that the variables actually work.
|
||||
#
|
||||
set global max_prepared_stmt_count=0;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error 1105 # ER_UNKNOWN_ERROR
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
set global max_prepared_stmt_count=1;
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error 1105 # ER_UNKNOWN_ERROR
|
||||
prepare stmt1 from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
deallocate prepare stmt;
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# E. Check that we can prepare a statement with the same name
|
||||
# successfully, without hitting the limit.
|
||||
#
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
prepare stmt from "select 2";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# F. We can set the max below the current count. In this case no new
|
||||
# statements should be allowed to prepare.
|
||||
#
|
||||
select @@prepared_stmt_count, @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
select @@max_prepared_stmt_count;
|
||||
set global max_prepared_stmt_count=0;
|
||||
--error 1105 # ER_UNKNOWN_ERROR
|
||||
prepare stmt from "select 1";
|
||||
# Result: the old statement is deallocated, the new is not created.
|
||||
--error 1243 # ER_UNKNOWN_STMT_HANDLER
|
||||
execute stmt;
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error 1105 # ER_UNKNOWN_ERROR
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# G. Show that the variables are up to date even after a connection with all
|
||||
# statements in it was terminated.
|
||||
#
|
||||
set global max_prepared_stmt_count=3;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
prepare stmt from "select 1";
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
@ -908,18 +908,11 @@ prepare stmt2 from "select 4";
|
||||
connection default;
|
||||
--error 1105 # ER_UNKNOWN_ERROR
|
||||
prepare stmt2 from "select 4";
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
disconnect con1;
|
||||
connection default;
|
||||
# Wait for the connection to die: deal with a possible race
|
||||
deallocate prepare stmt;
|
||||
let $count= `select @@prepared_stmt_count`;
|
||||
if ($count)
|
||||
{
|
||||
--sleep 2
|
||||
let $count= `select @@prepared_stmt_count`;
|
||||
}
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
#
|
||||
# Restore the old value.
|
||||
#
|
||||
|
Reference in New Issue
Block a user