summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/resolveip.c8
-rwxr-xr-xmysql-test/create-test-result4
-rw-r--r--mysql-test/r/query_cache.result100
-rw-r--r--mysql-test/t/query_cache-master.opt2
-rw-r--r--mysql-test/t/query_cache.test94
-rw-r--r--sql/sql_cache.cc12
-rw-r--r--sql/sql_cache.h2
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,