List:Commits« Previous MessageNext Message »
From:kroki Date:November 21 2006 2:53pm
Subject:bk commit into 5.0 tree (kroki:1.2303)
View as plain text  
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:53:33+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:53:31+03:00, kroki@stripped +59
-108
    Manual merge.
    MERGE: 1.31.1.22

  mysql-test/t/ps.test@stripped, 2006-11-21 16:53:31+03:00, kroki@stripped +35 -66
    Manual merge.
    MERGE: 1.27.1.28

  sql/mysqld.cc@stripped, 2006-11-21 16:53:31+03:00, kroki@stripped +1 -1
    Manual merge.
    MERGE: 1.356.98.32

  sql/set_var.cc@stripped, 2006-11-21 16:53:31+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:53:40 +03:00
+++ 1.579/sql/mysqld.cc	2006-11-21 16:53:40 +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_CONST},
 #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:53:40 +03:00
+++ 1.172/sql/set_var.cc	2006-11-21 16:53:40 +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:53:40 +03:00
+++ 1.81/mysql-test/r/ps.result	2006-11-21 16:53:40 +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:53:40 +03:00
+++ 1.78/mysql-test/t/ps.test	2006-11-21 16:53:40 +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)kroki21 Nov