~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
# Initialise
2
--disable_warnings
3
drop table if exists t1, t2;
4
--enable_warnings
5
6
#
7
# Testing of NULL in a lot of different places
8
#
9
10
select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
11
explain extended select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
685.4.1 by Jay Pipes
Enabled the null.test.
12
select CONCAT(1, NULL),1+NULL,1-NULL;
13
select NULL=NULL,NULL<>NULL,IFNULL(NULL,1.1)+0,CONCAT(IFNULL(NULL,1), 0);
14
select strcmp("a",NULL),(1<NULL)+0.0,null like "a%","a%" like null;
1 by brian
clean slate
15
select concat("a",NULL),replace(NULL,"a","b"),replace("string","i",NULL),replace("string",NULL,"i"),insert("abc",1,1,NULL),left(NULL,1);
16
select repeat("a",0),repeat("ab",5+5),repeat("ab",-1),reverse(NULL);
17
select field(NULL,"a","b","c");
18
select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
19
explain extended select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
20
SELECT NULL AND NULL, 1 AND NULL, NULL AND 1, NULL OR NULL, 0 OR NULL, NULL OR 0;
21
SELECT (NULL OR NULL) IS NULL;
22
select NULL AND 0, 0 and NULL;
685.4.1 by Jay Pipes
Enabled the null.test.
23
# @TODO Move to functions/inet_ntoa.test when INET_NTOA function is 
24
# implemented
25
# select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
26
# explain extended select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
1 by brian
clean slate
27
28
create table t1 (x int);
29
insert into t1 values (null);
30
select * from t1 where x != 0;
31
drop table t1;
32
33
#
34
# Test problem med index on NULL columns and testing with =NULL;
35
#
36
37
CREATE TABLE t1 (
38
  indexed_field int default NULL,
39
  KEY indexed_field (indexed_field)
40
);
41
INSERT INTO t1 VALUES (NULL),(NULL);
42
SELECT * FROM t1 WHERE indexed_field=NULL;
43
SELECT * FROM t1 WHERE indexed_field IS NULL;
44
SELECT * FROM t1 WHERE indexed_field<=>NULL;
45
DROP TABLE t1;
46
47
#
48
# Testing of IFNULL
49
#
685.4.1 by Jay Pipes
Enabled the null.test.
50
create table t1 (a int, b int);
1 by brian
clean slate
51
insert into t1 values(20,null);
52
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
53
t2.b=t3.a;
54
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
55
t2.b=t3.a order by 1;
56
insert into t1 values(10,null);
57
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
58
t2.b=t3.a order by 1;
59
drop table t1;
60
61
#
62
# Test inserting and updating with NULL
63
#
685.4.1 by Jay Pipes
Enabled the null.test.
64
CREATE TABLE t1 (a varchar(16) NOT NULL default '', b int NOT NULL default 0, c datetime NOT NULL default '0000-00-00 00:00:00', d int NOT NULL default 0);
65
66
# Test INSERT with NULL
67
1 by brian
clean slate
68
--error 1048
69
INSERT INTO t1 (a) values (null);
70
--error 1048
71
INSERT INTO t1 (a) values (1/null);
685.4.1 by Jay Pipes
Enabled the null.test.
72
--error 1048
1 by brian
clean slate
73
INSERT INTO t1 (a) values (null),(null);
74
--error 1048
75
INSERT INTO t1 (b) values (null);
76
--error 1048
77
INSERT INTO t1 (b) values (1/null);
685.4.1 by Jay Pipes
Enabled the null.test.
78
--error 1048
1 by brian
clean slate
79
INSERT INTO t1 (b) values (null),(null);
80
--error 1048
81
INSERT INTO t1 (c) values (null);
82
--error 1048
83
INSERT INTO t1 (c) values (1/null);
685.4.1 by Jay Pipes
Enabled the null.test.
84
--error 1048
1 by brian
clean slate
85
INSERT INTO t1 (c) values (null),(null);
86
--error 1048
87
INSERT INTO t1 (d) values (null);
88
--error 1048
89
INSERT INTO t1 (d) values (1/null);
685.4.1 by Jay Pipes
Enabled the null.test.
90
--error 1048
1 by brian
clean slate
91
INSERT INTO t1 (d) values (null),(null);
685.4.1 by Jay Pipes
Enabled the null.test.
92
93
# Test UPDATE with NULLs
94
95
# The following should not error since there 
96
# are no rows in the table.
97
UPDATE t1 SET d= NULL;
98
99
# Insert a default row in order to test UPDATE to NULL error
100
INSERT INTO t1 VALUES ();
101
102
--error 1048
103
UPDATE t1 SET a=1/NULL;
104
--error 1048
105
UPDATE t1 SET a=NULL;
106
--error 1048
107
UPDATE t1 SET b=NULL;
108
--error 1048
109
UPDATE t1 SET c=NULL;
110
--error 1048
111
UPDATE t1 SET d=NULL;
112
113
truncate table t1;
114
115
# Test for LOAD DATA INFILE and check for NULL handling
116
# Error produced should be 1263, which is almost the same
117
# as 1048, only gives a "row" number.
118
# @TODO Is there really a reason for a separate error 
119
# just for LOAD DATA INFILE?
120
--error 1263
121
LOAD DATA INFILE '../std_data_ln/null_test.txt' INTO TABLE t1 FIELDS ENCLOSED BY '"';
122
1 by brian
clean slate
123
drop table t1;
124
685.4.1 by Jay Pipes
Enabled the null.test.
125
1 by brian
clean slate
126
#
127
# Test to check elimination of IS NULL predicate for a non-nullable attribute
128
# (bug #1990)  
129
#
130
create table t1 (a int not null, b int not null, index idx(a));
131
insert into t1 values
132
  (1,1), (2,2), (3,3), (4,4), (5,5), (6,6),
133
  (7,7), (8,8), (9,9), (10,10), (11,11), (12,12);
134
explain select * from t1 where a between 2 and 3;
135
explain select * from t1 where a between 2 and 3 or b is null;
136
drop table t1;
137
138
#
139
# IS NULL is unable to use index in range if column is declared not null
140
# (Bug #4256)
141
#
685.4.1 by Jay Pipes
Enabled the null.test.
142
#create table t1(i int, key(i));
143
#insert into t1 values(1);
144
#insert into t1 select i*2 from t1;
145
#insert into t1 select i*2 from t1;
146
#insert into t1 select i*2 from t1;
147
#insert into t1 select i*2 from t1;
148
#insert into t1 select i*2 from t1;
149
#insert into t1 select i*2 from t1;
150
#insert into t1 select i*2 from t1;
151
#insert into t1 select i*2 from t1;
152
#insert into t1 select i*2 from t1;
153
#insert into t1 values(null);
154
#explain select * from t1 where i=2 or i is null;
155
#select count(*) from t1 where i=2 or i is null;
156
# @TODO Fails with error 1265 on line 128.  Bug?
157
#alter table t1 change i i int not null;
158
#explain select * from t1 where i=2 or i is null;
159
#select count(*) from t1 where i=2 or i is null;
160
#drop table t1;
1 by brian
clean slate
161
162
#
163
# NULL has its own type BINARY(0) by default.
164
# But NULL should be weaker than a constant
165
# when mixing charsets/collations
166
#
167
# Check that result type is taken from a non-null string
168
create table t1 select
169
  null as c00,
170
  if(1, null, 'string') as c01,
171
  if(0, null, 'string') as c02,
172
  ifnull(null, 'string') as c03,
173
  ifnull('string', null) as c04,
174
  case when 0 then null else 'string' end as c05,
175
  case when 1 then null else 'string' end as c06,
176
  coalesce(null, 'string') as c07,
177
  coalesce('string', null) as c08,
178
  least('string',null) as c09,
179
  least(null, 'string') as c10,
180
  greatest('string',null) as c11,
181
  greatest(null, 'string') as c12,
182
  nullif('string', null) as c13,
183
  nullif(null, 'string') as c14,
184
  trim('string' from null) as c15,
185
  trim(null from 'string') as c16,
186
  substring_index('string', null, 1) as c17,
187
  substring_index(null, 'string', 1) as c18,
188
  elt(1, null, 'string') as c19,
189
  elt(1, 'string', null) as c20,
190
  concat('string', null) as c21,
191
  concat(null, 'string') as c22,
192
  concat_ws('sep', 'string', null) as c23,
193
  concat_ws('sep', null, 'string') as c24,
194
  concat_ws(null, 'string', 'string') as c25,
195
  make_set(3, 'string', null) as c26,
196
  make_set(3, null, 'string') as c27,
197
  export_set(3, null, 'off', 'sep') as c29,
198
  export_set(3, 'on', null, 'sep') as c30,
199
  export_set(3, 'on', 'off', null) as c31,
200
  replace(null, 'from', 'to') as c32,
201
  replace('str', null, 'to') as c33,
202
  replace('str', 'from', null) as c34,
203
  insert('str', 1, 2, null) as c35,
204
  insert(null, 1, 2, 'str') as c36,
205
  lpad('str', 10, null) as c37,
206
  rpad(null, 10, 'str') as c38;
207
  
208
show create table t1;
209
drop table t1;
210
211
#
212
# Check that comparison is done according to
213
# non-null string collation, i.e. case insensitively,
214
# rather than according to NULL's collation, i.e. case sensitively
215
#
216
# in field
217
select 
218
  case 'str' when 'STR' then 'str' when null then 'null' end as c01,
219
  case 'str' when null then 'null' when 'STR' then 'str' end as c02,
220
  field(null, 'str1', 'str2') as c03,
221
  field('str1','STR1', null) as c04,
222
  field('str1', null, 'STR1') as c05,
223
  'string' in ('STRING', null) as c08,
224
  'string' in (null, 'STRING') as c09;
225
226
#
227
# Bug#19145: mysqld crashes if you set the default value of an enum field to NULL
228
#
685.4.1 by Jay Pipes
Enabled the null.test.
229
#create table bug19145a (e enum('a','b','c')          default 'b' , s set('x', 'y', 'z')          default 'y' ) engine=MyISAM;
230
#create table bug19145b (e enum('a','b','c')          default null, s set('x', 'y', 'z')          default null) engine=MyISAM;
231
232
#create table bug19145c (e enum('a','b','c') not null default 'b' , s set('x', 'y', 'z') not null default 'y' ) engine=MyISAM;
233
234
# Invalid default value for 's'
235
#--error 1067
236
#create table bug19145setnotnulldefaultnull (e enum('a','b','c')          default null, s set('x', 'y', 'z') not null default null) engine=MyISAM;
237
238
# Invalid default value for 'e'
239
#--error 1067
240
#create table bug19145enumnotnulldefaultnull (e enum('a','b','c') not null default null, s set('x', 'y', 'z')          default null) engine=MyISAM;
241
242
#alter table bug19145a alter column e set default null;
243
#alter table bug19145a alter column s set default null;
244
#alter table bug19145a add column (i int);
245
246
#alter table bug19145b alter column e set default null;
247
#alter table bug19145b alter column s set default null;
248
#alter table bug19145b add column (i int);
249
250
# Invalid default value for 'e'
251
#--error 1067
252
#alter table bug19145c alter column e set default null;
253
254
# Invalid default value for 's'
255
#--error 1067
256
#alter table bug19145c alter column s set default null;
257
#alter table bug19145c add column (i int);
258
259
#show create table bug19145a;
260
#show create table bug19145b;
261
#show create table bug19145c;
262
263
#drop table bug19145a;
264
#drop table bug19145b;
265
#drop table bug19145c;
1 by brian
clean slate
266
267
--echo # End of 4.1 tests
268
269
--echo #
270
--echo # Bug #31471: decimal_bin_size: Assertion `scale >= 0 &&
271
--echo #             precision > 0 && scale <= precision'
272
--echo #
273
685.4.1 by Jay Pipes
Enabled the null.test.
274
CREATE TABLE t1 (a DECIMAL (1, 0) , b DECIMAL (1, 0) );
1 by brian
clean slate
275
INSERT INTO t1 (a, b) VALUES (0, 0);
276
277
CREATE TABLE t2 SELECT IFNULL(a, b) FROM t1;
278
DESCRIBE t2;
279
DROP TABLE t2;
280
281
CREATE TABLE t2 SELECT IFNULL(a, NULL) FROM t1;
282
DESCRIBE t2;
283
DROP TABLE t2;
284
285
CREATE TABLE t2 SELECT IFNULL(NULL, b) FROM t1;
286
DESCRIBE t2;
287
288
DROP TABLE t1, t2;
289
290
--echo # End of 5.0 tests