~drizzle-trunk/drizzle/development

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
disable_query_log;
-- source include/test_outfile.inc
# Server are started in "var/master-data", so "../tmp" will be "var/tmp"
eval set @tmpdir="../tmp";
enable_query_log;
-- source include/have_outfile.inc

#
# test of into outfile|dumpfile
#

--disable_warnings
drop table if exists t1;
--enable_warnings

create table t1 (`a` blob);
insert into t1 values("hello world"),("Hello mars"),(NULL);
disable_query_log;
eval select * into outfile "../tmp/outfile-test.1" from t1;
enable_query_log;
select load_file(concat(@tmpdir,"/outfile-test.1"));
disable_query_log;
eval select * into dumpfile "../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 "../tmp/outfile-test.3" from t1 where a is null;
enable_query_log;
select load_file(concat(@tmpdir,"/outfile-test.3"));

# the following should give errors

disable_query_log;
--error 1086
eval select * into outfile "../tmp/outfile-test.1" from t1;

--error 1086
eval select * into dumpfile "../tmp/outfile-test.2" from t1;

--error 1086
eval select * into dumpfile "../tmp/outfile-test.3" from t1;
enable_query_log;
select load_file(concat(@tmpdir,"/outfile-test.not-exist"));
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.1
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.2
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.3
drop table t1;

# Bug#8191
disable_query_log;
eval select 1 into outfile "../tmp/outfile-test.4";
enable_query_log;
select load_file(concat(@tmpdir,"/outfile-test.4"));
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4

#
# Bug #5382: 'explain select into outfile' crashes the server
#

CREATE TABLE t1 (a INT);
EXPLAIN 
  SELECT *
  INTO OUTFILE '/tmp/t1.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
  FROM t1;
DROP TABLE t1;

# End of 4.1 tests

#
# Bug#13202  SELECT * INTO OUTFILE ... FROM information_schema.schemata now fails
#
disable_query_log;
eval SELECT * INTO OUTFILE "../tmp/outfile-test.4"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM information_schema.schemata LIMIT 0, 5;
# enable_query_log;
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4

use information_schema;
# disable_query_log;
eval SELECT * INTO OUTFILE "../tmp/outfile-test.4"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM schemata LIMIT 0, 5;
enable_query_log;
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4
use test;

#
# Bug#18628 mysql-test-run: security problem
#
# It should not be possible to write to a file outside of vardir
create table t1(a int);
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--error 1290
eval select * into outfile "$MYSQL_TEST_DIR/outfile-test1" from t1;
drop table t1;

#
# Bug#28181 Access denied to 'information_schema when
# select into out file (regression)
#
create database mysqltest;
create user user_1@localhost;
grant all on mysqltest.* to user_1@localhost;
connect (con28181_1,localhost,user_1,,mysqltest);

--error ER_ACCESS_DENIED_ERROR 
eval select schema_name
into outfile "../tmp/outfile-test.4"
fields terminated by ',' optionally enclosed by '"'
 lines terminated by '\n'
from information_schema.schemata
where schema_name like 'mysqltest';

connection default;
grant file on *.* to user_1@localhost;

connect (con28181_2,localhost,user_1,,mysqltest);
eval select schema_name
into outfile "../tmp/outfile-test.4"
fields terminated by ',' optionally enclosed by '"'
 lines terminated by '\n'
from information_schema.schemata
where schema_name like 'mysqltest';

connection default;
--exec rm $MYSQLTEST_VARDIR/tmp/outfile-test.4
use test;
revoke all privileges on *.* from user_1@localhost;
drop user user_1@localhost;
drop database mysqltest;