1
by brian
clean slate |
1 |
# Initialise
|
2 |
--disable_warnings |
|
3 |
drop table if exists t1,t2; |
|
4 |
--enable_warnings |
|
5 |
||
6 |
--error 1054 |
|
7 |
set @a := foo; |
|
8 |
set @a := connection_id() + 3; |
|
9 |
select @a - connection_id(); |
|
10 |
||
11 |
set @b := 1; |
|
12 |
select @b; |
|
13 |
||
14 |
# Check using and setting variables with SELECT DISTINCT
|
|
15 |
||
16 |
CREATE TABLE t1 ( i int not null, v int not null,index (i)); |
|
17 |
insert into t1 values (1,1),(1,3),(2,1); |
|
18 |
create table t2 (i int not null, unique (i)); |
|
19 |
insert into t2 select distinct i from t1; |
|
20 |
select * from t2; |
|
21 |
select distinct t2.i,@vv1:=if(sv1.i,1,0),@vv2:=if(sv2.i,1,0),@vv3:=if(sv3.i,1,0), @vv1+@vv2+@vv3 from t2 left join t1 as sv1 on sv1.i=t2.i and sv1.v=1 left join t1 as sv2 on sv2.i=t2.i and sv2.v=2 left join t1 as sv3 on sv3.i=t2.i and sv3.v=3; |
|
22 |
explain select * from t1 where i=@vv1; |
|
23 |
select @vv1,i,v from t1 where i=@vv1; |
|
24 |
explain select * from t1 where @vv1:=@vv1+1 and i=@vv1; |
|
25 |
explain select @vv1:=i from t1 where i=@vv1; |
|
26 |
explain select * from t1 where i=@vv1; |
|
27 |
drop table t1,t2; |
|
28 |
||
29 |
# Check types of variables
|
|
30 |
set @a=0,@b=0; |
|
31 |
select @a:=10, @b:=1, @a > @b, @a < @b; |
|
32 |
# Note that here a and b will be avaluated as number
|
|
33 |
select @a:="10", @b:="1", @a > @b, @a < @b; |
|
34 |
# Note that here a and b will be avaluated as strings
|
|
35 |
select @a:=10, @b:=2, @a > @b, @a < @b; |
|
36 |
select @a:="10", @b:="2", @a > @b, @a < @b; |
|
37 |
||
38 |
# Fixed bug #1194
|
|
39 |
select @a:=1; |
|
40 |
select @a, @a:=1; |
|
41 |
||
42 |
create table t1 (id int, d double, c char(10)); |
|
43 |
insert into t1 values (1,2.0, "test"); |
|
44 |
select @c:=0; |
|
45 |
update t1 SET id=(@c:=@c+1); |
|
46 |
select @c; |
|
47 |
select @c:=0; |
|
48 |
update t1 set id=(@c:=@c+1); |
|
49 |
select @c; |
|
50 |
select @c:=0; |
|
51 |
select @c:=@c+1; |
|
52 |
select @d,(@d:=id),@d from t1; |
|
53 |
select @e,(@e:=d),@e from t1; |
|
54 |
select @f,(@f:=c),@f from t1; |
|
55 |
set @g=1; |
|
56 |
select @g,(@g:=c),@g from t1; |
|
57 |
select @c, @d, @e, @f; |
|
58 |
select @d:=id, @e:=id, @f:=id, @g:=@id from t1; |
|
59 |
select @c, @d, @e, @f, @g; |
|
60 |
drop table t1; |
|
61 |
||
62 |
# just for fun :)
|
|
63 |
select @a:=10, @b:=2, @a>@b, @a:="10", @b:="2", @a>@b, @a:=10, @b:=2, @a>@b, @a:="10", @b:="2", @a>@b; |
|
64 |
||
65 |
#
|
|
66 |
# bug#1739
|
|
67 |
# Item_func_set_user_var sets update_query_id, Item_func_get_user_var checks it
|
|
68 |
#
|
|
69 |
create table t1 (i int not null); |
|
70 |
insert t1 values (1),(2),(2),(3),(3),(3); |
|
71 |
select @a:=0; select @a, @a:=@a+count(*), count(*), @a from t1 group by i; |
|
72 |
select @a:=0; select @a+0, @a:=@a+0+count(*), count(*), @a+0 from t1 group by i; |
|
73 |
||
74 |
set @a=0; |
|
75 |
select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; |
|
76 |
select @a,@a:="hello",@a,@a:=3,@a,@a:="hello again" from t1 group by i; |
|
77 |
drop table t1; |
|
78 |
||
79 |
#
|
|
80 |
# Bug #2244: User variables didn't copy collation and derivation
|
|
81 |
# attributes from values they were initialized to.
|
|
82 |
#
|
|
83 |
||
84 |
set @a=_latin2'test'; |
|
85 |
select charset(@a),collation(@a),coercibility(@a); |
|
86 |
select @a=_latin2'TEST'; |
|
87 |
select @a=_latin2'TEST' collate latin2_bin; |
|
88 |
||
89 |
set @a=_latin2'test' collate latin2_general_ci; |
|
90 |
select charset(@a),collation(@a),coercibility(@a); |
|
91 |
select @a=_latin2'TEST'; |
|
92 |
select @a=_latin2'TEST' collate latin2_bin; |
|
93 |
||
94 |
#
|
|
95 |
# Check the same invoking Item_set_user_var
|
|
96 |
#
|
|
97 |
select charset(@a:=_latin2'test'); |
|
98 |
select collation(@a:=_latin2'test'); |
|
99 |
select coercibility(@a:=_latin2'test'); |
|
100 |
select collation(@a:=_latin2'test' collate latin2_bin); |
|
101 |
select coercibility(@a:=_latin2'test' collate latin2_bin); |
|
102 |
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST'; |
|
103 |
select charset(@a),collation(@a),coercibility(@a); |
|
104 |
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci; |
|
105 |
||
106 |
#
|
|
107 |
# Bug #6321 strange error:
|
|
108 |
# string function FIELD(<uservariable content NULL>, ...)
|
|
109 |
#
|
|
110 |
set @var= NULL ; |
|
111 |
select FIELD( @var,'1it','Hit') as my_column; |
|
112 |
||
113 |
#
|
|
114 |
# Bug#9425 A user variable doesn't always have implicit coercibility
|
|
115 |
#
|
|
116 |
select @v, coercibility(@v); |
|
117 |
set @v1=null, @v2=1, @v3=1.1, @v4=now(); |
|
118 |
select coercibility(@v1),coercibility(@v2),coercibility(@v3),coercibility(@v4); |
|
119 |
||
120 |
#
|
|
121 |
# Bug #9286 SESSION/GLOBAL should be disallowed for user variables
|
|
122 |
#
|
|
123 |
--error 1064 |
|
124 |
set session @honk=99; |
|
125 |
--error 1382 |
|
126 |
set one_shot @honk=99; |
|
127 |
||
128 |
#
|
|
129 |
# Bug #10724 @@local not preserved in column name of select
|
|
130 |
#
|
|
131 |
# The value doesn't actually matter, we just care about the column name
|
|
132 |
--replace_column 1 # |
|
133 |
select @@local.max_allowed_packet; |
|
134 |
--replace_column 1 # |
|
135 |
select @@session.max_allowed_packet; |
|
136 |
--replace_column 1 # |
|
137 |
select @@global.max_allowed_packet; |
|
138 |
--replace_column 1 # |
|
139 |
select @@max_allowed_packet; |
|
140 |
--replace_column 1 # |
|
141 |
select @@Max_Allowed_Packet; |
|
142 |
--replace_column 1 # |
|
143 |
select @@version; |
|
144 |
--replace_column 1 # |
|
145 |
select @@global.version; |
|
146 |
||
147 |
--echo End of 4.1 tests |
|
148 |
||
149 |
# Bug #6598: problem with cast(NULL as signed integer);
|
|
150 |
#
|
|
151 |
||
152 |
set @first_var= NULL; |
|
153 |
create table t1 select @first_var; |
|
154 |
show create table t1; |
|
155 |
drop table t1; |
|
156 |
set @first_var= cast(NULL as signed integer); |
|
157 |
create table t1 select @first_var; |
|
158 |
show create table t1; |
|
159 |
drop table t1; |
|
160 |
set @first_var= NULL; |
|
161 |
create table t1 select @first_var; |
|
162 |
show create table t1; |
|
163 |
drop table t1; |
|
164 |
set @first_var= concat(NULL); |
|
165 |
create table t1 select @first_var; |
|
166 |
show create table t1; |
|
167 |
drop table t1; |
|
168 |
set @first_var=1; |
|
169 |
set @first_var= cast(NULL as CHAR); |
|
170 |
create table t1 select @first_var; |
|
171 |
show create table t1; |
|
172 |
drop table t1; |
|
173 |
||
174 |
#
|
|
175 |
# Bug #7498 User variable SET saves SIGNED BIGINT as UNSIGNED BIGINT
|
|
176 |
#
|
|
177 |
||
178 |
# First part, set user var to large number and select it
|
|
179 |
set @a=18446744071710965857; |
|
180 |
select @a; |
|
181 |
||
182 |
# Second part, set user var from large number in table
|
|
183 |
# then select it
|
|
184 |
CREATE TABLE `bigfailure` ( |
|
185 |
`afield` BIGINT UNSIGNED NOT NULL |
|
186 |
);
|
|
187 |
INSERT INTO `bigfailure` VALUES (18446744071710965857); |
|
188 |
SELECT * FROM bigfailure; |
|
189 |
select * from (SELECT afield FROM bigfailure) as b; |
|
190 |
select * from bigfailure where afield = (SELECT afield FROM bigfailure); |
|
191 |
select * from bigfailure where afield = 18446744071710965857; |
|
192 |
# This is fixed in 5.0, to be uncommented there
|
|
193 |
#select * from bigfailure where afield = '18446744071710965857';
|
|
194 |
select * from bigfailure where afield = 18446744071710965856+1; |
|
195 |
||
196 |
SET @a := (SELECT afield FROM bigfailure); |
|
197 |
SELECT @a; |
|
198 |
SET @a := (select afield from (SELECT afield FROM bigfailure) as b); |
|
199 |
SELECT @a; |
|
200 |
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure)); |
|
201 |
SELECT @a; |
|
202 |
||
203 |
drop table bigfailure; |
|
204 |
||
205 |
#
|
|
206 |
# Bug#16861: User defined variable can have a wrong value if a tmp table was
|
|
207 |
# used.
|
|
208 |
#
|
|
209 |
create table t1(f1 int, f2 int); |
|
210 |
insert into t1 values (1,2),(2,3),(3,1); |
|
211 |
select @var:=f2 from t1 group by f1 order by f2 desc limit 1; |
|
212 |
select @var; |
|
213 |
create table t2 as select @var:=f2 from t1 group by f1 order by f2 desc limit 1; |
|
214 |
select * from t2; |
|
215 |
select @var; |
|
216 |
drop table t1,t2; |
|
217 |
||
218 |
#
|
|
219 |
# Bug#19024 - SHOW COUNT(*) WARNINGS not return Errors
|
|
220 |
#
|
|
221 |
--error 1064 |
|
222 |
insert into city 'blah'; |
|
223 |
SHOW COUNT(*) WARNINGS; |
|
224 |
SHOW COUNT(*) ERRORS; |
|
225 |
||
226 |
#
|
|
227 |
# Bug#28494: Grouping by Item_func_set_user_var produces incorrect result.
|
|
228 |
#
|
|
229 |
create table t1(f1 int, f2 varchar(2), f3 float, f4 decimal(2,1)); |
|
230 |
insert into t1 values |
|
231 |
(1, "a", 1.5, 1.6), (1, "a", 1.5, 1.6), (2, "b", 2.5, 2.6), |
|
232 |
(3, "c", 3.5, 3.6), (4, "d", 4.5, 4.6), (1, "a", 1.5, 1.6), |
|
233 |
(3, "c", 3.5, 3.6), (1, "a", 1.5, 1.6); |
|
234 |
select @a:=f1, count(f1) from t1 group by 1 desc; |
|
235 |
select @a:=f1, count(f1) from t1 group by 1 asc; |
|
236 |
select @a:=f2, count(f2) from t1 group by 1 desc; |
|
237 |
select @a:=f3, count(f3) from t1 group by 1 desc; |
|
238 |
select @a:=f4, count(f4) from t1 group by 1 desc; |
|
239 |
drop table t1; |
|
240 |
||
241 |
#
|
|
242 |
# Bug#32482: Crash for a query with ORDER BY a user variable.
|
|
243 |
#
|
|
244 |
create table t1 (f1 int); |
|
245 |
insert into t1 values (2), (1); |
|
246 |
select @i := f1 as j from t1 order by 1; |
|
247 |
drop table t1; |
|
248 |
# Bug #32260: User variables in query cause server crash
|
|
249 |
#
|
|
250 |
create table t1(a int); |
|
251 |
insert into t1 values(5),(4),(4),(3),(2),(2),(2),(1); |
|
252 |
set @rownum := 0; |
|
253 |
set @rank := 0; |
|
254 |
set @prev_score := NULL; |
|
255 |
# Disable the result log as we assign a value to a user variable in one part
|
|
256 |
# of a statement and use the same variable in other part of the same statement,
|
|
257 |
# so we can get unexpected results.
|
|
258 |
--disable_result_log |
|
259 |
select @rownum := @rownum + 1 as row, |
|
260 |
@rank := IF(@prev_score!=a, @rownum, @rank) as rank, |
|
261 |
@prev_score := a as score |
|
262 |
from t1 order by score desc; |
|
263 |
--enable_result_log |
|
264 |
drop table t1; |
|
265 |
||
266 |
--echo End of 5.1 tests |