diff options
-rw-r--r-- | extra/resolveip.c | 8 | ||||
-rwxr-xr-x | mysql-test/create-test-result | 4 | ||||
-rw-r--r-- | mysql-test/r/query_cache.result | 100 | ||||
-rw-r--r-- | mysql-test/t/query_cache-master.opt | 2 | ||||
-rw-r--r-- | mysql-test/t/query_cache.test | 94 | ||||
-rw-r--r-- | sql/sql_cache.cc | 12 | ||||
-rw-r--r-- | sql/sql_cache.h | 2 |
7 files changed, 199 insertions, 23 deletions
diff --git a/extra/resolveip.c b/extra/resolveip.c index f540354edc3..2d21d5c672c 100644 --- a/extra/resolveip.c +++ b/extra/resolveip.c @@ -22,9 +22,7 @@ #include <m_ctype.h> #include <my_net.h> #include <my_sys.h> -#ifndef SCO #include <m_string.h> -#endif #include <sys/types.h> #include <sys/socket.h> #ifndef HAVE_BROKEN_NETINET_INCLUDES @@ -34,10 +32,16 @@ #include <netdb.h> #include <getopt.h> +#ifdef SCO +#undef h_errno +#define h_errno errno +#endif + #if !defined(_AIX) && !defined(HAVE_UNIXWARE7_THREADS) && !defined(HAVE_UNIXWARE7_POSIX) && !defined(h_errno) extern int h_errno; #endif + static int silent=0; static struct option long_options[] = diff --git a/mysql-test/create-test-result b/mysql-test/create-test-result index 24c3d175303..bfd64f32fc5 100755 --- a/mysql-test/create-test-result +++ b/mysql-test/create-test-result @@ -5,7 +5,7 @@ # If you have a spare moment feel free to improve it - the right way is # to start mysqld yourself and run mysqltest -r -RESULT_DIR=r/3.23 +RESULT_DIR=r if [ -z $EDITOR] ; then EDITOR=vi fi @@ -32,7 +32,7 @@ result_file=$RESULT_DIR/$test_name.result touch $result_file echo "Running the test case against empty file, will fail, but don't worry" -./mysql-test-run $test_name +./mysql-test-run --do-test=$test_name reject_file=$result_file.reject diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 973d693d9aa..bae492b0b50 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -2,7 +2,7 @@ flush query cache; flush query cache; reset query cache; flush status; -drop table if exists t1,t2,t3; +drop table if exists t1,t2,t3,t11,t21; create table t1 (a int not null); insert into t1 values (1),(2),(3); select * from t1; @@ -173,6 +173,59 @@ show status like "Qcache_free_blocks"; Variable_name Value Qcache_free_blocks 1 drop table t1, t2; +create table t1 (a text not null); +create table t11 (a text not null); +create table t2 (a text not null); +create table t21 (a text not null); +create table t3 (a text not null); +insert into t1 values("1111111111111111111111111111111111111111111111111111"); +insert into t11 select * from t1; +insert into t21 select * from t1; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t3 select * from t1; +insert into t3 select * from t2; +insert into t3 select * from t1; +select * from t11; +select * from t21; +show status like "Qcache_total_blocks"; +Variable_name Value +Qcache_total_blocks 7 +show status like "Qcache_free_blocks"; +Variable_name Value +Qcache_free_blocks 1 +insert into t11 values(""); +select * from t3; +show status like "Qcache_total_blocks"; +Variable_name Value +Qcache_total_blocks 8 +show status like "Qcache_free_blocks"; +Variable_name Value +Qcache_free_blocks 1 +flush query cache; +show status like "Qcache_total_blocks"; +Variable_name Value +Qcache_total_blocks 7 +show status like "Qcache_free_blocks"; +Variable_name Value +Qcache_free_blocks 1 +drop table t1, t2, t3, t11, t21; set sql_query_cache_type=demand; create table t1 (a int not null); insert into t1 values (1),(2),(3); @@ -264,7 +317,6 @@ insert into t2 select * from t1; insert into t1 select * from t2; insert into t2 select * from t1; insert into t1 select * from t2; -drop table t2; show status like "Qcache_hits"; Variable_name Value Qcache_hits 4 @@ -279,4 +331,48 @@ show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 2 reset query cache; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +select * from t1; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +drop table t1,t2; +create database foo; +create table foo.t1 (i int not null auto_increment, a int, primary key (i)); +insert into foo.t1 (a) values (1); +select * from foo.t1 where i is null; +i a +1 1 +select * from foo.t1; +i a +1 1 +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 1 +drop database foo; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 0 +create table t1 (a char(1) not null); +insert into t1 values("á"); +select * from t1; +a +á +set CHARACTER SET cp1251_koi8; +select * from t1; +a +À +set CHARACTER SET DEFAULT; +show status like "Qcache_queries_in_cache"; +Variable_name Value +Qcache_queries_in_cache 2 drop table t1; diff --git a/mysql-test/t/query_cache-master.opt b/mysql-test/t/query_cache-master.opt index 5f0ebff98f6..cfdce628e74 100644 --- a/mysql-test/t/query_cache-master.opt +++ b/mysql-test/t/query_cache-master.opt @@ -1 +1 @@ ---set-variable=query_cache_size=1M +--set-variable=query_cache_size=1355776 diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index d2af702e566..5f67ea2b59a 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -8,7 +8,7 @@ flush query cache; # This crashed in some versions flush query cache; # This crashed in some versions reset query cache; flush status; -drop table if exists t1,t2,t3; +drop table if exists t1,t2,t3,t11,t21; # # First simple test @@ -86,6 +86,53 @@ show status like "Qcache_free_blocks"; flush query cache; show status like "Qcache_free_blocks"; drop table t1, t2; +# With join results... +create table t1 (a text not null); +create table t11 (a text not null); +create table t2 (a text not null); +create table t21 (a text not null); +create table t3 (a text not null); +insert into t1 values("1111111111111111111111111111111111111111111111111111"); +insert into t11 select * from t1; +insert into t21 select * from t1; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +#results of t3 must be > 0.5Mb +insert into t3 select * from t1; +insert into t3 select * from t2; +insert into t3 select * from t1; +disable_result_log; +select * from t11; +select * from t21; +enable_result_log; +show status like "Qcache_total_blocks"; +show status like "Qcache_free_blocks"; +disable_result_log; +insert into t11 values(""); +select * from t3; +enable_result_log; +show status like "Qcache_total_blocks"; +show status like "Qcache_free_blocks"; +flush query cache; +show status like "Qcache_total_blocks"; +show status like "Qcache_free_blocks"; +drop table t1, t2, t3, t11, t21; # # SELECT SQL_CACHE ... # @@ -154,7 +201,6 @@ insert into t2 select * from t1; # 987 insert into t1 select * from t2; # 1597 insert into t2 select * from t1; # 2584 insert into t1 select * from t2; # 4181 -drop table t2; show status like "Qcache_hits"; disable_result_log; @@ -167,6 +213,50 @@ enable_result_log; show status like "Qcache_hits"; show status like "Qcache_queries_in_cache"; reset query cache; +# +# Query bigger then query_cache_limit +# +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +insert into t2 select * from t1; +insert into t1 select * from t2; +disable_result_log; +select * from t1; +enable_result_log; +show status like "Qcache_queries_in_cache"; +drop table t1,t2; + +# +# noncachable ODBC work around (and prepare cache for drop database) +# +create database foo; +create table foo.t1 (i int not null auto_increment, a int, primary key (i)); +insert into foo.t1 (a) values (1); +select * from foo.t1 where i is null; + +# +# drop db +# +select * from foo.t1; +show status like "Qcache_queries_in_cache"; +drop database foo; +show status like "Qcache_queries_in_cache"; +# +# Charset convertion (cp1251_koi8 always present) +# +create table t1 (a char(1) not null); +insert into t1 values("á"); +select * from t1; +set CHARACTER SET cp1251_koi8; +select * from t1; +set CHARACTER SET DEFAULT; +show status like "Qcache_queries_in_cache"; drop table t1; # The following tests can't be done as the values differen on 32 and 64 bit diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc index 7f3bb97c7d6..387bca35d08 100644 --- a/sql/sql_cache.cc +++ b/sql/sql_cache.cc @@ -1737,18 +1737,6 @@ void Query_cache::invalidate_table(TABLE *table) invalidate_table(table_block); } -void Query_cache::invalidate_table_in_db(Query_cache_block *table_block, - char *db) -{ - /* - table key consist of data_base_name + '\0' + table_name +'\0'... - => we may use strcmp to compare database names. - */ - if (strcmp(db, (char*)(table_block->table()->db())) == 0) - invalidate_table(table_block); -} - - void Query_cache::invalidate_table(Query_cache_block *table_block) { Query_cache_block_table *list_root = table_block->table(0); diff --git a/sql/sql_cache.h b/sql/sql_cache.h index d04fc29a8d9..da7ada14f23 100644 --- a/sql/sql_cache.h +++ b/sql/sql_cache.h @@ -268,8 +268,6 @@ protected: Query_cache_block *query_block); void invalidate_table(TABLE_LIST *table); void invalidate_table(TABLE *table); - void invalidate_table_in_db(Query_cache_block *table_block, - char *db); void invalidate_table(Query_cache_block *table_block); my_bool register_all_tables(Query_cache_block *block, TABLE_LIST *tables_used, |