Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
937ee6b7
Commit
937ee6b7
authored
Feb 29, 2012
by
Mattias Jonsson
Browse files
Options
Browse Files
Download
Plain Diff
merge into mysql-5.1
parents
cf2f9780
74374933
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
288 additions
and
36 deletions
+288
-36
mysql-test/include/query_cache.inc
mysql-test/include/query_cache.inc
+25
-13
mysql-test/r/cache_innodb.result
mysql-test/r/cache_innodb.result
+4
-3
mysql-test/r/partition_cache.result
mysql-test/r/partition_cache.result
+205
-0
mysql-test/t/cache_innodb-master.opt
mysql-test/t/cache_innodb-master.opt
+0
-1
mysql-test/t/partition_cache.test
mysql-test/t/partition_cache.test
+21
-0
sql/ha_partition.cc
sql/ha_partition.cc
+15
-15
sql/ha_partition.h
sql/ha_partition.h
+18
-4
No files found.
mysql-test/include/query_cache.inc
View file @
937ee6b7
...
...
@@ -4,6 +4,9 @@
# $engine_type -- storage engine to be tested
# $test_foreign_keys -- 0, skip foreign key tests
# -- 1, do not skip foreign key tests
# $partitions_a -- partition by column 'a'
# $partitions_id -- partition by column 'id'
# $partitions_s1 -- partition by column 's1'
# have to be set before sourcing this script.
#
# Last update:
...
...
@@ -19,47 +22,61 @@ eval SET SESSION STORAGE_ENGINE = $engine_type;
drop
table
if
exists
t1
,
t2
,
t3
;
--
enable_warnings
set
@
save_query_cache_size
=
@@
global
.
query_cache_size
;
set
GLOBAL
query_cache_size
=
1355776
;
#
# Without auto_commit.
#
flush
status
;
set
autocommit
=
0
;
create
table
t1
(
a
int
not
null
)
;
eval
create
table
t1
(
a
int
not
null
)
$partitions_a
;
insert
into
t1
values
(
1
),(
2
),(
3
);
--
sorted_result
select
*
from
t1
;
show
status
like
"Qcache_queries_in_cache"
;
drop
table
t1
;
commit
;
set
autocommit
=
1
;
begin
;
create
table
t1
(
a
int
not
null
)
;
eval
create
table
t1
(
a
int
not
null
)
$partitions_a
;
insert
into
t1
values
(
1
),(
2
),(
3
);
--
sorted_result
select
*
from
t1
;
show
status
like
"Qcache_queries_in_cache"
;
drop
table
t1
;
commit
;
create
table
t1
(
a
int
not
null
)
;
create
table
t2
(
a
int
not
null
)
;
create
table
t3
(
a
int
not
null
)
;
eval
create
table
t1
(
a
int
not
null
)
$partitions_a
;
eval
create
table
t2
(
a
int
not
null
)
$partitions_a
;
eval
create
table
t3
(
a
int
not
null
)
$partitions_a
;
insert
into
t1
values
(
1
),(
2
);
insert
into
t2
values
(
1
),(
2
);
insert
into
t3
values
(
1
),(
2
);
--
sorted_result
select
*
from
t1
;
--
sorted_result
select
*
from
t2
;
--
sorted_result
select
*
from
t3
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_hits"
;
begin
;
--
sorted_result
select
*
from
t1
;
--
sorted_result
select
*
from
t2
;
--
sorted_result
select
*
from
t3
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_hits"
;
insert
into
t1
values
(
3
);
insert
into
t2
values
(
3
);
insert
into
t1
values
(
4
);
--
sorted_result
select
*
from
t1
;
--
sorted_result
select
*
from
t2
;
--
sorted_result
select
*
from
t3
;
show
status
like
"Qcache_queries_in_cache"
;
show
status
like
"Qcache_hits"
;
...
...
@@ -67,7 +84,7 @@ commit;
show
status
like
"Qcache_queries_in_cache"
;
drop
table
t3
,
t2
,
t1
;
CREATE
TABLE
t1
(
id
int
(
11
)
NOT
NULL
auto_increment
,
PRIMARY
KEY
(
id
))
;
eval
CREATE
TABLE
t1
(
id
int
(
11
)
NOT
NULL
auto_increment
,
PRIMARY
KEY
(
id
))
$partitions_id
;
select
count
(
*
)
from
t1
;
insert
into
t1
(
id
)
values
(
0
);
select
count
(
*
)
from
t1
;
...
...
@@ -78,8 +95,6 @@ if ($test_foreign_keys)
#
# one statement roll back inside transation
#
let
$save_query_cache_size
=
`select @@global.query_cache_size`
;
set
GLOBAL
query_cache_size
=
1355776
;
CREATE
TABLE
t1
(
id
int
(
10
)
NOT
NULL
auto_increment
,
a
varchar
(
25
)
default
NULL
,
PRIMARY
KEY
(
id
),
UNIQUE
KEY
a
(
a
));
CREATE
TABLE
t2
(
id
int
(
10
)
NOT
NULL
auto_increment
,
b
varchar
(
25
)
default
NULL
,
PRIMARY
KEY
(
id
),
UNIQUE
KEY
b
(
b
));
CREATE
TABLE
t3
(
id
int
(
10
)
NOT
NULL
auto_increment
,
t1_id
int
(
10
)
NOT
NULL
default
'0'
,
t2_id
int
(
10
)
NOT
NULL
default
'0'
,
state
int
(
11
)
default
NULL
,
PRIMARY
KEY
(
id
),
UNIQUE
KEY
t1_id
(
t1_id
,
t2_id
),
KEY
t2_id
(
t2_id
,
t1_id
),
CONSTRAINT
`t3_ibfk_1`
FOREIGN
KEY
(
`t1_id`
)
REFERENCES
`t1`
(
`id`
),
CONSTRAINT
`t3_ibfk_2`
FOREIGN
KEY
(
`t2_id`
)
REFERENCES
`t2`
(
`id`
));
...
...
@@ -95,9 +110,6 @@ insert into t3 VALUES ( NULL, 1, 1, 2 );
commit
;
select
t1
.*
from
t1
,
t2
,
t3
where
t3
.
state
&
1
=
0
and
t3
.
t1_id
=
t1
.
id
and
t3
.
t2_id
=
t2
.
id
and
t1
.
id
=
1
order
by
t1
.
a
asc
;
drop
table
t3
,
t2
,
t1
;
--
disable_query_log
eval
set
GLOBAL
query_cache_size
=
$save_query_cache_size
;
--
enable_query_log
}
#
...
...
@@ -118,7 +130,7 @@ SET GLOBAL query_cache_size = 200000;
flush
status
;
SET
@@
autocommit
=
1
;
eval
SET
SESSION
STORAGE_ENGINE
=
$engine_type
;
CREATE
TABLE
t2
(
s1
int
,
s2
varchar
(
1000
),
key
(
s1
))
;
eval
CREATE
TABLE
t2
(
s1
int
,
s2
varchar
(
1000
),
key
(
s1
))
$partitions_s1
;
INSERT
INTO
t2
VALUES
(
1
,
repeat
(
'a'
,
10
)),(
2
,
repeat
(
'a'
,
10
)),(
3
,
repeat
(
'a'
,
10
)),(
4
,
repeat
(
'a'
,
10
));
COMMIT
;
START
TRANSACTION
;
...
...
@@ -176,8 +188,8 @@ show status like "Qcache_queries_in_cache";
show
status
like
"Qcache_hits"
;
# Final cleanup
eval
set
GLOBAL
query_cache_size
=
$save_query_cache_size
;
disconnect
connection1
;
--
source
include
/
wait_until_disconnected
.
inc
connection
default
;
set
@@
global
.
query_cache_size
=
@
save_query_cache_size
;
drop
table
t2
;
mysql-test/r/cache_innodb.result
View file @
937ee6b7
SET SESSION STORAGE_ENGINE = InnoDB;
drop table if exists t1,t2,t3;
set @save_query_cache_size = @@global.query_cache_size;
set GLOBAL query_cache_size = 1355776;
flush status;
set autocommit=0;
create table t1 (a int not null);
...
...
@@ -100,7 +102,7 @@ show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
drop table t3,t2,t1;
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY
(id));
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id));
select count(*) from t1;
count(*)
0
...
...
@@ -109,7 +111,6 @@ select count(*) from t1;
count(*)
1
drop table t1;
set GLOBAL query_cache_size=1355776;
CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a));
CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b));
CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`));
...
...
@@ -218,5 +219,5 @@ Qcache_queries_in_cache 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
set
GLOBAL query_cache_size=1048576
;
set
@@global.query_cache_size = @save_query_cache_size
;
drop table t2;
mysql-test/r/partition_cache.result
0 → 100644
View file @
937ee6b7
SET SESSION STORAGE_ENGINE = InnoDB;
drop table if exists t1,t2,t3;
set @save_query_cache_size = @@global.query_cache_size;
set GLOBAL query_cache_size = 1355776;
flush status;
set autocommit=0;
create table t1 (a int not null) PARTITION BY KEY (a) PARTITIONS 3;
insert into t1 values (1),(2),(3);
select * from t1;
a
1
2
3
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
drop table t1;
commit;
set autocommit=1;
begin;
create table t1 (a int not null) PARTITION BY KEY (a) PARTITIONS 3;
insert into t1 values (1),(2),(3);
select * from t1;
a
1
2
3
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
drop table t1;
commit;
create table t1 (a int not null) PARTITION BY KEY (a) PARTITIONS 3;
create table t2 (a int not null) PARTITION BY KEY (a) PARTITIONS 3;
create table t3 (a int not null) PARTITION BY KEY (a) PARTITIONS 3;
insert into t1 values (1),(2);
insert into t2 values (1),(2);
insert into t3 values (1),(2);
select * from t1;
a
1
2
select * from t2;
a
1
2
select * from t3;
a
1
2
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
begin;
select * from t1;
a
1
2
select * from t2;
a
1
2
select * from t3;
a
1
2
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
insert into t1 values (3);
insert into t2 values (3);
insert into t1 values (4);
select * from t1;
a
1
2
3
4
select * from t2;
a
1
2
3
select * from t3;
a
1
2
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
commit;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
drop table t3,t2,t1;
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) PARTITION BY HASH (id) PARTITIONS 3;
select count(*) from t1;
count(*)
0
insert into t1 (id) values (0);
select count(*) from t1;
count(*)
1
drop table t1;
SET SESSION STORAGE_ENGINE = InnoDB;
SET @@autocommit=1;
connection default
SHOW VARIABLES LIKE 'have_query_cache';
Variable_name Value
have_query_cache YES
SET GLOBAL query_cache_size = 200000;
flush status;
SET @@autocommit=1;
SET SESSION STORAGE_ENGINE = InnoDB;
CREATE TABLE t2 (s1 int, s2 varchar(1000), key(s1)) PARTITION BY KEY (s1) PARTITIONS 3;
INSERT INTO t2 VALUES (1,repeat('a',10)),(2,repeat('a',10)),(3,repeat('a',10)),(4,repeat('a',10));
COMMIT;
START TRANSACTION;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
0
UPDATE t2 SET s2 = 'w' WHERE s1 = 3;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
connection connection1
START TRANSACTION;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
0
INSERT INTO t2 VALUES (5,'w');
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
1
COMMIT;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
connection default
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
1
COMMIT;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
connection connection1
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
START TRANSACTION;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
INSERT INTO t2 VALUES (6,'w');
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
3
connection default
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
START TRANSACTION;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
DELETE from t2 WHERE s1=3;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
1
COMMIT;
connection connection1
COMMIT;
SELECT sql_cache count(*) FROM t2 WHERE s2 = 'w';
count(*)
2
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
set @@global.query_cache_size = @save_query_cache_size;
drop table t2;
mysql-test/t/cache_innodb-master.opt
deleted
100644 → 0
View file @
cf2f9780
--set-variable=query_cache_size=1M
mysql-test/t/partition_cache.test
0 → 100644
View file @
937ee6b7
# t/cache_innodb.test
#
# Last update:
# 2006-07-26 ML test refactored (MySQL 5.1)
# main code t/innodb_cache.test --> include/query_cache.inc
# new wrapper t/cache_innodb.test
#
--
source
include
/
have_query_cache
.
inc
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_partition
.
inc
let
$engine_type
=
InnoDB
;
# Using SELECT to get a space as first character.
let
$partitions_a
=
`SELECT ' PARTITION BY KEY (a) PARTITIONS 3'`
;
let
$partitions_id
=
`SELECT ' PARTITION BY HASH (id) PARTITIONS 3'`
;
let
$partitions_s1
=
`SELECT ' PARTITION BY KEY (s1) PARTITIONS 3'`
;
# partitioning does not support FOREIGN KEYs
let
$test_foreign_keys
=
0
;
--
source
include
/
query_cache
.
inc
sql/ha_partition.cc
View file @
937ee6b7
/*
Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -6494,20 +6494,20 @@ int ha_partition::add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys)
return
ret
;
err:
if
(
file
>
m_file
)
{
uint
*
key_numbers
=
(
uint
*
)
ha_thd
()
->
alloc
(
sizeof
(
uint
)
*
num_of_keys
);
KEY
*
old_key_info
=
table_arg
->
key_info
;
uint
i
;
/* Use the newly added key_info as table->key_info to remove them. */
for
(
i
=
0
;
i
<
num_of_keys
;
i
++
)
key_numbers
[
i
]
=
i
;
table_arg
->
key_info
=
key_info
;
while
(
--
file
>=
m_file
)
{
(
void
)
(
*
file
)
->
prepare_drop_index
(
table_arg
,
key_numbers
,
num_of_keys
);
(
void
)
(
*
file
)
->
final_drop_index
(
table_arg
);
}
table_arg
->
key_info
=
old_key_info
;
{
uint
*
key_numbers
=
(
uint
*
)
ha_thd
()
->
alloc
(
sizeof
(
uint
)
*
num_of_keys
);
KEY
*
old_key_info
=
table_arg
->
key_info
;
uint
i
;
/* Use the newly added key_info as table->key_info to remove them. */
for
(
i
=
0
;
i
<
num_of_keys
;
i
++
)
key_numbers
[
i
]
=
i
;
table_arg
->
key_info
=
key_info
;
while
(
--
file
>=
m_file
)
{
(
void
)
(
*
file
)
->
prepare_drop_index
(
table_arg
,
key_numbers
,
num_of_keys
);
(
void
)
(
*
file
)
->
final_drop_index
(
table_arg
);
}
table_arg
->
key_info
=
old_key_info
;
}
return
ret
;
}
...
...
sql/ha_partition.h
View file @
937ee6b7
/*
Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -219,9 +219,9 @@ public:
*/
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
ha_partition
(
handlerton
*
hton
,
partition_info
*
part_info
);
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
share
,
partition_info
*
part_info_arg
,
ha_partition
*
clone_arg
,
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
share
,
partition_info
*
part_info_arg
,
ha_partition
*
clone_arg
,
MEM_ROOT
*
clone_mem_root_arg
);
~
ha_partition
();
/*
...
...
@@ -553,6 +553,20 @@ public:
virtual
int
extra
(
enum
ha_extra_function
operation
);
virtual
int
extra_opt
(
enum
ha_extra_function
operation
,
ulong
cachesize
);
virtual
int
reset
(
void
);
/*
Do not allow caching of partitioned tables, since we cannot return
a callback or engine_data that would work for a generic engine.
*/
virtual
my_bool
register_query_cache_table
(
THD
*
thd
,
char
*
table_key
,
uint
key_length
,
qc_engine_callback
*
engine_callback
,
ulonglong
*
engine_data
)
{
*
engine_callback
=
NULL
;
*
engine_data
=
0
;
return
FALSE
;
}
private:
static
const
uint
NO_CURRENT_PART_ID
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment