Skip to content

Commit d164af1

Browse files
committed
BUG# 11757216: 49232: --STORAGE-ENGINE SHOULD BE DECOUPLED FROM
DEFAULT TEMPTABLE TYPE Implemented a --default-temp-storage_engine variable to complement the --default-storage-engine. It's default value is the same as of --default-storage-engine. But it's totally independent from --default-storage-engine. The value of --default-temp-storage-engine affects only the tables created by CREATE TEMPORARY TABLE. All other internally created temp tables are not affected by it. The special storage engine name "DEFAULT", when applied to such temporary tables work as an alias of the default temp table storage engine. Extended mysql-test-run.pl to issue --default-temp-storage-engine=myisam as a complement to --default-storage-engine=myisam. Test case added. Affected test cases updated.
1 parent d47d30b commit d164af1

22 files changed

+553
-51
lines changed

mysql-test/lib/mtr_cases.pm

+26
Original file line numberDiff line numberDiff line change
@@ -613,9 +613,12 @@ sub optimize_cases {
613613
foreach my $opt ( @{$tinfo->{master_opt}} ) {
614614
my $default_engine=
615615
mtr_match_prefix($opt, "--default-storage-engine=");
616+
my $default_temp_engine=
617+
mtr_match_prefix($opt, "--default-temp-storage-engine=");
616618

617619
# Allow use of uppercase, convert to all lower case
618620
$default_engine =~ tr/A-Z/a-z/;
621+
$default_temp_engine =~ tr/A-Z/a-z/;
619622

620623
if (defined $default_engine){
621624

@@ -638,6 +641,27 @@ sub optimize_cases {
638641
$tinfo->{'innodb_test'}= 1
639642
if ( $default_engine =~ /^innodb/i );
640643
}
644+
if (defined $default_temp_engine){
645+
646+
#print " $tinfo->{name}\n";
647+
#print " - The test asked to use '$default_engine'\n";
648+
649+
#my $engine_value= $::mysqld_variables{$default_engine};
650+
#print " - The mysqld_variables says '$engine_value'\n";
651+
652+
if ( ! exists $::mysqld_variables{$default_temp_engine} and
653+
! exists $builtin_engines{$default_temp_engine} )
654+
{
655+
$tinfo->{'skip'}= 1;
656+
$tinfo->{'comment'}=
657+
"'$default_temp_engine' not supported";
658+
}
659+
660+
$tinfo->{'ndb_test'}= 1
661+
if ( $default_temp_engine =~ /^ndb/i );
662+
$tinfo->{'innodb_test'}= 1
663+
if ( $default_temp_engine =~ /^innodb/i );
664+
}
641665
}
642666

643667
if ($quick_collect && ! $tinfo->{'skip'})
@@ -987,6 +1011,8 @@ sub collect_one_test_case {
9871011
# the default storage engine is innodb.
9881012
push(@{$tinfo->{'master_opt'}}, "--default-storage-engine=MyISAM");
9891013
push(@{$tinfo->{'slave_opt'}}, "--default-storage-engine=MyISAM");
1014+
push(@{$tinfo->{'master_opt'}}, "--default-temp-storage-engine=MyISAM");
1015+
push(@{$tinfo->{'slave_opt'}}, "--default-temp-storage-engine=MyISAM");
9901016
}
9911017

9921018
if ( $tinfo->{'need_binlog'} )

mysql-test/mysql-test-run.pl

+6
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,12 @@ sub command_line_setup {
13681368
collect_option('default-storage-engine', $1);
13691369
mtr_report("Using default engine '$1'")
13701370
}
1371+
if ( $arg =~ /default-temp-storage-engine=(\S+)/ )
1372+
{
1373+
# Save this for collect phase
1374+
collect_option('default-temp-storage-engine', $1);
1375+
mtr_report("Using default temp engine '$1'")
1376+
}
13711377
}
13721378

13731379
if (IS_WINDOWS and defined $opt_mem) {

mysql-test/r/mysqld--help-notwin.result

+4
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ The following options may be given as the first argument:
123123
The DATETIME format (ignored)
124124
--default-storage-engine=name
125125
The default storage engine for new tables
126+
--default-temp-storage-engine=name
127+
The default storage engine for new explict temporary
128+
tables
126129
--default-time-zone=name
127130
Set the default time zone.
128131
--default-week-format=#
@@ -789,6 +792,7 @@ console FALSE
789792
date-format %Y-%m-%d
790793
datetime-format %Y-%m-%d %H:%i:%s
791794
default-storage-engine InnoDB
795+
default-temp-storage-engine InnoDB
792796
default-time-zone (No default value)
793797
default-week-format 0
794798
delay-key-write ON

mysql-test/r/mysqld--help-win.result

+4
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ The following options may be given as the first argument:
123123
The DATETIME format (ignored)
124124
--default-storage-engine=name
125125
The default storage engine for new tables
126+
--default-temp-storage-engine=name
127+
The default storage engine for new explict temporary
128+
tables
126129
--default-time-zone=name
127130
Set the default time zone.
128131
--default-week-format=#
@@ -793,6 +796,7 @@ console FALSE
793796
date-format %Y-%m-%d
794797
datetime-format %Y-%m-%d %H:%i:%s
795798
default-storage-engine InnoDB
799+
default-temp-storage-engine InnoDB
796800
default-time-zone (No default value)
797801
default-week-format 0
798802
delay-key-write ON
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
--innodb_lock_wait_timeout=2 --default-storage-engine=MyISAM
1+
--innodb_lock_wait_timeout=2 --default-storage-engine=MyISAM --default-temp-storage-engine=MyISAM
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
--innodb_lock_wait_timeout=2 --binlog-direct-non-transactional-updates=FALSE --default-storage-engine=MyISAM
1+
--innodb_lock_wait_timeout=2 --binlog-direct-non-transactional-updates=FALSE --default-storage-engine=MyISAM --default-temp-storage-engine=MyISAM
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
SET @start_global_value = @@global.default_temp_storage_engine;
2+
SELECT @start_global_value;
3+
@start_global_value
4+
InnoDB
5+
SET @start_session_value = @@session.default_temp_storage_engine;
6+
SELECT @start_session_value;
7+
@start_session_value
8+
InnoDB
9+
'#--------------------FN_DYNVARS_005_01-------------------------#'
10+
SET @@global.default_temp_storage_engine = INNODB;
11+
SET @@global.default_temp_storage_engine = DEFAULT;
12+
SELECT @@global.default_temp_storage_engine;
13+
@@global.default_temp_storage_engine
14+
InnoDB
15+
SET @@session.default_temp_storage_engine = INNODB;
16+
SET @@session.default_temp_storage_engine = DEFAULT;
17+
SELECT @@session.default_temp_storage_engine;
18+
@@session.default_temp_storage_engine
19+
InnoDB
20+
'#--------------------FN_DYNVARS_005_02-------------------------#'
21+
SET @@global.default_temp_storage_engine = MYISAM;
22+
SELECT @@global.default_temp_storage_engine;
23+
@@global.default_temp_storage_engine
24+
MyISAM
25+
SET @@global.default_temp_storage_engine = MERGE;
26+
SELECT @@global.default_temp_storage_engine;
27+
@@global.default_temp_storage_engine
28+
MRG_MYISAM
29+
SET @@global.default_temp_storage_engine = MEMORY;
30+
SELECT @@global.default_temp_storage_engine;
31+
@@global.default_temp_storage_engine
32+
MEMORY
33+
SET @@global.default_temp_storage_engine = INNODB;
34+
SELECT @@global.default_temp_storage_engine;
35+
@@global.default_temp_storage_engine
36+
InnoDB
37+
'#--------------------FN_DYNVARS_005_03-------------------------#'
38+
SET @@session.default_temp_storage_engine = MYISAM;
39+
SELECT @@session.default_temp_storage_engine;
40+
@@session.default_temp_storage_engine
41+
MyISAM
42+
SET @@session.default_temp_storage_engine = MERGE;
43+
SELECT @@session.default_temp_storage_engine;
44+
@@session.default_temp_storage_engine
45+
MRG_MYISAM
46+
SET @@session.default_temp_storage_engine = MEMORY;
47+
SELECT @@session.default_temp_storage_engine;
48+
@@session.default_temp_storage_engine
49+
MEMORY
50+
SET @@session.default_temp_storage_engine = INNODB;
51+
SELECT @@session.default_temp_storage_engine;
52+
@@session.default_temp_storage_engine
53+
InnoDB
54+
'#------------------FN_DYNVARS_005_04-----------------------#'
55+
SET @@global.default_temp_storage_engine = 8199;
56+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
57+
SET @@global.default_temp_storage_engine = NULL;
58+
ERROR 42000: Variable 'default_temp_storage_engine' can't be set to the value of 'NULL'
59+
SET @@global.default_temp_storage_engine = -1024;
60+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
61+
SET @@global.default_temp_storage_engine = 65530.34;
62+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
63+
SET @@global.default_temp_storage_engine = FILE;
64+
ERROR 42000: Unknown storage engine 'FILE'
65+
SET @@session.default_temp_storage_engine = 8199;
66+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
67+
SET @@session.default_temp_storage_engine = 65530.34;
68+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
69+
SET @@session.default_temp_storage_engine = RECORD;
70+
ERROR 42000: Unknown storage engine 'RECORD'
71+
'#------------------FN_DYNVARS_005_05-----------------------#'
72+
SELECT @@global.default_temp_storage_engine =
73+
VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
74+
WHERE VARIABLE_NAME='default_temp_storage_engine';
75+
@@global.default_temp_storage_engine =
76+
VARIABLE_VALUE
77+
1
78+
'#------------------FN_DYNVARS_005_06-----------------------#'
79+
SELECT @@session.default_temp_storage_engine =
80+
VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES
81+
WHERE VARIABLE_NAME='default_temp_storage_engine';
82+
@@session.default_temp_storage_engine =
83+
VARIABLE_VALUE
84+
1
85+
'#------------------FN_DYNVARS_005_07-----------------------#'
86+
SET @@global.default_temp_storage_engine = TRUE;
87+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
88+
SET @@global.default_temp_storage_engine = FALSE;
89+
ERROR 42000: Incorrect argument type to variable 'default_temp_storage_engine'
90+
'#---------------------FN_DYNVARS_001_8----------------------#'
91+
SET @@default_temp_storage_engine = MYISAM;
92+
SELECT @@default_temp_storage_engine = @@local.default_temp_storage_engine;
93+
@@default_temp_storage_engine = @@local.default_temp_storage_engine
94+
1
95+
SELECT @@local.default_temp_storage_engine = @@session.default_temp_storage_engine;
96+
@@local.default_temp_storage_engine = @@session.default_temp_storage_engine
97+
1
98+
'#---------------------FN_DYNVARS_001_9----------------------#'
99+
SET default_temp_storage_engine = MEMORY;
100+
SELECT @@default_temp_storage_engine;
101+
@@default_temp_storage_engine
102+
MEMORY
103+
SELECT local.default_temp_storage_engine;
104+
ERROR 42S02: Unknown table 'local' in field list
105+
SELECT session.default_temp_storage_engine;
106+
ERROR 42S02: Unknown table 'session' in field list
107+
SELECT default_temp_storage_engine = @@session.default_temp_storage_engine;
108+
ERROR 42S22: Unknown column 'default_temp_storage_engine' in 'field list'
109+
SET @@default_temp_storage_engine = @start_global_value;
110+
SET default_temp_storage_engine = MyISAM;
111+
SET default_storage_engine = MyISAM;
112+
CREATE TABLE t1 (a INT);
113+
CREATE TEMPORARY TABLE t2 (b INT);
114+
SHOW CREATE TABLE t1;
115+
Table Create Table
116+
t1 CREATE TABLE `t1` (
117+
`a` int(11) DEFAULT NULL
118+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
119+
SHOW CREATE TABLE t2;
120+
Table Create Table
121+
t2 CREATE TEMPORARY TABLE `t2` (
122+
`b` int(11) DEFAULT NULL
123+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
124+
DROP TABLE t1, t2;
125+
SET default_temp_storage_engine = InnoDB;
126+
CREATE TABLE t1 (a INT);
127+
CREATE TEMPORARY TABLE t2 (b INT);
128+
SHOW CREATE TABLE t1;
129+
Table Create Table
130+
t1 CREATE TABLE `t1` (
131+
`a` int(11) DEFAULT NULL
132+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
133+
SHOW CREATE TABLE t2;
134+
Table Create Table
135+
t2 CREATE TEMPORARY TABLE `t2` (
136+
`b` int(11) DEFAULT NULL
137+
) ENGINE=InnoDB DEFAULT CHARSET=latin1
138+
DROP TABLE t1, t2;
139+
SET default_storage_engine = MEMORY;
140+
CREATE TABLE t1 (a INT);
141+
CREATE TEMPORARY TABLE t2 (b INT);
142+
SHOW CREATE TABLE t1;
143+
Table Create Table
144+
t1 CREATE TABLE `t1` (
145+
`a` int(11) DEFAULT NULL
146+
) ENGINE=MEMORY DEFAULT CHARSET=latin1
147+
SHOW CREATE TABLE t2;
148+
Table Create Table
149+
t2 CREATE TEMPORARY TABLE `t2` (
150+
`b` int(11) DEFAULT NULL
151+
) ENGINE=InnoDB DEFAULT CHARSET=latin1
152+
DROP TABLE t1, t2;
153+
SET default_temp_storage_engine = DEFAULT;
154+
SET default_storage_engine = DEFAULT;
155+
CREATE TABLE t1 (a INT);
156+
CREATE TEMPORARY TABLE t2 (b INT);
157+
SHOW CREATE TABLE t1;
158+
Table Create Table
159+
t1 CREATE TABLE `t1` (
160+
`a` int(11) DEFAULT NULL
161+
) ENGINE=InnoDB DEFAULT CHARSET=latin1
162+
SHOW CREATE TABLE t2;
163+
Table Create Table
164+
t2 CREATE TEMPORARY TABLE `t2` (
165+
`b` int(11) DEFAULT NULL
166+
) ENGINE=InnoDB DEFAULT CHARSET=latin1
167+
DROP TABLE t1, t2;
168+
SET @@global.default_temp_storage_engine = @start_global_value;
169+
SELECT @@global.default_temp_storage_engine;
170+
@@global.default_temp_storage_engine
171+
InnoDB
172+
SET @@session.default_temp_storage_engine = @start_session_value;
173+
SELECT @@session.default_temp_storage_engine;
174+
@@session.default_temp_storage_engine
175+
InnoDB

0 commit comments

Comments
 (0)