~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

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
134
135
136
137
138
139
140
141
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

# Save the initial number of concurrent sessions
--source include/count_sessions.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 ER_FILE_EXISTS_ERROR
eval select * into outfile "../../tmp/outfile-test.1" from t1;

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

--error ER_FILE_EXISTS_ERROR
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 SELECT INTO OUTFILE insists on FROM clause
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 ER_OPTION_PREVENTS_STATEMENT
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_DBACCESS_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;
disconnect con28181_1;
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;
disconnect con28181_2;
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4
use test;
revoke all privileges on *.* from user_1@localhost;
drop user user_1@localhost;
drop database mysqltest;

# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc