Below is the list of changes that have just been committed into a local
5.0 repository of tomash. When tomash does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-11-21 16:19:29+03:00, kroki@stripped +4 -0
Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-bug23159
into moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0-bug23159
MERGE: 1.1616.2838.8
mysql-test/r/ps.result@stripped, 2006-11-21 16:19:26+03:00, kroki@stripped +59
-108
Manual merge.
MERGE: 1.31.1.22
mysql-test/t/ps.test@stripped, 2006-11-21 16:19:26+03:00, kroki@stripped +35 -66
Manual merge.
MERGE: 1.27.1.28
sql/mysqld.cc@stripped, 2006-11-21 16:19:26+03:00, kroki@stripped +1 -1
Manual merge.
MERGE: 1.356.98.32
sql/set_var.cc@stripped, 2006-11-21 16:19:26+03:00, kroki@stripped +24 -1
Manual merge.
MERGE: 1.34.52.44
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: kroki
# Host: moonlight.intranet
# Root: /home/tomash/src/mysql_ab/mysql-5.0-bug23159/RESYNC
--- 1.578/sql/mysqld.cc 2006-11-21 16:19:37 +03:00
+++ 1.579/sql/mysqld.cc 2006-11-21 16:19:37 +03:00
@@ -6177,6 +6177,7 @@ struct show_var_st status_vars[]= {
{"Open_streams", (char*) &my_stream_opened, SHOW_LONG_CONST},
{"Open_tables", (char*) 0, SHOW_OPENTABLES},
{"Opened_tables", (char*) offsetof(STATUS_VAR, opened_tables),
SHOW_LONG_STATUS},
+ {"Prepared_stmt_count", (char*) &prepared_stmt_count, SHOW_LONG},
#ifdef HAVE_QUERY_CACHE
{"Qcache_free_blocks", (char*) &query_cache.free_memory_blocks,
SHOW_LONG_CONST},
{"Qcache_free_memory", (char*) &query_cache.free_memory, SHOW_LONG_CONST},
@@ -6346,6 +6347,7 @@ static void mysql_init_variables(void)
binlog_cache_use= binlog_cache_disk_use= 0;
max_used_connections= slow_launch_threads = 0;
mysqld_user= mysqld_chroot= opt_init_file= opt_bin_logname = 0;
+ prepared_stmt_count= 0;
errmesg= 0;
mysqld_unix_port= opt_mysql_tmpdir= my_bind_addr_str= NullS;
bzero((gptr) &mysql_tmpdir_list, sizeof(mysql_tmpdir_list));
--- 1.171/sql/set_var.cc 2006-11-21 16:19:37 +03:00
+++ 1.172/sql/set_var.cc 2006-11-21 16:19:37 +03:00
@@ -121,7 +121,6 @@ static KEY_CACHE *create_key_cache(const
void fix_sql_mode_var(THD *thd, enum_var_type type);
static byte *get_error_count(THD *thd);
static byte *get_warning_count(THD *thd);
-static byte *get_prepared_stmt_count(THD *thd);
static byte *get_have_innodb(THD *thd);
static byte *get_tmpdir(THD *thd);
@@ -567,9 +566,6 @@ static sys_var_readonly sys_warning_cou
OPT_SESSION,
SHOW_LONG,
get_warning_count);
-static sys_var_readonly sys_prepared_stmt_count("prepared_stmt_count",
- OPT_GLOBAL, SHOW_LONG,
- get_prepared_stmt_count);
/* alias for last_insert_id() to be compatible with Sybase */
#ifdef HAVE_REPLICATION
@@ -701,7 +697,6 @@ sys_var *sys_variables[]=
&sys_optimizer_prune_level,
&sys_optimizer_search_depth,
&sys_preload_buff_size,
- &sys_prepared_stmt_count,
&sys_pseudo_thread_id,
&sys_query_alloc_block_size,
&sys_query_cache_size,
@@ -1008,7 +1003,6 @@ struct show_var_st init_vars[]= {
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
{"port", (char*) &mysqld_port, SHOW_INT},
{sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS},
- {sys_prepared_stmt_count.name, (char*) &sys_prepared_stmt_count, SHOW_SYS},
{"protocol_version", (char*) &protocol_version, SHOW_INT},
{sys_query_alloc_block_size.name, (char*) &sys_query_alloc_block_size,
SHOW_SYS},
@@ -2943,15 +2937,6 @@ static byte *get_error_count(THD *thd)
static byte *get_have_innodb(THD *thd)
{
return (byte*) show_comp_option_name[have_innodb];
-}
-
-
-static byte *get_prepared_stmt_count(THD *thd)
-{
- pthread_mutex_lock(&LOCK_prepared_stmt_count);
- thd->sys_var_tmp.ulong_value= prepared_stmt_count;
- pthread_mutex_unlock(&LOCK_prepared_stmt_count);
- return (byte*) &thd->sys_var_tmp.ulong_value;
}
--- 1.80/mysql-test/r/ps.result 2006-11-21 16:19:37 +03:00
+++ 1.81/mysql-test/r/ps.result 2006-11-21 16:19:37 +03:00
@@ -795,12 +795,12 @@ set @old_max_prepared_stmt_count= @@max_
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
@@ -819,81 +819,84 @@ 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 read only variable
-set @@prepared_stmt_count=0;
-ERROR HY000: Variable 'prepared_stmt_count' is a read only variable
-set global prepared_stmt_count=1;
-ERROR HY000: Variable 'prepared_stmt_count' is a read only variable
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
-prepare stmt from "select 1";
-ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
-select @@prepared_stmt_count;
-@@prepared_stmt_count
+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
+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 42000: Can't create more than max_prepared_stmt_count statements (current value: 1)
-select @@prepared_stmt_count;
-@@prepared_stmt_count
-1
+ERROR HY000: Unknown error
+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 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
+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 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
-select @@prepared_stmt_count;
-@@prepared_stmt_count
-0
+ERROR HY000: Unknown error
+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";
prepare stmt2 from "select 4";
-ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)
+ERROR HY000: Unknown error
prepare stmt2 from "select 4";
-ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)
-select @@max_prepared_stmt_count, @@prepared_stmt_count;
-@@max_prepared_stmt_count @@prepared_stmt_count
-3 3
+ERROR HY000: Unknown error
+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);
--- 1.77/mysql-test/t/ps.test 2006-11-21 16:19:37 +03:00
+++ 1.78/mysql-test/t/ps.test 2006-11-21 16:19:37 +03:00
@@ -848,6 +848,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;
#
@@ -857,17 +860,17 @@ set @old_max_prepared_stmt_count= @@max_
#
--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;
@@ -875,18 +878,12 @@ set global max_prepared_stmt_count=10000
select @@max_prepared_stmt_count;
set global max_prepared_stmt_count=default;
select @@max_prepared_stmt_count;
---error ER_GLOBAL_VARIABLE
+--error 1229 # ER_GLOBAL_VARIABLE
set @@max_prepared_stmt_count=1;
---error ER_GLOBAL_VARIABLE
+--error 1229 # ER_GLOBAL_VARIABLE
set max_prepared_stmt_count=1;
---error ER_GLOBAL_VARIABLE
+--error 1229 # ER_GLOBAL_VARIABLE
set local max_prepared_stmt_count=1;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-set local prepared_stmt_count=0;
---error ER_INCORRECT_GLOBAL_LOCAL_VAR
-set @@prepared_stmt_count=0;
---error ER_INCORRECT_GLOBAL_LOCAL_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;
@@ -894,74 +891,71 @@ 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;
---error ER_MAX_PREPARED_STMT_COUNT_REACHED
+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;
---error ER_MAX_PREPARED_STMT_COUNT_REACHED
+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 ER_MAX_PREPARED_STMT_COUNT_REACHED
+--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;
---error ER_MAX_PREPARED_STMT_COUNT_REACHED
+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;
prepare stmt from "select 2";
prepare stmt1 from "select 3";
---error ER_MAX_PREPARED_STMT_COUNT_REACHED
+--error 1105 # ER_UNKNOWN_ERROR
prepare stmt2 from "select 4";
connection default;
---error ER_MAX_PREPARED_STMT_COUNT_REACHED
+--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.
#
set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
--enable_ps_protocol
+
#
# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
| Thread |
|---|
| • bk commit into 5.0 tree (kroki:1.2303) | kroki | 21 Nov |