summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <istruewing@stella.local>2008-03-14 14:03:47 +0100
committerunknown <istruewing@stella.local>2008-03-14 14:03:47 +0100
commit9fa2d50559383785c72656dcdffa878cc3563da9 (patch)
treeeff22a0b56e730c1e0946113822a7f9daba4f096
parente79249f81bbb7158fb263455e531bda4117b5fc9 (diff)
downloadmariadb-git-9fa2d50559383785c72656dcdffa878cc3563da9.tar.gz
Post-merge fix. Moved the symlink handling from sql_parse.cc here.
mysql-test/r/symlink.result: Post-merge fix mysql-test/t/symlink.test: Post-merge fix
-rw-r--r--mysql-test/r/symlink.result4
-rw-r--r--mysql-test/t/symlink.test7
-rw-r--r--sql/sql_table.cc20
3 files changed, 26 insertions, 5 deletions
diff --git a/mysql-test/r/symlink.result b/mysql-test/r/symlink.result
index 68cc893e507..e95466271fd 100644
--- a/mysql-test/r/symlink.result
+++ b/mysql-test/r/symlink.result
@@ -146,10 +146,10 @@ DATA DIRECTORY='TEST_DIR/master-data/test';
ERROR HY000: Incorrect arguments to DATA DIRECORY
CREATE TABLE t1(a INT)
DATA DIRECTORY='TEST_DIR/master-data/';
-DROP TABLE t1;
+ERROR HY000: Incorrect arguments to DATA DIRECORY
CREATE TABLE t1(a INT)
INDEX DIRECTORY='TEST_DIR/master-data';
-DROP TABLE t1;
+ERROR HY000: Incorrect arguments to INDEX DIRECORY
CREATE TABLE t1(a INT)
INDEX DIRECTORY='TEST_DIR/master-data_var';
ERROR HY000: Can't create/write to file 'TEST_DIR/master-data_var/t1.MYI' (Errcode: 2)
diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test
index 5802e65df1e..1323451d984 100644
--- a/mysql-test/t/symlink.test
+++ b/mysql-test/t/symlink.test
@@ -126,6 +126,9 @@ drop table t1;
--write_file $MYSQLTEST_VARDIR/tmp/t1.MYI
EOF
--replace_result $MYSQLTEST_VARDIR TEST_DIR
+# If $MYSQLTEST_VARDIR is a symbolic link, the low level MyISAm error
+# message contains the real path of $MYSQLTEST_VARDIR. Try to catch this.
+--replace_regex /write to file '\/.*\/tmp/write to file 'TEST_DIR\/tmp/
--error 1
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp'
@@ -209,13 +212,13 @@ INDEX DIRECTORY='$MYSQLTEST_VARDIR/master-data/mysql';
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQLTEST_VARDIR/master-data/test';
--replace_result $MYSQLTEST_VARDIR TEST_DIR
+--error 1210
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQLTEST_VARDIR/master-data/';
-DROP TABLE t1;
--replace_result $MYSQLTEST_VARDIR TEST_DIR
+--error 1210
eval CREATE TABLE t1(a INT)
INDEX DIRECTORY='$MYSQLTEST_VARDIR/master-data';
-DROP TABLE t1;
--replace_result $MYSQLTEST_VARDIR TEST_DIR
--error 1
eval CREATE TABLE t1(a INT)
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 18d8ae68008..b42045446d3 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3517,8 +3517,26 @@ bool mysql_create_table_no_lock(THD *thd,
create_info->table_existed= 0; // Mark that table is created
#ifdef HAVE_READLINK
+ if (test_if_data_home_dir(create_info->data_file_name))
+ {
+ my_error(ER_WRONG_ARGUMENTS, MYF(0), "DATA DIRECTORY");
+ goto unlock_and_end;
+ }
+ if (test_if_data_home_dir(create_info->index_file_name))
+ {
+ my_error(ER_WRONG_ARGUMENTS, MYF(0), "INDEX DIRECTORY");
+ goto unlock_and_end;
+ }
+
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ if (check_partition_dirs(thd->lex->part_info))
+ {
+ goto unlock_and_end;
+ }
+#endif /* WITH_PARTITION_STORAGE_ENGINE */
+
if (!my_use_symdir || (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
-#endif
+#endif /* HAVE_READLINK */
{
if (create_info->data_file_name)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,