3879 kevin.lewis@stripped 2012-02-10
Testcases for WL#6145
added:
mysql-test/r/archive_no_symlink.result
mysql-test/r/archive_symlink.result
mysql-test/t/archive_no_symlink-master.opt
mysql-test/t/archive_no_symlink.test
mysql-test/t/archive_symlink.test
3878 Jorgen Loland 2012-02-10
Bug#13627632 - INFORMATION SCHEMA TABLES DO NOT PACK LONG
VARCHAR COLUMNS
db_create_option needs HA_OPTION_PACK_RECORD to be set in
order to create MyISAM tables with packed record format.
When processing queries that access "normal" tables, temporary
table fields are created in create_tmp_field_from_field(). On
the other hand, queries against information_schema tables
create fields for the temporary table in
create_tmp_field_for_schema(). This patch aligns the two
functions by setting db_create_options-flag
HA_OPTION_PACK_RECORD when a VARCHAR column is added for
schema temp tables just as is done for "normal" temp tables.
The result is that temp tables for information schema queries
use the packed MyISAM format if they contain sufficiently
large VARCHAR columns.
@ mysql-test/suite/opt_trace/r/temp_table.result
Add test that I_S temporary tables use the packed MyISAM format
@ mysql-test/suite/opt_trace/t/temp_table.test
Add test that I_S temporary tables use the packed MyISAM format
@ sql/sql_tmp_table.cc
Set HA_OPTION_PACK_RECORD in create_tmp_field_for_schema()
if a VARCHAR column is added.
modified:
mysql-test/suite/opt_trace/r/temp_table.result
mysql-test/suite/opt_trace/t/temp_table.test
sql/sql_tmp_table.cc
=== added file 'mysql-test/r/archive_no_symlink.result'
--- a/mysql-test/r/archive_no_symlink.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/archive_no_symlink.result revid:kevin.lewis@stripped
@@ -0,0 +1,26 @@
+#
+# This test shows that DATA DIRECTORY and INDEX DIRECTORY are
+# ignored where symbolic links are not supported such as Windows.
+#
+CREATE TABLE t1 (
+c1 int(10) unsigned NOT NULL AUTO_INCREMENT,
+c2 varchar(30) NOT NULL,
+c3 smallint(5) unsigned DEFAULT NULL,
+PRIMARY KEY (c1))
+ENGINE = archive
+DATA DIRECTORY = 'MYSQL_TMP_DIR/archive' INDEX DIRECTORY = 'MYSQL_TMP_DIR/archive';
+Warnings:
+Warning 1618 <DATA DIRECTORY> option ignored
+Warning 1618 <INDEX DIRECTORY> option ignored
+INSERT INTO t1 VALUES (NULL, "first", 1);
+INSERT INTO t1 VALUES (NULL, "second", 2);
+INSERT INTO t1 VALUES (NULL, "third", 3);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `c2` varchar(30) NOT NULL,
+ `c3` smallint(5) unsigned DEFAULT NULL,
+ PRIMARY KEY (`c1`)
+) ENGINE=ARCHIVE AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
+DROP TABLE t1;
=== added file 'mysql-test/r/archive_symlink.result'
--- a/mysql-test/r/archive_symlink.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/archive_symlink.result revid:kevin.lewis@stripped
@@ -0,0 +1,54 @@
+#
+# Archive can only use an existing directory for DATA DIRECTORY.
+#
+CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ENGINE archive DATA DIRECTORY = 'MYSQL_TMP_DIR/archive' INDEX DIRECTORY = 'MYSQL_TMP_DIR/archive';
+ERROR HY000: Can't create table 'test.t1' (errno: 2)
+#
+# mkdir MYSQL_TMP_DIR/archive and try again...
+# Archive will use a symlink for DATA DIRECTORY but ignore INDEX DIRECTORY.
+#
+CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ENGINE archive DATA DIRECTORY = 'MYSQL_TMP_DIR/archive' INDEX DIRECTORY = 'MYSQL_TMP_DIR/archive';
+Warnings:
+Warning 1618 <INDEX DIRECTORY> option ignored
+INSERT INTO t1 VALUES (NULL, "blue");
+INSERT INTO t1 VALUES (NULL, "red");
+INSERT INTO t1 VALUES (NULL, "yellow");
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+# Checking if archive file exists in DATA DIRECTORY
+DROP TABLE t1;
+#
+# Be sure SQL MODE "NO_DIR_IN_CREATE" prevents the use of DATA DIRECTORY
+#
+SET @org_mode=@@sql_mode;
+SET @@sql_mode='NO_DIR_IN_CREATE';
+SELECT @@sql_mode;
+@@sql_mode
+NO_DIR_IN_CREATE
+CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ENGINE archive DATA DIRECTORY = 'MYSQL_TMP_DIR/archive';
+Warnings:
+Warning 1618 <DATA DIRECTORY> option ignored
+INSERT INTO t1 VALUES (NULL, "blue");
+INSERT INTO t1 VALUES (NULL, "red");
+INSERT INTO t1 VALUES (NULL, "yellow");
+# Checking if archive file exists in --datadir
+DROP TABLE t1;
+set @@sql_mode=@org_mode;
+#
+# MySQL engine does not allow DATA DIRECTORY to be
+# within --datadir for any engine, including Archive
+#
+CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ENGINE archive DATA DIRECTORY 'MYSQLD_DATADIR/test';
+ERROR HY000: Incorrect arguments to DATA DIRECTORY
+CREATE TABLE t1 (c1 int(10), PRIMARY KEY (c1))
+ENGINE archive INDEX DIRECTORY 'MYSQLD_DATADIR/test';
+ERROR HY000: Incorrect arguments to INDEX DIRECTORY
+#
+# Cleanup
+#
=== added file 'mysql-test/t/archive_no_symlink-master.opt'
--- a/mysql-test/t/archive_no_symlink-master.opt 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/archive_no_symlink-master.opt revid:kevin.lewis@stripped
@@ -0,0 +1 @@
+--skip-symbolic-links
=== added file 'mysql-test/t/archive_no_symlink.test'
--- a/mysql-test/t/archive_no_symlink.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/archive_no_symlink.test revid:kevin.lewis@stripped
@@ -0,0 +1,26 @@
+# Test archive engine when symbolic links are not available.
+--source include/have_archive.inc
+
+--echo #
+--echo # This test shows that DATA DIRECTORY and INDEX DIRECTORY are
+--echo # ignored where symbolic links are not supported such as Windows.
+--echo #
+
+let $data_directory = DATA DIRECTORY = '$MYSQL_TMP_DIR/archive';
+let $index_directory = INDEX DIRECTORY = '$MYSQL_TMP_DIR/archive';
+
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE t1 (
+ c1 int(10) unsigned NOT NULL AUTO_INCREMENT,
+ c2 varchar(30) NOT NULL,
+ c3 smallint(5) unsigned DEFAULT NULL,
+ PRIMARY KEY (c1))
+ENGINE = archive
+$data_directory $index_directory;
+
+INSERT INTO t1 VALUES (NULL, "first", 1);
+INSERT INTO t1 VALUES (NULL, "second", 2);
+INSERT INTO t1 VALUES (NULL, "third", 3);
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
+
=== added file 'mysql-test/t/archive_symlink.test'
--- a/mysql-test/t/archive_symlink.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/archive_symlink.test revid:kevin.lewis@stripped
@@ -0,0 +1,74 @@
+# Test archive engine when symbolic links are available.
+--source include/not_windows.inc
+--source include/have_archive.inc
+
+# DATA DIRECTORY/INDEX DIRECTORY require symbolic link support
+--source include/have_symlink.inc
+
+let $MYSQLD_DATADIR= `select @@datadir`;
+let $data_directory = DATA DIRECTORY = '$MYSQL_TMP_DIR/archive';
+let $index_directory = INDEX DIRECTORY = '$MYSQL_TMP_DIR/archive';
+
+--echo #
+--echo # Archive can only use an existing directory for DATA DIRECTORY.
+--echo #
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+--error ER_CANT_CREATE_TABLE
+eval CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ ENGINE archive $data_directory $index_directory;
+
+--echo #
+--echo # mkdir MYSQL_TMP_DIR/archive and try again...
+--echo # Archive will use a symlink for DATA DIRECTORY but ignore INDEX DIRECTORY.
+--echo #
+--mkdir $MYSQL_TMP_DIR/archive
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ ENGINE archive $data_directory $index_directory;
+INSERT INTO t1 VALUES (NULL, "blue");
+INSERT INTO t1 VALUES (NULL, "red");
+INSERT INTO t1 VALUES (NULL, "yellow");
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+INSERT INTO t1 SELECT NULL, b FROM t1;
+--echo # Checking if archive file exists in DATA DIRECTORY
+--file_exists $MYSQL_TMP_DIR/archive/t1.ARZ
+DROP TABLE t1;
+
+--echo #
+--echo # Be sure SQL MODE "NO_DIR_IN_CREATE" prevents the use of DATA DIRECTORY
+--echo #
+SET @org_mode=@@sql_mode;
+SET @@sql_mode='NO_DIR_IN_CREATE';
+SELECT @@sql_mode;
+--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
+eval CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ ENGINE archive $data_directory;
+INSERT INTO t1 VALUES (NULL, "blue");
+INSERT INTO t1 VALUES (NULL, "red");
+INSERT INTO t1 VALUES (NULL, "yellow");
+--echo # Checking if archive file exists in --datadir
+--file_exists $MYSQLD_DATADIR/test/t1.ARZ
+DROP TABLE t1;
+set @@sql_mode=@org_mode;
+
+--echo #
+--echo # MySQL engine does not allow DATA DIRECTORY to be
+--echo # within --datadir for any engine, including Archive
+--echo #
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+--error ER_WRONG_ARGUMENTS
+eval CREATE TABLE t1 (a int AUTO_INCREMENT KEY, b char(30))
+ ENGINE archive DATA DIRECTORY '$MYSQLD_DATADIR/test';
+
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+--error ER_WRONG_ARGUMENTS
+eval CREATE TABLE t1 (c1 int(10), PRIMARY KEY (c1))
+ENGINE archive INDEX DIRECTORY '$MYSQLD_DATADIR/test';
+
+--echo #
+--echo # Cleanup
+--echo #
+--rmdir $MYSQL_TMP_DIR/archive
+
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-trunk branch (kevin.lewis:3878 to 3879) WL#6145 | kevin.lewis | 13 Feb |