summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/include/have_outfile.inc5
-rw-r--r--mysql-test/include/test_outfile.inc1
-rw-r--r--mysql-test/r/alter_table.result20
-rw-r--r--mysql-test/r/have_outfile.require3
-rw-r--r--mysql-test/r/outfile.resultbin0 -> 953 bytes
-rw-r--r--mysql-test/t/alter_table.test13
-rw-r--r--mysql-test/t/outfile.test60
-rw-r--r--sql/sql_table.cc23
-rw-r--r--sql/sql_yacc.yy7
9 files changed, 105 insertions, 27 deletions
diff --git a/mysql-test/include/have_outfile.inc b/mysql-test/include/have_outfile.inc
new file mode 100644
index 00000000000..31e95f4810a
--- /dev/null
+++ b/mysql-test/include/have_outfile.inc
@@ -0,0 +1,5 @@
+-- require r/have_outfile.require
+disable_query_log;
+select load_file(concat(@tmpdir,"/outfile.test"));
+--exec rm $MYSQL_TEST_DIR/var/tmp/outfile.test
+enable_query_log;
diff --git a/mysql-test/include/test_outfile.inc b/mysql-test/include/test_outfile.inc
new file mode 100644
index 00000000000..0bede4938c6
--- /dev/null
+++ b/mysql-test/include/test_outfile.inc
@@ -0,0 +1 @@
+eval select "Outfile OK" into outfile "$MYSQL_TEST_DIR/var/tmp/outfile.test";
diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result
index 78925a64e93..80d3ef5e0a5 100644
--- a/mysql-test/r/alter_table.result
+++ b/mysql-test/r/alter_table.result
@@ -386,3 +386,23 @@ Incorrect table name 't1\\'
rename table t1 to `t1\\`;
Incorrect table name 't1\\'
drop table t1;
+drop table if exists t1, t2;
+create table t1 ( a varchar(10) not null primary key ) engine=myisam;
+create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1);
+flush tables;
+alter table t1 modify a varchar(10);
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` varchar(10) NOT NULL default '',
+ PRIMARY KEY (`a`)
+) TYPE=MRG_MyISAM UNION=(t1)
+flush tables;
+alter table t1 modify a varchar(10) not null;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` varchar(10) NOT NULL default '',
+ PRIMARY KEY (`a`)
+) TYPE=MRG_MyISAM UNION=(t1)
+drop table if exists t1, t2;
diff --git a/mysql-test/r/have_outfile.require b/mysql-test/r/have_outfile.require
new file mode 100644
index 00000000000..9fc2f8fdb5a
--- /dev/null
+++ b/mysql-test/r/have_outfile.require
@@ -0,0 +1,3 @@
+load_file(concat(@tmpdir,"/outfile.test"))
+Outfile OK
+
diff --git a/mysql-test/r/outfile.result b/mysql-test/r/outfile.result
new file mode 100644
index 00000000000..a2720be075a
--- /dev/null
+++ b/mysql-test/r/outfile.result
Binary files differ
diff --git a/mysql-test/t/alter_table.test b/mysql-test/t/alter_table.test
index 11290134a71..c69f9aabae6 100644
--- a/mysql-test/t/alter_table.test
+++ b/mysql-test/t/alter_table.test
@@ -254,3 +254,16 @@ alter table t1 rename to `t1\\`;
rename table t1 to `t1\\`;
drop table t1;
+#
+# BUG#6236 - ALTER TABLE MODIFY should set implicit NOT NULL on PK columns
+#
+drop table if exists t1, t2;
+create table t1 ( a varchar(10) not null primary key ) engine=myisam;
+create table t2 ( a varchar(10) not null primary key ) engine=merge union=(t1);
+flush tables;
+alter table t1 modify a varchar(10);
+show create table t2;
+flush tables;
+alter table t1 modify a varchar(10) not null;
+show create table t2;
+drop table if exists t1, t2;
diff --git a/mysql-test/t/outfile.test b/mysql-test/t/outfile.test
index c126d221bd2..f86c4163289 100644
--- a/mysql-test/t/outfile.test
+++ b/mysql-test/t/outfile.test
@@ -1,23 +1,47 @@
+disable_query_log;
+-- source include/test_outfile.inc
+eval set @tmpdir="$MYSQL_TEST_DIR/var/tmp";
+enable_query_log;
+-- source include/have_outfile.inc
#
# test of into outfile|dumpfile
#
-# We need to check that we have 'file' privilege.
+drop table if exists t1;
+create table t1 (`a` blob);
+insert into t1 values("hello world"),("Hello mars"),(NULL);
+disable_query_log;
+eval select * into outfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.1" from t1;
+enable_query_log;
+select load_file(concat(@tmpdir,"/outfile-test.1"));
+disable_query_log;
+eval select * into dumpfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.2" from t1 limit 1;
+enable_query_log;
+select load_file(concat(@tmpdir,"/outfile-test.2"));
+disable_query_log;
+eval select * into dumpfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.3" from t1 where a is null;
+enable_query_log;
+select load_file(concat(@tmpdir,"/outfile-test.3"));
-#drop table if exists t1;
-#create table t1 (`a` blob);
-#insert into t1 values("hello world"),("Hello mars"),(NULL);
-#select * into outfile "/tmp/select-test.1" from t1;
-#select load_file("/tmp/select-test.1");
-#select * into dumpfile "/tmp/select-test.2" from t1 limit 1;
-#select load_file("/tmp/select-test.2");
-#select * into dumpfile "/tmp/select-test.3" from t1 where a is null;
-#select load_file("/tmp/select-test.3");
-#
-## the following should give errors
-#
-#select * into outfile "/tmp/select-test.1" from t1;
-#select * into dumpfile "/tmp/select-test.1" from t1;
-#select * into dumpfile "/tmp/select-test.99" from t1;
-#select load_file("/tmp/select-test.not-exist");
-#drop table t1;
+# the following should give errors
+
+disable_query_log;
+--error 1086
+eval select * into outfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.1" from t1;
+--error 1086
+eval select * into dumpfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.2" from t1;
+--error 1086
+eval select * into dumpfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.3" from t1;
+enable_query_log;
+select load_file(concat(@tmpdir,"/outfile-test.not-exist"));
+--exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.1
+--exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.2
+--exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.3
+drop table t1;
+
+# Bug#8191
+disable_query_log;
+eval select 1 into outfile "$MYSQL_TEST_DIR/var/tmp/outfile-test.4";
+enable_query_log;
+select load_file(concat(@tmpdir,"/outfile-test.4"));
+--exec rm $MYSQL_TEST_DIR/var/tmp/outfile-test.4
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index cef480fadde..e065e5dfc58 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1795,6 +1795,11 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
}
KEY_PART_INFO *key_part= key_info->key_part;
+ enum Key::Keytype key_type= key_info->flags & HA_NOSAME ?
+ (!my_strcasecmp(key_name, "PRIMARY") ?
+ Key::PRIMARY : Key::UNIQUE) :
+ (key_info->flags & HA_FULLTEXT ?
+ Key::FULLTEXT : Key::MULTIPLE);
key_parts.empty();
for (uint j=0 ; j < key_info->key_parts ; j++,key_part++)
{
@@ -1824,16 +1829,22 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
cfield->pack_length <= key_part_length))
key_part_length=0; // Use whole field
}
+ if (!(cfield->flags & NOT_NULL_FLAG))
+ {
+ if (key_type == Key::PRIMARY)
+ {
+ /* Implicitly set primary key fields to NOT NULL for ISO conf. */
+ cfield->flags|= NOT_NULL_FLAG;
+ cfield->pack_flag&= ~FIELDFLAG_MAYBE_NULL;
+ }
+ else
+ key_info->flags|= HA_NULL_PART_KEY;
+ }
key_parts.push_back(new key_part_spec(cfield->field_name,
key_part_length));
}
if (key_parts.elements)
- key_list.push_back(new Key(key_info->flags & HA_NOSAME ?
- (!my_strcasecmp(key_name, "PRIMARY") ?
- Key::PRIMARY : Key::UNIQUE) :
- (key_info->flags & HA_FULLTEXT ?
- Key::FULLTEXT : Key::MULTIPLE),
- key_name,key_parts));
+ key_list.push_back(new Key(key_type,key_name,key_parts));
}
key_it.rewind();
{
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 8c5c4d61d1d..68d08b353d9 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1537,9 +1537,10 @@ select_part2:
select_into:
limit_clause {}
+ | into
| select_from
- | opt_into select_from
- | select_from opt_into;
+ | into select_from
+ | select_from into;
select_from:
FROM join_table_list where_clause group_clause having_clause opt_order_clause limit_clause procedure_clause;
@@ -2507,7 +2508,7 @@ procedure_item:
$2->set_name($1,(uint) ((char*) lex->tok_end - $1));
};
-opt_into:
+into:
INTO OUTFILE TEXT_STRING
{
THD *thd= current_thd;