~ubuntu-branches/ubuntu/lucid/mysql-dfsg-5.1/lucid-security

« back to all changes in this revision

Viewing changes to mysql-test/suite/engines/iuds/t/type_bit_iuds.test

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-02-22 22:33:55 UTC
  • mto: (1.2.1) (37.1.1 lucid-security)
  • mto: This revision was merged to the branch mainline in revision 36.
  • Revision ID: package-import@ubuntu.com-20120222223355-ku1tb4r70osci6v2
Tags: upstream-5.1.61
ImportĀ upstreamĀ versionĀ 5.1.61

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--disable_warnings
 
2
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
3
--enable_warnings
 
4
 
 
5
####Checking the bit values####
 
6
SELECT 0 + b'0'; 
 
7
SELECT 0 + (0<<0);
 
8
######### INSERT/SELECT######### 
 
9
 
 
10
#### Insert and select 0 bit data into the table####
 
11
CREATE TABLE t1(c1 BIT(0));
 
12
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
13
let $i=0;
 
14
while($i){
 
15
let $j=$i/2;
 
16
eval set @v1=$i;
 
17
eval set @v2=$j;
 
18
set @v3=repeat('1',@v1);
 
19
let $STR0= query_get_value(select @v3 as I,I,1);
 
20
eval INSERT INTO t1 VALUES (b'$STR0');
 
21
set @v3=repeat('0',@v1);
 
22
let $STR1= query_get_value(select @v3 as I,I,1);
 
23
eval INSERT INTO t1 VALUES (b'$STR1');
 
24
set @v3=repeat('01',@v2);
 
25
let $STR2= query_get_value(select @v3 as I,I,1);
 
26
eval INSERT INTO t1 VALUES (b'$STR2');
 
27
set @v3=repeat('10',@v2);
 
28
let $STR3= query_get_value(select @v3 as I,I,1);
 
29
eval INSERT INTO t1 VALUES (b'$STR3');
 
30
set @v3=repeat('1',@v1);
 
31
set @v4=repeat('01',@v2);
 
32
set @v5=repeat('10',@v2);
 
33
let $STR0= query_get_value(select @v3 as I,I,1);
 
34
let $STR2= query_get_value(select @v4 as I,I,1);
 
35
let $STR3= query_get_value(select @v5 as I,I,1);
 
36
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
37
dec $i;
 
38
}
 
39
INSERT INTO t1 VALUES (b'0');
 
40
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
41
--sorted_result
 
42
SELECT HEX(c1) FROM t1;
 
43
--sorted_result
 
44
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
45
--sorted_result
 
46
SELECT OCT(c1) FROM t1;
 
47
--sorted_result
 
48
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
49
--sorted_result
 
50
SELECT BIN(c1) FROM t1;
 
51
--sorted_result
 
52
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
53
--sorted_result
 
54
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
55
--sorted_result
 
56
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
57
--sorted_result
 
58
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
59
--sorted_result
 
60
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
61
--sorted_result
 
62
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
63
--sorted_result
 
64
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
65
--sorted_result
 
66
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
67
--error 1439
 
68
CREATE TABLE t3 (c1 BIT(65));
 
69
# Checking for bug #9571
 
70
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
71
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
72
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
73
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
74
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
75
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
76
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
77
--sorted_result
 
78
SELECT HEX(c1),HEX(c2) FROM t5;
 
79
 
 
80
#Insert permissible NULLs
 
81
INSERT IGNORE INTO t5 VALUES(96,null);
 
82
INSERT INTO t6 VALUES(null,null);
 
83
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
84
## Full table scan ##
 
85
--sorted_result
 
86
SELECT HEX(c1),HEX(c2) FROM t5;
 
87
--sorted_result
 
88
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
89
--sorted_result
 
90
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
91
## Forward index scan, covering ##
 
92
--sorted_result
 
93
SELECT bin(c1) FROM t5;
 
94
## Backward index scan, covering ##
 
95
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
96
## Forward index scan, non-covering ##
 
97
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
98
## Backward index scan, non-covering ##
 
99
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
100
## ref type access
 
101
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
102
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
103
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
104
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
105
## Range access, ordered ##
 
106
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
107
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
108
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
109
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
110
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
111
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
112
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
113
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
114
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
115
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
116
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
117
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
118
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
119
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
120
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
121
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
122
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
123
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
124
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
125
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
126
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
127
## Range access, backwards scan ##
 
128
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
129
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
130
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
131
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
132
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
133
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
134
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
135
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
136
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
137
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
138
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
139
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
140
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
141
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
142
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
143
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
144
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
145
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
146
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
147
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
148
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
149
#Inserting different charachers
 
150
CREATE TABLE t7(c1  BIT(0));
 
151
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
152
--sorted_result
 
153
SELECT * FROM t7;
 
154
############# UPDATE ###########
 
155
 
 
156
# Update order by limit
 
157
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
158
 
 
159
 
 
160
# Update with arithmetic operations 
 
161
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
162
 
 
163
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
164
 
 
165
 
 
166
# Update with NULL ( NULL to number & number to NULL)
 
167
UPDATE t6 SET c2=NULL WHERE c1=23;
 
168
 
 
169
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
170
 
 
171
 
 
172
# Update range values
 
173
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
174
 
 
175
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
176
 
 
177
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
178
 
 
179
 
 
180
# Update outside range would be clipped to closest endpoints
 
181
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
182
 
 
183
UPDATE t6 SET c2=-1 WHERE c1=94;
 
184
 
 
185
 
 
186
# Update ignore on bad null error
 
187
--sorted_result
 
188
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
189
SET SQL_MODE=STRICT_ALL_TABLES;
 
190
--error ER_BAD_NULL_ERROR
 
191
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
192
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
193
--sorted_result
 
194
SELECT hex(c1),hex(c2) FROM t5;
 
195
SET SQL_MODE=DEFAULT;
 
196
 
 
197
#Multi table update
 
198
--disable_warnings
 
199
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
200
--enable_warnings
 
201
--sorted_result
 
202
SELECT hex(c1),hex(c2) FROM t5;
 
203
 
 
204
 
 
205
# Update using various access methods
 
206
TRUNCATE t5;
 
207
TRUNCATE t6;
 
208
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
209
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
210
 
 
211
# Update using Const
 
212
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
213
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
214
--sorted_result
 
215
SELECT hex(c1),hex(c2) FROM t5;
 
216
 
 
217
# Update using range
 
218
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
219
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
220
--sorted_result
 
221
SELECT hex(c1),hex(c2) FROM t5;
 
222
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
223
--disable_warnings
 
224
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
225
--enable_warnings
 
226
--sorted_result
 
227
SELECT hex(c1),hex(c2) FROM t5;
 
228
 
 
229
# Update using eq_ref
 
230
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
231
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
232
 
 
233
############# DELETE ###########
 
234
 
 
235
TRUNCATE t5;
 
236
TRUNCATE t6;
 
237
 
 
238
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
239
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
240
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
241
 
 
242
# Delete by order by limit
 
243
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
244
 
 
245
 
 
246
# Delete rows with NULL column
 
247
DELETE FROM t6 WHERE c2=NULL;
 
248
 
 
249
 
 
250
# Delete with range values 
 
251
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
252
 
 
253
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
254
 
 
255
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
256
 
 
257
 
 
258
#Multi table delete
 
259
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
260
--sorted_result
 
261
SELECT hex(c1),hex(c2) FROM t5;
 
262
 
 
263
 
 
264
# Delete using various access methods
 
265
TRUNCATE t5;
 
266
TRUNCATE t6;
 
267
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
268
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
269
 
 
270
# Update using Const
 
271
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
272
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
273
--sorted_result
 
274
SELECT hex(c1),hex(c2) FROM t5;
 
275
 
 
276
# Update using range
 
277
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
278
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
279
--sorted_result
 
280
SELECT hex(c1),hex(c2) FROM t5;
 
281
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
282
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
283
--sorted_result
 
284
SELECT hex(c1),hex(c2) FROM t5;
 
285
 
 
286
# Update using eq_ref
 
287
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
288
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
289
 
 
290
# Droping the tables
 
291
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
292
 
 
293
####Checking the bit values####
 
294
SELECT 0 + b'0'; 
 
295
SELECT 0 + (0<<1);
 
296
######### INSERT/SELECT######### 
 
297
 
 
298
#### Insert and select 1 bit data into the table####
 
299
CREATE TABLE t1(c1 BIT(1));
 
300
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
301
let $i=1;
 
302
while($i){
 
303
let $j=$i/2;
 
304
eval set @v1=$i;
 
305
eval set @v2=$j;
 
306
set @v3=repeat('1',@v1);
 
307
let $STR0= query_get_value(select @v3 as I,I,1);
 
308
eval INSERT INTO t1 VALUES (b'$STR0');
 
309
set @v3=repeat('0',@v1);
 
310
let $STR1= query_get_value(select @v3 as I,I,1);
 
311
eval INSERT INTO t1 VALUES (b'$STR1');
 
312
set @v3=repeat('01',@v2);
 
313
let $STR2= query_get_value(select @v3 as I,I,1);
 
314
eval INSERT INTO t1 VALUES (b'$STR2');
 
315
set @v3=repeat('10',@v2);
 
316
let $STR3= query_get_value(select @v3 as I,I,1);
 
317
eval INSERT INTO t1 VALUES (b'$STR3');
 
318
set @v3=repeat('1',@v1);
 
319
set @v4=repeat('01',@v2);
 
320
set @v5=repeat('10',@v2);
 
321
let $STR0= query_get_value(select @v3 as I,I,1);
 
322
let $STR2= query_get_value(select @v4 as I,I,1);
 
323
let $STR3= query_get_value(select @v5 as I,I,1);
 
324
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
325
dec $i;
 
326
}
 
327
INSERT INTO t1 VALUES (b'0');
 
328
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
329
--sorted_result
 
330
SELECT HEX(c1) FROM t1;
 
331
--sorted_result
 
332
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
333
--sorted_result
 
334
SELECT OCT(c1) FROM t1;
 
335
--sorted_result
 
336
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
337
--sorted_result
 
338
SELECT BIN(c1) FROM t1;
 
339
--sorted_result
 
340
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
341
--sorted_result
 
342
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
343
--sorted_result
 
344
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
345
--sorted_result
 
346
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
347
--sorted_result
 
348
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
349
--sorted_result
 
350
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
351
--sorted_result
 
352
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
353
--sorted_result
 
354
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
355
--error 1439
 
356
CREATE TABLE t3 (c1 BIT(65));
 
357
# Checking for bug #9571
 
358
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
359
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
360
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
361
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
362
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
363
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
364
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
365
--sorted_result
 
366
SELECT HEX(c1),HEX(c2) FROM t5;
 
367
 
 
368
#Insert permissible NULLs
 
369
INSERT IGNORE INTO t5 VALUES(96,null);
 
370
INSERT INTO t6 VALUES(null,null);
 
371
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
372
## Full table scan ##
 
373
--sorted_result
 
374
SELECT HEX(c1),HEX(c2) FROM t5;
 
375
--sorted_result
 
376
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
377
--sorted_result
 
378
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
379
## Forward index scan, covering ##
 
380
--sorted_result
 
381
SELECT bin(c1) FROM t5;
 
382
## Backward index scan, covering ##
 
383
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
384
## Forward index scan, non-covering ##
 
385
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
386
## Backward index scan, non-covering ##
 
387
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
388
## ref type access
 
389
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
390
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
391
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
392
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
393
## Range access, ordered ##
 
394
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
395
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
396
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
397
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
398
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
399
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
400
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
401
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
402
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
403
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
404
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
405
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
406
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
407
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
408
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
409
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
410
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
411
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
412
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
413
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
414
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
415
## Range access, backwards scan ##
 
416
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
417
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
418
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
419
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
420
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
421
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
422
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
423
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
424
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
425
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
426
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
427
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
428
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
429
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
430
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
431
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
432
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
433
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
434
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
435
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
436
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
437
#Inserting different charachers
 
438
CREATE TABLE t7(c1  BIT(1));
 
439
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
440
--sorted_result
 
441
SELECT * FROM t7;
 
442
############# UPDATE ###########
 
443
 
 
444
# Update order by limit
 
445
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
446
 
 
447
 
 
448
# Update with arithmetic operations 
 
449
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
450
 
 
451
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
452
 
 
453
 
 
454
# Update with NULL ( NULL to number & number to NULL)
 
455
UPDATE t6 SET c2=NULL WHERE c1=23;
 
456
 
 
457
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
458
 
 
459
 
 
460
# Update range values
 
461
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
462
 
 
463
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
464
 
 
465
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
466
 
 
467
 
 
468
# Update outside range would be clipped to closest endpoints
 
469
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
470
 
 
471
UPDATE t6 SET c2=-1 WHERE c1=94;
 
472
 
 
473
 
 
474
# Update ignore on bad null error
 
475
--sorted_result
 
476
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
477
SET SQL_MODE=STRICT_ALL_TABLES;
 
478
--error ER_BAD_NULL_ERROR
 
479
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
480
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
481
--sorted_result
 
482
SELECT hex(c1),hex(c2) FROM t5;
 
483
SET SQL_MODE=DEFAULT;
 
484
 
 
485
#Multi table update
 
486
--disable_warnings
 
487
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
488
--enable_warnings
 
489
--sorted_result
 
490
SELECT hex(c1),hex(c2) FROM t5;
 
491
 
 
492
 
 
493
# Update using various access methods
 
494
TRUNCATE t5;
 
495
TRUNCATE t6;
 
496
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
497
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
498
 
 
499
# Update using Const
 
500
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
501
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
502
--sorted_result
 
503
SELECT hex(c1),hex(c2) FROM t5;
 
504
 
 
505
# Update using range
 
506
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
507
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
508
--sorted_result
 
509
SELECT hex(c1),hex(c2) FROM t5;
 
510
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
511
--disable_warnings
 
512
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
513
--enable_warnings
 
514
--sorted_result
 
515
SELECT hex(c1),hex(c2) FROM t5;
 
516
 
 
517
# Update using eq_ref
 
518
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
519
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
520
 
 
521
############# DELETE ###########
 
522
 
 
523
TRUNCATE t5;
 
524
TRUNCATE t6;
 
525
 
 
526
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
527
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
528
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
529
 
 
530
# Delete by order by limit
 
531
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
532
 
 
533
 
 
534
# Delete rows with NULL column
 
535
DELETE FROM t6 WHERE c2=NULL;
 
536
 
 
537
 
 
538
# Delete with range values 
 
539
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
540
 
 
541
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
542
 
 
543
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
544
 
 
545
 
 
546
#Multi table delete
 
547
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
548
--sorted_result
 
549
SELECT hex(c1),hex(c2) FROM t5;
 
550
 
 
551
 
 
552
# Delete using various access methods
 
553
TRUNCATE t5;
 
554
TRUNCATE t6;
 
555
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
556
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
557
 
 
558
# Update using Const
 
559
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
560
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
561
--sorted_result
 
562
SELECT hex(c1),hex(c2) FROM t5;
 
563
 
 
564
# Update using range
 
565
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
566
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
567
--sorted_result
 
568
SELECT hex(c1),hex(c2) FROM t5;
 
569
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
570
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
571
--sorted_result
 
572
SELECT hex(c1),hex(c2) FROM t5;
 
573
 
 
574
# Update using eq_ref
 
575
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
576
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
577
 
 
578
# Droping the tables
 
579
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
580
 
 
581
####Checking the bit values####
 
582
SELECT 0 + b'0'; 
 
583
SELECT 0 + (0<<2);
 
584
######### INSERT/SELECT######### 
 
585
 
 
586
#### Insert and select 2 bit data into the table####
 
587
CREATE TABLE t1(c1 BIT(2));
 
588
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
589
let $i=2;
 
590
while($i){
 
591
let $j=$i/2;
 
592
eval set @v1=$i;
 
593
eval set @v2=$j;
 
594
set @v3=repeat('1',@v1);
 
595
let $STR0= query_get_value(select @v3 as I,I,1);
 
596
eval INSERT INTO t1 VALUES (b'$STR0');
 
597
set @v3=repeat('0',@v1);
 
598
let $STR1= query_get_value(select @v3 as I,I,1);
 
599
eval INSERT INTO t1 VALUES (b'$STR1');
 
600
set @v3=repeat('01',@v2);
 
601
let $STR2= query_get_value(select @v3 as I,I,1);
 
602
eval INSERT INTO t1 VALUES (b'$STR2');
 
603
set @v3=repeat('10',@v2);
 
604
let $STR3= query_get_value(select @v3 as I,I,1);
 
605
eval INSERT INTO t1 VALUES (b'$STR3');
 
606
set @v3=repeat('1',@v1);
 
607
set @v4=repeat('01',@v2);
 
608
set @v5=repeat('10',@v2);
 
609
let $STR0= query_get_value(select @v3 as I,I,1);
 
610
let $STR2= query_get_value(select @v4 as I,I,1);
 
611
let $STR3= query_get_value(select @v5 as I,I,1);
 
612
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
613
dec $i;
 
614
}
 
615
INSERT INTO t1 VALUES (b'0');
 
616
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
617
--sorted_result
 
618
SELECT HEX(c1) FROM t1;
 
619
--sorted_result
 
620
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
621
--sorted_result
 
622
SELECT OCT(c1) FROM t1;
 
623
--sorted_result
 
624
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
625
--sorted_result
 
626
SELECT BIN(c1) FROM t1;
 
627
--sorted_result
 
628
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
629
--sorted_result
 
630
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
631
--sorted_result
 
632
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
633
--sorted_result
 
634
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
635
--sorted_result
 
636
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
637
--sorted_result
 
638
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
639
--sorted_result
 
640
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
641
--sorted_result
 
642
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
643
--error 1439
 
644
CREATE TABLE t3 (c1 BIT(65));
 
645
# Checking for bug #9571
 
646
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
647
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
648
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
649
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
650
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
651
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
652
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
653
--sorted_result
 
654
SELECT HEX(c1),HEX(c2) FROM t5;
 
655
 
 
656
#Insert permissible NULLs
 
657
INSERT IGNORE INTO t5 VALUES(96,null);
 
658
INSERT INTO t6 VALUES(null,null);
 
659
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
660
## Full table scan ##
 
661
--sorted_result
 
662
SELECT HEX(c1),HEX(c2) FROM t5;
 
663
--sorted_result
 
664
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
665
--sorted_result
 
666
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
667
## Forward index scan, covering ##
 
668
--sorted_result
 
669
SELECT bin(c1) FROM t5;
 
670
## Backward index scan, covering ##
 
671
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
672
## Forward index scan, non-covering ##
 
673
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
674
## Backward index scan, non-covering ##
 
675
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
676
## ref type access
 
677
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
678
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
679
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
680
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
681
## Range access, ordered ##
 
682
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
683
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
684
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
685
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
686
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
687
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
688
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
689
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
690
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
691
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
692
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
693
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
694
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
695
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
696
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
697
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
698
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
699
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
700
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
701
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
702
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
703
## Range access, backwards scan ##
 
704
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
705
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
706
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
707
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
708
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
709
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
710
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
711
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
712
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
713
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
714
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
715
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
716
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
717
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
718
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
719
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
720
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
721
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
722
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
723
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
724
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
725
#Inserting different charachers
 
726
CREATE TABLE t7(c1  BIT(2));
 
727
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
728
--sorted_result
 
729
SELECT * FROM t7;
 
730
############# UPDATE ###########
 
731
 
 
732
# Update order by limit
 
733
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
734
 
 
735
 
 
736
# Update with arithmetic operations 
 
737
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
738
 
 
739
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
740
 
 
741
 
 
742
# Update with NULL ( NULL to number & number to NULL)
 
743
UPDATE t6 SET c2=NULL WHERE c1=23;
 
744
 
 
745
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
746
 
 
747
 
 
748
# Update range values
 
749
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
750
 
 
751
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
752
 
 
753
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
754
 
 
755
 
 
756
# Update outside range would be clipped to closest endpoints
 
757
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
758
 
 
759
UPDATE t6 SET c2=-1 WHERE c1=94;
 
760
 
 
761
 
 
762
# Update ignore on bad null error
 
763
--sorted_result
 
764
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
765
SET SQL_MODE=STRICT_ALL_TABLES;
 
766
--error ER_BAD_NULL_ERROR
 
767
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
768
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
769
--sorted_result
 
770
SELECT hex(c1),hex(c2) FROM t5;
 
771
SET SQL_MODE=DEFAULT;
 
772
 
 
773
#Multi table update
 
774
--disable_warnings
 
775
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
776
--enable_warnings
 
777
--sorted_result
 
778
SELECT hex(c1),hex(c2) FROM t5;
 
779
 
 
780
 
 
781
# Update using various access methods
 
782
TRUNCATE t5;
 
783
TRUNCATE t6;
 
784
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
785
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
786
 
 
787
# Update using Const
 
788
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
789
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
790
--sorted_result
 
791
SELECT hex(c1),hex(c2) FROM t5;
 
792
 
 
793
# Update using range
 
794
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
795
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
796
--sorted_result
 
797
SELECT hex(c1),hex(c2) FROM t5;
 
798
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
799
--disable_warnings
 
800
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
801
--enable_warnings
 
802
--sorted_result
 
803
SELECT hex(c1),hex(c2) FROM t5;
 
804
 
 
805
# Update using eq_ref
 
806
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
807
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
808
 
 
809
############# DELETE ###########
 
810
 
 
811
TRUNCATE t5;
 
812
TRUNCATE t6;
 
813
 
 
814
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
815
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
816
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
817
 
 
818
# Delete by order by limit
 
819
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
820
 
 
821
 
 
822
# Delete rows with NULL column
 
823
DELETE FROM t6 WHERE c2=NULL;
 
824
 
 
825
 
 
826
# Delete with range values 
 
827
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
828
 
 
829
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
830
 
 
831
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
832
 
 
833
 
 
834
#Multi table delete
 
835
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
836
--sorted_result
 
837
SELECT hex(c1),hex(c2) FROM t5;
 
838
 
 
839
 
 
840
# Delete using various access methods
 
841
TRUNCATE t5;
 
842
TRUNCATE t6;
 
843
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
844
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
845
 
 
846
# Update using Const
 
847
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
848
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
849
--sorted_result
 
850
SELECT hex(c1),hex(c2) FROM t5;
 
851
 
 
852
# Update using range
 
853
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
854
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
855
--sorted_result
 
856
SELECT hex(c1),hex(c2) FROM t5;
 
857
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
858
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
859
--sorted_result
 
860
SELECT hex(c1),hex(c2) FROM t5;
 
861
 
 
862
# Update using eq_ref
 
863
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
864
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
865
 
 
866
# Droping the tables
 
867
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
868
 
 
869
####Checking the bit values####
 
870
SELECT 0 + b'0'; 
 
871
SELECT 0 + (0<<4);
 
872
######### INSERT/SELECT######### 
 
873
 
 
874
#### Insert and select 4 bit data into the table####
 
875
CREATE TABLE t1(c1 BIT(4));
 
876
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
877
let $i=4;
 
878
while($i){
 
879
let $j=$i/2;
 
880
eval set @v1=$i;
 
881
eval set @v2=$j;
 
882
set @v3=repeat('1',@v1);
 
883
let $STR0= query_get_value(select @v3 as I,I,1);
 
884
eval INSERT INTO t1 VALUES (b'$STR0');
 
885
set @v3=repeat('0',@v1);
 
886
let $STR1= query_get_value(select @v3 as I,I,1);
 
887
eval INSERT INTO t1 VALUES (b'$STR1');
 
888
set @v3=repeat('01',@v2);
 
889
let $STR2= query_get_value(select @v3 as I,I,1);
 
890
eval INSERT INTO t1 VALUES (b'$STR2');
 
891
set @v3=repeat('10',@v2);
 
892
let $STR3= query_get_value(select @v3 as I,I,1);
 
893
eval INSERT INTO t1 VALUES (b'$STR3');
 
894
set @v3=repeat('1',@v1);
 
895
set @v4=repeat('01',@v2);
 
896
set @v5=repeat('10',@v2);
 
897
let $STR0= query_get_value(select @v3 as I,I,1);
 
898
let $STR2= query_get_value(select @v4 as I,I,1);
 
899
let $STR3= query_get_value(select @v5 as I,I,1);
 
900
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
901
dec $i;
 
902
}
 
903
INSERT INTO t1 VALUES (b'0');
 
904
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
905
--sorted_result
 
906
SELECT HEX(c1) FROM t1;
 
907
--sorted_result
 
908
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
909
--sorted_result
 
910
SELECT OCT(c1) FROM t1;
 
911
--sorted_result
 
912
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
913
--sorted_result
 
914
SELECT BIN(c1) FROM t1;
 
915
--sorted_result
 
916
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
917
--sorted_result
 
918
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
919
--sorted_result
 
920
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
921
--sorted_result
 
922
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
923
--sorted_result
 
924
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
925
--sorted_result
 
926
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
927
--sorted_result
 
928
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
929
--sorted_result
 
930
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
931
--error 1439
 
932
CREATE TABLE t3 (c1 BIT(65));
 
933
# Checking for bug #9571
 
934
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
935
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
936
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
937
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
938
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
939
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
940
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
941
--sorted_result
 
942
SELECT HEX(c1),HEX(c2) FROM t5;
 
943
 
 
944
#Insert permissible NULLs
 
945
INSERT IGNORE INTO t5 VALUES(96,null);
 
946
INSERT INTO t6 VALUES(null,null);
 
947
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
948
## Full table scan ##
 
949
--sorted_result
 
950
SELECT HEX(c1),HEX(c2) FROM t5;
 
951
--sorted_result
 
952
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
953
--sorted_result
 
954
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
955
## Forward index scan, covering ##
 
956
--sorted_result
 
957
SELECT bin(c1) FROM t5;
 
958
## Backward index scan, covering ##
 
959
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
960
## Forward index scan, non-covering ##
 
961
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
962
## Backward index scan, non-covering ##
 
963
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
964
## ref type access
 
965
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
966
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
967
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
968
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
969
## Range access, ordered ##
 
970
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
971
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
972
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
973
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
974
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
975
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
976
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
977
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
978
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
979
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
980
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
981
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
982
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
983
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
984
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
985
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
986
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
987
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
988
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
989
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
990
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
991
## Range access, backwards scan ##
 
992
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
993
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
994
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
995
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
996
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
997
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
998
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
999
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
1000
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
1001
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
1002
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
1003
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
1004
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
1005
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
1006
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
1007
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
1008
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
1009
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
1010
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
1011
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
1012
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
1013
#Inserting different charachers
 
1014
CREATE TABLE t7(c1  BIT(4));
 
1015
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
1016
--sorted_result
 
1017
SELECT * FROM t7;
 
1018
############# UPDATE ###########
 
1019
 
 
1020
# Update order by limit
 
1021
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1022
 
 
1023
 
 
1024
# Update with arithmetic operations 
 
1025
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
1026
 
 
1027
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
1028
 
 
1029
 
 
1030
# Update with NULL ( NULL to number & number to NULL)
 
1031
UPDATE t6 SET c2=NULL WHERE c1=23;
 
1032
 
 
1033
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
1034
 
 
1035
 
 
1036
# Update range values
 
1037
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
1038
 
 
1039
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
1040
 
 
1041
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
1042
 
 
1043
 
 
1044
# Update outside range would be clipped to closest endpoints
 
1045
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
1046
 
 
1047
UPDATE t6 SET c2=-1 WHERE c1=94;
 
1048
 
 
1049
 
 
1050
# Update ignore on bad null error
 
1051
--sorted_result
 
1052
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
1053
SET SQL_MODE=STRICT_ALL_TABLES;
 
1054
--error ER_BAD_NULL_ERROR
 
1055
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
1056
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
1057
--sorted_result
 
1058
SELECT hex(c1),hex(c2) FROM t5;
 
1059
SET SQL_MODE=DEFAULT;
 
1060
 
 
1061
#Multi table update
 
1062
--disable_warnings
 
1063
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1064
--enable_warnings
 
1065
--sorted_result
 
1066
SELECT hex(c1),hex(c2) FROM t5;
 
1067
 
 
1068
 
 
1069
# Update using various access methods
 
1070
TRUNCATE t5;
 
1071
TRUNCATE t6;
 
1072
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1073
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1074
 
 
1075
# Update using Const
 
1076
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1077
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
1078
--sorted_result
 
1079
SELECT hex(c1),hex(c2) FROM t5;
 
1080
 
 
1081
# Update using range
 
1082
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1083
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
1084
--sorted_result
 
1085
SELECT hex(c1),hex(c2) FROM t5;
 
1086
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1087
--disable_warnings
 
1088
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
1089
--enable_warnings
 
1090
--sorted_result
 
1091
SELECT hex(c1),hex(c2) FROM t5;
 
1092
 
 
1093
# Update using eq_ref
 
1094
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1095
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1096
 
 
1097
############# DELETE ###########
 
1098
 
 
1099
TRUNCATE t5;
 
1100
TRUNCATE t6;
 
1101
 
 
1102
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1103
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1104
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
1105
 
 
1106
# Delete by order by limit
 
1107
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1108
 
 
1109
 
 
1110
# Delete rows with NULL column
 
1111
DELETE FROM t6 WHERE c2=NULL;
 
1112
 
 
1113
 
 
1114
# Delete with range values 
 
1115
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
1116
 
 
1117
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
1118
 
 
1119
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
1120
 
 
1121
 
 
1122
#Multi table delete
 
1123
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1124
--sorted_result
 
1125
SELECT hex(c1),hex(c2) FROM t5;
 
1126
 
 
1127
 
 
1128
# Delete using various access methods
 
1129
TRUNCATE t5;
 
1130
TRUNCATE t6;
 
1131
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1132
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1133
 
 
1134
# Update using Const
 
1135
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1136
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
1137
--sorted_result
 
1138
SELECT hex(c1),hex(c2) FROM t5;
 
1139
 
 
1140
# Update using range
 
1141
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1142
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1143
--sorted_result
 
1144
SELECT hex(c1),hex(c2) FROM t5;
 
1145
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1146
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1147
--sorted_result
 
1148
SELECT hex(c1),hex(c2) FROM t5;
 
1149
 
 
1150
# Update using eq_ref
 
1151
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1152
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1153
 
 
1154
# Droping the tables
 
1155
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
1156
 
 
1157
####Checking the bit values####
 
1158
SELECT 0 + b'0'; 
 
1159
SELECT 0 + (0<<8);
 
1160
######### INSERT/SELECT######### 
 
1161
 
 
1162
#### Insert and select 8 bit data into the table####
 
1163
CREATE TABLE t1(c1 BIT(8));
 
1164
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
1165
let $i=8;
 
1166
while($i){
 
1167
let $j=$i/2;
 
1168
eval set @v1=$i;
 
1169
eval set @v2=$j;
 
1170
set @v3=repeat('1',@v1);
 
1171
let $STR0= query_get_value(select @v3 as I,I,1);
 
1172
eval INSERT INTO t1 VALUES (b'$STR0');
 
1173
set @v3=repeat('0',@v1);
 
1174
let $STR1= query_get_value(select @v3 as I,I,1);
 
1175
eval INSERT INTO t1 VALUES (b'$STR1');
 
1176
set @v3=repeat('01',@v2);
 
1177
let $STR2= query_get_value(select @v3 as I,I,1);
 
1178
eval INSERT INTO t1 VALUES (b'$STR2');
 
1179
set @v3=repeat('10',@v2);
 
1180
let $STR3= query_get_value(select @v3 as I,I,1);
 
1181
eval INSERT INTO t1 VALUES (b'$STR3');
 
1182
set @v3=repeat('1',@v1);
 
1183
set @v4=repeat('01',@v2);
 
1184
set @v5=repeat('10',@v2);
 
1185
let $STR0= query_get_value(select @v3 as I,I,1);
 
1186
let $STR2= query_get_value(select @v4 as I,I,1);
 
1187
let $STR3= query_get_value(select @v5 as I,I,1);
 
1188
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
1189
dec $i;
 
1190
}
 
1191
INSERT INTO t1 VALUES (b'0');
 
1192
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
1193
--sorted_result
 
1194
SELECT HEX(c1) FROM t1;
 
1195
--sorted_result
 
1196
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
1197
--sorted_result
 
1198
SELECT OCT(c1) FROM t1;
 
1199
--sorted_result
 
1200
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
1201
--sorted_result
 
1202
SELECT BIN(c1) FROM t1;
 
1203
--sorted_result
 
1204
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
1205
--sorted_result
 
1206
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
1207
--sorted_result
 
1208
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
1209
--sorted_result
 
1210
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
1211
--sorted_result
 
1212
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
1213
--sorted_result
 
1214
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
1215
--sorted_result
 
1216
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
1217
--sorted_result
 
1218
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
1219
--error 1439
 
1220
CREATE TABLE t3 (c1 BIT(65));
 
1221
# Checking for bug #9571
 
1222
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
1223
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
1224
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
1225
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
1226
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1227
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1228
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1229
--sorted_result
 
1230
SELECT HEX(c1),HEX(c2) FROM t5;
 
1231
 
 
1232
#Insert permissible NULLs
 
1233
INSERT IGNORE INTO t5 VALUES(96,null);
 
1234
INSERT INTO t6 VALUES(null,null);
 
1235
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
1236
## Full table scan ##
 
1237
--sorted_result
 
1238
SELECT HEX(c1),HEX(c2) FROM t5;
 
1239
--sorted_result
 
1240
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
1241
--sorted_result
 
1242
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
1243
## Forward index scan, covering ##
 
1244
--sorted_result
 
1245
SELECT bin(c1) FROM t5;
 
1246
## Backward index scan, covering ##
 
1247
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
1248
## Forward index scan, non-covering ##
 
1249
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
1250
## Backward index scan, non-covering ##
 
1251
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
1252
## ref type access
 
1253
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
1254
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
1255
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
1256
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
1257
## Range access, ordered ##
 
1258
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
1259
 
 
1260
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
1261
 
 
1262
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
1263
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
1264
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
1265
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
1266
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
1267
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
1268
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
1269
 
 
1270
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
1271
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
1272
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
1273
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
1274
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
1275
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
1276
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
1277
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
1278
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
1279
## Range access, backwards scan ##
 
1280
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
1281
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
1282
 
 
1283
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
1284
 
 
1285
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
1286
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
1287
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
1288
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
1289
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
1290
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
1291
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
1292
 
 
1293
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
1294
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
1295
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
1296
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
1297
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
1298
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
1299
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
1300
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
1301
#Inserting different charachers
 
1302
CREATE TABLE t7(c1  BIT(8));
 
1303
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
1304
--sorted_result
 
1305
SELECT * FROM t7;
 
1306
############# UPDATE ###########
 
1307
 
 
1308
# Update order by limit
 
1309
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1310
 
 
1311
 
 
1312
# Update with arithmetic operations 
 
1313
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
1314
 
 
1315
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
1316
 
 
1317
 
 
1318
# Update with NULL ( NULL to number & number to NULL)
 
1319
UPDATE t6 SET c2=NULL WHERE c1=23;
 
1320
 
 
1321
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
1322
 
 
1323
 
 
1324
# Update range values
 
1325
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
1326
 
 
1327
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
1328
 
 
1329
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
1330
 
 
1331
 
 
1332
# Update outside range would be clipped to closest endpoints
 
1333
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
1334
 
 
1335
UPDATE t6 SET c2=-1 WHERE c1=94;
 
1336
 
 
1337
 
 
1338
# Update ignore on bad null error
 
1339
--sorted_result
 
1340
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
1341
SET SQL_MODE=STRICT_ALL_TABLES;
 
1342
--error ER_BAD_NULL_ERROR
 
1343
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
1344
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
1345
--sorted_result
 
1346
SELECT hex(c1),hex(c2) FROM t5;
 
1347
SET SQL_MODE=DEFAULT;
 
1348
 
 
1349
#Multi table update
 
1350
--disable_warnings
 
1351
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1352
--enable_warnings
 
1353
--sorted_result
 
1354
SELECT hex(c1),hex(c2) FROM t5;
 
1355
 
 
1356
 
 
1357
# Update using various access methods
 
1358
TRUNCATE t5;
 
1359
TRUNCATE t6;
 
1360
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1361
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1362
 
 
1363
# Update using Const
 
1364
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1365
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
1366
--sorted_result
 
1367
SELECT hex(c1),hex(c2) FROM t5;
 
1368
 
 
1369
# Update using range
 
1370
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1371
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
1372
--sorted_result
 
1373
SELECT hex(c1),hex(c2) FROM t5;
 
1374
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1375
--disable_warnings
 
1376
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
1377
--enable_warnings
 
1378
--sorted_result
 
1379
SELECT hex(c1),hex(c2) FROM t5;
 
1380
 
 
1381
# Update using eq_ref
 
1382
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1383
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1384
 
 
1385
############# DELETE ###########
 
1386
 
 
1387
TRUNCATE t5;
 
1388
TRUNCATE t6;
 
1389
 
 
1390
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1391
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1392
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
1393
 
 
1394
# Delete by order by limit
 
1395
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1396
 
 
1397
 
 
1398
# Delete rows with NULL column
 
1399
DELETE FROM t6 WHERE c2=NULL;
 
1400
 
 
1401
 
 
1402
# Delete with range values 
 
1403
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
1404
 
 
1405
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
1406
 
 
1407
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
1408
 
 
1409
 
 
1410
#Multi table delete
 
1411
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1412
--sorted_result
 
1413
SELECT hex(c1),hex(c2) FROM t5;
 
1414
 
 
1415
 
 
1416
# Delete using various access methods
 
1417
TRUNCATE t5;
 
1418
TRUNCATE t6;
 
1419
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1420
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1421
 
 
1422
# Update using Const
 
1423
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1424
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
1425
--sorted_result
 
1426
SELECT hex(c1),hex(c2) FROM t5;
 
1427
 
 
1428
# Update using range
 
1429
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1430
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1431
--sorted_result
 
1432
SELECT hex(c1),hex(c2) FROM t5;
 
1433
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1434
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1435
--sorted_result
 
1436
SELECT hex(c1),hex(c2) FROM t5;
 
1437
 
 
1438
# Update using eq_ref
 
1439
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1440
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1441
 
 
1442
# Droping the tables
 
1443
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
1444
 
 
1445
####Checking the bit values####
 
1446
SELECT 0 + b'0'; 
 
1447
SELECT 0 + (0<<16);
 
1448
######### INSERT/SELECT######### 
 
1449
 
 
1450
#### Insert and select 16 bit data into the table####
 
1451
CREATE TABLE t1(c1 BIT(16));
 
1452
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
1453
let $i=16;
 
1454
while($i){
 
1455
let $j=$i/2;
 
1456
eval set @v1=$i;
 
1457
eval set @v2=$j;
 
1458
set @v3=repeat('1',@v1);
 
1459
let $STR0= query_get_value(select @v3 as I,I,1);
 
1460
eval INSERT INTO t1 VALUES (b'$STR0');
 
1461
set @v3=repeat('0',@v1);
 
1462
let $STR1= query_get_value(select @v3 as I,I,1);
 
1463
eval INSERT INTO t1 VALUES (b'$STR1');
 
1464
set @v3=repeat('01',@v2);
 
1465
let $STR2= query_get_value(select @v3 as I,I,1);
 
1466
eval INSERT INTO t1 VALUES (b'$STR2');
 
1467
set @v3=repeat('10',@v2);
 
1468
let $STR3= query_get_value(select @v3 as I,I,1);
 
1469
eval INSERT INTO t1 VALUES (b'$STR3');
 
1470
set @v3=repeat('1',@v1);
 
1471
set @v4=repeat('01',@v2);
 
1472
set @v5=repeat('10',@v2);
 
1473
let $STR0= query_get_value(select @v3 as I,I,1);
 
1474
let $STR2= query_get_value(select @v4 as I,I,1);
 
1475
let $STR3= query_get_value(select @v5 as I,I,1);
 
1476
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
1477
dec $i;
 
1478
}
 
1479
INSERT INTO t1 VALUES (b'0');
 
1480
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
1481
--sorted_result
 
1482
SELECT HEX(c1) FROM t1;
 
1483
--sorted_result
 
1484
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
1485
--sorted_result
 
1486
SELECT OCT(c1) FROM t1;
 
1487
--sorted_result
 
1488
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
1489
--sorted_result
 
1490
SELECT BIN(c1) FROM t1;
 
1491
--sorted_result
 
1492
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
1493
--sorted_result
 
1494
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
1495
--sorted_result
 
1496
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
1497
--sorted_result
 
1498
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
1499
--sorted_result
 
1500
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
1501
--sorted_result
 
1502
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
1503
--sorted_result
 
1504
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
1505
--sorted_result
 
1506
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
1507
--error 1439
 
1508
CREATE TABLE t3 (c1 BIT(65));
 
1509
# Checking for bug #9571
 
1510
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
1511
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
1512
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
1513
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
1514
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1515
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1516
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1517
--sorted_result
 
1518
SELECT HEX(c1),HEX(c2) FROM t5;
 
1519
 
 
1520
#Insert permissible NULLs
 
1521
INSERT IGNORE INTO t5 VALUES(96,null);
 
1522
INSERT INTO t6 VALUES(null,null);
 
1523
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
1524
## Full table scan ##
 
1525
--sorted_result
 
1526
SELECT HEX(c1),HEX(c2) FROM t5;
 
1527
--sorted_result
 
1528
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
1529
--sorted_result
 
1530
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
1531
## Forward index scan, covering ##
 
1532
--sorted_result
 
1533
SELECT bin(c1) FROM t5;
 
1534
## Backward index scan, covering ##
 
1535
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
1536
## Forward index scan, non-covering ##
 
1537
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
1538
## Backward index scan, non-covering ##
 
1539
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
1540
## ref type access
 
1541
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
1542
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
1543
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
1544
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
1545
## Range access, ordered ##
 
1546
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
1547
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
1548
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
1549
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
1550
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
1551
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
1552
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
1553
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
1554
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
1555
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
1556
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
1557
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
1558
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
1559
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
1560
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
1561
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
1562
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
1563
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
1564
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
1565
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
1566
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
1567
## Range access, backwards scan ##
 
1568
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
1569
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
1570
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
1571
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
1572
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
1573
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
1574
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
1575
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
1576
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
1577
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
1578
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
1579
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
1580
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
1581
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
1582
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
1583
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
1584
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
1585
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
1586
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
1587
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
1588
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
1589
#Inserting different charachers
 
1590
CREATE TABLE t7(c1  BIT(16));
 
1591
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
1592
--sorted_result
 
1593
SELECT * FROM t7;
 
1594
############# UPDATE ###########
 
1595
 
 
1596
# Update order by limit
 
1597
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1598
 
 
1599
 
 
1600
# Update with arithmetic operations 
 
1601
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
1602
 
 
1603
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
1604
 
 
1605
 
 
1606
# Update with NULL ( NULL to number & number to NULL)
 
1607
UPDATE t6 SET c2=NULL WHERE c1=23;
 
1608
 
 
1609
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
1610
 
 
1611
 
 
1612
# Update range values
 
1613
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
1614
 
 
1615
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
1616
 
 
1617
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
1618
 
 
1619
 
 
1620
# Update outside range would be clipped to closest endpoints
 
1621
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
1622
 
 
1623
UPDATE t6 SET c2=-1 WHERE c1=94;
 
1624
 
 
1625
 
 
1626
# Update ignore on bad null error
 
1627
--sorted_result
 
1628
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
1629
SET SQL_MODE=STRICT_ALL_TABLES;
 
1630
--error ER_BAD_NULL_ERROR
 
1631
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
1632
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
1633
--sorted_result
 
1634
SELECT hex(c1),hex(c2) FROM t5;
 
1635
SET SQL_MODE=DEFAULT;
 
1636
 
 
1637
#Multi table update
 
1638
--disable_warnings
 
1639
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1640
--enable_warnings
 
1641
--sorted_result
 
1642
SELECT hex(c1),hex(c2) FROM t5;
 
1643
 
 
1644
 
 
1645
# Update using various access methods
 
1646
TRUNCATE t5;
 
1647
TRUNCATE t6;
 
1648
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1649
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1650
 
 
1651
# Update using Const
 
1652
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1653
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
1654
--sorted_result
 
1655
SELECT hex(c1),hex(c2) FROM t5;
 
1656
 
 
1657
# Update using range
 
1658
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1659
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
1660
--sorted_result
 
1661
SELECT hex(c1),hex(c2) FROM t5;
 
1662
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1663
--disable_warnings
 
1664
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
1665
--enable_warnings
 
1666
--sorted_result
 
1667
SELECT hex(c1),hex(c2) FROM t5;
 
1668
 
 
1669
# Update using eq_ref
 
1670
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1671
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1672
 
 
1673
############# DELETE ###########
 
1674
 
 
1675
TRUNCATE t5;
 
1676
TRUNCATE t6;
 
1677
 
 
1678
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1679
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1680
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
1681
 
 
1682
# Delete by order by limit
 
1683
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1684
 
 
1685
 
 
1686
# Delete rows with NULL column
 
1687
DELETE FROM t6 WHERE c2=NULL;
 
1688
 
 
1689
 
 
1690
# Delete with range values 
 
1691
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
1692
 
 
1693
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
1694
 
 
1695
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
1696
 
 
1697
 
 
1698
#Multi table delete
 
1699
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1700
--sorted_result
 
1701
SELECT hex(c1),hex(c2) FROM t5;
 
1702
 
 
1703
 
 
1704
# Delete using various access methods
 
1705
TRUNCATE t5;
 
1706
TRUNCATE t6;
 
1707
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1708
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1709
 
 
1710
# Update using Const
 
1711
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1712
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
1713
--sorted_result
 
1714
SELECT hex(c1),hex(c2) FROM t5;
 
1715
 
 
1716
# Update using range
 
1717
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1718
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1719
--sorted_result
 
1720
SELECT hex(c1),hex(c2) FROM t5;
 
1721
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1722
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1723
--sorted_result
 
1724
SELECT hex(c1),hex(c2) FROM t5;
 
1725
 
 
1726
# Update using eq_ref
 
1727
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1728
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1729
 
 
1730
# Droping the tables
 
1731
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
1732
 
 
1733
####Checking the bit values####
 
1734
SELECT 0 + b'0'; 
 
1735
SELECT 0 + (0<<32);
 
1736
######### INSERT/SELECT######### 
 
1737
 
 
1738
#### Insert and select 32 bit data into the table####
 
1739
CREATE TABLE t1(c1 BIT(32));
 
1740
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
1741
let $i=32;
 
1742
while($i){
 
1743
let $j=$i/2;
 
1744
eval set @v1=$i;
 
1745
eval set @v2=$j;
 
1746
set @v3=repeat('1',@v1);
 
1747
let $STR0= query_get_value(select @v3 as I,I,1);
 
1748
eval INSERT INTO t1 VALUES (b'$STR0');
 
1749
set @v3=repeat('0',@v1);
 
1750
let $STR1= query_get_value(select @v3 as I,I,1);
 
1751
eval INSERT INTO t1 VALUES (b'$STR1');
 
1752
set @v3=repeat('01',@v2);
 
1753
let $STR2= query_get_value(select @v3 as I,I,1);
 
1754
eval INSERT INTO t1 VALUES (b'$STR2');
 
1755
set @v3=repeat('10',@v2);
 
1756
let $STR3= query_get_value(select @v3 as I,I,1);
 
1757
eval INSERT INTO t1 VALUES (b'$STR3');
 
1758
set @v3=repeat('1',@v1);
 
1759
set @v4=repeat('01',@v2);
 
1760
set @v5=repeat('10',@v2);
 
1761
let $STR0= query_get_value(select @v3 as I,I,1);
 
1762
let $STR2= query_get_value(select @v4 as I,I,1);
 
1763
let $STR3= query_get_value(select @v5 as I,I,1);
 
1764
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
1765
dec $i;
 
1766
}
 
1767
INSERT INTO t1 VALUES (b'0');
 
1768
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
1769
--sorted_result
 
1770
SELECT HEX(c1) FROM t1;
 
1771
--sorted_result
 
1772
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
1773
--sorted_result
 
1774
SELECT OCT(c1) FROM t1;
 
1775
--sorted_result
 
1776
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
1777
--sorted_result
 
1778
SELECT BIN(c1) FROM t1;
 
1779
--sorted_result
 
1780
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
1781
--sorted_result
 
1782
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
1783
--sorted_result
 
1784
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
1785
--sorted_result
 
1786
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
1787
--sorted_result
 
1788
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
1789
--sorted_result
 
1790
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
1791
--sorted_result
 
1792
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
1793
--sorted_result
 
1794
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
1795
--error 1439
 
1796
CREATE TABLE t3 (c1 BIT(65));
 
1797
# Checking for bug #9571
 
1798
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
1799
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
1800
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
1801
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
1802
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1803
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1804
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1805
--sorted_result
 
1806
SELECT HEX(c1),HEX(c2) FROM t5;
 
1807
 
 
1808
#Insert permissible NULLs
 
1809
INSERT IGNORE INTO t5 VALUES(96,null);
 
1810
INSERT INTO t6 VALUES(null,null);
 
1811
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
1812
## Full table scan ##
 
1813
--sorted_result
 
1814
SELECT HEX(c1),HEX(c2) FROM t5;
 
1815
--sorted_result
 
1816
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
1817
--sorted_result
 
1818
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
1819
## Forward index scan, covering ##
 
1820
--sorted_result
 
1821
SELECT bin(c1) FROM t5;
 
1822
## Backward index scan, covering ##
 
1823
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
1824
## Forward index scan, non-covering ##
 
1825
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
1826
## Backward index scan, non-covering ##
 
1827
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
1828
## ref type access
 
1829
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
1830
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
1831
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
1832
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
1833
## Range access, ordered ##
 
1834
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
1835
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
1836
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
1837
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
1838
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
1839
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
1840
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
1841
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
1842
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
1843
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
1844
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
1845
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
1846
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
1847
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
1848
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
1849
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
1850
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
1851
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
1852
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
1853
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
1854
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
1855
## Range access, backwards scan ##
 
1856
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
1857
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
1858
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
1859
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
1860
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
1861
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
1862
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
1863
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
1864
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
1865
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
1866
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
1867
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
1868
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
1869
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
1870
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
1871
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
1872
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
1873
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
1874
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
1875
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
1876
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
1877
#Inserting different charachers
 
1878
CREATE TABLE t7(c1  BIT(32));
 
1879
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
1880
--sorted_result
 
1881
SELECT * FROM t7;
 
1882
############# UPDATE ###########
 
1883
 
 
1884
# Update order by limit
 
1885
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1886
 
 
1887
 
 
1888
# Update with arithmetic operations 
 
1889
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
1890
 
 
1891
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
1892
 
 
1893
 
 
1894
# Update with NULL ( NULL to number & number to NULL)
 
1895
UPDATE t6 SET c2=NULL WHERE c1=23;
 
1896
 
 
1897
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
1898
 
 
1899
 
 
1900
# Update range values
 
1901
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
1902
 
 
1903
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
1904
 
 
1905
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
1906
 
 
1907
 
 
1908
# Update outside range would be clipped to closest endpoints
 
1909
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
1910
 
 
1911
UPDATE t6 SET c2=-1 WHERE c1=94;
 
1912
 
 
1913
 
 
1914
# Update ignore on bad null error
 
1915
--sorted_result
 
1916
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
1917
SET SQL_MODE=STRICT_ALL_TABLES;
 
1918
--error ER_BAD_NULL_ERROR
 
1919
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
1920
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
1921
--sorted_result
 
1922
SELECT hex(c1),hex(c2) FROM t5;
 
1923
SET SQL_MODE=DEFAULT;
 
1924
 
 
1925
#Multi table update
 
1926
--disable_warnings
 
1927
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1928
--enable_warnings
 
1929
--sorted_result
 
1930
SELECT hex(c1),hex(c2) FROM t5;
 
1931
 
 
1932
 
 
1933
# Update using various access methods
 
1934
TRUNCATE t5;
 
1935
TRUNCATE t6;
 
1936
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1937
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1938
 
 
1939
# Update using Const
 
1940
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
1941
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
1942
--sorted_result
 
1943
SELECT hex(c1),hex(c2) FROM t5;
 
1944
 
 
1945
# Update using range
 
1946
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
1947
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
1948
--sorted_result
 
1949
SELECT hex(c1),hex(c2) FROM t5;
 
1950
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
1951
--disable_warnings
 
1952
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
1953
--enable_warnings
 
1954
--sorted_result
 
1955
SELECT hex(c1),hex(c2) FROM t5;
 
1956
 
 
1957
# Update using eq_ref
 
1958
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1959
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
1960
 
 
1961
############# DELETE ###########
 
1962
 
 
1963
TRUNCATE t5;
 
1964
TRUNCATE t6;
 
1965
 
 
1966
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
1967
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
1968
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
1969
 
 
1970
# Delete by order by limit
 
1971
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
1972
 
 
1973
 
 
1974
# Delete rows with NULL column
 
1975
DELETE FROM t6 WHERE c2=NULL;
 
1976
 
 
1977
 
 
1978
# Delete with range values 
 
1979
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
1980
 
 
1981
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
1982
 
 
1983
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
1984
 
 
1985
 
 
1986
#Multi table delete
 
1987
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
1988
--sorted_result
 
1989
SELECT hex(c1),hex(c2) FROM t5;
 
1990
 
 
1991
 
 
1992
# Delete using various access methods
 
1993
TRUNCATE t5;
 
1994
TRUNCATE t6;
 
1995
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1996
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
1997
 
 
1998
# Update using Const
 
1999
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2000
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
2001
--sorted_result
 
2002
SELECT hex(c1),hex(c2) FROM t5;
 
2003
 
 
2004
# Update using range
 
2005
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2006
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2007
--sorted_result
 
2008
SELECT hex(c1),hex(c2) FROM t5;
 
2009
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2010
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2011
--sorted_result
 
2012
SELECT hex(c1),hex(c2) FROM t5;
 
2013
 
 
2014
# Update using eq_ref
 
2015
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2016
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2017
 
 
2018
# Droping the tables
 
2019
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
2020
 
 
2021
####Checking the bit values####
 
2022
SELECT 0 + b'0'; 
 
2023
SELECT 0 + (0<<64);
 
2024
######### INSERT/SELECT######### 
 
2025
 
 
2026
#### Insert and select 64 bit data into the table####
 
2027
CREATE TABLE t1(c1 BIT(64));
 
2028
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
2029
let $i=64;
 
2030
while($i){
 
2031
let $j=$i/2;
 
2032
eval set @v1=$i;
 
2033
eval set @v2=$j;
 
2034
set @v3=repeat('1',@v1);
 
2035
let $STR0= query_get_value(select @v3 as I,I,1);
 
2036
eval INSERT INTO t1 VALUES (b'$STR0');
 
2037
set @v3=repeat('0',@v1);
 
2038
let $STR1= query_get_value(select @v3 as I,I,1);
 
2039
eval INSERT INTO t1 VALUES (b'$STR1');
 
2040
set @v3=repeat('01',@v2);
 
2041
let $STR2= query_get_value(select @v3 as I,I,1);
 
2042
eval INSERT INTO t1 VALUES (b'$STR2');
 
2043
set @v3=repeat('10',@v2);
 
2044
let $STR3= query_get_value(select @v3 as I,I,1);
 
2045
eval INSERT INTO t1 VALUES (b'$STR3');
 
2046
set @v3=repeat('1',@v1);
 
2047
set @v4=repeat('01',@v2);
 
2048
set @v5=repeat('10',@v2);
 
2049
let $STR0= query_get_value(select @v3 as I,I,1);
 
2050
let $STR2= query_get_value(select @v4 as I,I,1);
 
2051
let $STR3= query_get_value(select @v5 as I,I,1);
 
2052
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
2053
dec $i;
 
2054
}
 
2055
INSERT INTO t1 VALUES (b'0');
 
2056
INSERT INTO t2 VALUES (b'0', b'0', b'0');
 
2057
--sorted_result
 
2058
SELECT HEX(c1) FROM t1;
 
2059
--sorted_result
 
2060
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
2061
--sorted_result
 
2062
SELECT OCT(c1) FROM t1;
 
2063
--sorted_result
 
2064
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
2065
--sorted_result
 
2066
SELECT BIN(c1) FROM t1;
 
2067
--sorted_result
 
2068
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
2069
--sorted_result
 
2070
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
2071
--sorted_result
 
2072
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
2073
--sorted_result
 
2074
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
2075
--sorted_result
 
2076
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
2077
--sorted_result
 
2078
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
2079
--sorted_result
 
2080
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
2081
--sorted_result
 
2082
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
2083
--error 1439
 
2084
CREATE TABLE t3 (c1 BIT(65));
 
2085
# Checking for bug #9571
 
2086
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
2087
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
2088
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
2089
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
2090
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2091
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2092
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2093
--sorted_result
 
2094
SELECT HEX(c1),HEX(c2) FROM t5;
 
2095
 
 
2096
#Insert permissible NULLs
 
2097
INSERT IGNORE INTO t5 VALUES(96,null);
 
2098
INSERT INTO t6 VALUES(null,null);
 
2099
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
2100
## Full table scan ##
 
2101
--sorted_result
 
2102
SELECT HEX(c1),HEX(c2) FROM t5;
 
2103
--sorted_result
 
2104
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
2105
--sorted_result
 
2106
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
2107
## Forward index scan, covering ##
 
2108
--sorted_result
 
2109
SELECT bin(c1) FROM t5;
 
2110
## Backward index scan, covering ##
 
2111
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
2112
## Forward index scan, non-covering ##
 
2113
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
2114
## Backward index scan, non-covering ##
 
2115
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
2116
## ref type access
 
2117
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
2118
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
2119
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
2120
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
2121
## Range access, ordered ##
 
2122
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
2123
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
2124
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
2125
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
2126
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
2127
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
2128
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
2129
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
2130
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
2131
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
2132
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
2133
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
2134
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
2135
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
2136
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
2137
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
2138
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
2139
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
2140
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
2141
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
2142
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
2143
## Range access, backwards scan ##
 
2144
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
2145
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
2146
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
2147
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
2148
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
2149
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
2150
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
2151
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
2152
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
2153
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
2154
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
2155
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
2156
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
2157
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
2158
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
2159
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
2160
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
2161
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
2162
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
2163
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
2164
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
2165
#Inserting different charachers
 
2166
CREATE TABLE t7(c1  BIT(64));
 
2167
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
2168
--sorted_result
 
2169
SELECT * FROM t7;
 
2170
############# UPDATE ###########
 
2171
 
 
2172
# Update order by limit
 
2173
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2174
 
 
2175
 
 
2176
# Update with arithmetic operations 
 
2177
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
2178
 
 
2179
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
2180
 
 
2181
 
 
2182
# Update with NULL ( NULL to number & number to NULL)
 
2183
UPDATE t6 SET c2=NULL WHERE c1=23;
 
2184
 
 
2185
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
2186
 
 
2187
 
 
2188
# Update range values
 
2189
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
2190
 
 
2191
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
2192
 
 
2193
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
2194
 
 
2195
 
 
2196
# Update outside range would be clipped to closest endpoints
 
2197
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
2198
 
 
2199
UPDATE t6 SET c2=-1 WHERE c1=94;
 
2200
 
 
2201
 
 
2202
# Update ignore on bad null error
 
2203
--sorted_result
 
2204
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
2205
SET SQL_MODE=STRICT_ALL_TABLES;
 
2206
--error ER_BAD_NULL_ERROR
 
2207
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
2208
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
2209
--sorted_result
 
2210
SELECT hex(c1),hex(c2) FROM t5;
 
2211
SET SQL_MODE=DEFAULT;
 
2212
 
 
2213
#Multi table update
 
2214
--disable_warnings
 
2215
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2216
--enable_warnings
 
2217
--sorted_result
 
2218
SELECT hex(c1),hex(c2) FROM t5;
 
2219
 
 
2220
 
 
2221
# Update using various access methods
 
2222
TRUNCATE t5;
 
2223
TRUNCATE t6;
 
2224
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2225
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2226
 
 
2227
# Update using Const
 
2228
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2229
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
2230
--sorted_result
 
2231
SELECT hex(c1),hex(c2) FROM t5;
 
2232
 
 
2233
# Update using range
 
2234
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2235
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
2236
--sorted_result
 
2237
SELECT hex(c1),hex(c2) FROM t5;
 
2238
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2239
--disable_warnings
 
2240
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
2241
--enable_warnings
 
2242
--sorted_result
 
2243
SELECT hex(c1),hex(c2) FROM t5;
 
2244
 
 
2245
# Update using eq_ref
 
2246
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2247
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2248
 
 
2249
############# DELETE ###########
 
2250
 
 
2251
TRUNCATE t5;
 
2252
TRUNCATE t6;
 
2253
 
 
2254
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2255
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2256
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
2257
 
 
2258
# Delete by order by limit
 
2259
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2260
 
 
2261
 
 
2262
# Delete rows with NULL column
 
2263
DELETE FROM t6 WHERE c2=NULL;
 
2264
 
 
2265
 
 
2266
# Delete with range values 
 
2267
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
2268
 
 
2269
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
2270
 
 
2271
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
2272
 
 
2273
 
 
2274
#Multi table delete
 
2275
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2276
--sorted_result
 
2277
SELECT hex(c1),hex(c2) FROM t5;
 
2278
 
 
2279
 
 
2280
# Delete using various access methods
 
2281
TRUNCATE t5;
 
2282
TRUNCATE t6;
 
2283
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2284
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2285
 
 
2286
# Update using Const
 
2287
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2288
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
2289
--sorted_result
 
2290
SELECT hex(c1),hex(c2) FROM t5;
 
2291
 
 
2292
# Update using range
 
2293
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2294
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2295
--sorted_result
 
2296
SELECT hex(c1),hex(c2) FROM t5;
 
2297
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2298
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2299
--sorted_result
 
2300
SELECT hex(c1),hex(c2) FROM t5;
 
2301
 
 
2302
# Update using eq_ref
 
2303
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2304
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2305
 
 
2306
# Droping the tables
 
2307
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
2308
 
 
2309
####Checking the bit values####
 
2310
SELECT 0 + b'1'; 
 
2311
SELECT 0 + (1<<0);
 
2312
######### INSERT/SELECT######### 
 
2313
 
 
2314
#### Insert and select 0 bit data into the table####
 
2315
CREATE TABLE t1(c1 BIT(0));
 
2316
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
2317
let $i=0;
 
2318
while($i){
 
2319
let $j=$i/2;
 
2320
eval set @v1=$i;
 
2321
eval set @v2=$j;
 
2322
set @v3=repeat('1',@v1);
 
2323
let $STR0= query_get_value(select @v3 as I,I,1);
 
2324
eval INSERT INTO t1 VALUES (b'$STR0');
 
2325
set @v3=repeat('0',@v1);
 
2326
let $STR1= query_get_value(select @v3 as I,I,1);
 
2327
eval INSERT INTO t1 VALUES (b'$STR1');
 
2328
set @v3=repeat('01',@v2);
 
2329
let $STR2= query_get_value(select @v3 as I,I,1);
 
2330
eval INSERT INTO t1 VALUES (b'$STR2');
 
2331
set @v3=repeat('10',@v2);
 
2332
let $STR3= query_get_value(select @v3 as I,I,1);
 
2333
eval INSERT INTO t1 VALUES (b'$STR3');
 
2334
set @v3=repeat('1',@v1);
 
2335
set @v4=repeat('01',@v2);
 
2336
set @v5=repeat('10',@v2);
 
2337
let $STR0= query_get_value(select @v3 as I,I,1);
 
2338
let $STR2= query_get_value(select @v4 as I,I,1);
 
2339
let $STR3= query_get_value(select @v5 as I,I,1);
 
2340
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
2341
dec $i;
 
2342
}
 
2343
INSERT INTO t1 VALUES (b'1');
 
2344
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
2345
--sorted_result
 
2346
SELECT HEX(c1) FROM t1;
 
2347
--sorted_result
 
2348
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
2349
--sorted_result
 
2350
SELECT OCT(c1) FROM t1;
 
2351
--sorted_result
 
2352
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
2353
--sorted_result
 
2354
SELECT BIN(c1) FROM t1;
 
2355
--sorted_result
 
2356
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
2357
--sorted_result
 
2358
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
2359
--sorted_result
 
2360
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
2361
--sorted_result
 
2362
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
2363
--sorted_result
 
2364
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
2365
--sorted_result
 
2366
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
2367
--sorted_result
 
2368
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
2369
--sorted_result
 
2370
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
2371
--error 1439
 
2372
CREATE TABLE t3 (c1 BIT(65));
 
2373
# Checking for bug #9571
 
2374
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
2375
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
2376
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
2377
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
2378
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2379
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2380
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2381
--sorted_result
 
2382
SELECT HEX(c1),HEX(c2) FROM t5;
 
2383
 
 
2384
#Insert permissible NULLs
 
2385
INSERT IGNORE INTO t5 VALUES(96,null);
 
2386
INSERT INTO t6 VALUES(null,null);
 
2387
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
2388
## Full table scan ##
 
2389
--sorted_result
 
2390
SELECT HEX(c1),HEX(c2) FROM t5;
 
2391
--sorted_result
 
2392
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
2393
--sorted_result
 
2394
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
2395
## Forward index scan, covering ##
 
2396
--sorted_result
 
2397
SELECT bin(c1) FROM t5;
 
2398
## Backward index scan, covering ##
 
2399
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
2400
## Forward index scan, non-covering ##
 
2401
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
2402
## Backward index scan, non-covering ##
 
2403
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
2404
## ref type access
 
2405
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
2406
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
2407
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
2408
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
2409
## Range access, ordered ##
 
2410
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
2411
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
2412
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
2413
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
2414
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
2415
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
2416
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
2417
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
2418
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
2419
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
2420
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
2421
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
2422
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
2423
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
2424
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
2425
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
2426
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
2427
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
2428
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
2429
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
2430
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
2431
## Range access, backwards scan ##
 
2432
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
2433
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
2434
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
2435
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
2436
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
2437
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
2438
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
2439
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
2440
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
2441
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
2442
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
2443
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
2444
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
2445
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
2446
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
2447
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
2448
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
2449
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
2450
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
2451
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
2452
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
2453
#Inserting different charachers
 
2454
CREATE TABLE t7(c1  BIT(0));
 
2455
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
2456
--sorted_result
 
2457
SELECT * FROM t7;
 
2458
############# UPDATE ###########
 
2459
 
 
2460
# Update order by limit
 
2461
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2462
 
 
2463
 
 
2464
# Update with arithmetic operations 
 
2465
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
2466
 
 
2467
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
2468
 
 
2469
 
 
2470
# Update with NULL ( NULL to number & number to NULL)
 
2471
UPDATE t6 SET c2=NULL WHERE c1=23;
 
2472
 
 
2473
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
2474
 
 
2475
 
 
2476
# Update range values
 
2477
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
2478
 
 
2479
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
2480
 
 
2481
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
2482
 
 
2483
 
 
2484
# Update outside range would be clipped to closest endpoints
 
2485
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
2486
 
 
2487
UPDATE t6 SET c2=-1 WHERE c1=94;
 
2488
 
 
2489
 
 
2490
# Update ignore on bad null error
 
2491
--sorted_result
 
2492
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
2493
SET SQL_MODE=STRICT_ALL_TABLES;
 
2494
--error ER_BAD_NULL_ERROR
 
2495
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
2496
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
2497
--sorted_result
 
2498
SELECT hex(c1),hex(c2) FROM t5;
 
2499
SET SQL_MODE=DEFAULT;
 
2500
 
 
2501
#Multi table update
 
2502
--disable_warnings
 
2503
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2504
--enable_warnings
 
2505
--sorted_result
 
2506
SELECT hex(c1),hex(c2) FROM t5;
 
2507
 
 
2508
 
 
2509
# Update using various access methods
 
2510
TRUNCATE t5;
 
2511
TRUNCATE t6;
 
2512
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2513
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2514
 
 
2515
# Update using Const
 
2516
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2517
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
2518
--sorted_result
 
2519
SELECT hex(c1),hex(c2) FROM t5;
 
2520
 
 
2521
# Update using range
 
2522
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2523
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
2524
--sorted_result
 
2525
SELECT hex(c1),hex(c2) FROM t5;
 
2526
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2527
--disable_warnings
 
2528
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
2529
--enable_warnings
 
2530
--sorted_result
 
2531
SELECT hex(c1),hex(c2) FROM t5;
 
2532
 
 
2533
# Update using eq_ref
 
2534
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2535
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2536
 
 
2537
############# DELETE ###########
 
2538
 
 
2539
TRUNCATE t5;
 
2540
TRUNCATE t6;
 
2541
 
 
2542
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2543
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2544
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
2545
 
 
2546
# Delete by order by limit
 
2547
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2548
 
 
2549
 
 
2550
# Delete rows with NULL column
 
2551
DELETE FROM t6 WHERE c2=NULL;
 
2552
 
 
2553
 
 
2554
# Delete with range values 
 
2555
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
2556
 
 
2557
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
2558
 
 
2559
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
2560
 
 
2561
 
 
2562
#Multi table delete
 
2563
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2564
--sorted_result
 
2565
SELECT hex(c1),hex(c2) FROM t5;
 
2566
 
 
2567
 
 
2568
# Delete using various access methods
 
2569
TRUNCATE t5;
 
2570
TRUNCATE t6;
 
2571
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2572
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2573
 
 
2574
# Update using Const
 
2575
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2576
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
2577
--sorted_result
 
2578
SELECT hex(c1),hex(c2) FROM t5;
 
2579
 
 
2580
# Update using range
 
2581
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2582
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2583
--sorted_result
 
2584
SELECT hex(c1),hex(c2) FROM t5;
 
2585
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2586
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2587
--sorted_result
 
2588
SELECT hex(c1),hex(c2) FROM t5;
 
2589
 
 
2590
# Update using eq_ref
 
2591
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2592
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2593
 
 
2594
# Droping the tables
 
2595
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
2596
 
 
2597
####Checking the bit values####
 
2598
SELECT 0 + b'1'; 
 
2599
SELECT 0 + (1<<1);
 
2600
######### INSERT/SELECT######### 
 
2601
 
 
2602
#### Insert and select 1 bit data into the table####
 
2603
CREATE TABLE t1(c1 BIT(1));
 
2604
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
2605
let $i=1;
 
2606
while($i){
 
2607
let $j=$i/2;
 
2608
eval set @v1=$i;
 
2609
eval set @v2=$j;
 
2610
set @v3=repeat('1',@v1);
 
2611
let $STR0= query_get_value(select @v3 as I,I,1);
 
2612
eval INSERT INTO t1 VALUES (b'$STR0');
 
2613
set @v3=repeat('0',@v1);
 
2614
let $STR1= query_get_value(select @v3 as I,I,1);
 
2615
eval INSERT INTO t1 VALUES (b'$STR1');
 
2616
set @v3=repeat('01',@v2);
 
2617
let $STR2= query_get_value(select @v3 as I,I,1);
 
2618
eval INSERT INTO t1 VALUES (b'$STR2');
 
2619
set @v3=repeat('10',@v2);
 
2620
let $STR3= query_get_value(select @v3 as I,I,1);
 
2621
eval INSERT INTO t1 VALUES (b'$STR3');
 
2622
set @v3=repeat('1',@v1);
 
2623
set @v4=repeat('01',@v2);
 
2624
set @v5=repeat('10',@v2);
 
2625
let $STR0= query_get_value(select @v3 as I,I,1);
 
2626
let $STR2= query_get_value(select @v4 as I,I,1);
 
2627
let $STR3= query_get_value(select @v5 as I,I,1);
 
2628
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
2629
dec $i;
 
2630
}
 
2631
INSERT INTO t1 VALUES (b'1');
 
2632
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
2633
--sorted_result
 
2634
SELECT HEX(c1) FROM t1;
 
2635
--sorted_result
 
2636
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
2637
--sorted_result
 
2638
SELECT OCT(c1) FROM t1;
 
2639
--sorted_result
 
2640
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
2641
--sorted_result
 
2642
SELECT BIN(c1) FROM t1;
 
2643
--sorted_result
 
2644
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
2645
--sorted_result
 
2646
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
2647
--sorted_result
 
2648
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
2649
--sorted_result
 
2650
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
2651
--sorted_result
 
2652
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
2653
--sorted_result
 
2654
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
2655
--sorted_result
 
2656
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
2657
--sorted_result
 
2658
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
2659
--error 1439
 
2660
CREATE TABLE t3 (c1 BIT(65));
 
2661
# Checking for bug #9571
 
2662
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
2663
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
2664
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
2665
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
2666
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2667
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2668
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2669
--sorted_result
 
2670
SELECT HEX(c1),HEX(c2) FROM t5;
 
2671
 
 
2672
#Insert permissible NULLs
 
2673
INSERT IGNORE INTO t5 VALUES(96,null);
 
2674
INSERT INTO t6 VALUES(null,null);
 
2675
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
2676
## Full table scan ##
 
2677
--sorted_result
 
2678
SELECT HEX(c1),HEX(c2) FROM t5;
 
2679
--sorted_result
 
2680
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
2681
--sorted_result
 
2682
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
2683
## Forward index scan, covering ##
 
2684
--sorted_result
 
2685
SELECT bin(c1) FROM t5;
 
2686
## Backward index scan, covering ##
 
2687
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
2688
## Forward index scan, non-covering ##
 
2689
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
2690
## Backward index scan, non-covering ##
 
2691
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
2692
## ref type access
 
2693
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
2694
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
2695
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
2696
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
2697
## Range access, ordered ##
 
2698
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
2699
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
2700
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
2701
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
2702
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
2703
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
2704
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
2705
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
2706
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
2707
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
2708
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
2709
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
2710
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
2711
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
2712
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
2713
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
2714
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
2715
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
2716
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
2717
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
2718
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
2719
## Range access, backwards scan ##
 
2720
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
2721
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
2722
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
2723
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
2724
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
2725
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
2726
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
2727
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
2728
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
2729
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
2730
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
2731
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
2732
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
2733
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
2734
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
2735
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
2736
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
2737
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
2738
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
2739
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
2740
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
2741
#Inserting different charachers
 
2742
CREATE TABLE t7(c1  BIT(1));
 
2743
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
2744
--sorted_result
 
2745
SELECT * FROM t7;
 
2746
############# UPDATE ###########
 
2747
 
 
2748
# Update order by limit
 
2749
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2750
 
 
2751
 
 
2752
# Update with arithmetic operations 
 
2753
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
2754
 
 
2755
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
2756
 
 
2757
 
 
2758
# Update with NULL ( NULL to number & number to NULL)
 
2759
UPDATE t6 SET c2=NULL WHERE c1=23;
 
2760
 
 
2761
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
2762
 
 
2763
 
 
2764
# Update range values
 
2765
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
2766
 
 
2767
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
2768
 
 
2769
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
2770
 
 
2771
 
 
2772
# Update outside range would be clipped to closest endpoints
 
2773
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
2774
 
 
2775
UPDATE t6 SET c2=-1 WHERE c1=94;
 
2776
 
 
2777
 
 
2778
# Update ignore on bad null error
 
2779
--sorted_result
 
2780
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
2781
SET SQL_MODE=STRICT_ALL_TABLES;
 
2782
--error ER_BAD_NULL_ERROR
 
2783
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
2784
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
2785
--sorted_result
 
2786
SELECT hex(c1),hex(c2) FROM t5;
 
2787
SET SQL_MODE=DEFAULT;
 
2788
 
 
2789
#Multi table update
 
2790
--disable_warnings
 
2791
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2792
--enable_warnings
 
2793
--sorted_result
 
2794
SELECT hex(c1),hex(c2) FROM t5;
 
2795
 
 
2796
 
 
2797
# Update using various access methods
 
2798
TRUNCATE t5;
 
2799
TRUNCATE t6;
 
2800
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2801
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2802
 
 
2803
# Update using Const
 
2804
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2805
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
2806
--sorted_result
 
2807
SELECT hex(c1),hex(c2) FROM t5;
 
2808
 
 
2809
# Update using range
 
2810
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2811
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
2812
--sorted_result
 
2813
SELECT hex(c1),hex(c2) FROM t5;
 
2814
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2815
--disable_warnings
 
2816
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
2817
--enable_warnings
 
2818
--sorted_result
 
2819
SELECT hex(c1),hex(c2) FROM t5;
 
2820
 
 
2821
# Update using eq_ref
 
2822
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2823
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2824
 
 
2825
############# DELETE ###########
 
2826
 
 
2827
TRUNCATE t5;
 
2828
TRUNCATE t6;
 
2829
 
 
2830
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2831
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2832
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
2833
 
 
2834
# Delete by order by limit
 
2835
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
2836
 
 
2837
 
 
2838
# Delete rows with NULL column
 
2839
DELETE FROM t6 WHERE c2=NULL;
 
2840
 
 
2841
 
 
2842
# Delete with range values 
 
2843
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
2844
 
 
2845
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
2846
 
 
2847
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
2848
 
 
2849
 
 
2850
#Multi table delete
 
2851
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
2852
--sorted_result
 
2853
SELECT hex(c1),hex(c2) FROM t5;
 
2854
 
 
2855
 
 
2856
# Delete using various access methods
 
2857
TRUNCATE t5;
 
2858
TRUNCATE t6;
 
2859
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2860
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
2861
 
 
2862
# Update using Const
 
2863
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
2864
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
2865
--sorted_result
 
2866
SELECT hex(c1),hex(c2) FROM t5;
 
2867
 
 
2868
# Update using range
 
2869
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2870
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
2871
--sorted_result
 
2872
SELECT hex(c1),hex(c2) FROM t5;
 
2873
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2874
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
2875
--sorted_result
 
2876
SELECT hex(c1),hex(c2) FROM t5;
 
2877
 
 
2878
# Update using eq_ref
 
2879
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2880
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
2881
 
 
2882
# Droping the tables
 
2883
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
2884
 
 
2885
####Checking the bit values####
 
2886
SELECT 0 + b'1'; 
 
2887
SELECT 0 + (1<<2);
 
2888
######### INSERT/SELECT######### 
 
2889
 
 
2890
#### Insert and select 2 bit data into the table####
 
2891
CREATE TABLE t1(c1 BIT(2));
 
2892
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
2893
let $i=2;
 
2894
while($i){
 
2895
let $j=$i/2;
 
2896
eval set @v1=$i;
 
2897
eval set @v2=$j;
 
2898
set @v3=repeat('1',@v1);
 
2899
let $STR0= query_get_value(select @v3 as I,I,1);
 
2900
eval INSERT INTO t1 VALUES (b'$STR0');
 
2901
set @v3=repeat('0',@v1);
 
2902
let $STR1= query_get_value(select @v3 as I,I,1);
 
2903
eval INSERT INTO t1 VALUES (b'$STR1');
 
2904
set @v3=repeat('01',@v2);
 
2905
let $STR2= query_get_value(select @v3 as I,I,1);
 
2906
eval INSERT INTO t1 VALUES (b'$STR2');
 
2907
set @v3=repeat('10',@v2);
 
2908
let $STR3= query_get_value(select @v3 as I,I,1);
 
2909
eval INSERT INTO t1 VALUES (b'$STR3');
 
2910
set @v3=repeat('1',@v1);
 
2911
set @v4=repeat('01',@v2);
 
2912
set @v5=repeat('10',@v2);
 
2913
let $STR0= query_get_value(select @v3 as I,I,1);
 
2914
let $STR2= query_get_value(select @v4 as I,I,1);
 
2915
let $STR3= query_get_value(select @v5 as I,I,1);
 
2916
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
2917
dec $i;
 
2918
}
 
2919
INSERT INTO t1 VALUES (b'1');
 
2920
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
2921
--sorted_result
 
2922
SELECT HEX(c1) FROM t1;
 
2923
--sorted_result
 
2924
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
2925
--sorted_result
 
2926
SELECT OCT(c1) FROM t1;
 
2927
--sorted_result
 
2928
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
2929
--sorted_result
 
2930
SELECT BIN(c1) FROM t1;
 
2931
--sorted_result
 
2932
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
2933
--sorted_result
 
2934
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
2935
--sorted_result
 
2936
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
2937
--sorted_result
 
2938
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
2939
--sorted_result
 
2940
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
2941
--sorted_result
 
2942
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
2943
--sorted_result
 
2944
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
2945
--sorted_result
 
2946
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
2947
--error 1439
 
2948
CREATE TABLE t3 (c1 BIT(65));
 
2949
# Checking for bug #9571
 
2950
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
2951
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
2952
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
2953
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
2954
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
2955
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2956
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
2957
--sorted_result
 
2958
SELECT HEX(c1),HEX(c2) FROM t5;
 
2959
 
 
2960
#Insert permissible NULLs
 
2961
INSERT IGNORE INTO t5 VALUES(96,null);
 
2962
INSERT INTO t6 VALUES(null,null);
 
2963
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
2964
## Full table scan ##
 
2965
--sorted_result
 
2966
SELECT HEX(c1),HEX(c2) FROM t5;
 
2967
--sorted_result
 
2968
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
2969
--sorted_result
 
2970
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
2971
## Forward index scan, covering ##
 
2972
--sorted_result
 
2973
SELECT bin(c1) FROM t5;
 
2974
## Backward index scan, covering ##
 
2975
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
2976
## Forward index scan, non-covering ##
 
2977
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
2978
## Backward index scan, non-covering ##
 
2979
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
2980
## ref type access
 
2981
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
2982
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
2983
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
2984
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
2985
## Range access, ordered ##
 
2986
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
2987
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
2988
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
2989
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
2990
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
2991
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
2992
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
2993
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
2994
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
2995
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
2996
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
2997
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
2998
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
2999
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
3000
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
3001
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
3002
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
3003
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
3004
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
3005
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
3006
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
3007
## Range access, backwards scan ##
 
3008
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
3009
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
3010
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
3011
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
3012
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
3013
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
3014
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
3015
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
3016
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
3017
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
3018
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
3019
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
3020
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
3021
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
3022
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
3023
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
3024
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
3025
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
3026
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
3027
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
3028
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
3029
#Inserting different charachers
 
3030
CREATE TABLE t7(c1  BIT(2));
 
3031
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
3032
--sorted_result
 
3033
SELECT * FROM t7;
 
3034
############# UPDATE ###########
 
3035
 
 
3036
# Update order by limit
 
3037
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3038
 
 
3039
 
 
3040
# Update with arithmetic operations 
 
3041
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
3042
 
 
3043
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
3044
 
 
3045
 
 
3046
# Update with NULL ( NULL to number & number to NULL)
 
3047
UPDATE t6 SET c2=NULL WHERE c1=23;
 
3048
 
 
3049
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
3050
 
 
3051
 
 
3052
# Update range values
 
3053
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
3054
 
 
3055
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
3056
 
 
3057
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
3058
 
 
3059
 
 
3060
# Update outside range would be clipped to closest endpoints
 
3061
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
3062
 
 
3063
UPDATE t6 SET c2=-1 WHERE c1=94;
 
3064
 
 
3065
 
 
3066
# Update ignore on bad null error
 
3067
--sorted_result
 
3068
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
3069
SET SQL_MODE=STRICT_ALL_TABLES;
 
3070
--error ER_BAD_NULL_ERROR
 
3071
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
3072
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
3073
--sorted_result
 
3074
SELECT hex(c1),hex(c2) FROM t5;
 
3075
SET SQL_MODE=DEFAULT;
 
3076
 
 
3077
#Multi table update
 
3078
--disable_warnings
 
3079
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3080
--enable_warnings
 
3081
--sorted_result
 
3082
SELECT hex(c1),hex(c2) FROM t5;
 
3083
 
 
3084
 
 
3085
# Update using various access methods
 
3086
TRUNCATE t5;
 
3087
TRUNCATE t6;
 
3088
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3089
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3090
 
 
3091
# Update using Const
 
3092
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3093
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
3094
--sorted_result
 
3095
SELECT hex(c1),hex(c2) FROM t5;
 
3096
 
 
3097
# Update using range
 
3098
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3099
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
3100
--sorted_result
 
3101
SELECT hex(c1),hex(c2) FROM t5;
 
3102
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3103
--disable_warnings
 
3104
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
3105
--enable_warnings
 
3106
--sorted_result
 
3107
SELECT hex(c1),hex(c2) FROM t5;
 
3108
 
 
3109
# Update using eq_ref
 
3110
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3111
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3112
 
 
3113
############# DELETE ###########
 
3114
 
 
3115
TRUNCATE t5;
 
3116
TRUNCATE t6;
 
3117
 
 
3118
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3119
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3120
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
3121
 
 
3122
# Delete by order by limit
 
3123
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3124
 
 
3125
 
 
3126
# Delete rows with NULL column
 
3127
DELETE FROM t6 WHERE c2=NULL;
 
3128
 
 
3129
 
 
3130
# Delete with range values 
 
3131
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
3132
 
 
3133
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
3134
 
 
3135
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
3136
 
 
3137
 
 
3138
#Multi table delete
 
3139
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3140
--sorted_result
 
3141
SELECT hex(c1),hex(c2) FROM t5;
 
3142
 
 
3143
 
 
3144
# Delete using various access methods
 
3145
TRUNCATE t5;
 
3146
TRUNCATE t6;
 
3147
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3148
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3149
 
 
3150
# Update using Const
 
3151
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3152
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
3153
--sorted_result
 
3154
SELECT hex(c1),hex(c2) FROM t5;
 
3155
 
 
3156
# Update using range
 
3157
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3158
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3159
--sorted_result
 
3160
SELECT hex(c1),hex(c2) FROM t5;
 
3161
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3162
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3163
--sorted_result
 
3164
SELECT hex(c1),hex(c2) FROM t5;
 
3165
 
 
3166
# Update using eq_ref
 
3167
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3168
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3169
 
 
3170
# Droping the tables
 
3171
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
3172
 
 
3173
####Checking the bit values####
 
3174
SELECT 0 + b'1'; 
 
3175
SELECT 0 + (1<<4);
 
3176
######### INSERT/SELECT######### 
 
3177
 
 
3178
#### Insert and select 4 bit data into the table####
 
3179
CREATE TABLE t1(c1 BIT(4));
 
3180
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
3181
let $i=4;
 
3182
while($i){
 
3183
let $j=$i/2;
 
3184
eval set @v1=$i;
 
3185
eval set @v2=$j;
 
3186
set @v3=repeat('1',@v1);
 
3187
let $STR0= query_get_value(select @v3 as I,I,1);
 
3188
eval INSERT INTO t1 VALUES (b'$STR0');
 
3189
set @v3=repeat('0',@v1);
 
3190
let $STR1= query_get_value(select @v3 as I,I,1);
 
3191
eval INSERT INTO t1 VALUES (b'$STR1');
 
3192
set @v3=repeat('01',@v2);
 
3193
let $STR2= query_get_value(select @v3 as I,I,1);
 
3194
eval INSERT INTO t1 VALUES (b'$STR2');
 
3195
set @v3=repeat('10',@v2);
 
3196
let $STR3= query_get_value(select @v3 as I,I,1);
 
3197
eval INSERT INTO t1 VALUES (b'$STR3');
 
3198
set @v3=repeat('1',@v1);
 
3199
set @v4=repeat('01',@v2);
 
3200
set @v5=repeat('10',@v2);
 
3201
let $STR0= query_get_value(select @v3 as I,I,1);
 
3202
let $STR2= query_get_value(select @v4 as I,I,1);
 
3203
let $STR3= query_get_value(select @v5 as I,I,1);
 
3204
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
3205
dec $i;
 
3206
}
 
3207
INSERT INTO t1 VALUES (b'1');
 
3208
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
3209
--sorted_result
 
3210
SELECT HEX(c1) FROM t1;
 
3211
--sorted_result
 
3212
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
3213
--sorted_result
 
3214
SELECT OCT(c1) FROM t1;
 
3215
--sorted_result
 
3216
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
3217
--sorted_result
 
3218
SELECT BIN(c1) FROM t1;
 
3219
--sorted_result
 
3220
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
3221
--sorted_result
 
3222
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
3223
--sorted_result
 
3224
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
3225
--sorted_result
 
3226
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
3227
--sorted_result
 
3228
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
3229
--sorted_result
 
3230
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
3231
--sorted_result
 
3232
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
3233
--sorted_result
 
3234
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
3235
--error 1439
 
3236
CREATE TABLE t3 (c1 BIT(65));
 
3237
# Checking for bug #9571
 
3238
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
3239
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
3240
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
3241
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
3242
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3243
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3244
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3245
--sorted_result
 
3246
SELECT HEX(c1),HEX(c2) FROM t5;
 
3247
 
 
3248
#Insert permissible NULLs
 
3249
INSERT IGNORE INTO t5 VALUES(96,null);
 
3250
INSERT INTO t6 VALUES(null,null);
 
3251
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
3252
## Full table scan ##
 
3253
--sorted_result
 
3254
SELECT HEX(c1),HEX(c2) FROM t5;
 
3255
--sorted_result
 
3256
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
3257
--sorted_result
 
3258
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
3259
## Forward index scan, covering ##
 
3260
--sorted_result
 
3261
SELECT bin(c1) FROM t5;
 
3262
## Backward index scan, covering ##
 
3263
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
3264
## Forward index scan, non-covering ##
 
3265
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
3266
## Backward index scan, non-covering ##
 
3267
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
3268
## ref type access
 
3269
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
3270
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
3271
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
3272
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
3273
## Range access, ordered ##
 
3274
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
3275
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
3276
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
3277
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
3278
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
3279
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
3280
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
3281
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
3282
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
3283
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
3284
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
3285
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
3286
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
3287
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
3288
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
3289
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
3290
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
3291
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
3292
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
3293
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
3294
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
3295
## Range access, backwards scan ##
 
3296
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
3297
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
3298
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
3299
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
3300
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
3301
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
3302
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
3303
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
3304
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
3305
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
3306
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
3307
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
3308
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
3309
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
3310
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
3311
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
3312
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
3313
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
3314
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
3315
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
3316
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
3317
#Inserting different charachers
 
3318
CREATE TABLE t7(c1  BIT(4));
 
3319
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
3320
--sorted_result
 
3321
SELECT * FROM t7;
 
3322
############# UPDATE ###########
 
3323
 
 
3324
# Update order by limit
 
3325
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3326
 
 
3327
 
 
3328
# Update with arithmetic operations 
 
3329
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
3330
 
 
3331
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
3332
 
 
3333
 
 
3334
# Update with NULL ( NULL to number & number to NULL)
 
3335
UPDATE t6 SET c2=NULL WHERE c1=23;
 
3336
 
 
3337
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
3338
 
 
3339
 
 
3340
# Update range values
 
3341
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
3342
 
 
3343
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
3344
 
 
3345
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
3346
 
 
3347
 
 
3348
# Update outside range would be clipped to closest endpoints
 
3349
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
3350
 
 
3351
UPDATE t6 SET c2=-1 WHERE c1=94;
 
3352
 
 
3353
 
 
3354
# Update ignore on bad null error
 
3355
--sorted_result
 
3356
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
3357
SET SQL_MODE=STRICT_ALL_TABLES;
 
3358
--error ER_BAD_NULL_ERROR
 
3359
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
3360
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
3361
--sorted_result
 
3362
SELECT hex(c1),hex(c2) FROM t5;
 
3363
SET SQL_MODE=DEFAULT;
 
3364
 
 
3365
#Multi table update
 
3366
--disable_warnings
 
3367
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3368
--enable_warnings
 
3369
--sorted_result
 
3370
SELECT hex(c1),hex(c2) FROM t5;
 
3371
 
 
3372
 
 
3373
# Update using various access methods
 
3374
TRUNCATE t5;
 
3375
TRUNCATE t6;
 
3376
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3377
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3378
 
 
3379
# Update using Const
 
3380
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3381
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
3382
--sorted_result
 
3383
SELECT hex(c1),hex(c2) FROM t5;
 
3384
 
 
3385
# Update using range
 
3386
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3387
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
3388
--sorted_result
 
3389
SELECT hex(c1),hex(c2) FROM t5;
 
3390
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3391
--disable_warnings
 
3392
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
3393
--enable_warnings
 
3394
--sorted_result
 
3395
SELECT hex(c1),hex(c2) FROM t5;
 
3396
 
 
3397
# Update using eq_ref
 
3398
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3399
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3400
 
 
3401
############# DELETE ###########
 
3402
 
 
3403
TRUNCATE t5;
 
3404
TRUNCATE t6;
 
3405
 
 
3406
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3407
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3408
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
3409
 
 
3410
# Delete by order by limit
 
3411
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3412
 
 
3413
 
 
3414
# Delete rows with NULL column
 
3415
DELETE FROM t6 WHERE c2=NULL;
 
3416
 
 
3417
 
 
3418
# Delete with range values 
 
3419
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
3420
 
 
3421
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
3422
 
 
3423
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
3424
 
 
3425
 
 
3426
#Multi table delete
 
3427
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3428
--sorted_result
 
3429
SELECT hex(c1),hex(c2) FROM t5;
 
3430
 
 
3431
 
 
3432
# Delete using various access methods
 
3433
TRUNCATE t5;
 
3434
TRUNCATE t6;
 
3435
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3436
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3437
 
 
3438
# Update using Const
 
3439
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3440
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
3441
--sorted_result
 
3442
SELECT hex(c1),hex(c2) FROM t5;
 
3443
 
 
3444
# Update using range
 
3445
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3446
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3447
--sorted_result
 
3448
SELECT hex(c1),hex(c2) FROM t5;
 
3449
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3450
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3451
--sorted_result
 
3452
SELECT hex(c1),hex(c2) FROM t5;
 
3453
 
 
3454
# Update using eq_ref
 
3455
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3456
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3457
 
 
3458
# Droping the tables
 
3459
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
3460
 
 
3461
####Checking the bit values####
 
3462
SELECT 0 + b'1'; 
 
3463
SELECT 0 + (1<<8);
 
3464
######### INSERT/SELECT######### 
 
3465
 
 
3466
#### Insert and select 8 bit data into the table####
 
3467
CREATE TABLE t1(c1 BIT(8));
 
3468
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
3469
let $i=8;
 
3470
while($i){
 
3471
let $j=$i/2;
 
3472
eval set @v1=$i;
 
3473
eval set @v2=$j;
 
3474
set @v3=repeat('1',@v1);
 
3475
let $STR0= query_get_value(select @v3 as I,I,1);
 
3476
eval INSERT INTO t1 VALUES (b'$STR0');
 
3477
set @v3=repeat('0',@v1);
 
3478
let $STR1= query_get_value(select @v3 as I,I,1);
 
3479
eval INSERT INTO t1 VALUES (b'$STR1');
 
3480
set @v3=repeat('01',@v2);
 
3481
let $STR2= query_get_value(select @v3 as I,I,1);
 
3482
eval INSERT INTO t1 VALUES (b'$STR2');
 
3483
set @v3=repeat('10',@v2);
 
3484
let $STR3= query_get_value(select @v3 as I,I,1);
 
3485
eval INSERT INTO t1 VALUES (b'$STR3');
 
3486
set @v3=repeat('1',@v1);
 
3487
set @v4=repeat('01',@v2);
 
3488
set @v5=repeat('10',@v2);
 
3489
let $STR0= query_get_value(select @v3 as I,I,1);
 
3490
let $STR2= query_get_value(select @v4 as I,I,1);
 
3491
let $STR3= query_get_value(select @v5 as I,I,1);
 
3492
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
3493
dec $i;
 
3494
}
 
3495
INSERT INTO t1 VALUES (b'1');
 
3496
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
3497
--sorted_result
 
3498
SELECT HEX(c1) FROM t1;
 
3499
--sorted_result
 
3500
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
3501
--sorted_result
 
3502
SELECT OCT(c1) FROM t1;
 
3503
--sorted_result
 
3504
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
3505
--sorted_result
 
3506
SELECT BIN(c1) FROM t1;
 
3507
--sorted_result
 
3508
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
3509
--sorted_result
 
3510
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
3511
--sorted_result
 
3512
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
3513
--sorted_result
 
3514
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
3515
--sorted_result
 
3516
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
3517
--sorted_result
 
3518
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
3519
--sorted_result
 
3520
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
3521
--sorted_result
 
3522
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
3523
--error 1439
 
3524
CREATE TABLE t3 (c1 BIT(65));
 
3525
# Checking for bug #9571
 
3526
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
3527
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
3528
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
3529
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
3530
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3531
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3532
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3533
--sorted_result
 
3534
SELECT HEX(c1),HEX(c2) FROM t5;
 
3535
 
 
3536
#Insert permissible NULLs
 
3537
INSERT IGNORE INTO t5 VALUES(96,null);
 
3538
INSERT INTO t6 VALUES(null,null);
 
3539
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
3540
## Full table scan ##
 
3541
--sorted_result
 
3542
SELECT HEX(c1),HEX(c2) FROM t5;
 
3543
--sorted_result
 
3544
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
3545
--sorted_result
 
3546
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
3547
## Forward index scan, covering ##
 
3548
--sorted_result
 
3549
SELECT bin(c1) FROM t5;
 
3550
## Backward index scan, covering ##
 
3551
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
3552
## Forward index scan, non-covering ##
 
3553
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
3554
## Backward index scan, non-covering ##
 
3555
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
3556
## ref type access
 
3557
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
3558
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
3559
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
3560
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
3561
## Range access, ordered ##
 
3562
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
3563
 
 
3564
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
3565
 
 
3566
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
3567
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
3568
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
3569
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
3570
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
3571
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
3572
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
3573
 
 
3574
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
3575
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
3576
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
3577
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
3578
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
3579
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
3580
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
3581
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
3582
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
3583
## Range access, backwards scan ##
 
3584
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
3585
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
3586
 
 
3587
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
3588
 
 
3589
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
3590
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
3591
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
3592
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
3593
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
3594
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
3595
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
3596
 
 
3597
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
3598
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
3599
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
3600
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
3601
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
3602
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
3603
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
3604
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
3605
#Inserting different charachers
 
3606
CREATE TABLE t7(c1  BIT(8));
 
3607
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
3608
--sorted_result
 
3609
SELECT * FROM t7;
 
3610
############# UPDATE ###########
 
3611
 
 
3612
# Update order by limit
 
3613
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3614
 
 
3615
 
 
3616
# Update with arithmetic operations 
 
3617
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
3618
 
 
3619
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
3620
 
 
3621
 
 
3622
# Update with NULL ( NULL to number & number to NULL)
 
3623
UPDATE t6 SET c2=NULL WHERE c1=23;
 
3624
 
 
3625
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
3626
 
 
3627
 
 
3628
# Update range values
 
3629
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
3630
 
 
3631
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
3632
 
 
3633
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
3634
 
 
3635
 
 
3636
# Update outside range would be clipped to closest endpoints
 
3637
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
3638
 
 
3639
UPDATE t6 SET c2=-1 WHERE c1=94;
 
3640
 
 
3641
 
 
3642
# Update ignore on bad null error
 
3643
--sorted_result
 
3644
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
3645
SET SQL_MODE=STRICT_ALL_TABLES;
 
3646
--error ER_BAD_NULL_ERROR
 
3647
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
3648
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
3649
--sorted_result
 
3650
SELECT hex(c1),hex(c2) FROM t5;
 
3651
SET SQL_MODE=DEFAULT;
 
3652
 
 
3653
#Multi table update
 
3654
--disable_warnings
 
3655
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3656
--enable_warnings
 
3657
--sorted_result
 
3658
SELECT hex(c1),hex(c2) FROM t5;
 
3659
 
 
3660
 
 
3661
# Update using various access methods
 
3662
TRUNCATE t5;
 
3663
TRUNCATE t6;
 
3664
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3665
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3666
 
 
3667
# Update using Const
 
3668
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3669
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
3670
--sorted_result
 
3671
SELECT hex(c1),hex(c2) FROM t5;
 
3672
 
 
3673
# Update using range
 
3674
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3675
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
3676
--sorted_result
 
3677
SELECT hex(c1),hex(c2) FROM t5;
 
3678
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3679
--disable_warnings
 
3680
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
3681
--enable_warnings
 
3682
--sorted_result
 
3683
SELECT hex(c1),hex(c2) FROM t5;
 
3684
 
 
3685
# Update using eq_ref
 
3686
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3687
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3688
 
 
3689
############# DELETE ###########
 
3690
 
 
3691
TRUNCATE t5;
 
3692
TRUNCATE t6;
 
3693
 
 
3694
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3695
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3696
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
3697
 
 
3698
# Delete by order by limit
 
3699
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3700
 
 
3701
 
 
3702
# Delete rows with NULL column
 
3703
DELETE FROM t6 WHERE c2=NULL;
 
3704
 
 
3705
 
 
3706
# Delete with range values 
 
3707
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
3708
 
 
3709
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
3710
 
 
3711
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
3712
 
 
3713
 
 
3714
#Multi table delete
 
3715
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3716
--sorted_result
 
3717
SELECT hex(c1),hex(c2) FROM t5;
 
3718
 
 
3719
 
 
3720
# Delete using various access methods
 
3721
TRUNCATE t5;
 
3722
TRUNCATE t6;
 
3723
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3724
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3725
 
 
3726
# Update using Const
 
3727
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3728
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
3729
--sorted_result
 
3730
SELECT hex(c1),hex(c2) FROM t5;
 
3731
 
 
3732
# Update using range
 
3733
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3734
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3735
--sorted_result
 
3736
SELECT hex(c1),hex(c2) FROM t5;
 
3737
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3738
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3739
--sorted_result
 
3740
SELECT hex(c1),hex(c2) FROM t5;
 
3741
 
 
3742
# Update using eq_ref
 
3743
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3744
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3745
 
 
3746
# Droping the tables
 
3747
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
3748
 
 
3749
####Checking the bit values####
 
3750
SELECT 0 + b'1'; 
 
3751
SELECT 0 + (1<<16);
 
3752
######### INSERT/SELECT######### 
 
3753
 
 
3754
#### Insert and select 16 bit data into the table####
 
3755
CREATE TABLE t1(c1 BIT(16));
 
3756
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
3757
let $i=16;
 
3758
while($i){
 
3759
let $j=$i/2;
 
3760
eval set @v1=$i;
 
3761
eval set @v2=$j;
 
3762
set @v3=repeat('1',@v1);
 
3763
let $STR0= query_get_value(select @v3 as I,I,1);
 
3764
eval INSERT INTO t1 VALUES (b'$STR0');
 
3765
set @v3=repeat('0',@v1);
 
3766
let $STR1= query_get_value(select @v3 as I,I,1);
 
3767
eval INSERT INTO t1 VALUES (b'$STR1');
 
3768
set @v3=repeat('01',@v2);
 
3769
let $STR2= query_get_value(select @v3 as I,I,1);
 
3770
eval INSERT INTO t1 VALUES (b'$STR2');
 
3771
set @v3=repeat('10',@v2);
 
3772
let $STR3= query_get_value(select @v3 as I,I,1);
 
3773
eval INSERT INTO t1 VALUES (b'$STR3');
 
3774
set @v3=repeat('1',@v1);
 
3775
set @v4=repeat('01',@v2);
 
3776
set @v5=repeat('10',@v2);
 
3777
let $STR0= query_get_value(select @v3 as I,I,1);
 
3778
let $STR2= query_get_value(select @v4 as I,I,1);
 
3779
let $STR3= query_get_value(select @v5 as I,I,1);
 
3780
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
3781
dec $i;
 
3782
}
 
3783
INSERT INTO t1 VALUES (b'1');
 
3784
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
3785
--sorted_result
 
3786
SELECT HEX(c1) FROM t1;
 
3787
--sorted_result
 
3788
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
3789
--sorted_result
 
3790
SELECT OCT(c1) FROM t1;
 
3791
--sorted_result
 
3792
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
3793
--sorted_result
 
3794
SELECT BIN(c1) FROM t1;
 
3795
--sorted_result
 
3796
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
3797
--sorted_result
 
3798
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
3799
--sorted_result
 
3800
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
3801
--sorted_result
 
3802
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
3803
--sorted_result
 
3804
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
3805
--sorted_result
 
3806
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
3807
--sorted_result
 
3808
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
3809
--sorted_result
 
3810
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
3811
--error 1439
 
3812
CREATE TABLE t3 (c1 BIT(65));
 
3813
# Checking for bug #9571
 
3814
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
3815
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
3816
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
3817
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
3818
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3819
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3820
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3821
--sorted_result
 
3822
SELECT HEX(c1),HEX(c2) FROM t5;
 
3823
 
 
3824
#Insert permissible NULLs
 
3825
INSERT IGNORE INTO t5 VALUES(96,null);
 
3826
INSERT INTO t6 VALUES(null,null);
 
3827
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
3828
## Full table scan ##
 
3829
--sorted_result
 
3830
SELECT HEX(c1),HEX(c2) FROM t5;
 
3831
--sorted_result
 
3832
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
3833
--sorted_result
 
3834
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
3835
## Forward index scan, covering ##
 
3836
--sorted_result
 
3837
SELECT bin(c1) FROM t5;
 
3838
## Backward index scan, covering ##
 
3839
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
3840
## Forward index scan, non-covering ##
 
3841
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
3842
## Backward index scan, non-covering ##
 
3843
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
3844
## ref type access
 
3845
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
3846
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
3847
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
3848
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
3849
## Range access, ordered ##
 
3850
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
3851
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
3852
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
3853
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
3854
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
3855
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
3856
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
3857
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
3858
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
3859
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
3860
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
3861
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
3862
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
3863
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
3864
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
3865
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
3866
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
3867
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
3868
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
3869
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
3870
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
3871
## Range access, backwards scan ##
 
3872
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
3873
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
3874
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
3875
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
3876
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
3877
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
3878
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
3879
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
3880
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
3881
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
3882
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
3883
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
3884
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
3885
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
3886
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
3887
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
3888
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
3889
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
3890
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
3891
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
3892
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
3893
#Inserting different charachers
 
3894
CREATE TABLE t7(c1  BIT(16));
 
3895
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
3896
--sorted_result
 
3897
SELECT * FROM t7;
 
3898
############# UPDATE ###########
 
3899
 
 
3900
# Update order by limit
 
3901
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3902
 
 
3903
 
 
3904
# Update with arithmetic operations 
 
3905
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
3906
 
 
3907
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
3908
 
 
3909
 
 
3910
# Update with NULL ( NULL to number & number to NULL)
 
3911
UPDATE t6 SET c2=NULL WHERE c1=23;
 
3912
 
 
3913
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
3914
 
 
3915
 
 
3916
# Update range values
 
3917
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
3918
 
 
3919
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
3920
 
 
3921
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
3922
 
 
3923
 
 
3924
# Update outside range would be clipped to closest endpoints
 
3925
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
3926
 
 
3927
UPDATE t6 SET c2=-1 WHERE c1=94;
 
3928
 
 
3929
 
 
3930
# Update ignore on bad null error
 
3931
--sorted_result
 
3932
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
3933
SET SQL_MODE=STRICT_ALL_TABLES;
 
3934
--error ER_BAD_NULL_ERROR
 
3935
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
3936
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
3937
--sorted_result
 
3938
SELECT hex(c1),hex(c2) FROM t5;
 
3939
SET SQL_MODE=DEFAULT;
 
3940
 
 
3941
#Multi table update
 
3942
--disable_warnings
 
3943
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
3944
--enable_warnings
 
3945
--sorted_result
 
3946
SELECT hex(c1),hex(c2) FROM t5;
 
3947
 
 
3948
 
 
3949
# Update using various access methods
 
3950
TRUNCATE t5;
 
3951
TRUNCATE t6;
 
3952
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3953
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
3954
 
 
3955
# Update using Const
 
3956
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
3957
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
3958
--sorted_result
 
3959
SELECT hex(c1),hex(c2) FROM t5;
 
3960
 
 
3961
# Update using range
 
3962
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
3963
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
3964
--sorted_result
 
3965
SELECT hex(c1),hex(c2) FROM t5;
 
3966
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
3967
--disable_warnings
 
3968
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
3969
--enable_warnings
 
3970
--sorted_result
 
3971
SELECT hex(c1),hex(c2) FROM t5;
 
3972
 
 
3973
# Update using eq_ref
 
3974
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3975
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
3976
 
 
3977
############# DELETE ###########
 
3978
 
 
3979
TRUNCATE t5;
 
3980
TRUNCATE t6;
 
3981
 
 
3982
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
3983
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
3984
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
3985
 
 
3986
# Delete by order by limit
 
3987
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
3988
 
 
3989
 
 
3990
# Delete rows with NULL column
 
3991
DELETE FROM t6 WHERE c2=NULL;
 
3992
 
 
3993
 
 
3994
# Delete with range values 
 
3995
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
3996
 
 
3997
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
3998
 
 
3999
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
4000
 
 
4001
 
 
4002
#Multi table delete
 
4003
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4004
--sorted_result
 
4005
SELECT hex(c1),hex(c2) FROM t5;
 
4006
 
 
4007
 
 
4008
# Delete using various access methods
 
4009
TRUNCATE t5;
 
4010
TRUNCATE t6;
 
4011
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4012
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4013
 
 
4014
# Update using Const
 
4015
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4016
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
4017
--sorted_result
 
4018
SELECT hex(c1),hex(c2) FROM t5;
 
4019
 
 
4020
# Update using range
 
4021
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4022
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4023
--sorted_result
 
4024
SELECT hex(c1),hex(c2) FROM t5;
 
4025
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4026
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4027
--sorted_result
 
4028
SELECT hex(c1),hex(c2) FROM t5;
 
4029
 
 
4030
# Update using eq_ref
 
4031
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4032
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4033
 
 
4034
# Droping the tables
 
4035
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
4036
 
 
4037
####Checking the bit values####
 
4038
SELECT 0 + b'1'; 
 
4039
SELECT 0 + (1<<32);
 
4040
######### INSERT/SELECT######### 
 
4041
 
 
4042
#### Insert and select 32 bit data into the table####
 
4043
CREATE TABLE t1(c1 BIT(32));
 
4044
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
4045
let $i=32;
 
4046
while($i){
 
4047
let $j=$i/2;
 
4048
eval set @v1=$i;
 
4049
eval set @v2=$j;
 
4050
set @v3=repeat('1',@v1);
 
4051
let $STR0= query_get_value(select @v3 as I,I,1);
 
4052
eval INSERT INTO t1 VALUES (b'$STR0');
 
4053
set @v3=repeat('0',@v1);
 
4054
let $STR1= query_get_value(select @v3 as I,I,1);
 
4055
eval INSERT INTO t1 VALUES (b'$STR1');
 
4056
set @v3=repeat('01',@v2);
 
4057
let $STR2= query_get_value(select @v3 as I,I,1);
 
4058
eval INSERT INTO t1 VALUES (b'$STR2');
 
4059
set @v3=repeat('10',@v2);
 
4060
let $STR3= query_get_value(select @v3 as I,I,1);
 
4061
eval INSERT INTO t1 VALUES (b'$STR3');
 
4062
set @v3=repeat('1',@v1);
 
4063
set @v4=repeat('01',@v2);
 
4064
set @v5=repeat('10',@v2);
 
4065
let $STR0= query_get_value(select @v3 as I,I,1);
 
4066
let $STR2= query_get_value(select @v4 as I,I,1);
 
4067
let $STR3= query_get_value(select @v5 as I,I,1);
 
4068
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
4069
dec $i;
 
4070
}
 
4071
INSERT INTO t1 VALUES (b'1');
 
4072
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
4073
--sorted_result
 
4074
SELECT HEX(c1) FROM t1;
 
4075
--sorted_result
 
4076
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
4077
--sorted_result
 
4078
SELECT OCT(c1) FROM t1;
 
4079
--sorted_result
 
4080
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
4081
--sorted_result
 
4082
SELECT BIN(c1) FROM t1;
 
4083
--sorted_result
 
4084
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
4085
--sorted_result
 
4086
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
4087
--sorted_result
 
4088
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
4089
--sorted_result
 
4090
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
4091
--sorted_result
 
4092
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
4093
--sorted_result
 
4094
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
4095
--sorted_result
 
4096
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
4097
--sorted_result
 
4098
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
4099
--error 1439
 
4100
CREATE TABLE t3 (c1 BIT(65));
 
4101
# Checking for bug #9571
 
4102
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
4103
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
4104
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
4105
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
4106
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4107
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4108
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4109
--sorted_result
 
4110
SELECT HEX(c1),HEX(c2) FROM t5;
 
4111
 
 
4112
#Insert permissible NULLs
 
4113
INSERT IGNORE INTO t5 VALUES(96,null);
 
4114
INSERT INTO t6 VALUES(null,null);
 
4115
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
4116
## Full table scan ##
 
4117
--sorted_result
 
4118
SELECT HEX(c1),HEX(c2) FROM t5;
 
4119
--sorted_result
 
4120
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
4121
--sorted_result
 
4122
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
4123
## Forward index scan, covering ##
 
4124
--sorted_result
 
4125
SELECT bin(c1) FROM t5;
 
4126
## Backward index scan, covering ##
 
4127
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
4128
## Forward index scan, non-covering ##
 
4129
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
4130
## Backward index scan, non-covering ##
 
4131
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
4132
## ref type access
 
4133
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
4134
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
4135
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
4136
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
4137
## Range access, ordered ##
 
4138
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
4139
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
4140
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
4141
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
4142
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
4143
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
4144
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
4145
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
4146
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
4147
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
4148
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
4149
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
4150
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
4151
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
4152
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
4153
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
4154
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
4155
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
4156
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
4157
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
4158
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
4159
## Range access, backwards scan ##
 
4160
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
4161
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
4162
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
4163
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
4164
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
4165
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
4166
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
4167
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
4168
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
4169
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
4170
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
4171
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
4172
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
4173
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
4174
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
4175
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
4176
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
4177
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
4178
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
4179
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
4180
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
4181
#Inserting different charachers
 
4182
CREATE TABLE t7(c1  BIT(32));
 
4183
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
4184
--sorted_result
 
4185
SELECT * FROM t7;
 
4186
############# UPDATE ###########
 
4187
 
 
4188
# Update order by limit
 
4189
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4190
 
 
4191
 
 
4192
# Update with arithmetic operations 
 
4193
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
4194
 
 
4195
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
4196
 
 
4197
 
 
4198
# Update with NULL ( NULL to number & number to NULL)
 
4199
UPDATE t6 SET c2=NULL WHERE c1=23;
 
4200
 
 
4201
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
4202
 
 
4203
 
 
4204
# Update range values
 
4205
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
4206
 
 
4207
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
4208
 
 
4209
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
4210
 
 
4211
 
 
4212
# Update outside range would be clipped to closest endpoints
 
4213
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
4214
 
 
4215
UPDATE t6 SET c2=-1 WHERE c1=94;
 
4216
 
 
4217
 
 
4218
# Update ignore on bad null error
 
4219
--sorted_result
 
4220
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
4221
SET SQL_MODE=STRICT_ALL_TABLES;
 
4222
--error ER_BAD_NULL_ERROR
 
4223
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
4224
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
4225
--sorted_result
 
4226
SELECT hex(c1),hex(c2) FROM t5;
 
4227
SET SQL_MODE=DEFAULT;
 
4228
 
 
4229
#Multi table update
 
4230
--disable_warnings
 
4231
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4232
--enable_warnings
 
4233
--sorted_result
 
4234
SELECT hex(c1),hex(c2) FROM t5;
 
4235
 
 
4236
 
 
4237
# Update using various access methods
 
4238
TRUNCATE t5;
 
4239
TRUNCATE t6;
 
4240
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4241
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4242
 
 
4243
# Update using Const
 
4244
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4245
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
4246
--sorted_result
 
4247
SELECT hex(c1),hex(c2) FROM t5;
 
4248
 
 
4249
# Update using range
 
4250
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4251
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
4252
--sorted_result
 
4253
SELECT hex(c1),hex(c2) FROM t5;
 
4254
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4255
--disable_warnings
 
4256
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
4257
--enable_warnings
 
4258
--sorted_result
 
4259
SELECT hex(c1),hex(c2) FROM t5;
 
4260
 
 
4261
# Update using eq_ref
 
4262
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4263
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4264
 
 
4265
############# DELETE ###########
 
4266
 
 
4267
TRUNCATE t5;
 
4268
TRUNCATE t6;
 
4269
 
 
4270
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4271
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4272
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
4273
 
 
4274
# Delete by order by limit
 
4275
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4276
 
 
4277
 
 
4278
# Delete rows with NULL column
 
4279
DELETE FROM t6 WHERE c2=NULL;
 
4280
 
 
4281
 
 
4282
# Delete with range values 
 
4283
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
4284
 
 
4285
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
4286
 
 
4287
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
4288
 
 
4289
 
 
4290
#Multi table delete
 
4291
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4292
--sorted_result
 
4293
SELECT hex(c1),hex(c2) FROM t5;
 
4294
 
 
4295
 
 
4296
# Delete using various access methods
 
4297
TRUNCATE t5;
 
4298
TRUNCATE t6;
 
4299
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4300
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4301
 
 
4302
# Update using Const
 
4303
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4304
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
4305
--sorted_result
 
4306
SELECT hex(c1),hex(c2) FROM t5;
 
4307
 
 
4308
# Update using range
 
4309
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4310
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4311
--sorted_result
 
4312
SELECT hex(c1),hex(c2) FROM t5;
 
4313
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4314
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4315
--sorted_result
 
4316
SELECT hex(c1),hex(c2) FROM t5;
 
4317
 
 
4318
# Update using eq_ref
 
4319
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4320
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4321
 
 
4322
# Droping the tables
 
4323
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
4324
 
 
4325
####Checking the bit values####
 
4326
SELECT 0 + b'1'; 
 
4327
SELECT 0 + (1<<64);
 
4328
######### INSERT/SELECT######### 
 
4329
 
 
4330
#### Insert and select 64 bit data into the table####
 
4331
CREATE TABLE t1(c1 BIT(64));
 
4332
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
4333
let $i=64;
 
4334
while($i){
 
4335
let $j=$i/2;
 
4336
eval set @v1=$i;
 
4337
eval set @v2=$j;
 
4338
set @v3=repeat('1',@v1);
 
4339
let $STR0= query_get_value(select @v3 as I,I,1);
 
4340
eval INSERT INTO t1 VALUES (b'$STR0');
 
4341
set @v3=repeat('0',@v1);
 
4342
let $STR1= query_get_value(select @v3 as I,I,1);
 
4343
eval INSERT INTO t1 VALUES (b'$STR1');
 
4344
set @v3=repeat('01',@v2);
 
4345
let $STR2= query_get_value(select @v3 as I,I,1);
 
4346
eval INSERT INTO t1 VALUES (b'$STR2');
 
4347
set @v3=repeat('10',@v2);
 
4348
let $STR3= query_get_value(select @v3 as I,I,1);
 
4349
eval INSERT INTO t1 VALUES (b'$STR3');
 
4350
set @v3=repeat('1',@v1);
 
4351
set @v4=repeat('01',@v2);
 
4352
set @v5=repeat('10',@v2);
 
4353
let $STR0= query_get_value(select @v3 as I,I,1);
 
4354
let $STR2= query_get_value(select @v4 as I,I,1);
 
4355
let $STR3= query_get_value(select @v5 as I,I,1);
 
4356
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
4357
dec $i;
 
4358
}
 
4359
INSERT INTO t1 VALUES (b'1');
 
4360
INSERT INTO t2 VALUES (b'1', b'1', b'1');
 
4361
--sorted_result
 
4362
SELECT HEX(c1) FROM t1;
 
4363
--sorted_result
 
4364
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
4365
--sorted_result
 
4366
SELECT OCT(c1) FROM t1;
 
4367
--sorted_result
 
4368
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
4369
--sorted_result
 
4370
SELECT BIN(c1) FROM t1;
 
4371
--sorted_result
 
4372
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
4373
--sorted_result
 
4374
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
4375
--sorted_result
 
4376
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
4377
--sorted_result
 
4378
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
4379
--sorted_result
 
4380
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
4381
--sorted_result
 
4382
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
4383
--sorted_result
 
4384
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
4385
--sorted_result
 
4386
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
4387
--error 1439
 
4388
CREATE TABLE t3 (c1 BIT(65));
 
4389
# Checking for bug #9571
 
4390
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
4391
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
4392
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
4393
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
4394
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4395
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4396
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4397
--sorted_result
 
4398
SELECT HEX(c1),HEX(c2) FROM t5;
 
4399
 
 
4400
#Insert permissible NULLs
 
4401
INSERT IGNORE INTO t5 VALUES(96,null);
 
4402
INSERT INTO t6 VALUES(null,null);
 
4403
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
4404
## Full table scan ##
 
4405
--sorted_result
 
4406
SELECT HEX(c1),HEX(c2) FROM t5;
 
4407
--sorted_result
 
4408
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
4409
--sorted_result
 
4410
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
4411
## Forward index scan, covering ##
 
4412
--sorted_result
 
4413
SELECT bin(c1) FROM t5;
 
4414
## Backward index scan, covering ##
 
4415
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
4416
## Forward index scan, non-covering ##
 
4417
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
4418
## Backward index scan, non-covering ##
 
4419
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
4420
## ref type access
 
4421
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
4422
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
4423
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
4424
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
4425
## Range access, ordered ##
 
4426
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
4427
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
4428
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
4429
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
4430
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
4431
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
4432
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
4433
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
4434
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
4435
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
4436
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
4437
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
4438
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
4439
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
4440
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
4441
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
4442
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
4443
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
4444
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
4445
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
4446
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
4447
## Range access, backwards scan ##
 
4448
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
4449
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
4450
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
4451
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
4452
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
4453
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
4454
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
4455
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
4456
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
4457
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
4458
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
4459
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
4460
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
4461
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
4462
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
4463
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
4464
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
4465
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
4466
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
4467
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
4468
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
4469
#Inserting different charachers
 
4470
CREATE TABLE t7(c1  BIT(64));
 
4471
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
4472
--sorted_result
 
4473
SELECT * FROM t7;
 
4474
############# UPDATE ###########
 
4475
 
 
4476
# Update order by limit
 
4477
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4478
 
 
4479
 
 
4480
# Update with arithmetic operations 
 
4481
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
4482
 
 
4483
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
4484
 
 
4485
 
 
4486
# Update with NULL ( NULL to number & number to NULL)
 
4487
UPDATE t6 SET c2=NULL WHERE c1=23;
 
4488
 
 
4489
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
4490
 
 
4491
 
 
4492
# Update range values
 
4493
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
4494
 
 
4495
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
4496
 
 
4497
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
4498
 
 
4499
 
 
4500
# Update outside range would be clipped to closest endpoints
 
4501
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
4502
 
 
4503
UPDATE t6 SET c2=-1 WHERE c1=94;
 
4504
 
 
4505
 
 
4506
# Update ignore on bad null error
 
4507
--sorted_result
 
4508
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
4509
SET SQL_MODE=STRICT_ALL_TABLES;
 
4510
--error ER_BAD_NULL_ERROR
 
4511
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
4512
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
4513
--sorted_result
 
4514
SELECT hex(c1),hex(c2) FROM t5;
 
4515
SET SQL_MODE=DEFAULT;
 
4516
 
 
4517
#Multi table update
 
4518
--disable_warnings
 
4519
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4520
--enable_warnings
 
4521
--sorted_result
 
4522
SELECT hex(c1),hex(c2) FROM t5;
 
4523
 
 
4524
 
 
4525
# Update using various access methods
 
4526
TRUNCATE t5;
 
4527
TRUNCATE t6;
 
4528
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4529
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4530
 
 
4531
# Update using Const
 
4532
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4533
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
4534
--sorted_result
 
4535
SELECT hex(c1),hex(c2) FROM t5;
 
4536
 
 
4537
# Update using range
 
4538
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4539
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
4540
--sorted_result
 
4541
SELECT hex(c1),hex(c2) FROM t5;
 
4542
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4543
--disable_warnings
 
4544
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
4545
--enable_warnings
 
4546
--sorted_result
 
4547
SELECT hex(c1),hex(c2) FROM t5;
 
4548
 
 
4549
# Update using eq_ref
 
4550
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4551
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4552
 
 
4553
############# DELETE ###########
 
4554
 
 
4555
TRUNCATE t5;
 
4556
TRUNCATE t6;
 
4557
 
 
4558
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4559
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4560
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
4561
 
 
4562
# Delete by order by limit
 
4563
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4564
 
 
4565
 
 
4566
# Delete rows with NULL column
 
4567
DELETE FROM t6 WHERE c2=NULL;
 
4568
 
 
4569
 
 
4570
# Delete with range values 
 
4571
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
4572
 
 
4573
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
4574
 
 
4575
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
4576
 
 
4577
 
 
4578
#Multi table delete
 
4579
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4580
--sorted_result
 
4581
SELECT hex(c1),hex(c2) FROM t5;
 
4582
 
 
4583
 
 
4584
# Delete using various access methods
 
4585
TRUNCATE t5;
 
4586
TRUNCATE t6;
 
4587
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4588
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4589
 
 
4590
# Update using Const
 
4591
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4592
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
4593
--sorted_result
 
4594
SELECT hex(c1),hex(c2) FROM t5;
 
4595
 
 
4596
# Update using range
 
4597
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4598
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4599
--sorted_result
 
4600
SELECT hex(c1),hex(c2) FROM t5;
 
4601
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4602
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4603
--sorted_result
 
4604
SELECT hex(c1),hex(c2) FROM t5;
 
4605
 
 
4606
# Update using eq_ref
 
4607
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4608
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4609
 
 
4610
# Droping the tables
 
4611
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
4612
 
 
4613
####Checking the bit values####
 
4614
SELECT 0 + b'10'; 
 
4615
SELECT 0 + (10<<0);
 
4616
######### INSERT/SELECT######### 
 
4617
 
 
4618
#### Insert and select 0 bit data into the table####
 
4619
CREATE TABLE t1(c1 BIT(0));
 
4620
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
4621
let $i=0;
 
4622
while($i){
 
4623
let $j=$i/2;
 
4624
eval set @v1=$i;
 
4625
eval set @v2=$j;
 
4626
set @v3=repeat('1',@v1);
 
4627
let $STR0= query_get_value(select @v3 as I,I,1);
 
4628
eval INSERT INTO t1 VALUES (b'$STR0');
 
4629
set @v3=repeat('0',@v1);
 
4630
let $STR1= query_get_value(select @v3 as I,I,1);
 
4631
eval INSERT INTO t1 VALUES (b'$STR1');
 
4632
set @v3=repeat('01',@v2);
 
4633
let $STR2= query_get_value(select @v3 as I,I,1);
 
4634
eval INSERT INTO t1 VALUES (b'$STR2');
 
4635
set @v3=repeat('10',@v2);
 
4636
let $STR3= query_get_value(select @v3 as I,I,1);
 
4637
eval INSERT INTO t1 VALUES (b'$STR3');
 
4638
set @v3=repeat('1',@v1);
 
4639
set @v4=repeat('01',@v2);
 
4640
set @v5=repeat('10',@v2);
 
4641
let $STR0= query_get_value(select @v3 as I,I,1);
 
4642
let $STR2= query_get_value(select @v4 as I,I,1);
 
4643
let $STR3= query_get_value(select @v5 as I,I,1);
 
4644
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
4645
dec $i;
 
4646
}
 
4647
INSERT INTO t1 VALUES (b'10');
 
4648
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
4649
--sorted_result
 
4650
SELECT HEX(c1) FROM t1;
 
4651
--sorted_result
 
4652
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
4653
--sorted_result
 
4654
SELECT OCT(c1) FROM t1;
 
4655
--sorted_result
 
4656
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
4657
--sorted_result
 
4658
SELECT BIN(c1) FROM t1;
 
4659
--sorted_result
 
4660
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
4661
--sorted_result
 
4662
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
4663
--sorted_result
 
4664
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
4665
--sorted_result
 
4666
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
4667
--sorted_result
 
4668
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
4669
--sorted_result
 
4670
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
4671
--sorted_result
 
4672
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
4673
--sorted_result
 
4674
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
4675
--error 1439
 
4676
CREATE TABLE t3 (c1 BIT(65));
 
4677
# Checking for bug #9571
 
4678
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
4679
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
4680
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
4681
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
4682
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4683
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4684
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4685
--sorted_result
 
4686
SELECT HEX(c1),HEX(c2) FROM t5;
 
4687
 
 
4688
#Insert permissible NULLs
 
4689
INSERT IGNORE INTO t5 VALUES(96,null);
 
4690
INSERT INTO t6 VALUES(null,null);
 
4691
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
4692
## Full table scan ##
 
4693
--sorted_result
 
4694
SELECT HEX(c1),HEX(c2) FROM t5;
 
4695
--sorted_result
 
4696
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
4697
--sorted_result
 
4698
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
4699
## Forward index scan, covering ##
 
4700
--sorted_result
 
4701
SELECT bin(c1) FROM t5;
 
4702
## Backward index scan, covering ##
 
4703
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
4704
## Forward index scan, non-covering ##
 
4705
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
4706
## Backward index scan, non-covering ##
 
4707
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
4708
## ref type access
 
4709
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
4710
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
4711
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
4712
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
4713
## Range access, ordered ##
 
4714
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
4715
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
4716
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
4717
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
4718
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
4719
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
4720
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
4721
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
4722
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
4723
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
4724
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
4725
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
4726
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
4727
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
4728
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
4729
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
4730
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
4731
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
4732
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
4733
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
4734
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
4735
## Range access, backwards scan ##
 
4736
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
4737
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
4738
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
4739
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
4740
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
4741
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
4742
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
4743
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
4744
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
4745
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
4746
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
4747
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
4748
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
4749
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
4750
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
4751
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
4752
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
4753
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
4754
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
4755
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
4756
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
4757
#Inserting different charachers
 
4758
CREATE TABLE t7(c1  BIT(0));
 
4759
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
4760
--sorted_result
 
4761
SELECT * FROM t7;
 
4762
############# UPDATE ###########
 
4763
 
 
4764
# Update order by limit
 
4765
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4766
 
 
4767
 
 
4768
# Update with arithmetic operations 
 
4769
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
4770
 
 
4771
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
4772
 
 
4773
 
 
4774
# Update with NULL ( NULL to number & number to NULL)
 
4775
UPDATE t6 SET c2=NULL WHERE c1=23;
 
4776
 
 
4777
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
4778
 
 
4779
 
 
4780
# Update range values
 
4781
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
4782
 
 
4783
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
4784
 
 
4785
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
4786
 
 
4787
 
 
4788
# Update outside range would be clipped to closest endpoints
 
4789
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
4790
 
 
4791
UPDATE t6 SET c2=-1 WHERE c1=94;
 
4792
 
 
4793
 
 
4794
# Update ignore on bad null error
 
4795
--sorted_result
 
4796
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
4797
SET SQL_MODE=STRICT_ALL_TABLES;
 
4798
--error ER_BAD_NULL_ERROR
 
4799
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
4800
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
4801
--sorted_result
 
4802
SELECT hex(c1),hex(c2) FROM t5;
 
4803
SET SQL_MODE=DEFAULT;
 
4804
 
 
4805
#Multi table update
 
4806
--disable_warnings
 
4807
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4808
--enable_warnings
 
4809
--sorted_result
 
4810
SELECT hex(c1),hex(c2) FROM t5;
 
4811
 
 
4812
 
 
4813
# Update using various access methods
 
4814
TRUNCATE t5;
 
4815
TRUNCATE t6;
 
4816
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4817
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4818
 
 
4819
# Update using Const
 
4820
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4821
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
4822
--sorted_result
 
4823
SELECT hex(c1),hex(c2) FROM t5;
 
4824
 
 
4825
# Update using range
 
4826
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4827
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
4828
--sorted_result
 
4829
SELECT hex(c1),hex(c2) FROM t5;
 
4830
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4831
--disable_warnings
 
4832
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
4833
--enable_warnings
 
4834
--sorted_result
 
4835
SELECT hex(c1),hex(c2) FROM t5;
 
4836
 
 
4837
# Update using eq_ref
 
4838
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4839
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4840
 
 
4841
############# DELETE ###########
 
4842
 
 
4843
TRUNCATE t5;
 
4844
TRUNCATE t6;
 
4845
 
 
4846
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4847
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4848
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
4849
 
 
4850
# Delete by order by limit
 
4851
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
4852
 
 
4853
 
 
4854
# Delete rows with NULL column
 
4855
DELETE FROM t6 WHERE c2=NULL;
 
4856
 
 
4857
 
 
4858
# Delete with range values 
 
4859
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
4860
 
 
4861
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
4862
 
 
4863
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
4864
 
 
4865
 
 
4866
#Multi table delete
 
4867
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
4868
--sorted_result
 
4869
SELECT hex(c1),hex(c2) FROM t5;
 
4870
 
 
4871
 
 
4872
# Delete using various access methods
 
4873
TRUNCATE t5;
 
4874
TRUNCATE t6;
 
4875
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4876
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
4877
 
 
4878
# Update using Const
 
4879
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
4880
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
4881
--sorted_result
 
4882
SELECT hex(c1),hex(c2) FROM t5;
 
4883
 
 
4884
# Update using range
 
4885
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4886
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
4887
--sorted_result
 
4888
SELECT hex(c1),hex(c2) FROM t5;
 
4889
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4890
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
4891
--sorted_result
 
4892
SELECT hex(c1),hex(c2) FROM t5;
 
4893
 
 
4894
# Update using eq_ref
 
4895
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4896
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
4897
 
 
4898
# Droping the tables
 
4899
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
4900
 
 
4901
####Checking the bit values####
 
4902
SELECT 0 + b'10'; 
 
4903
SELECT 0 + (10<<1);
 
4904
######### INSERT/SELECT######### 
 
4905
 
 
4906
#### Insert and select 1 bit data into the table####
 
4907
CREATE TABLE t1(c1 BIT(1));
 
4908
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
4909
let $i=1;
 
4910
while($i){
 
4911
let $j=$i/2;
 
4912
eval set @v1=$i;
 
4913
eval set @v2=$j;
 
4914
set @v3=repeat('1',@v1);
 
4915
let $STR0= query_get_value(select @v3 as I,I,1);
 
4916
eval INSERT INTO t1 VALUES (b'$STR0');
 
4917
set @v3=repeat('0',@v1);
 
4918
let $STR1= query_get_value(select @v3 as I,I,1);
 
4919
eval INSERT INTO t1 VALUES (b'$STR1');
 
4920
set @v3=repeat('01',@v2);
 
4921
let $STR2= query_get_value(select @v3 as I,I,1);
 
4922
eval INSERT INTO t1 VALUES (b'$STR2');
 
4923
set @v3=repeat('10',@v2);
 
4924
let $STR3= query_get_value(select @v3 as I,I,1);
 
4925
eval INSERT INTO t1 VALUES (b'$STR3');
 
4926
set @v3=repeat('1',@v1);
 
4927
set @v4=repeat('01',@v2);
 
4928
set @v5=repeat('10',@v2);
 
4929
let $STR0= query_get_value(select @v3 as I,I,1);
 
4930
let $STR2= query_get_value(select @v4 as I,I,1);
 
4931
let $STR3= query_get_value(select @v5 as I,I,1);
 
4932
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
4933
dec $i;
 
4934
}
 
4935
INSERT INTO t1 VALUES (b'10');
 
4936
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
4937
--sorted_result
 
4938
SELECT HEX(c1) FROM t1;
 
4939
--sorted_result
 
4940
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
4941
--sorted_result
 
4942
SELECT OCT(c1) FROM t1;
 
4943
--sorted_result
 
4944
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
4945
--sorted_result
 
4946
SELECT BIN(c1) FROM t1;
 
4947
--sorted_result
 
4948
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
4949
--sorted_result
 
4950
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
4951
--sorted_result
 
4952
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
4953
--sorted_result
 
4954
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
4955
--sorted_result
 
4956
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
4957
--sorted_result
 
4958
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
4959
--sorted_result
 
4960
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
4961
--sorted_result
 
4962
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
4963
--error 1439
 
4964
CREATE TABLE t3 (c1 BIT(65));
 
4965
# Checking for bug #9571
 
4966
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
4967
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
4968
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
4969
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
4970
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
4971
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4972
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
4973
--sorted_result
 
4974
SELECT HEX(c1),HEX(c2) FROM t5;
 
4975
 
 
4976
#Insert permissible NULLs
 
4977
INSERT IGNORE INTO t5 VALUES(96,null);
 
4978
INSERT INTO t6 VALUES(null,null);
 
4979
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
4980
## Full table scan ##
 
4981
--sorted_result
 
4982
SELECT HEX(c1),HEX(c2) FROM t5;
 
4983
--sorted_result
 
4984
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
4985
--sorted_result
 
4986
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
4987
## Forward index scan, covering ##
 
4988
--sorted_result
 
4989
SELECT bin(c1) FROM t5;
 
4990
## Backward index scan, covering ##
 
4991
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
4992
## Forward index scan, non-covering ##
 
4993
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
4994
## Backward index scan, non-covering ##
 
4995
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
4996
## ref type access
 
4997
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
4998
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
4999
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
5000
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
5001
## Range access, ordered ##
 
5002
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
5003
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
5004
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
5005
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
5006
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
5007
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
5008
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
5009
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
5010
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
5011
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
5012
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
5013
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
5014
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
5015
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
5016
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
5017
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
5018
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
5019
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
5020
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
5021
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
5022
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
5023
## Range access, backwards scan ##
 
5024
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
5025
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
5026
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
5027
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
5028
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
5029
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
5030
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
5031
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
5032
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
5033
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
5034
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
5035
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
5036
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
5037
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
5038
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
5039
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
5040
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
5041
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
5042
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
5043
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
5044
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
5045
#Inserting different charachers
 
5046
CREATE TABLE t7(c1  BIT(1));
 
5047
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
5048
--sorted_result
 
5049
SELECT * FROM t7;
 
5050
############# UPDATE ###########
 
5051
 
 
5052
# Update order by limit
 
5053
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5054
 
 
5055
 
 
5056
# Update with arithmetic operations 
 
5057
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
5058
 
 
5059
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
5060
 
 
5061
 
 
5062
# Update with NULL ( NULL to number & number to NULL)
 
5063
UPDATE t6 SET c2=NULL WHERE c1=23;
 
5064
 
 
5065
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
5066
 
 
5067
 
 
5068
# Update range values
 
5069
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
5070
 
 
5071
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
5072
 
 
5073
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
5074
 
 
5075
 
 
5076
# Update outside range would be clipped to closest endpoints
 
5077
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
5078
 
 
5079
UPDATE t6 SET c2=-1 WHERE c1=94;
 
5080
 
 
5081
 
 
5082
# Update ignore on bad null error
 
5083
--sorted_result
 
5084
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
5085
SET SQL_MODE=STRICT_ALL_TABLES;
 
5086
--error ER_BAD_NULL_ERROR
 
5087
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
5088
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
5089
--sorted_result
 
5090
SELECT hex(c1),hex(c2) FROM t5;
 
5091
SET SQL_MODE=DEFAULT;
 
5092
 
 
5093
#Multi table update
 
5094
--disable_warnings
 
5095
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5096
--enable_warnings
 
5097
--sorted_result
 
5098
SELECT hex(c1),hex(c2) FROM t5;
 
5099
 
 
5100
 
 
5101
# Update using various access methods
 
5102
TRUNCATE t5;
 
5103
TRUNCATE t6;
 
5104
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5105
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5106
 
 
5107
# Update using Const
 
5108
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5109
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
5110
--sorted_result
 
5111
SELECT hex(c1),hex(c2) FROM t5;
 
5112
 
 
5113
# Update using range
 
5114
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5115
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
5116
--sorted_result
 
5117
SELECT hex(c1),hex(c2) FROM t5;
 
5118
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5119
--disable_warnings
 
5120
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
5121
--enable_warnings
 
5122
--sorted_result
 
5123
SELECT hex(c1),hex(c2) FROM t5;
 
5124
 
 
5125
# Update using eq_ref
 
5126
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5127
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5128
 
 
5129
############# DELETE ###########
 
5130
 
 
5131
TRUNCATE t5;
 
5132
TRUNCATE t6;
 
5133
 
 
5134
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5135
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5136
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
5137
 
 
5138
# Delete by order by limit
 
5139
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5140
 
 
5141
 
 
5142
# Delete rows with NULL column
 
5143
DELETE FROM t6 WHERE c2=NULL;
 
5144
 
 
5145
 
 
5146
# Delete with range values 
 
5147
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
5148
 
 
5149
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
5150
 
 
5151
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
5152
 
 
5153
 
 
5154
#Multi table delete
 
5155
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5156
--sorted_result
 
5157
SELECT hex(c1),hex(c2) FROM t5;
 
5158
 
 
5159
 
 
5160
# Delete using various access methods
 
5161
TRUNCATE t5;
 
5162
TRUNCATE t6;
 
5163
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5164
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5165
 
 
5166
# Update using Const
 
5167
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5168
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
5169
--sorted_result
 
5170
SELECT hex(c1),hex(c2) FROM t5;
 
5171
 
 
5172
# Update using range
 
5173
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5174
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5175
--sorted_result
 
5176
SELECT hex(c1),hex(c2) FROM t5;
 
5177
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5178
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5179
--sorted_result
 
5180
SELECT hex(c1),hex(c2) FROM t5;
 
5181
 
 
5182
# Update using eq_ref
 
5183
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5184
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5185
 
 
5186
# Droping the tables
 
5187
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
5188
 
 
5189
####Checking the bit values####
 
5190
SELECT 0 + b'10'; 
 
5191
SELECT 0 + (10<<2);
 
5192
######### INSERT/SELECT######### 
 
5193
 
 
5194
#### Insert and select 2 bit data into the table####
 
5195
CREATE TABLE t1(c1 BIT(2));
 
5196
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
5197
let $i=2;
 
5198
while($i){
 
5199
let $j=$i/2;
 
5200
eval set @v1=$i;
 
5201
eval set @v2=$j;
 
5202
set @v3=repeat('1',@v1);
 
5203
let $STR0= query_get_value(select @v3 as I,I,1);
 
5204
eval INSERT INTO t1 VALUES (b'$STR0');
 
5205
set @v3=repeat('0',@v1);
 
5206
let $STR1= query_get_value(select @v3 as I,I,1);
 
5207
eval INSERT INTO t1 VALUES (b'$STR1');
 
5208
set @v3=repeat('01',@v2);
 
5209
let $STR2= query_get_value(select @v3 as I,I,1);
 
5210
eval INSERT INTO t1 VALUES (b'$STR2');
 
5211
set @v3=repeat('10',@v2);
 
5212
let $STR3= query_get_value(select @v3 as I,I,1);
 
5213
eval INSERT INTO t1 VALUES (b'$STR3');
 
5214
set @v3=repeat('1',@v1);
 
5215
set @v4=repeat('01',@v2);
 
5216
set @v5=repeat('10',@v2);
 
5217
let $STR0= query_get_value(select @v3 as I,I,1);
 
5218
let $STR2= query_get_value(select @v4 as I,I,1);
 
5219
let $STR3= query_get_value(select @v5 as I,I,1);
 
5220
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
5221
dec $i;
 
5222
}
 
5223
INSERT INTO t1 VALUES (b'10');
 
5224
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
5225
--sorted_result
 
5226
SELECT HEX(c1) FROM t1;
 
5227
--sorted_result
 
5228
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
5229
--sorted_result
 
5230
SELECT OCT(c1) FROM t1;
 
5231
--sorted_result
 
5232
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
5233
--sorted_result
 
5234
SELECT BIN(c1) FROM t1;
 
5235
--sorted_result
 
5236
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
5237
--sorted_result
 
5238
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
5239
--sorted_result
 
5240
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
5241
--sorted_result
 
5242
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
5243
--sorted_result
 
5244
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
5245
--sorted_result
 
5246
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
5247
--sorted_result
 
5248
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
5249
--sorted_result
 
5250
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
5251
--error 1439
 
5252
CREATE TABLE t3 (c1 BIT(65));
 
5253
# Checking for bug #9571
 
5254
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
5255
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
5256
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
5257
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
5258
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5259
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5260
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5261
--sorted_result
 
5262
SELECT HEX(c1),HEX(c2) FROM t5;
 
5263
 
 
5264
#Insert permissible NULLs
 
5265
INSERT IGNORE INTO t5 VALUES(96,null);
 
5266
INSERT INTO t6 VALUES(null,null);
 
5267
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
5268
## Full table scan ##
 
5269
--sorted_result
 
5270
SELECT HEX(c1),HEX(c2) FROM t5;
 
5271
--sorted_result
 
5272
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
5273
--sorted_result
 
5274
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
5275
## Forward index scan, covering ##
 
5276
--sorted_result
 
5277
SELECT bin(c1) FROM t5;
 
5278
## Backward index scan, covering ##
 
5279
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
5280
## Forward index scan, non-covering ##
 
5281
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
5282
## Backward index scan, non-covering ##
 
5283
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
5284
## ref type access
 
5285
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
5286
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
5287
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
5288
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
5289
## Range access, ordered ##
 
5290
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
5291
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
5292
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
5293
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
5294
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
5295
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
5296
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
5297
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
5298
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
5299
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
5300
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
5301
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
5302
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
5303
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
5304
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
5305
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
5306
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
5307
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
5308
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
5309
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
5310
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
5311
## Range access, backwards scan ##
 
5312
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
5313
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
5314
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
5315
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
5316
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
5317
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
5318
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
5319
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
5320
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
5321
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
5322
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
5323
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
5324
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
5325
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
5326
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
5327
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
5328
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
5329
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
5330
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
5331
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
5332
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
5333
#Inserting different charachers
 
5334
CREATE TABLE t7(c1  BIT(2));
 
5335
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
5336
--sorted_result
 
5337
SELECT * FROM t7;
 
5338
############# UPDATE ###########
 
5339
 
 
5340
# Update order by limit
 
5341
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5342
 
 
5343
 
 
5344
# Update with arithmetic operations 
 
5345
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
5346
 
 
5347
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
5348
 
 
5349
 
 
5350
# Update with NULL ( NULL to number & number to NULL)
 
5351
UPDATE t6 SET c2=NULL WHERE c1=23;
 
5352
 
 
5353
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
5354
 
 
5355
 
 
5356
# Update range values
 
5357
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
5358
 
 
5359
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
5360
 
 
5361
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
5362
 
 
5363
 
 
5364
# Update outside range would be clipped to closest endpoints
 
5365
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
5366
 
 
5367
UPDATE t6 SET c2=-1 WHERE c1=94;
 
5368
 
 
5369
 
 
5370
# Update ignore on bad null error
 
5371
--sorted_result
 
5372
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
5373
SET SQL_MODE=STRICT_ALL_TABLES;
 
5374
--error ER_BAD_NULL_ERROR
 
5375
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
5376
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
5377
--sorted_result
 
5378
SELECT hex(c1),hex(c2) FROM t5;
 
5379
SET SQL_MODE=DEFAULT;
 
5380
 
 
5381
#Multi table update
 
5382
--disable_warnings
 
5383
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5384
--enable_warnings
 
5385
--sorted_result
 
5386
SELECT hex(c1),hex(c2) FROM t5;
 
5387
 
 
5388
 
 
5389
# Update using various access methods
 
5390
TRUNCATE t5;
 
5391
TRUNCATE t6;
 
5392
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5393
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5394
 
 
5395
# Update using Const
 
5396
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5397
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
5398
--sorted_result
 
5399
SELECT hex(c1),hex(c2) FROM t5;
 
5400
 
 
5401
# Update using range
 
5402
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5403
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
5404
--sorted_result
 
5405
SELECT hex(c1),hex(c2) FROM t5;
 
5406
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5407
--disable_warnings
 
5408
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
5409
--enable_warnings
 
5410
--sorted_result
 
5411
SELECT hex(c1),hex(c2) FROM t5;
 
5412
 
 
5413
# Update using eq_ref
 
5414
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5415
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5416
 
 
5417
############# DELETE ###########
 
5418
 
 
5419
TRUNCATE t5;
 
5420
TRUNCATE t6;
 
5421
 
 
5422
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5423
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5424
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
5425
 
 
5426
# Delete by order by limit
 
5427
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5428
 
 
5429
 
 
5430
# Delete rows with NULL column
 
5431
DELETE FROM t6 WHERE c2=NULL;
 
5432
 
 
5433
 
 
5434
# Delete with range values 
 
5435
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
5436
 
 
5437
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
5438
 
 
5439
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
5440
 
 
5441
 
 
5442
#Multi table delete
 
5443
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5444
--sorted_result
 
5445
SELECT hex(c1),hex(c2) FROM t5;
 
5446
 
 
5447
 
 
5448
# Delete using various access methods
 
5449
TRUNCATE t5;
 
5450
TRUNCATE t6;
 
5451
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5452
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5453
 
 
5454
# Update using Const
 
5455
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5456
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
5457
--sorted_result
 
5458
SELECT hex(c1),hex(c2) FROM t5;
 
5459
 
 
5460
# Update using range
 
5461
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5462
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5463
--sorted_result
 
5464
SELECT hex(c1),hex(c2) FROM t5;
 
5465
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5466
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5467
--sorted_result
 
5468
SELECT hex(c1),hex(c2) FROM t5;
 
5469
 
 
5470
# Update using eq_ref
 
5471
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5472
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5473
 
 
5474
# Droping the tables
 
5475
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
5476
 
 
5477
####Checking the bit values####
 
5478
SELECT 0 + b'10'; 
 
5479
SELECT 0 + (10<<4);
 
5480
######### INSERT/SELECT######### 
 
5481
 
 
5482
#### Insert and select 4 bit data into the table####
 
5483
CREATE TABLE t1(c1 BIT(4));
 
5484
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
5485
let $i=4;
 
5486
while($i){
 
5487
let $j=$i/2;
 
5488
eval set @v1=$i;
 
5489
eval set @v2=$j;
 
5490
set @v3=repeat('1',@v1);
 
5491
let $STR0= query_get_value(select @v3 as I,I,1);
 
5492
eval INSERT INTO t1 VALUES (b'$STR0');
 
5493
set @v3=repeat('0',@v1);
 
5494
let $STR1= query_get_value(select @v3 as I,I,1);
 
5495
eval INSERT INTO t1 VALUES (b'$STR1');
 
5496
set @v3=repeat('01',@v2);
 
5497
let $STR2= query_get_value(select @v3 as I,I,1);
 
5498
eval INSERT INTO t1 VALUES (b'$STR2');
 
5499
set @v3=repeat('10',@v2);
 
5500
let $STR3= query_get_value(select @v3 as I,I,1);
 
5501
eval INSERT INTO t1 VALUES (b'$STR3');
 
5502
set @v3=repeat('1',@v1);
 
5503
set @v4=repeat('01',@v2);
 
5504
set @v5=repeat('10',@v2);
 
5505
let $STR0= query_get_value(select @v3 as I,I,1);
 
5506
let $STR2= query_get_value(select @v4 as I,I,1);
 
5507
let $STR3= query_get_value(select @v5 as I,I,1);
 
5508
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
5509
dec $i;
 
5510
}
 
5511
INSERT INTO t1 VALUES (b'10');
 
5512
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
5513
--sorted_result
 
5514
SELECT HEX(c1) FROM t1;
 
5515
--sorted_result
 
5516
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
5517
--sorted_result
 
5518
SELECT OCT(c1) FROM t1;
 
5519
--sorted_result
 
5520
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
5521
--sorted_result
 
5522
SELECT BIN(c1) FROM t1;
 
5523
--sorted_result
 
5524
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
5525
--sorted_result
 
5526
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
5527
--sorted_result
 
5528
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
5529
--sorted_result
 
5530
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
5531
--sorted_result
 
5532
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
5533
--sorted_result
 
5534
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
5535
--sorted_result
 
5536
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
5537
--sorted_result
 
5538
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
5539
--error 1439
 
5540
CREATE TABLE t3 (c1 BIT(65));
 
5541
# Checking for bug #9571
 
5542
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
5543
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
5544
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
5545
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
5546
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5547
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5548
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5549
--sorted_result
 
5550
SELECT HEX(c1),HEX(c2) FROM t5;
 
5551
 
 
5552
#Insert permissible NULLs
 
5553
INSERT IGNORE INTO t5 VALUES(96,null);
 
5554
INSERT INTO t6 VALUES(null,null);
 
5555
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
5556
## Full table scan ##
 
5557
--sorted_result
 
5558
SELECT HEX(c1),HEX(c2) FROM t5;
 
5559
--sorted_result
 
5560
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
5561
--sorted_result
 
5562
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
5563
## Forward index scan, covering ##
 
5564
--sorted_result
 
5565
SELECT bin(c1) FROM t5;
 
5566
## Backward index scan, covering ##
 
5567
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
5568
## Forward index scan, non-covering ##
 
5569
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
5570
## Backward index scan, non-covering ##
 
5571
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
5572
## ref type access
 
5573
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
5574
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
5575
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
5576
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
5577
## Range access, ordered ##
 
5578
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
5579
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
5580
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
5581
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
5582
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
5583
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
5584
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
5585
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
5586
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
5587
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
5588
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
5589
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
5590
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
5591
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
5592
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
5593
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
5594
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
5595
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
5596
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
5597
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
5598
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
5599
## Range access, backwards scan ##
 
5600
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
5601
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
5602
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
5603
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
5604
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
5605
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
5606
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
5607
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
5608
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
5609
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
5610
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
5611
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
5612
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
5613
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
5614
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
5615
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
5616
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
5617
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
5618
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
5619
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
5620
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
5621
#Inserting different charachers
 
5622
CREATE TABLE t7(c1  BIT(4));
 
5623
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
5624
--sorted_result
 
5625
SELECT * FROM t7;
 
5626
############# UPDATE ###########
 
5627
 
 
5628
# Update order by limit
 
5629
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5630
 
 
5631
 
 
5632
# Update with arithmetic operations 
 
5633
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
5634
 
 
5635
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
5636
 
 
5637
 
 
5638
# Update with NULL ( NULL to number & number to NULL)
 
5639
UPDATE t6 SET c2=NULL WHERE c1=23;
 
5640
 
 
5641
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
5642
 
 
5643
 
 
5644
# Update range values
 
5645
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
5646
 
 
5647
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
5648
 
 
5649
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
5650
 
 
5651
 
 
5652
# Update outside range would be clipped to closest endpoints
 
5653
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
5654
 
 
5655
UPDATE t6 SET c2=-1 WHERE c1=94;
 
5656
 
 
5657
 
 
5658
# Update ignore on bad null error
 
5659
--sorted_result
 
5660
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
5661
SET SQL_MODE=STRICT_ALL_TABLES;
 
5662
--error ER_BAD_NULL_ERROR
 
5663
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
5664
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
5665
--sorted_result
 
5666
SELECT hex(c1),hex(c2) FROM t5;
 
5667
SET SQL_MODE=DEFAULT;
 
5668
 
 
5669
#Multi table update
 
5670
--disable_warnings
 
5671
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5672
--enable_warnings
 
5673
--sorted_result
 
5674
SELECT hex(c1),hex(c2) FROM t5;
 
5675
 
 
5676
 
 
5677
# Update using various access methods
 
5678
TRUNCATE t5;
 
5679
TRUNCATE t6;
 
5680
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5681
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5682
 
 
5683
# Update using Const
 
5684
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5685
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
5686
--sorted_result
 
5687
SELECT hex(c1),hex(c2) FROM t5;
 
5688
 
 
5689
# Update using range
 
5690
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5691
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
5692
--sorted_result
 
5693
SELECT hex(c1),hex(c2) FROM t5;
 
5694
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5695
--disable_warnings
 
5696
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
5697
--enable_warnings
 
5698
--sorted_result
 
5699
SELECT hex(c1),hex(c2) FROM t5;
 
5700
 
 
5701
# Update using eq_ref
 
5702
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5703
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5704
 
 
5705
############# DELETE ###########
 
5706
 
 
5707
TRUNCATE t5;
 
5708
TRUNCATE t6;
 
5709
 
 
5710
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5711
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5712
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
5713
 
 
5714
# Delete by order by limit
 
5715
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5716
 
 
5717
 
 
5718
# Delete rows with NULL column
 
5719
DELETE FROM t6 WHERE c2=NULL;
 
5720
 
 
5721
 
 
5722
# Delete with range values 
 
5723
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
5724
 
 
5725
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
5726
 
 
5727
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
5728
 
 
5729
 
 
5730
#Multi table delete
 
5731
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5732
--sorted_result
 
5733
SELECT hex(c1),hex(c2) FROM t5;
 
5734
 
 
5735
 
 
5736
# Delete using various access methods
 
5737
TRUNCATE t5;
 
5738
TRUNCATE t6;
 
5739
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5740
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5741
 
 
5742
# Update using Const
 
5743
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5744
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
5745
--sorted_result
 
5746
SELECT hex(c1),hex(c2) FROM t5;
 
5747
 
 
5748
# Update using range
 
5749
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5750
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5751
--sorted_result
 
5752
SELECT hex(c1),hex(c2) FROM t5;
 
5753
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5754
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5755
--sorted_result
 
5756
SELECT hex(c1),hex(c2) FROM t5;
 
5757
 
 
5758
# Update using eq_ref
 
5759
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5760
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5761
 
 
5762
# Droping the tables
 
5763
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
5764
 
 
5765
####Checking the bit values####
 
5766
SELECT 0 + b'10'; 
 
5767
SELECT 0 + (10<<8);
 
5768
######### INSERT/SELECT######### 
 
5769
 
 
5770
#### Insert and select 8 bit data into the table####
 
5771
CREATE TABLE t1(c1 BIT(8));
 
5772
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
5773
let $i=8;
 
5774
while($i){
 
5775
let $j=$i/2;
 
5776
eval set @v1=$i;
 
5777
eval set @v2=$j;
 
5778
set @v3=repeat('1',@v1);
 
5779
let $STR0= query_get_value(select @v3 as I,I,1);
 
5780
eval INSERT INTO t1 VALUES (b'$STR0');
 
5781
set @v3=repeat('0',@v1);
 
5782
let $STR1= query_get_value(select @v3 as I,I,1);
 
5783
eval INSERT INTO t1 VALUES (b'$STR1');
 
5784
set @v3=repeat('01',@v2);
 
5785
let $STR2= query_get_value(select @v3 as I,I,1);
 
5786
eval INSERT INTO t1 VALUES (b'$STR2');
 
5787
set @v3=repeat('10',@v2);
 
5788
let $STR3= query_get_value(select @v3 as I,I,1);
 
5789
eval INSERT INTO t1 VALUES (b'$STR3');
 
5790
set @v3=repeat('1',@v1);
 
5791
set @v4=repeat('01',@v2);
 
5792
set @v5=repeat('10',@v2);
 
5793
let $STR0= query_get_value(select @v3 as I,I,1);
 
5794
let $STR2= query_get_value(select @v4 as I,I,1);
 
5795
let $STR3= query_get_value(select @v5 as I,I,1);
 
5796
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
5797
dec $i;
 
5798
}
 
5799
INSERT INTO t1 VALUES (b'10');
 
5800
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
5801
--sorted_result
 
5802
SELECT HEX(c1) FROM t1;
 
5803
--sorted_result
 
5804
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
5805
--sorted_result
 
5806
SELECT OCT(c1) FROM t1;
 
5807
--sorted_result
 
5808
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
5809
--sorted_result
 
5810
SELECT BIN(c1) FROM t1;
 
5811
--sorted_result
 
5812
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
5813
--sorted_result
 
5814
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
5815
--sorted_result
 
5816
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
5817
--sorted_result
 
5818
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
5819
--sorted_result
 
5820
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
5821
--sorted_result
 
5822
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
5823
--sorted_result
 
5824
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
5825
--sorted_result
 
5826
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
5827
--error 1439
 
5828
CREATE TABLE t3 (c1 BIT(65));
 
5829
# Checking for bug #9571
 
5830
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
5831
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
5832
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
5833
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
5834
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5835
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5836
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
5837
--sorted_result
 
5838
SELECT HEX(c1),HEX(c2) FROM t5;
 
5839
 
 
5840
#Insert permissible NULLs
 
5841
INSERT IGNORE INTO t5 VALUES(96,null);
 
5842
INSERT INTO t6 VALUES(null,null);
 
5843
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
5844
## Full table scan ##
 
5845
--sorted_result
 
5846
SELECT HEX(c1),HEX(c2) FROM t5;
 
5847
--sorted_result
 
5848
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
5849
--sorted_result
 
5850
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
5851
## Forward index scan, covering ##
 
5852
--sorted_result
 
5853
SELECT bin(c1) FROM t5;
 
5854
## Backward index scan, covering ##
 
5855
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
5856
## Forward index scan, non-covering ##
 
5857
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
5858
## Backward index scan, non-covering ##
 
5859
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
5860
## ref type access
 
5861
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
5862
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
5863
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
5864
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
5865
## Range access, ordered ##
 
5866
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
5867
 
 
5868
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
5869
 
 
5870
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
5871
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
5872
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
5873
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
5874
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
5875
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
5876
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
5877
 
 
5878
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
5879
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
5880
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
5881
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
5882
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
5883
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
5884
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
5885
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
5886
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
5887
## Range access, backwards scan ##
 
5888
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
5889
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
5890
 
 
5891
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
5892
 
 
5893
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
5894
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
5895
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
5896
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
5897
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
5898
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
5899
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
5900
 
 
5901
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
5902
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
5903
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
5904
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
5905
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
5906
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
5907
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
5908
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
5909
#Inserting different charachers
 
5910
CREATE TABLE t7(c1  BIT(8));
 
5911
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
5912
--sorted_result
 
5913
SELECT * FROM t7;
 
5914
############# UPDATE ###########
 
5915
 
 
5916
# Update order by limit
 
5917
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
5918
 
 
5919
 
 
5920
# Update with arithmetic operations 
 
5921
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
5922
 
 
5923
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
5924
 
 
5925
 
 
5926
# Update with NULL ( NULL to number & number to NULL)
 
5927
UPDATE t6 SET c2=NULL WHERE c1=23;
 
5928
 
 
5929
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
5930
 
 
5931
 
 
5932
# Update range values
 
5933
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
5934
 
 
5935
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
5936
 
 
5937
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
5938
 
 
5939
 
 
5940
# Update outside range would be clipped to closest endpoints
 
5941
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
5942
 
 
5943
UPDATE t6 SET c2=-1 WHERE c1=94;
 
5944
 
 
5945
 
 
5946
# Update ignore on bad null error
 
5947
--sorted_result
 
5948
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
5949
SET SQL_MODE=STRICT_ALL_TABLES;
 
5950
--error ER_BAD_NULL_ERROR
 
5951
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
5952
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
5953
--sorted_result
 
5954
SELECT hex(c1),hex(c2) FROM t5;
 
5955
SET SQL_MODE=DEFAULT;
 
5956
 
 
5957
#Multi table update
 
5958
--disable_warnings
 
5959
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
5960
--enable_warnings
 
5961
--sorted_result
 
5962
SELECT hex(c1),hex(c2) FROM t5;
 
5963
 
 
5964
 
 
5965
# Update using various access methods
 
5966
TRUNCATE t5;
 
5967
TRUNCATE t6;
 
5968
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5969
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
5970
 
 
5971
# Update using Const
 
5972
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
5973
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
5974
--sorted_result
 
5975
SELECT hex(c1),hex(c2) FROM t5;
 
5976
 
 
5977
# Update using range
 
5978
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
5979
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
5980
--sorted_result
 
5981
SELECT hex(c1),hex(c2) FROM t5;
 
5982
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
5983
--disable_warnings
 
5984
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
5985
--enable_warnings
 
5986
--sorted_result
 
5987
SELECT hex(c1),hex(c2) FROM t5;
 
5988
 
 
5989
# Update using eq_ref
 
5990
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5991
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
5992
 
 
5993
############# DELETE ###########
 
5994
 
 
5995
TRUNCATE t5;
 
5996
TRUNCATE t6;
 
5997
 
 
5998
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
5999
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6000
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
6001
 
 
6002
# Delete by order by limit
 
6003
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6004
 
 
6005
 
 
6006
# Delete rows with NULL column
 
6007
DELETE FROM t6 WHERE c2=NULL;
 
6008
 
 
6009
 
 
6010
# Delete with range values 
 
6011
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
6012
 
 
6013
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
6014
 
 
6015
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
6016
 
 
6017
 
 
6018
#Multi table delete
 
6019
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6020
--sorted_result
 
6021
SELECT hex(c1),hex(c2) FROM t5;
 
6022
 
 
6023
 
 
6024
# Delete using various access methods
 
6025
TRUNCATE t5;
 
6026
TRUNCATE t6;
 
6027
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6028
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6029
 
 
6030
# Update using Const
 
6031
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6032
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
6033
--sorted_result
 
6034
SELECT hex(c1),hex(c2) FROM t5;
 
6035
 
 
6036
# Update using range
 
6037
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6038
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6039
--sorted_result
 
6040
SELECT hex(c1),hex(c2) FROM t5;
 
6041
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6042
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6043
--sorted_result
 
6044
SELECT hex(c1),hex(c2) FROM t5;
 
6045
 
 
6046
# Update using eq_ref
 
6047
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6048
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6049
 
 
6050
# Droping the tables
 
6051
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
6052
 
 
6053
####Checking the bit values####
 
6054
SELECT 0 + b'10'; 
 
6055
SELECT 0 + (10<<16);
 
6056
######### INSERT/SELECT######### 
 
6057
 
 
6058
#### Insert and select 16 bit data into the table####
 
6059
CREATE TABLE t1(c1 BIT(16));
 
6060
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
6061
let $i=16;
 
6062
while($i){
 
6063
let $j=$i/2;
 
6064
eval set @v1=$i;
 
6065
eval set @v2=$j;
 
6066
set @v3=repeat('1',@v1);
 
6067
let $STR0= query_get_value(select @v3 as I,I,1);
 
6068
eval INSERT INTO t1 VALUES (b'$STR0');
 
6069
set @v3=repeat('0',@v1);
 
6070
let $STR1= query_get_value(select @v3 as I,I,1);
 
6071
eval INSERT INTO t1 VALUES (b'$STR1');
 
6072
set @v3=repeat('01',@v2);
 
6073
let $STR2= query_get_value(select @v3 as I,I,1);
 
6074
eval INSERT INTO t1 VALUES (b'$STR2');
 
6075
set @v3=repeat('10',@v2);
 
6076
let $STR3= query_get_value(select @v3 as I,I,1);
 
6077
eval INSERT INTO t1 VALUES (b'$STR3');
 
6078
set @v3=repeat('1',@v1);
 
6079
set @v4=repeat('01',@v2);
 
6080
set @v5=repeat('10',@v2);
 
6081
let $STR0= query_get_value(select @v3 as I,I,1);
 
6082
let $STR2= query_get_value(select @v4 as I,I,1);
 
6083
let $STR3= query_get_value(select @v5 as I,I,1);
 
6084
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
6085
dec $i;
 
6086
}
 
6087
INSERT INTO t1 VALUES (b'10');
 
6088
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
6089
--sorted_result
 
6090
SELECT HEX(c1) FROM t1;
 
6091
--sorted_result
 
6092
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
6093
--sorted_result
 
6094
SELECT OCT(c1) FROM t1;
 
6095
--sorted_result
 
6096
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
6097
--sorted_result
 
6098
SELECT BIN(c1) FROM t1;
 
6099
--sorted_result
 
6100
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
6101
--sorted_result
 
6102
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
6103
--sorted_result
 
6104
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
6105
--sorted_result
 
6106
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
6107
--sorted_result
 
6108
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
6109
--sorted_result
 
6110
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
6111
--sorted_result
 
6112
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
6113
--sorted_result
 
6114
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
6115
--error 1439
 
6116
CREATE TABLE t3 (c1 BIT(65));
 
6117
# Checking for bug #9571
 
6118
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
6119
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
6120
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
6121
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
6122
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6123
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6124
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6125
--sorted_result
 
6126
SELECT HEX(c1),HEX(c2) FROM t5;
 
6127
 
 
6128
#Insert permissible NULLs
 
6129
INSERT IGNORE INTO t5 VALUES(96,null);
 
6130
INSERT INTO t6 VALUES(null,null);
 
6131
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
6132
## Full table scan ##
 
6133
--sorted_result
 
6134
SELECT HEX(c1),HEX(c2) FROM t5;
 
6135
--sorted_result
 
6136
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
6137
--sorted_result
 
6138
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
6139
## Forward index scan, covering ##
 
6140
--sorted_result
 
6141
SELECT bin(c1) FROM t5;
 
6142
## Backward index scan, covering ##
 
6143
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
6144
## Forward index scan, non-covering ##
 
6145
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
6146
## Backward index scan, non-covering ##
 
6147
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
6148
## ref type access
 
6149
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
6150
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
6151
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
6152
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
6153
## Range access, ordered ##
 
6154
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
6155
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
6156
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
6157
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
6158
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
6159
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
6160
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
6161
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
6162
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
6163
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
6164
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
6165
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
6166
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
6167
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
6168
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
6169
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
6170
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
6171
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
6172
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
6173
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
6174
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
6175
## Range access, backwards scan ##
 
6176
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
6177
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
6178
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
6179
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
6180
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
6181
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
6182
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
6183
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
6184
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
6185
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
6186
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
6187
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
6188
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
6189
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
6190
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
6191
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
6192
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
6193
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
6194
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
6195
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
6196
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
6197
#Inserting different charachers
 
6198
CREATE TABLE t7(c1  BIT(16));
 
6199
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
6200
--sorted_result
 
6201
SELECT * FROM t7;
 
6202
############# UPDATE ###########
 
6203
 
 
6204
# Update order by limit
 
6205
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6206
 
 
6207
 
 
6208
# Update with arithmetic operations 
 
6209
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
6210
 
 
6211
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
6212
 
 
6213
 
 
6214
# Update with NULL ( NULL to number & number to NULL)
 
6215
UPDATE t6 SET c2=NULL WHERE c1=23;
 
6216
 
 
6217
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
6218
 
 
6219
 
 
6220
# Update range values
 
6221
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
6222
 
 
6223
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
6224
 
 
6225
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
6226
 
 
6227
 
 
6228
# Update outside range would be clipped to closest endpoints
 
6229
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
6230
 
 
6231
UPDATE t6 SET c2=-1 WHERE c1=94;
 
6232
 
 
6233
 
 
6234
# Update ignore on bad null error
 
6235
--sorted_result
 
6236
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
6237
SET SQL_MODE=STRICT_ALL_TABLES;
 
6238
--error ER_BAD_NULL_ERROR
 
6239
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
6240
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
6241
--sorted_result
 
6242
SELECT hex(c1),hex(c2) FROM t5;
 
6243
SET SQL_MODE=DEFAULT;
 
6244
 
 
6245
#Multi table update
 
6246
--disable_warnings
 
6247
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6248
--enable_warnings
 
6249
--sorted_result
 
6250
SELECT hex(c1),hex(c2) FROM t5;
 
6251
 
 
6252
 
 
6253
# Update using various access methods
 
6254
TRUNCATE t5;
 
6255
TRUNCATE t6;
 
6256
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6257
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6258
 
 
6259
# Update using Const
 
6260
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6261
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
6262
--sorted_result
 
6263
SELECT hex(c1),hex(c2) FROM t5;
 
6264
 
 
6265
# Update using range
 
6266
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6267
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
6268
--sorted_result
 
6269
SELECT hex(c1),hex(c2) FROM t5;
 
6270
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6271
--disable_warnings
 
6272
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
6273
--enable_warnings
 
6274
--sorted_result
 
6275
SELECT hex(c1),hex(c2) FROM t5;
 
6276
 
 
6277
# Update using eq_ref
 
6278
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6279
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6280
 
 
6281
############# DELETE ###########
 
6282
 
 
6283
TRUNCATE t5;
 
6284
TRUNCATE t6;
 
6285
 
 
6286
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6287
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6288
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
6289
 
 
6290
# Delete by order by limit
 
6291
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6292
 
 
6293
 
 
6294
# Delete rows with NULL column
 
6295
DELETE FROM t6 WHERE c2=NULL;
 
6296
 
 
6297
 
 
6298
# Delete with range values 
 
6299
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
6300
 
 
6301
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
6302
 
 
6303
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
6304
 
 
6305
 
 
6306
#Multi table delete
 
6307
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6308
--sorted_result
 
6309
SELECT hex(c1),hex(c2) FROM t5;
 
6310
 
 
6311
 
 
6312
# Delete using various access methods
 
6313
TRUNCATE t5;
 
6314
TRUNCATE t6;
 
6315
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6316
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6317
 
 
6318
# Update using Const
 
6319
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6320
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
6321
--sorted_result
 
6322
SELECT hex(c1),hex(c2) FROM t5;
 
6323
 
 
6324
# Update using range
 
6325
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6326
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6327
--sorted_result
 
6328
SELECT hex(c1),hex(c2) FROM t5;
 
6329
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6330
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6331
--sorted_result
 
6332
SELECT hex(c1),hex(c2) FROM t5;
 
6333
 
 
6334
# Update using eq_ref
 
6335
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6336
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6337
 
 
6338
# Droping the tables
 
6339
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
6340
 
 
6341
####Checking the bit values####
 
6342
SELECT 0 + b'10'; 
 
6343
SELECT 0 + (10<<32);
 
6344
######### INSERT/SELECT######### 
 
6345
 
 
6346
#### Insert and select 32 bit data into the table####
 
6347
CREATE TABLE t1(c1 BIT(32));
 
6348
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
6349
let $i=32;
 
6350
while($i){
 
6351
let $j=$i/2;
 
6352
eval set @v1=$i;
 
6353
eval set @v2=$j;
 
6354
set @v3=repeat('1',@v1);
 
6355
let $STR0= query_get_value(select @v3 as I,I,1);
 
6356
eval INSERT INTO t1 VALUES (b'$STR0');
 
6357
set @v3=repeat('0',@v1);
 
6358
let $STR1= query_get_value(select @v3 as I,I,1);
 
6359
eval INSERT INTO t1 VALUES (b'$STR1');
 
6360
set @v3=repeat('01',@v2);
 
6361
let $STR2= query_get_value(select @v3 as I,I,1);
 
6362
eval INSERT INTO t1 VALUES (b'$STR2');
 
6363
set @v3=repeat('10',@v2);
 
6364
let $STR3= query_get_value(select @v3 as I,I,1);
 
6365
eval INSERT INTO t1 VALUES (b'$STR3');
 
6366
set @v3=repeat('1',@v1);
 
6367
set @v4=repeat('01',@v2);
 
6368
set @v5=repeat('10',@v2);
 
6369
let $STR0= query_get_value(select @v3 as I,I,1);
 
6370
let $STR2= query_get_value(select @v4 as I,I,1);
 
6371
let $STR3= query_get_value(select @v5 as I,I,1);
 
6372
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
6373
dec $i;
 
6374
}
 
6375
INSERT INTO t1 VALUES (b'10');
 
6376
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
6377
--sorted_result
 
6378
SELECT HEX(c1) FROM t1;
 
6379
--sorted_result
 
6380
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
6381
--sorted_result
 
6382
SELECT OCT(c1) FROM t1;
 
6383
--sorted_result
 
6384
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
6385
--sorted_result
 
6386
SELECT BIN(c1) FROM t1;
 
6387
--sorted_result
 
6388
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
6389
--sorted_result
 
6390
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
6391
--sorted_result
 
6392
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
6393
--sorted_result
 
6394
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
6395
--sorted_result
 
6396
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
6397
--sorted_result
 
6398
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
6399
--sorted_result
 
6400
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
6401
--sorted_result
 
6402
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
6403
--error 1439
 
6404
CREATE TABLE t3 (c1 BIT(65));
 
6405
# Checking for bug #9571
 
6406
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
6407
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
6408
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
6409
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
6410
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6411
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6412
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6413
--sorted_result
 
6414
SELECT HEX(c1),HEX(c2) FROM t5;
 
6415
 
 
6416
#Insert permissible NULLs
 
6417
INSERT IGNORE INTO t5 VALUES(96,null);
 
6418
INSERT INTO t6 VALUES(null,null);
 
6419
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
6420
## Full table scan ##
 
6421
--sorted_result
 
6422
SELECT HEX(c1),HEX(c2) FROM t5;
 
6423
--sorted_result
 
6424
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
6425
--sorted_result
 
6426
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
6427
## Forward index scan, covering ##
 
6428
--sorted_result
 
6429
SELECT bin(c1) FROM t5;
 
6430
## Backward index scan, covering ##
 
6431
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
6432
## Forward index scan, non-covering ##
 
6433
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
6434
## Backward index scan, non-covering ##
 
6435
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
6436
## ref type access
 
6437
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
6438
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
6439
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
6440
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
6441
## Range access, ordered ##
 
6442
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
6443
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
6444
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
6445
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
6446
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
6447
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
6448
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
6449
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
6450
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
6451
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
6452
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
6453
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
6454
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
6455
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
6456
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
6457
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
6458
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
6459
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
6460
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
6461
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
6462
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
6463
## Range access, backwards scan ##
 
6464
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
6465
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
6466
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
6467
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
6468
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
6469
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
6470
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
6471
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
6472
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
6473
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
6474
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
6475
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
6476
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
6477
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
6478
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
6479
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
6480
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
6481
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
6482
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
6483
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
6484
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
6485
#Inserting different charachers
 
6486
CREATE TABLE t7(c1  BIT(32));
 
6487
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
6488
--sorted_result
 
6489
SELECT * FROM t7;
 
6490
############# UPDATE ###########
 
6491
 
 
6492
# Update order by limit
 
6493
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6494
 
 
6495
 
 
6496
# Update with arithmetic operations 
 
6497
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
6498
 
 
6499
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
6500
 
 
6501
 
 
6502
# Update with NULL ( NULL to number & number to NULL)
 
6503
UPDATE t6 SET c2=NULL WHERE c1=23;
 
6504
 
 
6505
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
6506
 
 
6507
 
 
6508
# Update range values
 
6509
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
6510
 
 
6511
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
6512
 
 
6513
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
6514
 
 
6515
 
 
6516
# Update outside range would be clipped to closest endpoints
 
6517
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
6518
 
 
6519
UPDATE t6 SET c2=-1 WHERE c1=94;
 
6520
 
 
6521
 
 
6522
# Update ignore on bad null error
 
6523
--sorted_result
 
6524
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
6525
SET SQL_MODE=STRICT_ALL_TABLES;
 
6526
--error ER_BAD_NULL_ERROR
 
6527
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
6528
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
6529
--sorted_result
 
6530
SELECT hex(c1),hex(c2) FROM t5;
 
6531
SET SQL_MODE=DEFAULT;
 
6532
 
 
6533
#Multi table update
 
6534
--disable_warnings
 
6535
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6536
--enable_warnings
 
6537
--sorted_result
 
6538
SELECT hex(c1),hex(c2) FROM t5;
 
6539
 
 
6540
 
 
6541
# Update using various access methods
 
6542
TRUNCATE t5;
 
6543
TRUNCATE t6;
 
6544
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6545
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6546
 
 
6547
# Update using Const
 
6548
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6549
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
6550
--sorted_result
 
6551
SELECT hex(c1),hex(c2) FROM t5;
 
6552
 
 
6553
# Update using range
 
6554
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6555
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
6556
--sorted_result
 
6557
SELECT hex(c1),hex(c2) FROM t5;
 
6558
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6559
--disable_warnings
 
6560
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
6561
--enable_warnings
 
6562
--sorted_result
 
6563
SELECT hex(c1),hex(c2) FROM t5;
 
6564
 
 
6565
# Update using eq_ref
 
6566
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6567
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6568
 
 
6569
############# DELETE ###########
 
6570
 
 
6571
TRUNCATE t5;
 
6572
TRUNCATE t6;
 
6573
 
 
6574
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6575
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6576
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
6577
 
 
6578
# Delete by order by limit
 
6579
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6580
 
 
6581
 
 
6582
# Delete rows with NULL column
 
6583
DELETE FROM t6 WHERE c2=NULL;
 
6584
 
 
6585
 
 
6586
# Delete with range values 
 
6587
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
6588
 
 
6589
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
6590
 
 
6591
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
6592
 
 
6593
 
 
6594
#Multi table delete
 
6595
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6596
--sorted_result
 
6597
SELECT hex(c1),hex(c2) FROM t5;
 
6598
 
 
6599
 
 
6600
# Delete using various access methods
 
6601
TRUNCATE t5;
 
6602
TRUNCATE t6;
 
6603
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6604
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6605
 
 
6606
# Update using Const
 
6607
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6608
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
6609
--sorted_result
 
6610
SELECT hex(c1),hex(c2) FROM t5;
 
6611
 
 
6612
# Update using range
 
6613
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6614
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6615
--sorted_result
 
6616
SELECT hex(c1),hex(c2) FROM t5;
 
6617
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6618
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6619
--sorted_result
 
6620
SELECT hex(c1),hex(c2) FROM t5;
 
6621
 
 
6622
# Update using eq_ref
 
6623
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6624
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6625
 
 
6626
# Droping the tables
 
6627
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
6628
 
 
6629
####Checking the bit values####
 
6630
SELECT 0 + b'10'; 
 
6631
SELECT 0 + (10<<64);
 
6632
######### INSERT/SELECT######### 
 
6633
 
 
6634
#### Insert and select 64 bit data into the table####
 
6635
CREATE TABLE t1(c1 BIT(64));
 
6636
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
6637
let $i=64;
 
6638
while($i){
 
6639
let $j=$i/2;
 
6640
eval set @v1=$i;
 
6641
eval set @v2=$j;
 
6642
set @v3=repeat('1',@v1);
 
6643
let $STR0= query_get_value(select @v3 as I,I,1);
 
6644
eval INSERT INTO t1 VALUES (b'$STR0');
 
6645
set @v3=repeat('0',@v1);
 
6646
let $STR1= query_get_value(select @v3 as I,I,1);
 
6647
eval INSERT INTO t1 VALUES (b'$STR1');
 
6648
set @v3=repeat('01',@v2);
 
6649
let $STR2= query_get_value(select @v3 as I,I,1);
 
6650
eval INSERT INTO t1 VALUES (b'$STR2');
 
6651
set @v3=repeat('10',@v2);
 
6652
let $STR3= query_get_value(select @v3 as I,I,1);
 
6653
eval INSERT INTO t1 VALUES (b'$STR3');
 
6654
set @v3=repeat('1',@v1);
 
6655
set @v4=repeat('01',@v2);
 
6656
set @v5=repeat('10',@v2);
 
6657
let $STR0= query_get_value(select @v3 as I,I,1);
 
6658
let $STR2= query_get_value(select @v4 as I,I,1);
 
6659
let $STR3= query_get_value(select @v5 as I,I,1);
 
6660
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
6661
dec $i;
 
6662
}
 
6663
INSERT INTO t1 VALUES (b'10');
 
6664
INSERT INTO t2 VALUES (b'10', b'10', b'10');
 
6665
--sorted_result
 
6666
SELECT HEX(c1) FROM t1;
 
6667
--sorted_result
 
6668
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
6669
--sorted_result
 
6670
SELECT OCT(c1) FROM t1;
 
6671
--sorted_result
 
6672
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
6673
--sorted_result
 
6674
SELECT BIN(c1) FROM t1;
 
6675
--sorted_result
 
6676
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
6677
--sorted_result
 
6678
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
6679
--sorted_result
 
6680
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
6681
--sorted_result
 
6682
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
6683
--sorted_result
 
6684
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
6685
--sorted_result
 
6686
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
6687
--sorted_result
 
6688
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
6689
--sorted_result
 
6690
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
6691
--error 1439
 
6692
CREATE TABLE t3 (c1 BIT(65));
 
6693
# Checking for bug #9571
 
6694
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
6695
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
6696
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
6697
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
6698
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6699
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6700
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6701
--sorted_result
 
6702
SELECT HEX(c1),HEX(c2) FROM t5;
 
6703
 
 
6704
#Insert permissible NULLs
 
6705
INSERT IGNORE INTO t5 VALUES(96,null);
 
6706
INSERT INTO t6 VALUES(null,null);
 
6707
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
6708
## Full table scan ##
 
6709
--sorted_result
 
6710
SELECT HEX(c1),HEX(c2) FROM t5;
 
6711
--sorted_result
 
6712
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
6713
--sorted_result
 
6714
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
6715
## Forward index scan, covering ##
 
6716
--sorted_result
 
6717
SELECT bin(c1) FROM t5;
 
6718
## Backward index scan, covering ##
 
6719
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
6720
## Forward index scan, non-covering ##
 
6721
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
6722
## Backward index scan, non-covering ##
 
6723
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
6724
## ref type access
 
6725
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
6726
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
6727
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
6728
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
6729
## Range access, ordered ##
 
6730
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
6731
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
6732
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
6733
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
6734
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
6735
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
6736
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
6737
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
6738
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
6739
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
6740
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
6741
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
6742
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
6743
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
6744
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
6745
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
6746
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
6747
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
6748
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
6749
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
6750
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
6751
## Range access, backwards scan ##
 
6752
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
6753
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
6754
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
6755
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
6756
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
6757
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
6758
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
6759
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
6760
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
6761
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
6762
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
6763
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
6764
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
6765
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
6766
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
6767
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
6768
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
6769
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
6770
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
6771
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
6772
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
6773
#Inserting different charachers
 
6774
CREATE TABLE t7(c1  BIT(64));
 
6775
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
6776
--sorted_result
 
6777
SELECT * FROM t7;
 
6778
############# UPDATE ###########
 
6779
 
 
6780
# Update order by limit
 
6781
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6782
 
 
6783
 
 
6784
# Update with arithmetic operations 
 
6785
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
6786
 
 
6787
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
6788
 
 
6789
 
 
6790
# Update with NULL ( NULL to number & number to NULL)
 
6791
UPDATE t6 SET c2=NULL WHERE c1=23;
 
6792
 
 
6793
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
6794
 
 
6795
 
 
6796
# Update range values
 
6797
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
6798
 
 
6799
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
6800
 
 
6801
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
6802
 
 
6803
 
 
6804
# Update outside range would be clipped to closest endpoints
 
6805
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
6806
 
 
6807
UPDATE t6 SET c2=-1 WHERE c1=94;
 
6808
 
 
6809
 
 
6810
# Update ignore on bad null error
 
6811
--sorted_result
 
6812
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
6813
SET SQL_MODE=STRICT_ALL_TABLES;
 
6814
--error ER_BAD_NULL_ERROR
 
6815
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
6816
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
6817
--sorted_result
 
6818
SELECT hex(c1),hex(c2) FROM t5;
 
6819
SET SQL_MODE=DEFAULT;
 
6820
 
 
6821
#Multi table update
 
6822
--disable_warnings
 
6823
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6824
--enable_warnings
 
6825
--sorted_result
 
6826
SELECT hex(c1),hex(c2) FROM t5;
 
6827
 
 
6828
 
 
6829
# Update using various access methods
 
6830
TRUNCATE t5;
 
6831
TRUNCATE t6;
 
6832
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6833
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6834
 
 
6835
# Update using Const
 
6836
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6837
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
6838
--sorted_result
 
6839
SELECT hex(c1),hex(c2) FROM t5;
 
6840
 
 
6841
# Update using range
 
6842
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6843
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
6844
--sorted_result
 
6845
SELECT hex(c1),hex(c2) FROM t5;
 
6846
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6847
--disable_warnings
 
6848
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
6849
--enable_warnings
 
6850
--sorted_result
 
6851
SELECT hex(c1),hex(c2) FROM t5;
 
6852
 
 
6853
# Update using eq_ref
 
6854
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6855
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6856
 
 
6857
############# DELETE ###########
 
6858
 
 
6859
TRUNCATE t5;
 
6860
TRUNCATE t6;
 
6861
 
 
6862
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6863
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6864
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
6865
 
 
6866
# Delete by order by limit
 
6867
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
6868
 
 
6869
 
 
6870
# Delete rows with NULL column
 
6871
DELETE FROM t6 WHERE c2=NULL;
 
6872
 
 
6873
 
 
6874
# Delete with range values 
 
6875
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
6876
 
 
6877
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
6878
 
 
6879
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
6880
 
 
6881
 
 
6882
#Multi table delete
 
6883
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
6884
--sorted_result
 
6885
SELECT hex(c1),hex(c2) FROM t5;
 
6886
 
 
6887
 
 
6888
# Delete using various access methods
 
6889
TRUNCATE t5;
 
6890
TRUNCATE t6;
 
6891
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6892
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
6893
 
 
6894
# Update using Const
 
6895
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
6896
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
6897
--sorted_result
 
6898
SELECT hex(c1),hex(c2) FROM t5;
 
6899
 
 
6900
# Update using range
 
6901
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6902
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
6903
--sorted_result
 
6904
SELECT hex(c1),hex(c2) FROM t5;
 
6905
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6906
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
6907
--sorted_result
 
6908
SELECT hex(c1),hex(c2) FROM t5;
 
6909
 
 
6910
# Update using eq_ref
 
6911
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6912
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
6913
 
 
6914
# Droping the tables
 
6915
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
6916
 
 
6917
####Checking the bit values####
 
6918
SELECT 0 + b'1010'; 
 
6919
SELECT 0 + (1010<<0);
 
6920
######### INSERT/SELECT######### 
 
6921
 
 
6922
#### Insert and select 0 bit data into the table####
 
6923
CREATE TABLE t1(c1 BIT(0));
 
6924
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
6925
let $i=0;
 
6926
while($i){
 
6927
let $j=$i/2;
 
6928
eval set @v1=$i;
 
6929
eval set @v2=$j;
 
6930
set @v3=repeat('1',@v1);
 
6931
let $STR0= query_get_value(select @v3 as I,I,1);
 
6932
eval INSERT INTO t1 VALUES (b'$STR0');
 
6933
set @v3=repeat('0',@v1);
 
6934
let $STR1= query_get_value(select @v3 as I,I,1);
 
6935
eval INSERT INTO t1 VALUES (b'$STR1');
 
6936
set @v3=repeat('01',@v2);
 
6937
let $STR2= query_get_value(select @v3 as I,I,1);
 
6938
eval INSERT INTO t1 VALUES (b'$STR2');
 
6939
set @v3=repeat('10',@v2);
 
6940
let $STR3= query_get_value(select @v3 as I,I,1);
 
6941
eval INSERT INTO t1 VALUES (b'$STR3');
 
6942
set @v3=repeat('1',@v1);
 
6943
set @v4=repeat('01',@v2);
 
6944
set @v5=repeat('10',@v2);
 
6945
let $STR0= query_get_value(select @v3 as I,I,1);
 
6946
let $STR2= query_get_value(select @v4 as I,I,1);
 
6947
let $STR3= query_get_value(select @v5 as I,I,1);
 
6948
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
6949
dec $i;
 
6950
}
 
6951
INSERT INTO t1 VALUES (b'1010');
 
6952
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
6953
--sorted_result
 
6954
SELECT HEX(c1) FROM t1;
 
6955
--sorted_result
 
6956
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
6957
--sorted_result
 
6958
SELECT OCT(c1) FROM t1;
 
6959
--sorted_result
 
6960
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
6961
--sorted_result
 
6962
SELECT BIN(c1) FROM t1;
 
6963
--sorted_result
 
6964
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
6965
--sorted_result
 
6966
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
6967
--sorted_result
 
6968
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
6969
--sorted_result
 
6970
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
6971
--sorted_result
 
6972
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
6973
--sorted_result
 
6974
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
6975
--sorted_result
 
6976
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
6977
--sorted_result
 
6978
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
6979
--error 1439
 
6980
CREATE TABLE t3 (c1 BIT(65));
 
6981
# Checking for bug #9571
 
6982
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
6983
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
6984
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
6985
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
6986
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
6987
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6988
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
6989
--sorted_result
 
6990
SELECT HEX(c1),HEX(c2) FROM t5;
 
6991
 
 
6992
#Insert permissible NULLs
 
6993
INSERT IGNORE INTO t5 VALUES(96,null);
 
6994
INSERT INTO t6 VALUES(null,null);
 
6995
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
6996
## Full table scan ##
 
6997
--sorted_result
 
6998
SELECT HEX(c1),HEX(c2) FROM t5;
 
6999
--sorted_result
 
7000
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
7001
--sorted_result
 
7002
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
7003
## Forward index scan, covering ##
 
7004
--sorted_result
 
7005
SELECT bin(c1) FROM t5;
 
7006
## Backward index scan, covering ##
 
7007
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
7008
## Forward index scan, non-covering ##
 
7009
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
7010
## Backward index scan, non-covering ##
 
7011
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
7012
## ref type access
 
7013
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
7014
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
7015
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
7016
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
7017
## Range access, ordered ##
 
7018
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
7019
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
7020
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
7021
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
7022
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
7023
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
7024
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
7025
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
7026
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
7027
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
7028
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
7029
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
7030
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
7031
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
7032
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
7033
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
7034
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
7035
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
7036
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
7037
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
7038
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
7039
## Range access, backwards scan ##
 
7040
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
7041
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
7042
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
7043
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
7044
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
7045
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
7046
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
7047
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
7048
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
7049
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
7050
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
7051
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
7052
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
7053
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
7054
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
7055
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
7056
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
7057
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
7058
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
7059
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
7060
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
7061
#Inserting different charachers
 
7062
CREATE TABLE t7(c1  BIT(0));
 
7063
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
7064
--sorted_result
 
7065
SELECT * FROM t7;
 
7066
############# UPDATE ###########
 
7067
 
 
7068
# Update order by limit
 
7069
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7070
 
 
7071
 
 
7072
# Update with arithmetic operations 
 
7073
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
7074
 
 
7075
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
7076
 
 
7077
 
 
7078
# Update with NULL ( NULL to number & number to NULL)
 
7079
UPDATE t6 SET c2=NULL WHERE c1=23;
 
7080
 
 
7081
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
7082
 
 
7083
 
 
7084
# Update range values
 
7085
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
7086
 
 
7087
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
7088
 
 
7089
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
7090
 
 
7091
 
 
7092
# Update outside range would be clipped to closest endpoints
 
7093
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
7094
 
 
7095
UPDATE t6 SET c2=-1 WHERE c1=94;
 
7096
 
 
7097
 
 
7098
# Update ignore on bad null error
 
7099
--sorted_result
 
7100
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
7101
SET SQL_MODE=STRICT_ALL_TABLES;
 
7102
--error ER_BAD_NULL_ERROR
 
7103
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
7104
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
7105
--sorted_result
 
7106
SELECT hex(c1),hex(c2) FROM t5;
 
7107
SET SQL_MODE=DEFAULT;
 
7108
 
 
7109
#Multi table update
 
7110
--disable_warnings
 
7111
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7112
--enable_warnings
 
7113
--sorted_result
 
7114
SELECT hex(c1),hex(c2) FROM t5;
 
7115
 
 
7116
 
 
7117
# Update using various access methods
 
7118
TRUNCATE t5;
 
7119
TRUNCATE t6;
 
7120
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7121
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7122
 
 
7123
# Update using Const
 
7124
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7125
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
7126
--sorted_result
 
7127
SELECT hex(c1),hex(c2) FROM t5;
 
7128
 
 
7129
# Update using range
 
7130
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7131
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
7132
--sorted_result
 
7133
SELECT hex(c1),hex(c2) FROM t5;
 
7134
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7135
--disable_warnings
 
7136
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
7137
--enable_warnings
 
7138
--sorted_result
 
7139
SELECT hex(c1),hex(c2) FROM t5;
 
7140
 
 
7141
# Update using eq_ref
 
7142
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7143
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7144
 
 
7145
############# DELETE ###########
 
7146
 
 
7147
TRUNCATE t5;
 
7148
TRUNCATE t6;
 
7149
 
 
7150
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7151
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7152
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
7153
 
 
7154
# Delete by order by limit
 
7155
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7156
 
 
7157
 
 
7158
# Delete rows with NULL column
 
7159
DELETE FROM t6 WHERE c2=NULL;
 
7160
 
 
7161
 
 
7162
# Delete with range values 
 
7163
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
7164
 
 
7165
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
7166
 
 
7167
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
7168
 
 
7169
 
 
7170
#Multi table delete
 
7171
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7172
--sorted_result
 
7173
SELECT hex(c1),hex(c2) FROM t5;
 
7174
 
 
7175
 
 
7176
# Delete using various access methods
 
7177
TRUNCATE t5;
 
7178
TRUNCATE t6;
 
7179
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7180
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7181
 
 
7182
# Update using Const
 
7183
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7184
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
7185
--sorted_result
 
7186
SELECT hex(c1),hex(c2) FROM t5;
 
7187
 
 
7188
# Update using range
 
7189
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7190
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7191
--sorted_result
 
7192
SELECT hex(c1),hex(c2) FROM t5;
 
7193
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7194
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7195
--sorted_result
 
7196
SELECT hex(c1),hex(c2) FROM t5;
 
7197
 
 
7198
# Update using eq_ref
 
7199
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7200
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7201
 
 
7202
# Droping the tables
 
7203
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
7204
 
 
7205
####Checking the bit values####
 
7206
SELECT 0 + b'1010'; 
 
7207
SELECT 0 + (1010<<1);
 
7208
######### INSERT/SELECT######### 
 
7209
 
 
7210
#### Insert and select 1 bit data into the table####
 
7211
CREATE TABLE t1(c1 BIT(1));
 
7212
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
7213
let $i=1;
 
7214
while($i){
 
7215
let $j=$i/2;
 
7216
eval set @v1=$i;
 
7217
eval set @v2=$j;
 
7218
set @v3=repeat('1',@v1);
 
7219
let $STR0= query_get_value(select @v3 as I,I,1);
 
7220
eval INSERT INTO t1 VALUES (b'$STR0');
 
7221
set @v3=repeat('0',@v1);
 
7222
let $STR1= query_get_value(select @v3 as I,I,1);
 
7223
eval INSERT INTO t1 VALUES (b'$STR1');
 
7224
set @v3=repeat('01',@v2);
 
7225
let $STR2= query_get_value(select @v3 as I,I,1);
 
7226
eval INSERT INTO t1 VALUES (b'$STR2');
 
7227
set @v3=repeat('10',@v2);
 
7228
let $STR3= query_get_value(select @v3 as I,I,1);
 
7229
eval INSERT INTO t1 VALUES (b'$STR3');
 
7230
set @v3=repeat('1',@v1);
 
7231
set @v4=repeat('01',@v2);
 
7232
set @v5=repeat('10',@v2);
 
7233
let $STR0= query_get_value(select @v3 as I,I,1);
 
7234
let $STR2= query_get_value(select @v4 as I,I,1);
 
7235
let $STR3= query_get_value(select @v5 as I,I,1);
 
7236
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
7237
dec $i;
 
7238
}
 
7239
INSERT INTO t1 VALUES (b'1010');
 
7240
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
7241
--sorted_result
 
7242
SELECT HEX(c1) FROM t1;
 
7243
--sorted_result
 
7244
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
7245
--sorted_result
 
7246
SELECT OCT(c1) FROM t1;
 
7247
--sorted_result
 
7248
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
7249
--sorted_result
 
7250
SELECT BIN(c1) FROM t1;
 
7251
--sorted_result
 
7252
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
7253
--sorted_result
 
7254
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
7255
--sorted_result
 
7256
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
7257
--sorted_result
 
7258
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
7259
--sorted_result
 
7260
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
7261
--sorted_result
 
7262
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
7263
--sorted_result
 
7264
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
7265
--sorted_result
 
7266
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
7267
--error 1439
 
7268
CREATE TABLE t3 (c1 BIT(65));
 
7269
# Checking for bug #9571
 
7270
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
7271
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
7272
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
7273
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
7274
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7275
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7276
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7277
--sorted_result
 
7278
SELECT HEX(c1),HEX(c2) FROM t5;
 
7279
 
 
7280
#Insert permissible NULLs
 
7281
INSERT IGNORE INTO t5 VALUES(96,null);
 
7282
INSERT INTO t6 VALUES(null,null);
 
7283
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
7284
## Full table scan ##
 
7285
--sorted_result
 
7286
SELECT HEX(c1),HEX(c2) FROM t5;
 
7287
--sorted_result
 
7288
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
7289
--sorted_result
 
7290
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
7291
## Forward index scan, covering ##
 
7292
--sorted_result
 
7293
SELECT bin(c1) FROM t5;
 
7294
## Backward index scan, covering ##
 
7295
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
7296
## Forward index scan, non-covering ##
 
7297
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
7298
## Backward index scan, non-covering ##
 
7299
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
7300
## ref type access
 
7301
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
7302
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
7303
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
7304
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
7305
## Range access, ordered ##
 
7306
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
7307
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
7308
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
7309
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
7310
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
7311
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
7312
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
7313
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
7314
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
7315
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
7316
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
7317
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
7318
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
7319
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
7320
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
7321
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
7322
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
7323
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
7324
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
7325
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
7326
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
7327
## Range access, backwards scan ##
 
7328
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
7329
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
7330
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
7331
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
7332
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
7333
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
7334
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
7335
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
7336
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
7337
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
7338
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
7339
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
7340
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
7341
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
7342
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
7343
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
7344
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
7345
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
7346
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
7347
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
7348
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
7349
#Inserting different charachers
 
7350
CREATE TABLE t7(c1  BIT(1));
 
7351
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
7352
--sorted_result
 
7353
SELECT * FROM t7;
 
7354
############# UPDATE ###########
 
7355
 
 
7356
# Update order by limit
 
7357
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7358
 
 
7359
 
 
7360
# Update with arithmetic operations 
 
7361
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
7362
 
 
7363
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
7364
 
 
7365
 
 
7366
# Update with NULL ( NULL to number & number to NULL)
 
7367
UPDATE t6 SET c2=NULL WHERE c1=23;
 
7368
 
 
7369
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
7370
 
 
7371
 
 
7372
# Update range values
 
7373
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
7374
 
 
7375
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
7376
 
 
7377
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
7378
 
 
7379
 
 
7380
# Update outside range would be clipped to closest endpoints
 
7381
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
7382
 
 
7383
UPDATE t6 SET c2=-1 WHERE c1=94;
 
7384
 
 
7385
 
 
7386
# Update ignore on bad null error
 
7387
--sorted_result
 
7388
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
7389
SET SQL_MODE=STRICT_ALL_TABLES;
 
7390
--error ER_BAD_NULL_ERROR
 
7391
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
7392
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
7393
--sorted_result
 
7394
SELECT hex(c1),hex(c2) FROM t5;
 
7395
SET SQL_MODE=DEFAULT;
 
7396
 
 
7397
#Multi table update
 
7398
--disable_warnings
 
7399
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7400
--enable_warnings
 
7401
--sorted_result
 
7402
SELECT hex(c1),hex(c2) FROM t5;
 
7403
 
 
7404
 
 
7405
# Update using various access methods
 
7406
TRUNCATE t5;
 
7407
TRUNCATE t6;
 
7408
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7409
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7410
 
 
7411
# Update using Const
 
7412
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7413
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
7414
--sorted_result
 
7415
SELECT hex(c1),hex(c2) FROM t5;
 
7416
 
 
7417
# Update using range
 
7418
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7419
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
7420
--sorted_result
 
7421
SELECT hex(c1),hex(c2) FROM t5;
 
7422
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7423
--disable_warnings
 
7424
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
7425
--enable_warnings
 
7426
--sorted_result
 
7427
SELECT hex(c1),hex(c2) FROM t5;
 
7428
 
 
7429
# Update using eq_ref
 
7430
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7431
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7432
 
 
7433
############# DELETE ###########
 
7434
 
 
7435
TRUNCATE t5;
 
7436
TRUNCATE t6;
 
7437
 
 
7438
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7439
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7440
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
7441
 
 
7442
# Delete by order by limit
 
7443
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7444
 
 
7445
 
 
7446
# Delete rows with NULL column
 
7447
DELETE FROM t6 WHERE c2=NULL;
 
7448
 
 
7449
 
 
7450
# Delete with range values 
 
7451
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
7452
 
 
7453
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
7454
 
 
7455
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
7456
 
 
7457
 
 
7458
#Multi table delete
 
7459
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7460
--sorted_result
 
7461
SELECT hex(c1),hex(c2) FROM t5;
 
7462
 
 
7463
 
 
7464
# Delete using various access methods
 
7465
TRUNCATE t5;
 
7466
TRUNCATE t6;
 
7467
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7468
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7469
 
 
7470
# Update using Const
 
7471
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7472
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
7473
--sorted_result
 
7474
SELECT hex(c1),hex(c2) FROM t5;
 
7475
 
 
7476
# Update using range
 
7477
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7478
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7479
--sorted_result
 
7480
SELECT hex(c1),hex(c2) FROM t5;
 
7481
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7482
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7483
--sorted_result
 
7484
SELECT hex(c1),hex(c2) FROM t5;
 
7485
 
 
7486
# Update using eq_ref
 
7487
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7488
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7489
 
 
7490
# Droping the tables
 
7491
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
7492
 
 
7493
####Checking the bit values####
 
7494
SELECT 0 + b'1010'; 
 
7495
SELECT 0 + (1010<<2);
 
7496
######### INSERT/SELECT######### 
 
7497
 
 
7498
#### Insert and select 2 bit data into the table####
 
7499
CREATE TABLE t1(c1 BIT(2));
 
7500
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
7501
let $i=2;
 
7502
while($i){
 
7503
let $j=$i/2;
 
7504
eval set @v1=$i;
 
7505
eval set @v2=$j;
 
7506
set @v3=repeat('1',@v1);
 
7507
let $STR0= query_get_value(select @v3 as I,I,1);
 
7508
eval INSERT INTO t1 VALUES (b'$STR0');
 
7509
set @v3=repeat('0',@v1);
 
7510
let $STR1= query_get_value(select @v3 as I,I,1);
 
7511
eval INSERT INTO t1 VALUES (b'$STR1');
 
7512
set @v3=repeat('01',@v2);
 
7513
let $STR2= query_get_value(select @v3 as I,I,1);
 
7514
eval INSERT INTO t1 VALUES (b'$STR2');
 
7515
set @v3=repeat('10',@v2);
 
7516
let $STR3= query_get_value(select @v3 as I,I,1);
 
7517
eval INSERT INTO t1 VALUES (b'$STR3');
 
7518
set @v3=repeat('1',@v1);
 
7519
set @v4=repeat('01',@v2);
 
7520
set @v5=repeat('10',@v2);
 
7521
let $STR0= query_get_value(select @v3 as I,I,1);
 
7522
let $STR2= query_get_value(select @v4 as I,I,1);
 
7523
let $STR3= query_get_value(select @v5 as I,I,1);
 
7524
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
7525
dec $i;
 
7526
}
 
7527
INSERT INTO t1 VALUES (b'1010');
 
7528
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
7529
--sorted_result
 
7530
SELECT HEX(c1) FROM t1;
 
7531
--sorted_result
 
7532
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
7533
--sorted_result
 
7534
SELECT OCT(c1) FROM t1;
 
7535
--sorted_result
 
7536
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
7537
--sorted_result
 
7538
SELECT BIN(c1) FROM t1;
 
7539
--sorted_result
 
7540
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
7541
--sorted_result
 
7542
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
7543
--sorted_result
 
7544
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
7545
--sorted_result
 
7546
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
7547
--sorted_result
 
7548
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
7549
--sorted_result
 
7550
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
7551
--sorted_result
 
7552
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
7553
--sorted_result
 
7554
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
7555
--error 1439
 
7556
CREATE TABLE t3 (c1 BIT(65));
 
7557
# Checking for bug #9571
 
7558
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
7559
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
7560
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
7561
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
7562
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7563
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7564
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7565
--sorted_result
 
7566
SELECT HEX(c1),HEX(c2) FROM t5;
 
7567
 
 
7568
#Insert permissible NULLs
 
7569
INSERT IGNORE INTO t5 VALUES(96,null);
 
7570
INSERT INTO t6 VALUES(null,null);
 
7571
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
7572
## Full table scan ##
 
7573
--sorted_result
 
7574
SELECT HEX(c1),HEX(c2) FROM t5;
 
7575
--sorted_result
 
7576
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
7577
--sorted_result
 
7578
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
7579
## Forward index scan, covering ##
 
7580
--sorted_result
 
7581
SELECT bin(c1) FROM t5;
 
7582
## Backward index scan, covering ##
 
7583
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
7584
## Forward index scan, non-covering ##
 
7585
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
7586
## Backward index scan, non-covering ##
 
7587
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
7588
## ref type access
 
7589
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
7590
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
7591
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
7592
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
7593
## Range access, ordered ##
 
7594
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
7595
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
7596
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
7597
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
7598
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
7599
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
7600
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
7601
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
7602
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
7603
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
7604
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
7605
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
7606
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
7607
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
7608
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
7609
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
7610
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
7611
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
7612
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
7613
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
7614
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
7615
## Range access, backwards scan ##
 
7616
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
7617
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
7618
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
7619
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
7620
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
7621
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
7622
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
7623
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
7624
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
7625
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
7626
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
7627
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
7628
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
7629
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
7630
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
7631
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
7632
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
7633
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
7634
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
7635
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
7636
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
7637
#Inserting different charachers
 
7638
CREATE TABLE t7(c1  BIT(2));
 
7639
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
7640
--sorted_result
 
7641
SELECT * FROM t7;
 
7642
############# UPDATE ###########
 
7643
 
 
7644
# Update order by limit
 
7645
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7646
 
 
7647
 
 
7648
# Update with arithmetic operations 
 
7649
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
7650
 
 
7651
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
7652
 
 
7653
 
 
7654
# Update with NULL ( NULL to number & number to NULL)
 
7655
UPDATE t6 SET c2=NULL WHERE c1=23;
 
7656
 
 
7657
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
7658
 
 
7659
 
 
7660
# Update range values
 
7661
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
7662
 
 
7663
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
7664
 
 
7665
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
7666
 
 
7667
 
 
7668
# Update outside range would be clipped to closest endpoints
 
7669
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
7670
 
 
7671
UPDATE t6 SET c2=-1 WHERE c1=94;
 
7672
 
 
7673
 
 
7674
# Update ignore on bad null error
 
7675
--sorted_result
 
7676
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
7677
SET SQL_MODE=STRICT_ALL_TABLES;
 
7678
--error ER_BAD_NULL_ERROR
 
7679
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
7680
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
7681
--sorted_result
 
7682
SELECT hex(c1),hex(c2) FROM t5;
 
7683
SET SQL_MODE=DEFAULT;
 
7684
 
 
7685
#Multi table update
 
7686
--disable_warnings
 
7687
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7688
--enable_warnings
 
7689
--sorted_result
 
7690
SELECT hex(c1),hex(c2) FROM t5;
 
7691
 
 
7692
 
 
7693
# Update using various access methods
 
7694
TRUNCATE t5;
 
7695
TRUNCATE t6;
 
7696
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7697
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7698
 
 
7699
# Update using Const
 
7700
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7701
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
7702
--sorted_result
 
7703
SELECT hex(c1),hex(c2) FROM t5;
 
7704
 
 
7705
# Update using range
 
7706
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7707
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
7708
--sorted_result
 
7709
SELECT hex(c1),hex(c2) FROM t5;
 
7710
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7711
--disable_warnings
 
7712
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
7713
--enable_warnings
 
7714
--sorted_result
 
7715
SELECT hex(c1),hex(c2) FROM t5;
 
7716
 
 
7717
# Update using eq_ref
 
7718
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7719
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7720
 
 
7721
############# DELETE ###########
 
7722
 
 
7723
TRUNCATE t5;
 
7724
TRUNCATE t6;
 
7725
 
 
7726
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7727
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7728
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
7729
 
 
7730
# Delete by order by limit
 
7731
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7732
 
 
7733
 
 
7734
# Delete rows with NULL column
 
7735
DELETE FROM t6 WHERE c2=NULL;
 
7736
 
 
7737
 
 
7738
# Delete with range values 
 
7739
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
7740
 
 
7741
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
7742
 
 
7743
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
7744
 
 
7745
 
 
7746
#Multi table delete
 
7747
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7748
--sorted_result
 
7749
SELECT hex(c1),hex(c2) FROM t5;
 
7750
 
 
7751
 
 
7752
# Delete using various access methods
 
7753
TRUNCATE t5;
 
7754
TRUNCATE t6;
 
7755
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7756
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7757
 
 
7758
# Update using Const
 
7759
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7760
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
7761
--sorted_result
 
7762
SELECT hex(c1),hex(c2) FROM t5;
 
7763
 
 
7764
# Update using range
 
7765
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7766
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7767
--sorted_result
 
7768
SELECT hex(c1),hex(c2) FROM t5;
 
7769
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7770
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7771
--sorted_result
 
7772
SELECT hex(c1),hex(c2) FROM t5;
 
7773
 
 
7774
# Update using eq_ref
 
7775
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7776
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
7777
 
 
7778
# Droping the tables
 
7779
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
7780
 
 
7781
####Checking the bit values####
 
7782
SELECT 0 + b'1010'; 
 
7783
SELECT 0 + (1010<<4);
 
7784
######### INSERT/SELECT######### 
 
7785
 
 
7786
#### Insert and select 4 bit data into the table####
 
7787
CREATE TABLE t1(c1 BIT(4));
 
7788
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
7789
let $i=4;
 
7790
while($i){
 
7791
let $j=$i/2;
 
7792
eval set @v1=$i;
 
7793
eval set @v2=$j;
 
7794
set @v3=repeat('1',@v1);
 
7795
let $STR0= query_get_value(select @v3 as I,I,1);
 
7796
eval INSERT INTO t1 VALUES (b'$STR0');
 
7797
set @v3=repeat('0',@v1);
 
7798
let $STR1= query_get_value(select @v3 as I,I,1);
 
7799
eval INSERT INTO t1 VALUES (b'$STR1');
 
7800
set @v3=repeat('01',@v2);
 
7801
let $STR2= query_get_value(select @v3 as I,I,1);
 
7802
eval INSERT INTO t1 VALUES (b'$STR2');
 
7803
set @v3=repeat('10',@v2);
 
7804
let $STR3= query_get_value(select @v3 as I,I,1);
 
7805
eval INSERT INTO t1 VALUES (b'$STR3');
 
7806
set @v3=repeat('1',@v1);
 
7807
set @v4=repeat('01',@v2);
 
7808
set @v5=repeat('10',@v2);
 
7809
let $STR0= query_get_value(select @v3 as I,I,1);
 
7810
let $STR2= query_get_value(select @v4 as I,I,1);
 
7811
let $STR3= query_get_value(select @v5 as I,I,1);
 
7812
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
7813
dec $i;
 
7814
}
 
7815
INSERT INTO t1 VALUES (b'1010');
 
7816
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
7817
--sorted_result
 
7818
SELECT HEX(c1) FROM t1;
 
7819
--sorted_result
 
7820
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
7821
--sorted_result
 
7822
SELECT OCT(c1) FROM t1;
 
7823
--sorted_result
 
7824
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
7825
--sorted_result
 
7826
SELECT BIN(c1) FROM t1;
 
7827
--sorted_result
 
7828
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
7829
--sorted_result
 
7830
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
7831
--sorted_result
 
7832
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
7833
--sorted_result
 
7834
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
7835
--sorted_result
 
7836
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
7837
--sorted_result
 
7838
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
7839
--sorted_result
 
7840
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
7841
--sorted_result
 
7842
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
7843
--error 1439
 
7844
CREATE TABLE t3 (c1 BIT(65));
 
7845
# Checking for bug #9571
 
7846
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
7847
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
7848
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
7849
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
7850
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
7851
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7852
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
7853
--sorted_result
 
7854
SELECT HEX(c1),HEX(c2) FROM t5;
 
7855
 
 
7856
#Insert permissible NULLs
 
7857
INSERT IGNORE INTO t5 VALUES(96,null);
 
7858
INSERT INTO t6 VALUES(null,null);
 
7859
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
7860
## Full table scan ##
 
7861
--sorted_result
 
7862
SELECT HEX(c1),HEX(c2) FROM t5;
 
7863
--sorted_result
 
7864
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
7865
--sorted_result
 
7866
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
7867
## Forward index scan, covering ##
 
7868
--sorted_result
 
7869
SELECT bin(c1) FROM t5;
 
7870
## Backward index scan, covering ##
 
7871
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
7872
## Forward index scan, non-covering ##
 
7873
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
7874
## Backward index scan, non-covering ##
 
7875
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
7876
## ref type access
 
7877
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
7878
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
7879
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
7880
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
7881
## Range access, ordered ##
 
7882
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
7883
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
7884
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
7885
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
7886
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
7887
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
7888
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
7889
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
7890
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
7891
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
7892
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
7893
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
7894
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
7895
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
7896
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
7897
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
7898
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
7899
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
7900
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
7901
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
7902
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
7903
## Range access, backwards scan ##
 
7904
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
7905
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
7906
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
7907
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
7908
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
7909
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
7910
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
7911
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
7912
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
7913
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
7914
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
7915
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
7916
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
7917
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
7918
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
7919
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
7920
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
7921
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
7922
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
7923
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
7924
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
7925
#Inserting different charachers
 
7926
CREATE TABLE t7(c1  BIT(4));
 
7927
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
7928
--sorted_result
 
7929
SELECT * FROM t7;
 
7930
############# UPDATE ###########
 
7931
 
 
7932
# Update order by limit
 
7933
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
7934
 
 
7935
 
 
7936
# Update with arithmetic operations 
 
7937
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
7938
 
 
7939
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
7940
 
 
7941
 
 
7942
# Update with NULL ( NULL to number & number to NULL)
 
7943
UPDATE t6 SET c2=NULL WHERE c1=23;
 
7944
 
 
7945
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
7946
 
 
7947
 
 
7948
# Update range values
 
7949
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
7950
 
 
7951
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
7952
 
 
7953
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
7954
 
 
7955
 
 
7956
# Update outside range would be clipped to closest endpoints
 
7957
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
7958
 
 
7959
UPDATE t6 SET c2=-1 WHERE c1=94;
 
7960
 
 
7961
 
 
7962
# Update ignore on bad null error
 
7963
--sorted_result
 
7964
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
7965
SET SQL_MODE=STRICT_ALL_TABLES;
 
7966
--error ER_BAD_NULL_ERROR
 
7967
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
7968
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
7969
--sorted_result
 
7970
SELECT hex(c1),hex(c2) FROM t5;
 
7971
SET SQL_MODE=DEFAULT;
 
7972
 
 
7973
#Multi table update
 
7974
--disable_warnings
 
7975
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
7976
--enable_warnings
 
7977
--sorted_result
 
7978
SELECT hex(c1),hex(c2) FROM t5;
 
7979
 
 
7980
 
 
7981
# Update using various access methods
 
7982
TRUNCATE t5;
 
7983
TRUNCATE t6;
 
7984
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7985
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
7986
 
 
7987
# Update using Const
 
7988
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
7989
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
7990
--sorted_result
 
7991
SELECT hex(c1),hex(c2) FROM t5;
 
7992
 
 
7993
# Update using range
 
7994
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
7995
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
7996
--sorted_result
 
7997
SELECT hex(c1),hex(c2) FROM t5;
 
7998
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
7999
--disable_warnings
 
8000
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
8001
--enable_warnings
 
8002
--sorted_result
 
8003
SELECT hex(c1),hex(c2) FROM t5;
 
8004
 
 
8005
# Update using eq_ref
 
8006
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8007
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8008
 
 
8009
############# DELETE ###########
 
8010
 
 
8011
TRUNCATE t5;
 
8012
TRUNCATE t6;
 
8013
 
 
8014
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8015
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8016
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
8017
 
 
8018
# Delete by order by limit
 
8019
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8020
 
 
8021
 
 
8022
# Delete rows with NULL column
 
8023
DELETE FROM t6 WHERE c2=NULL;
 
8024
 
 
8025
 
 
8026
# Delete with range values 
 
8027
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
8028
 
 
8029
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
8030
 
 
8031
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
8032
 
 
8033
 
 
8034
#Multi table delete
 
8035
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8036
--sorted_result
 
8037
SELECT hex(c1),hex(c2) FROM t5;
 
8038
 
 
8039
 
 
8040
# Delete using various access methods
 
8041
TRUNCATE t5;
 
8042
TRUNCATE t6;
 
8043
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8044
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8045
 
 
8046
# Update using Const
 
8047
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8048
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
8049
--sorted_result
 
8050
SELECT hex(c1),hex(c2) FROM t5;
 
8051
 
 
8052
# Update using range
 
8053
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8054
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8055
--sorted_result
 
8056
SELECT hex(c1),hex(c2) FROM t5;
 
8057
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8058
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8059
--sorted_result
 
8060
SELECT hex(c1),hex(c2) FROM t5;
 
8061
 
 
8062
# Update using eq_ref
 
8063
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8064
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8065
 
 
8066
# Droping the tables
 
8067
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
8068
 
 
8069
####Checking the bit values####
 
8070
SELECT 0 + b'1010'; 
 
8071
SELECT 0 + (1010<<8);
 
8072
######### INSERT/SELECT######### 
 
8073
 
 
8074
#### Insert and select 8 bit data into the table####
 
8075
CREATE TABLE t1(c1 BIT(8));
 
8076
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
8077
let $i=8;
 
8078
while($i){
 
8079
let $j=$i/2;
 
8080
eval set @v1=$i;
 
8081
eval set @v2=$j;
 
8082
set @v3=repeat('1',@v1);
 
8083
let $STR0= query_get_value(select @v3 as I,I,1);
 
8084
eval INSERT INTO t1 VALUES (b'$STR0');
 
8085
set @v3=repeat('0',@v1);
 
8086
let $STR1= query_get_value(select @v3 as I,I,1);
 
8087
eval INSERT INTO t1 VALUES (b'$STR1');
 
8088
set @v3=repeat('01',@v2);
 
8089
let $STR2= query_get_value(select @v3 as I,I,1);
 
8090
eval INSERT INTO t1 VALUES (b'$STR2');
 
8091
set @v3=repeat('10',@v2);
 
8092
let $STR3= query_get_value(select @v3 as I,I,1);
 
8093
eval INSERT INTO t1 VALUES (b'$STR3');
 
8094
set @v3=repeat('1',@v1);
 
8095
set @v4=repeat('01',@v2);
 
8096
set @v5=repeat('10',@v2);
 
8097
let $STR0= query_get_value(select @v3 as I,I,1);
 
8098
let $STR2= query_get_value(select @v4 as I,I,1);
 
8099
let $STR3= query_get_value(select @v5 as I,I,1);
 
8100
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
8101
dec $i;
 
8102
}
 
8103
INSERT INTO t1 VALUES (b'1010');
 
8104
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
8105
--sorted_result
 
8106
SELECT HEX(c1) FROM t1;
 
8107
--sorted_result
 
8108
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
8109
--sorted_result
 
8110
SELECT OCT(c1) FROM t1;
 
8111
--sorted_result
 
8112
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
8113
--sorted_result
 
8114
SELECT BIN(c1) FROM t1;
 
8115
--sorted_result
 
8116
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
8117
--sorted_result
 
8118
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
8119
--sorted_result
 
8120
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
8121
--sorted_result
 
8122
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
8123
--sorted_result
 
8124
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
8125
--sorted_result
 
8126
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
8127
--sorted_result
 
8128
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
8129
--sorted_result
 
8130
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
8131
--error 1439
 
8132
CREATE TABLE t3 (c1 BIT(65));
 
8133
# Checking for bug #9571
 
8134
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
8135
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
8136
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
8137
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
8138
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8139
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8140
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8141
--sorted_result
 
8142
SELECT HEX(c1),HEX(c2) FROM t5;
 
8143
 
 
8144
#Insert permissible NULLs
 
8145
INSERT IGNORE INTO t5 VALUES(96,null);
 
8146
INSERT INTO t6 VALUES(null,null);
 
8147
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
8148
## Full table scan ##
 
8149
--sorted_result
 
8150
SELECT HEX(c1),HEX(c2) FROM t5;
 
8151
--sorted_result
 
8152
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
8153
--sorted_result
 
8154
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
8155
## Forward index scan, covering ##
 
8156
--sorted_result
 
8157
SELECT bin(c1) FROM t5;
 
8158
## Backward index scan, covering ##
 
8159
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
8160
## Forward index scan, non-covering ##
 
8161
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
8162
## Backward index scan, non-covering ##
 
8163
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
8164
## ref type access
 
8165
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
8166
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
8167
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
8168
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
8169
## Range access, ordered ##
 
8170
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
8171
 
 
8172
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
8173
 
 
8174
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
8175
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
8176
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
8177
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
8178
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
8179
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
8180
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
8181
 
 
8182
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
8183
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
8184
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
8185
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
8186
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
8187
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
8188
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
8189
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
8190
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
8191
## Range access, backwards scan ##
 
8192
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
8193
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
8194
 
 
8195
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
8196
 
 
8197
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
8198
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
8199
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
8200
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
8201
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
8202
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
8203
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
8204
 
 
8205
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
8206
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
8207
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
8208
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
8209
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
8210
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
8211
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
8212
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
8213
#Inserting different charachers
 
8214
CREATE TABLE t7(c1  BIT(8));
 
8215
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
8216
--sorted_result
 
8217
SELECT * FROM t7;
 
8218
############# UPDATE ###########
 
8219
 
 
8220
# Update order by limit
 
8221
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8222
 
 
8223
 
 
8224
# Update with arithmetic operations 
 
8225
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
8226
 
 
8227
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
8228
 
 
8229
 
 
8230
# Update with NULL ( NULL to number & number to NULL)
 
8231
UPDATE t6 SET c2=NULL WHERE c1=23;
 
8232
 
 
8233
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
8234
 
 
8235
 
 
8236
# Update range values
 
8237
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
8238
 
 
8239
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
8240
 
 
8241
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
8242
 
 
8243
 
 
8244
# Update outside range would be clipped to closest endpoints
 
8245
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
8246
 
 
8247
UPDATE t6 SET c2=-1 WHERE c1=94;
 
8248
 
 
8249
 
 
8250
# Update ignore on bad null error
 
8251
--sorted_result
 
8252
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
8253
SET SQL_MODE=STRICT_ALL_TABLES;
 
8254
--error ER_BAD_NULL_ERROR
 
8255
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
8256
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
8257
--sorted_result
 
8258
SELECT hex(c1),hex(c2) FROM t5;
 
8259
SET SQL_MODE=DEFAULT;
 
8260
 
 
8261
#Multi table update
 
8262
--disable_warnings
 
8263
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8264
--enable_warnings
 
8265
--sorted_result
 
8266
SELECT hex(c1),hex(c2) FROM t5;
 
8267
 
 
8268
 
 
8269
# Update using various access methods
 
8270
TRUNCATE t5;
 
8271
TRUNCATE t6;
 
8272
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8273
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8274
 
 
8275
# Update using Const
 
8276
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8277
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
8278
--sorted_result
 
8279
SELECT hex(c1),hex(c2) FROM t5;
 
8280
 
 
8281
# Update using range
 
8282
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8283
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
8284
--sorted_result
 
8285
SELECT hex(c1),hex(c2) FROM t5;
 
8286
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8287
--disable_warnings
 
8288
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
8289
--enable_warnings
 
8290
--sorted_result
 
8291
SELECT hex(c1),hex(c2) FROM t5;
 
8292
 
 
8293
# Update using eq_ref
 
8294
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8295
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8296
 
 
8297
############# DELETE ###########
 
8298
 
 
8299
TRUNCATE t5;
 
8300
TRUNCATE t6;
 
8301
 
 
8302
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8303
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8304
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
8305
 
 
8306
# Delete by order by limit
 
8307
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8308
 
 
8309
 
 
8310
# Delete rows with NULL column
 
8311
DELETE FROM t6 WHERE c2=NULL;
 
8312
 
 
8313
 
 
8314
# Delete with range values 
 
8315
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
8316
 
 
8317
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
8318
 
 
8319
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
8320
 
 
8321
 
 
8322
#Multi table delete
 
8323
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8324
--sorted_result
 
8325
SELECT hex(c1),hex(c2) FROM t5;
 
8326
 
 
8327
 
 
8328
# Delete using various access methods
 
8329
TRUNCATE t5;
 
8330
TRUNCATE t6;
 
8331
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8332
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8333
 
 
8334
# Update using Const
 
8335
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8336
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
8337
--sorted_result
 
8338
SELECT hex(c1),hex(c2) FROM t5;
 
8339
 
 
8340
# Update using range
 
8341
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8342
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8343
--sorted_result
 
8344
SELECT hex(c1),hex(c2) FROM t5;
 
8345
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8346
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8347
--sorted_result
 
8348
SELECT hex(c1),hex(c2) FROM t5;
 
8349
 
 
8350
# Update using eq_ref
 
8351
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8352
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8353
 
 
8354
# Droping the tables
 
8355
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
8356
 
 
8357
####Checking the bit values####
 
8358
SELECT 0 + b'1010'; 
 
8359
SELECT 0 + (1010<<16);
 
8360
######### INSERT/SELECT######### 
 
8361
 
 
8362
#### Insert and select 16 bit data into the table####
 
8363
CREATE TABLE t1(c1 BIT(16));
 
8364
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
8365
let $i=16;
 
8366
while($i){
 
8367
let $j=$i/2;
 
8368
eval set @v1=$i;
 
8369
eval set @v2=$j;
 
8370
set @v3=repeat('1',@v1);
 
8371
let $STR0= query_get_value(select @v3 as I,I,1);
 
8372
eval INSERT INTO t1 VALUES (b'$STR0');
 
8373
set @v3=repeat('0',@v1);
 
8374
let $STR1= query_get_value(select @v3 as I,I,1);
 
8375
eval INSERT INTO t1 VALUES (b'$STR1');
 
8376
set @v3=repeat('01',@v2);
 
8377
let $STR2= query_get_value(select @v3 as I,I,1);
 
8378
eval INSERT INTO t1 VALUES (b'$STR2');
 
8379
set @v3=repeat('10',@v2);
 
8380
let $STR3= query_get_value(select @v3 as I,I,1);
 
8381
eval INSERT INTO t1 VALUES (b'$STR3');
 
8382
set @v3=repeat('1',@v1);
 
8383
set @v4=repeat('01',@v2);
 
8384
set @v5=repeat('10',@v2);
 
8385
let $STR0= query_get_value(select @v3 as I,I,1);
 
8386
let $STR2= query_get_value(select @v4 as I,I,1);
 
8387
let $STR3= query_get_value(select @v5 as I,I,1);
 
8388
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
8389
dec $i;
 
8390
}
 
8391
INSERT INTO t1 VALUES (b'1010');
 
8392
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
8393
--sorted_result
 
8394
SELECT HEX(c1) FROM t1;
 
8395
--sorted_result
 
8396
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
8397
--sorted_result
 
8398
SELECT OCT(c1) FROM t1;
 
8399
--sorted_result
 
8400
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
8401
--sorted_result
 
8402
SELECT BIN(c1) FROM t1;
 
8403
--sorted_result
 
8404
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
8405
--sorted_result
 
8406
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
8407
--sorted_result
 
8408
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
8409
--sorted_result
 
8410
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
8411
--sorted_result
 
8412
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
8413
--sorted_result
 
8414
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
8415
--sorted_result
 
8416
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
8417
--sorted_result
 
8418
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
8419
--error 1439
 
8420
CREATE TABLE t3 (c1 BIT(65));
 
8421
# Checking for bug #9571
 
8422
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
8423
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
8424
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
8425
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
8426
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8427
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8428
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8429
--sorted_result
 
8430
SELECT HEX(c1),HEX(c2) FROM t5;
 
8431
 
 
8432
#Insert permissible NULLs
 
8433
INSERT IGNORE INTO t5 VALUES(96,null);
 
8434
INSERT INTO t6 VALUES(null,null);
 
8435
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
8436
## Full table scan ##
 
8437
--sorted_result
 
8438
SELECT HEX(c1),HEX(c2) FROM t5;
 
8439
--sorted_result
 
8440
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
8441
--sorted_result
 
8442
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
8443
## Forward index scan, covering ##
 
8444
--sorted_result
 
8445
SELECT bin(c1) FROM t5;
 
8446
## Backward index scan, covering ##
 
8447
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
8448
## Forward index scan, non-covering ##
 
8449
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
8450
## Backward index scan, non-covering ##
 
8451
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
8452
## ref type access
 
8453
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
8454
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
8455
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
8456
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
8457
## Range access, ordered ##
 
8458
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
8459
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
8460
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
8461
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
8462
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
8463
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
8464
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
8465
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
8466
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
8467
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
8468
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
8469
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
8470
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
8471
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
8472
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
8473
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
8474
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
8475
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
8476
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
8477
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
8478
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
8479
## Range access, backwards scan ##
 
8480
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
8481
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
8482
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
8483
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
8484
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
8485
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
8486
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
8487
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
8488
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
8489
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
8490
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
8491
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
8492
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
8493
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
8494
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
8495
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
8496
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
8497
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
8498
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
8499
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
8500
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
8501
#Inserting different charachers
 
8502
CREATE TABLE t7(c1  BIT(16));
 
8503
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
8504
--sorted_result
 
8505
SELECT * FROM t7;
 
8506
############# UPDATE ###########
 
8507
 
 
8508
# Update order by limit
 
8509
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8510
 
 
8511
 
 
8512
# Update with arithmetic operations 
 
8513
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
8514
 
 
8515
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
8516
 
 
8517
 
 
8518
# Update with NULL ( NULL to number & number to NULL)
 
8519
UPDATE t6 SET c2=NULL WHERE c1=23;
 
8520
 
 
8521
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
8522
 
 
8523
 
 
8524
# Update range values
 
8525
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
8526
 
 
8527
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
8528
 
 
8529
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
8530
 
 
8531
 
 
8532
# Update outside range would be clipped to closest endpoints
 
8533
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
8534
 
 
8535
UPDATE t6 SET c2=-1 WHERE c1=94;
 
8536
 
 
8537
 
 
8538
# Update ignore on bad null error
 
8539
--sorted_result
 
8540
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
8541
SET SQL_MODE=STRICT_ALL_TABLES;
 
8542
--error ER_BAD_NULL_ERROR
 
8543
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
8544
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
8545
--sorted_result
 
8546
SELECT hex(c1),hex(c2) FROM t5;
 
8547
SET SQL_MODE=DEFAULT;
 
8548
 
 
8549
#Multi table update
 
8550
--disable_warnings
 
8551
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8552
--enable_warnings
 
8553
--sorted_result
 
8554
SELECT hex(c1),hex(c2) FROM t5;
 
8555
 
 
8556
 
 
8557
# Update using various access methods
 
8558
TRUNCATE t5;
 
8559
TRUNCATE t6;
 
8560
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8561
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8562
 
 
8563
# Update using Const
 
8564
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8565
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
8566
--sorted_result
 
8567
SELECT hex(c1),hex(c2) FROM t5;
 
8568
 
 
8569
# Update using range
 
8570
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8571
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
8572
--sorted_result
 
8573
SELECT hex(c1),hex(c2) FROM t5;
 
8574
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8575
--disable_warnings
 
8576
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
8577
--enable_warnings
 
8578
--sorted_result
 
8579
SELECT hex(c1),hex(c2) FROM t5;
 
8580
 
 
8581
# Update using eq_ref
 
8582
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8583
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8584
 
 
8585
############# DELETE ###########
 
8586
 
 
8587
TRUNCATE t5;
 
8588
TRUNCATE t6;
 
8589
 
 
8590
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8591
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8592
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
8593
 
 
8594
# Delete by order by limit
 
8595
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8596
 
 
8597
 
 
8598
# Delete rows with NULL column
 
8599
DELETE FROM t6 WHERE c2=NULL;
 
8600
 
 
8601
 
 
8602
# Delete with range values 
 
8603
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
8604
 
 
8605
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
8606
 
 
8607
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
8608
 
 
8609
 
 
8610
#Multi table delete
 
8611
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8612
--sorted_result
 
8613
SELECT hex(c1),hex(c2) FROM t5;
 
8614
 
 
8615
 
 
8616
# Delete using various access methods
 
8617
TRUNCATE t5;
 
8618
TRUNCATE t6;
 
8619
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8620
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8621
 
 
8622
# Update using Const
 
8623
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8624
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
8625
--sorted_result
 
8626
SELECT hex(c1),hex(c2) FROM t5;
 
8627
 
 
8628
# Update using range
 
8629
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8630
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8631
--sorted_result
 
8632
SELECT hex(c1),hex(c2) FROM t5;
 
8633
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8634
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8635
--sorted_result
 
8636
SELECT hex(c1),hex(c2) FROM t5;
 
8637
 
 
8638
# Update using eq_ref
 
8639
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8640
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8641
 
 
8642
# Droping the tables
 
8643
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
8644
 
 
8645
####Checking the bit values####
 
8646
SELECT 0 + b'1010'; 
 
8647
SELECT 0 + (1010<<32);
 
8648
######### INSERT/SELECT######### 
 
8649
 
 
8650
#### Insert and select 32 bit data into the table####
 
8651
CREATE TABLE t1(c1 BIT(32));
 
8652
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
8653
let $i=32;
 
8654
while($i){
 
8655
let $j=$i/2;
 
8656
eval set @v1=$i;
 
8657
eval set @v2=$j;
 
8658
set @v3=repeat('1',@v1);
 
8659
let $STR0= query_get_value(select @v3 as I,I,1);
 
8660
eval INSERT INTO t1 VALUES (b'$STR0');
 
8661
set @v3=repeat('0',@v1);
 
8662
let $STR1= query_get_value(select @v3 as I,I,1);
 
8663
eval INSERT INTO t1 VALUES (b'$STR1');
 
8664
set @v3=repeat('01',@v2);
 
8665
let $STR2= query_get_value(select @v3 as I,I,1);
 
8666
eval INSERT INTO t1 VALUES (b'$STR2');
 
8667
set @v3=repeat('10',@v2);
 
8668
let $STR3= query_get_value(select @v3 as I,I,1);
 
8669
eval INSERT INTO t1 VALUES (b'$STR3');
 
8670
set @v3=repeat('1',@v1);
 
8671
set @v4=repeat('01',@v2);
 
8672
set @v5=repeat('10',@v2);
 
8673
let $STR0= query_get_value(select @v3 as I,I,1);
 
8674
let $STR2= query_get_value(select @v4 as I,I,1);
 
8675
let $STR3= query_get_value(select @v5 as I,I,1);
 
8676
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
8677
dec $i;
 
8678
}
 
8679
INSERT INTO t1 VALUES (b'1010');
 
8680
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
8681
--sorted_result
 
8682
SELECT HEX(c1) FROM t1;
 
8683
--sorted_result
 
8684
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
8685
--sorted_result
 
8686
SELECT OCT(c1) FROM t1;
 
8687
--sorted_result
 
8688
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
8689
--sorted_result
 
8690
SELECT BIN(c1) FROM t1;
 
8691
--sorted_result
 
8692
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
8693
--sorted_result
 
8694
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
8695
--sorted_result
 
8696
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
8697
--sorted_result
 
8698
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
8699
--sorted_result
 
8700
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
8701
--sorted_result
 
8702
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
8703
--sorted_result
 
8704
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
8705
--sorted_result
 
8706
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
8707
--error 1439
 
8708
CREATE TABLE t3 (c1 BIT(65));
 
8709
# Checking for bug #9571
 
8710
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
8711
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
8712
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
8713
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
8714
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8715
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8716
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8717
--sorted_result
 
8718
SELECT HEX(c1),HEX(c2) FROM t5;
 
8719
 
 
8720
#Insert permissible NULLs
 
8721
INSERT IGNORE INTO t5 VALUES(96,null);
 
8722
INSERT INTO t6 VALUES(null,null);
 
8723
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
8724
## Full table scan ##
 
8725
--sorted_result
 
8726
SELECT HEX(c1),HEX(c2) FROM t5;
 
8727
--sorted_result
 
8728
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
8729
--sorted_result
 
8730
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
8731
## Forward index scan, covering ##
 
8732
--sorted_result
 
8733
SELECT bin(c1) FROM t5;
 
8734
## Backward index scan, covering ##
 
8735
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
8736
## Forward index scan, non-covering ##
 
8737
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
8738
## Backward index scan, non-covering ##
 
8739
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
8740
## ref type access
 
8741
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
8742
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
8743
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
8744
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
8745
## Range access, ordered ##
 
8746
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
8747
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
8748
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
8749
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
8750
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
8751
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
8752
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
8753
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
8754
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
8755
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
8756
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
8757
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
8758
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
8759
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
8760
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
8761
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
8762
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
8763
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
8764
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
8765
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
8766
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
8767
## Range access, backwards scan ##
 
8768
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
8769
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
8770
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
8771
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
8772
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
8773
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
8774
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
8775
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
8776
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
8777
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
8778
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
8779
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
8780
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
8781
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
8782
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
8783
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
8784
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
8785
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
8786
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
8787
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
8788
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
8789
#Inserting different charachers
 
8790
CREATE TABLE t7(c1  BIT(32));
 
8791
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
8792
--sorted_result
 
8793
SELECT * FROM t7;
 
8794
############# UPDATE ###########
 
8795
 
 
8796
# Update order by limit
 
8797
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8798
 
 
8799
 
 
8800
# Update with arithmetic operations 
 
8801
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
8802
 
 
8803
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
8804
 
 
8805
 
 
8806
# Update with NULL ( NULL to number & number to NULL)
 
8807
UPDATE t6 SET c2=NULL WHERE c1=23;
 
8808
 
 
8809
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
8810
 
 
8811
 
 
8812
# Update range values
 
8813
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
8814
 
 
8815
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
8816
 
 
8817
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
8818
 
 
8819
 
 
8820
# Update outside range would be clipped to closest endpoints
 
8821
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
8822
 
 
8823
UPDATE t6 SET c2=-1 WHERE c1=94;
 
8824
 
 
8825
 
 
8826
# Update ignore on bad null error
 
8827
--sorted_result
 
8828
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
8829
SET SQL_MODE=STRICT_ALL_TABLES;
 
8830
--error ER_BAD_NULL_ERROR
 
8831
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
8832
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
8833
--sorted_result
 
8834
SELECT hex(c1),hex(c2) FROM t5;
 
8835
SET SQL_MODE=DEFAULT;
 
8836
 
 
8837
#Multi table update
 
8838
--disable_warnings
 
8839
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8840
--enable_warnings
 
8841
--sorted_result
 
8842
SELECT hex(c1),hex(c2) FROM t5;
 
8843
 
 
8844
 
 
8845
# Update using various access methods
 
8846
TRUNCATE t5;
 
8847
TRUNCATE t6;
 
8848
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8849
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8850
 
 
8851
# Update using Const
 
8852
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8853
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
8854
--sorted_result
 
8855
SELECT hex(c1),hex(c2) FROM t5;
 
8856
 
 
8857
# Update using range
 
8858
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8859
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
8860
--sorted_result
 
8861
SELECT hex(c1),hex(c2) FROM t5;
 
8862
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8863
--disable_warnings
 
8864
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
8865
--enable_warnings
 
8866
--sorted_result
 
8867
SELECT hex(c1),hex(c2) FROM t5;
 
8868
 
 
8869
# Update using eq_ref
 
8870
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8871
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8872
 
 
8873
############# DELETE ###########
 
8874
 
 
8875
TRUNCATE t5;
 
8876
TRUNCATE t6;
 
8877
 
 
8878
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
8879
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
8880
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
8881
 
 
8882
# Delete by order by limit
 
8883
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
8884
 
 
8885
 
 
8886
# Delete rows with NULL column
 
8887
DELETE FROM t6 WHERE c2=NULL;
 
8888
 
 
8889
 
 
8890
# Delete with range values 
 
8891
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
8892
 
 
8893
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
8894
 
 
8895
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
8896
 
 
8897
 
 
8898
#Multi table delete
 
8899
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
8900
--sorted_result
 
8901
SELECT hex(c1),hex(c2) FROM t5;
 
8902
 
 
8903
 
 
8904
# Delete using various access methods
 
8905
TRUNCATE t5;
 
8906
TRUNCATE t6;
 
8907
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8908
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
8909
 
 
8910
# Update using Const
 
8911
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
8912
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
8913
--sorted_result
 
8914
SELECT hex(c1),hex(c2) FROM t5;
 
8915
 
 
8916
# Update using range
 
8917
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8918
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
8919
--sorted_result
 
8920
SELECT hex(c1),hex(c2) FROM t5;
 
8921
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8922
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
8923
--sorted_result
 
8924
SELECT hex(c1),hex(c2) FROM t5;
 
8925
 
 
8926
# Update using eq_ref
 
8927
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8928
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
8929
 
 
8930
# Droping the tables
 
8931
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
8932
 
 
8933
####Checking the bit values####
 
8934
SELECT 0 + b'1010'; 
 
8935
SELECT 0 + (1010<<64);
 
8936
######### INSERT/SELECT######### 
 
8937
 
 
8938
#### Insert and select 64 bit data into the table####
 
8939
CREATE TABLE t1(c1 BIT(64));
 
8940
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
8941
let $i=64;
 
8942
while($i){
 
8943
let $j=$i/2;
 
8944
eval set @v1=$i;
 
8945
eval set @v2=$j;
 
8946
set @v3=repeat('1',@v1);
 
8947
let $STR0= query_get_value(select @v3 as I,I,1);
 
8948
eval INSERT INTO t1 VALUES (b'$STR0');
 
8949
set @v3=repeat('0',@v1);
 
8950
let $STR1= query_get_value(select @v3 as I,I,1);
 
8951
eval INSERT INTO t1 VALUES (b'$STR1');
 
8952
set @v3=repeat('01',@v2);
 
8953
let $STR2= query_get_value(select @v3 as I,I,1);
 
8954
eval INSERT INTO t1 VALUES (b'$STR2');
 
8955
set @v3=repeat('10',@v2);
 
8956
let $STR3= query_get_value(select @v3 as I,I,1);
 
8957
eval INSERT INTO t1 VALUES (b'$STR3');
 
8958
set @v3=repeat('1',@v1);
 
8959
set @v4=repeat('01',@v2);
 
8960
set @v5=repeat('10',@v2);
 
8961
let $STR0= query_get_value(select @v3 as I,I,1);
 
8962
let $STR2= query_get_value(select @v4 as I,I,1);
 
8963
let $STR3= query_get_value(select @v5 as I,I,1);
 
8964
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
8965
dec $i;
 
8966
}
 
8967
INSERT INTO t1 VALUES (b'1010');
 
8968
INSERT INTO t2 VALUES (b'1010', b'1010', b'1010');
 
8969
--sorted_result
 
8970
SELECT HEX(c1) FROM t1;
 
8971
--sorted_result
 
8972
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
8973
--sorted_result
 
8974
SELECT OCT(c1) FROM t1;
 
8975
--sorted_result
 
8976
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
8977
--sorted_result
 
8978
SELECT BIN(c1) FROM t1;
 
8979
--sorted_result
 
8980
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
8981
--sorted_result
 
8982
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
8983
--sorted_result
 
8984
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
8985
--sorted_result
 
8986
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
8987
--sorted_result
 
8988
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
8989
--sorted_result
 
8990
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
8991
--sorted_result
 
8992
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
8993
--sorted_result
 
8994
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
8995
--error 1439
 
8996
CREATE TABLE t3 (c1 BIT(65));
 
8997
# Checking for bug #9571
 
8998
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
8999
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
9000
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
9001
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
9002
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9003
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9004
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9005
--sorted_result
 
9006
SELECT HEX(c1),HEX(c2) FROM t5;
 
9007
 
 
9008
#Insert permissible NULLs
 
9009
INSERT IGNORE INTO t5 VALUES(96,null);
 
9010
INSERT INTO t6 VALUES(null,null);
 
9011
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
9012
## Full table scan ##
 
9013
--sorted_result
 
9014
SELECT HEX(c1),HEX(c2) FROM t5;
 
9015
--sorted_result
 
9016
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
9017
--sorted_result
 
9018
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
9019
## Forward index scan, covering ##
 
9020
--sorted_result
 
9021
SELECT bin(c1) FROM t5;
 
9022
## Backward index scan, covering ##
 
9023
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
9024
## Forward index scan, non-covering ##
 
9025
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
9026
## Backward index scan, non-covering ##
 
9027
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
9028
## ref type access
 
9029
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
9030
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
9031
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
9032
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
9033
## Range access, ordered ##
 
9034
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
9035
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
9036
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
9037
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
9038
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
9039
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
9040
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
9041
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
9042
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
9043
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
9044
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
9045
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
9046
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
9047
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
9048
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
9049
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
9050
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
9051
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
9052
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
9053
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
9054
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
9055
## Range access, backwards scan ##
 
9056
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
9057
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
9058
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
9059
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
9060
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
9061
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
9062
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
9063
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
9064
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
9065
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
9066
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
9067
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
9068
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
9069
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
9070
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
9071
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
9072
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
9073
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
9074
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
9075
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
9076
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
9077
#Inserting different charachers
 
9078
CREATE TABLE t7(c1  BIT(64));
 
9079
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
9080
--sorted_result
 
9081
SELECT * FROM t7;
 
9082
############# UPDATE ###########
 
9083
 
 
9084
# Update order by limit
 
9085
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9086
 
 
9087
 
 
9088
# Update with arithmetic operations 
 
9089
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
9090
 
 
9091
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
9092
 
 
9093
 
 
9094
# Update with NULL ( NULL to number & number to NULL)
 
9095
UPDATE t6 SET c2=NULL WHERE c1=23;
 
9096
 
 
9097
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
9098
 
 
9099
 
 
9100
# Update range values
 
9101
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
9102
 
 
9103
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
9104
 
 
9105
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
9106
 
 
9107
 
 
9108
# Update outside range would be clipped to closest endpoints
 
9109
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
9110
 
 
9111
UPDATE t6 SET c2=-1 WHERE c1=94;
 
9112
 
 
9113
 
 
9114
# Update ignore on bad null error
 
9115
--sorted_result
 
9116
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
9117
SET SQL_MODE=STRICT_ALL_TABLES;
 
9118
--error ER_BAD_NULL_ERROR
 
9119
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
9120
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
9121
--sorted_result
 
9122
SELECT hex(c1),hex(c2) FROM t5;
 
9123
SET SQL_MODE=DEFAULT;
 
9124
 
 
9125
#Multi table update
 
9126
--disable_warnings
 
9127
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9128
--enable_warnings
 
9129
--sorted_result
 
9130
SELECT hex(c1),hex(c2) FROM t5;
 
9131
 
 
9132
 
 
9133
# Update using various access methods
 
9134
TRUNCATE t5;
 
9135
TRUNCATE t6;
 
9136
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9137
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9138
 
 
9139
# Update using Const
 
9140
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9141
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
9142
--sorted_result
 
9143
SELECT hex(c1),hex(c2) FROM t5;
 
9144
 
 
9145
# Update using range
 
9146
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9147
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
9148
--sorted_result
 
9149
SELECT hex(c1),hex(c2) FROM t5;
 
9150
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9151
--disable_warnings
 
9152
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
9153
--enable_warnings
 
9154
--sorted_result
 
9155
SELECT hex(c1),hex(c2) FROM t5;
 
9156
 
 
9157
# Update using eq_ref
 
9158
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9159
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9160
 
 
9161
############# DELETE ###########
 
9162
 
 
9163
TRUNCATE t5;
 
9164
TRUNCATE t6;
 
9165
 
 
9166
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9167
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9168
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
9169
 
 
9170
# Delete by order by limit
 
9171
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9172
 
 
9173
 
 
9174
# Delete rows with NULL column
 
9175
DELETE FROM t6 WHERE c2=NULL;
 
9176
 
 
9177
 
 
9178
# Delete with range values 
 
9179
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
9180
 
 
9181
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
9182
 
 
9183
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
9184
 
 
9185
 
 
9186
#Multi table delete
 
9187
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9188
--sorted_result
 
9189
SELECT hex(c1),hex(c2) FROM t5;
 
9190
 
 
9191
 
 
9192
# Delete using various access methods
 
9193
TRUNCATE t5;
 
9194
TRUNCATE t6;
 
9195
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9196
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9197
 
 
9198
# Update using Const
 
9199
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9200
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
9201
--sorted_result
 
9202
SELECT hex(c1),hex(c2) FROM t5;
 
9203
 
 
9204
# Update using range
 
9205
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9206
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9207
--sorted_result
 
9208
SELECT hex(c1),hex(c2) FROM t5;
 
9209
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9210
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9211
--sorted_result
 
9212
SELECT hex(c1),hex(c2) FROM t5;
 
9213
 
 
9214
# Update using eq_ref
 
9215
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9216
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9217
 
 
9218
# Droping the tables
 
9219
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
9220
 
 
9221
####Checking the bit values####
 
9222
SELECT 0 + b'1010101010101010'; 
 
9223
SELECT 0 + (1010101010101010<<0);
 
9224
######### INSERT/SELECT######### 
 
9225
 
 
9226
#### Insert and select 0 bit data into the table####
 
9227
CREATE TABLE t1(c1 BIT(0));
 
9228
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
9229
let $i=0;
 
9230
while($i){
 
9231
let $j=$i/2;
 
9232
eval set @v1=$i;
 
9233
eval set @v2=$j;
 
9234
set @v3=repeat('1',@v1);
 
9235
let $STR0= query_get_value(select @v3 as I,I,1);
 
9236
eval INSERT INTO t1 VALUES (b'$STR0');
 
9237
set @v3=repeat('0',@v1);
 
9238
let $STR1= query_get_value(select @v3 as I,I,1);
 
9239
eval INSERT INTO t1 VALUES (b'$STR1');
 
9240
set @v3=repeat('01',@v2);
 
9241
let $STR2= query_get_value(select @v3 as I,I,1);
 
9242
eval INSERT INTO t1 VALUES (b'$STR2');
 
9243
set @v3=repeat('10',@v2);
 
9244
let $STR3= query_get_value(select @v3 as I,I,1);
 
9245
eval INSERT INTO t1 VALUES (b'$STR3');
 
9246
set @v3=repeat('1',@v1);
 
9247
set @v4=repeat('01',@v2);
 
9248
set @v5=repeat('10',@v2);
 
9249
let $STR0= query_get_value(select @v3 as I,I,1);
 
9250
let $STR2= query_get_value(select @v4 as I,I,1);
 
9251
let $STR3= query_get_value(select @v5 as I,I,1);
 
9252
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
9253
dec $i;
 
9254
}
 
9255
INSERT INTO t1 VALUES (b'1010101010101010');
 
9256
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
9257
--sorted_result
 
9258
SELECT HEX(c1) FROM t1;
 
9259
--sorted_result
 
9260
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
9261
--sorted_result
 
9262
SELECT OCT(c1) FROM t1;
 
9263
--sorted_result
 
9264
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
9265
--sorted_result
 
9266
SELECT BIN(c1) FROM t1;
 
9267
--sorted_result
 
9268
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
9269
--sorted_result
 
9270
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
9271
--sorted_result
 
9272
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
9273
--sorted_result
 
9274
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
9275
--sorted_result
 
9276
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
9277
--sorted_result
 
9278
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
9279
--sorted_result
 
9280
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
9281
--sorted_result
 
9282
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
9283
--error 1439
 
9284
CREATE TABLE t3 (c1 BIT(65));
 
9285
# Checking for bug #9571
 
9286
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
9287
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
9288
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
9289
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
9290
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9291
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9292
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9293
--sorted_result
 
9294
SELECT HEX(c1),HEX(c2) FROM t5;
 
9295
 
 
9296
#Insert permissible NULLs
 
9297
INSERT IGNORE INTO t5 VALUES(96,null);
 
9298
INSERT INTO t6 VALUES(null,null);
 
9299
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
9300
## Full table scan ##
 
9301
--sorted_result
 
9302
SELECT HEX(c1),HEX(c2) FROM t5;
 
9303
--sorted_result
 
9304
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
9305
--sorted_result
 
9306
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
9307
## Forward index scan, covering ##
 
9308
--sorted_result
 
9309
SELECT bin(c1) FROM t5;
 
9310
## Backward index scan, covering ##
 
9311
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
9312
## Forward index scan, non-covering ##
 
9313
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
9314
## Backward index scan, non-covering ##
 
9315
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
9316
## ref type access
 
9317
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
9318
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
9319
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
9320
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
9321
## Range access, ordered ##
 
9322
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
9323
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
9324
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
9325
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
9326
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
9327
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
9328
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
9329
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
9330
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
9331
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
9332
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
9333
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
9334
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
9335
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
9336
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
9337
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
9338
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
9339
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
9340
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
9341
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
9342
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
9343
## Range access, backwards scan ##
 
9344
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
9345
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
9346
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
9347
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
9348
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
9349
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
9350
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
9351
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
9352
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
9353
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
9354
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
9355
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
9356
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
9357
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
9358
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
9359
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
9360
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
9361
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
9362
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
9363
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
9364
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
9365
#Inserting different charachers
 
9366
CREATE TABLE t7(c1  BIT(0));
 
9367
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
9368
--sorted_result
 
9369
SELECT * FROM t7;
 
9370
############# UPDATE ###########
 
9371
 
 
9372
# Update order by limit
 
9373
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9374
 
 
9375
 
 
9376
# Update with arithmetic operations 
 
9377
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
9378
 
 
9379
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
9380
 
 
9381
 
 
9382
# Update with NULL ( NULL to number & number to NULL)
 
9383
UPDATE t6 SET c2=NULL WHERE c1=23;
 
9384
 
 
9385
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
9386
 
 
9387
 
 
9388
# Update range values
 
9389
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
9390
 
 
9391
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
9392
 
 
9393
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
9394
 
 
9395
 
 
9396
# Update outside range would be clipped to closest endpoints
 
9397
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
9398
 
 
9399
UPDATE t6 SET c2=-1 WHERE c1=94;
 
9400
 
 
9401
 
 
9402
# Update ignore on bad null error
 
9403
--sorted_result
 
9404
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
9405
SET SQL_MODE=STRICT_ALL_TABLES;
 
9406
--error ER_BAD_NULL_ERROR
 
9407
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
9408
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
9409
--sorted_result
 
9410
SELECT hex(c1),hex(c2) FROM t5;
 
9411
SET SQL_MODE=DEFAULT;
 
9412
 
 
9413
#Multi table update
 
9414
--disable_warnings
 
9415
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9416
--enable_warnings
 
9417
--sorted_result
 
9418
SELECT hex(c1),hex(c2) FROM t5;
 
9419
 
 
9420
 
 
9421
# Update using various access methods
 
9422
TRUNCATE t5;
 
9423
TRUNCATE t6;
 
9424
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9425
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9426
 
 
9427
# Update using Const
 
9428
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9429
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
9430
--sorted_result
 
9431
SELECT hex(c1),hex(c2) FROM t5;
 
9432
 
 
9433
# Update using range
 
9434
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9435
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
9436
--sorted_result
 
9437
SELECT hex(c1),hex(c2) FROM t5;
 
9438
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9439
--disable_warnings
 
9440
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
9441
--enable_warnings
 
9442
--sorted_result
 
9443
SELECT hex(c1),hex(c2) FROM t5;
 
9444
 
 
9445
# Update using eq_ref
 
9446
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9447
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9448
 
 
9449
############# DELETE ###########
 
9450
 
 
9451
TRUNCATE t5;
 
9452
TRUNCATE t6;
 
9453
 
 
9454
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9455
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9456
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
9457
 
 
9458
# Delete by order by limit
 
9459
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9460
 
 
9461
 
 
9462
# Delete rows with NULL column
 
9463
DELETE FROM t6 WHERE c2=NULL;
 
9464
 
 
9465
 
 
9466
# Delete with range values 
 
9467
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
9468
 
 
9469
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
9470
 
 
9471
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
9472
 
 
9473
 
 
9474
#Multi table delete
 
9475
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9476
--sorted_result
 
9477
SELECT hex(c1),hex(c2) FROM t5;
 
9478
 
 
9479
 
 
9480
# Delete using various access methods
 
9481
TRUNCATE t5;
 
9482
TRUNCATE t6;
 
9483
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9484
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9485
 
 
9486
# Update using Const
 
9487
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9488
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
9489
--sorted_result
 
9490
SELECT hex(c1),hex(c2) FROM t5;
 
9491
 
 
9492
# Update using range
 
9493
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9494
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9495
--sorted_result
 
9496
SELECT hex(c1),hex(c2) FROM t5;
 
9497
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9498
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9499
--sorted_result
 
9500
SELECT hex(c1),hex(c2) FROM t5;
 
9501
 
 
9502
# Update using eq_ref
 
9503
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9504
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9505
 
 
9506
# Droping the tables
 
9507
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
9508
 
 
9509
####Checking the bit values####
 
9510
SELECT 0 + b'1010101010101010'; 
 
9511
SELECT 0 + (1010101010101010<<1);
 
9512
######### INSERT/SELECT######### 
 
9513
 
 
9514
#### Insert and select 1 bit data into the table####
 
9515
CREATE TABLE t1(c1 BIT(1));
 
9516
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
9517
let $i=1;
 
9518
while($i){
 
9519
let $j=$i/2;
 
9520
eval set @v1=$i;
 
9521
eval set @v2=$j;
 
9522
set @v3=repeat('1',@v1);
 
9523
let $STR0= query_get_value(select @v3 as I,I,1);
 
9524
eval INSERT INTO t1 VALUES (b'$STR0');
 
9525
set @v3=repeat('0',@v1);
 
9526
let $STR1= query_get_value(select @v3 as I,I,1);
 
9527
eval INSERT INTO t1 VALUES (b'$STR1');
 
9528
set @v3=repeat('01',@v2);
 
9529
let $STR2= query_get_value(select @v3 as I,I,1);
 
9530
eval INSERT INTO t1 VALUES (b'$STR2');
 
9531
set @v3=repeat('10',@v2);
 
9532
let $STR3= query_get_value(select @v3 as I,I,1);
 
9533
eval INSERT INTO t1 VALUES (b'$STR3');
 
9534
set @v3=repeat('1',@v1);
 
9535
set @v4=repeat('01',@v2);
 
9536
set @v5=repeat('10',@v2);
 
9537
let $STR0= query_get_value(select @v3 as I,I,1);
 
9538
let $STR2= query_get_value(select @v4 as I,I,1);
 
9539
let $STR3= query_get_value(select @v5 as I,I,1);
 
9540
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
9541
dec $i;
 
9542
}
 
9543
INSERT INTO t1 VALUES (b'1010101010101010');
 
9544
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
9545
--sorted_result
 
9546
SELECT HEX(c1) FROM t1;
 
9547
--sorted_result
 
9548
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
9549
--sorted_result
 
9550
SELECT OCT(c1) FROM t1;
 
9551
--sorted_result
 
9552
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
9553
--sorted_result
 
9554
SELECT BIN(c1) FROM t1;
 
9555
--sorted_result
 
9556
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
9557
--sorted_result
 
9558
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
9559
--sorted_result
 
9560
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
9561
--sorted_result
 
9562
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
9563
--sorted_result
 
9564
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
9565
--sorted_result
 
9566
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
9567
--sorted_result
 
9568
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
9569
--sorted_result
 
9570
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
9571
--error 1439
 
9572
CREATE TABLE t3 (c1 BIT(65));
 
9573
# Checking for bug #9571
 
9574
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
9575
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
9576
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
9577
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
9578
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9579
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9580
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9581
--sorted_result
 
9582
SELECT HEX(c1),HEX(c2) FROM t5;
 
9583
 
 
9584
#Insert permissible NULLs
 
9585
INSERT IGNORE INTO t5 VALUES(96,null);
 
9586
INSERT INTO t6 VALUES(null,null);
 
9587
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
9588
## Full table scan ##
 
9589
--sorted_result
 
9590
SELECT HEX(c1),HEX(c2) FROM t5;
 
9591
--sorted_result
 
9592
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
9593
--sorted_result
 
9594
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
9595
## Forward index scan, covering ##
 
9596
--sorted_result
 
9597
SELECT bin(c1) FROM t5;
 
9598
## Backward index scan, covering ##
 
9599
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
9600
## Forward index scan, non-covering ##
 
9601
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
9602
## Backward index scan, non-covering ##
 
9603
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
9604
## ref type access
 
9605
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
9606
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
9607
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
9608
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
9609
## Range access, ordered ##
 
9610
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
9611
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
9612
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
9613
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
9614
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
9615
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
9616
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
9617
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
9618
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
9619
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
9620
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
9621
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
9622
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
9623
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
9624
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
9625
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
9626
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
9627
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
9628
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
9629
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
9630
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
9631
## Range access, backwards scan ##
 
9632
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
9633
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
9634
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
9635
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
9636
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
9637
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
9638
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
9639
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
9640
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
9641
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
9642
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
9643
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
9644
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
9645
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
9646
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
9647
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
9648
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
9649
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
9650
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
9651
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
9652
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
9653
#Inserting different charachers
 
9654
CREATE TABLE t7(c1  BIT(1));
 
9655
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
9656
--sorted_result
 
9657
SELECT * FROM t7;
 
9658
############# UPDATE ###########
 
9659
 
 
9660
# Update order by limit
 
9661
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9662
 
 
9663
 
 
9664
# Update with arithmetic operations 
 
9665
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
9666
 
 
9667
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
9668
 
 
9669
 
 
9670
# Update with NULL ( NULL to number & number to NULL)
 
9671
UPDATE t6 SET c2=NULL WHERE c1=23;
 
9672
 
 
9673
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
9674
 
 
9675
 
 
9676
# Update range values
 
9677
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
9678
 
 
9679
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
9680
 
 
9681
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
9682
 
 
9683
 
 
9684
# Update outside range would be clipped to closest endpoints
 
9685
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
9686
 
 
9687
UPDATE t6 SET c2=-1 WHERE c1=94;
 
9688
 
 
9689
 
 
9690
# Update ignore on bad null error
 
9691
--sorted_result
 
9692
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
9693
SET SQL_MODE=STRICT_ALL_TABLES;
 
9694
--error ER_BAD_NULL_ERROR
 
9695
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
9696
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
9697
--sorted_result
 
9698
SELECT hex(c1),hex(c2) FROM t5;
 
9699
SET SQL_MODE=DEFAULT;
 
9700
 
 
9701
#Multi table update
 
9702
--disable_warnings
 
9703
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9704
--enable_warnings
 
9705
--sorted_result
 
9706
SELECT hex(c1),hex(c2) FROM t5;
 
9707
 
 
9708
 
 
9709
# Update using various access methods
 
9710
TRUNCATE t5;
 
9711
TRUNCATE t6;
 
9712
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9713
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9714
 
 
9715
# Update using Const
 
9716
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9717
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
9718
--sorted_result
 
9719
SELECT hex(c1),hex(c2) FROM t5;
 
9720
 
 
9721
# Update using range
 
9722
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9723
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
9724
--sorted_result
 
9725
SELECT hex(c1),hex(c2) FROM t5;
 
9726
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9727
--disable_warnings
 
9728
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
9729
--enable_warnings
 
9730
--sorted_result
 
9731
SELECT hex(c1),hex(c2) FROM t5;
 
9732
 
 
9733
# Update using eq_ref
 
9734
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9735
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9736
 
 
9737
############# DELETE ###########
 
9738
 
 
9739
TRUNCATE t5;
 
9740
TRUNCATE t6;
 
9741
 
 
9742
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9743
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9744
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
9745
 
 
9746
# Delete by order by limit
 
9747
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9748
 
 
9749
 
 
9750
# Delete rows with NULL column
 
9751
DELETE FROM t6 WHERE c2=NULL;
 
9752
 
 
9753
 
 
9754
# Delete with range values 
 
9755
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
9756
 
 
9757
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
9758
 
 
9759
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
9760
 
 
9761
 
 
9762
#Multi table delete
 
9763
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9764
--sorted_result
 
9765
SELECT hex(c1),hex(c2) FROM t5;
 
9766
 
 
9767
 
 
9768
# Delete using various access methods
 
9769
TRUNCATE t5;
 
9770
TRUNCATE t6;
 
9771
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9772
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
9773
 
 
9774
# Update using Const
 
9775
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
9776
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
9777
--sorted_result
 
9778
SELECT hex(c1),hex(c2) FROM t5;
 
9779
 
 
9780
# Update using range
 
9781
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9782
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
9783
--sorted_result
 
9784
SELECT hex(c1),hex(c2) FROM t5;
 
9785
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9786
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
9787
--sorted_result
 
9788
SELECT hex(c1),hex(c2) FROM t5;
 
9789
 
 
9790
# Update using eq_ref
 
9791
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9792
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
9793
 
 
9794
# Droping the tables
 
9795
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
9796
 
 
9797
####Checking the bit values####
 
9798
SELECT 0 + b'1010101010101010'; 
 
9799
SELECT 0 + (1010101010101010<<2);
 
9800
######### INSERT/SELECT######### 
 
9801
 
 
9802
#### Insert and select 2 bit data into the table####
 
9803
CREATE TABLE t1(c1 BIT(2));
 
9804
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
9805
let $i=2;
 
9806
while($i){
 
9807
let $j=$i/2;
 
9808
eval set @v1=$i;
 
9809
eval set @v2=$j;
 
9810
set @v3=repeat('1',@v1);
 
9811
let $STR0= query_get_value(select @v3 as I,I,1);
 
9812
eval INSERT INTO t1 VALUES (b'$STR0');
 
9813
set @v3=repeat('0',@v1);
 
9814
let $STR1= query_get_value(select @v3 as I,I,1);
 
9815
eval INSERT INTO t1 VALUES (b'$STR1');
 
9816
set @v3=repeat('01',@v2);
 
9817
let $STR2= query_get_value(select @v3 as I,I,1);
 
9818
eval INSERT INTO t1 VALUES (b'$STR2');
 
9819
set @v3=repeat('10',@v2);
 
9820
let $STR3= query_get_value(select @v3 as I,I,1);
 
9821
eval INSERT INTO t1 VALUES (b'$STR3');
 
9822
set @v3=repeat('1',@v1);
 
9823
set @v4=repeat('01',@v2);
 
9824
set @v5=repeat('10',@v2);
 
9825
let $STR0= query_get_value(select @v3 as I,I,1);
 
9826
let $STR2= query_get_value(select @v4 as I,I,1);
 
9827
let $STR3= query_get_value(select @v5 as I,I,1);
 
9828
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
9829
dec $i;
 
9830
}
 
9831
INSERT INTO t1 VALUES (b'1010101010101010');
 
9832
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
9833
--sorted_result
 
9834
SELECT HEX(c1) FROM t1;
 
9835
--sorted_result
 
9836
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
9837
--sorted_result
 
9838
SELECT OCT(c1) FROM t1;
 
9839
--sorted_result
 
9840
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
9841
--sorted_result
 
9842
SELECT BIN(c1) FROM t1;
 
9843
--sorted_result
 
9844
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
9845
--sorted_result
 
9846
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
9847
--sorted_result
 
9848
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
9849
--sorted_result
 
9850
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
9851
--sorted_result
 
9852
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
9853
--sorted_result
 
9854
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
9855
--sorted_result
 
9856
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
9857
--sorted_result
 
9858
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
9859
--error 1439
 
9860
CREATE TABLE t3 (c1 BIT(65));
 
9861
# Checking for bug #9571
 
9862
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
9863
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
9864
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
9865
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
9866
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
9867
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9868
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
9869
--sorted_result
 
9870
SELECT HEX(c1),HEX(c2) FROM t5;
 
9871
 
 
9872
#Insert permissible NULLs
 
9873
INSERT IGNORE INTO t5 VALUES(96,null);
 
9874
INSERT INTO t6 VALUES(null,null);
 
9875
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
9876
## Full table scan ##
 
9877
--sorted_result
 
9878
SELECT HEX(c1),HEX(c2) FROM t5;
 
9879
--sorted_result
 
9880
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
9881
--sorted_result
 
9882
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
9883
## Forward index scan, covering ##
 
9884
--sorted_result
 
9885
SELECT bin(c1) FROM t5;
 
9886
## Backward index scan, covering ##
 
9887
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
9888
## Forward index scan, non-covering ##
 
9889
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
9890
## Backward index scan, non-covering ##
 
9891
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
9892
## ref type access
 
9893
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
9894
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
9895
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
9896
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
9897
## Range access, ordered ##
 
9898
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
9899
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
9900
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
9901
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
9902
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
9903
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
9904
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
9905
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
9906
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
9907
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
9908
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
9909
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
9910
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
9911
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
9912
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
9913
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
9914
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
9915
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
9916
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
9917
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
9918
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
9919
## Range access, backwards scan ##
 
9920
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
9921
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
9922
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
9923
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
9924
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
9925
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
9926
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
9927
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
9928
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
9929
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
9930
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
9931
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
9932
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
9933
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
9934
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
9935
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
9936
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
9937
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
9938
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
9939
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
9940
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
9941
#Inserting different charachers
 
9942
CREATE TABLE t7(c1  BIT(2));
 
9943
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
9944
--sorted_result
 
9945
SELECT * FROM t7;
 
9946
############# UPDATE ###########
 
9947
 
 
9948
# Update order by limit
 
9949
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
9950
 
 
9951
 
 
9952
# Update with arithmetic operations 
 
9953
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
9954
 
 
9955
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
9956
 
 
9957
 
 
9958
# Update with NULL ( NULL to number & number to NULL)
 
9959
UPDATE t6 SET c2=NULL WHERE c1=23;
 
9960
 
 
9961
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
9962
 
 
9963
 
 
9964
# Update range values
 
9965
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
9966
 
 
9967
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
9968
 
 
9969
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
9970
 
 
9971
 
 
9972
# Update outside range would be clipped to closest endpoints
 
9973
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
9974
 
 
9975
UPDATE t6 SET c2=-1 WHERE c1=94;
 
9976
 
 
9977
 
 
9978
# Update ignore on bad null error
 
9979
--sorted_result
 
9980
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
9981
SET SQL_MODE=STRICT_ALL_TABLES;
 
9982
--error ER_BAD_NULL_ERROR
 
9983
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
9984
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
9985
--sorted_result
 
9986
SELECT hex(c1),hex(c2) FROM t5;
 
9987
SET SQL_MODE=DEFAULT;
 
9988
 
 
9989
#Multi table update
 
9990
--disable_warnings
 
9991
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
9992
--enable_warnings
 
9993
--sorted_result
 
9994
SELECT hex(c1),hex(c2) FROM t5;
 
9995
 
 
9996
 
 
9997
# Update using various access methods
 
9998
TRUNCATE t5;
 
9999
TRUNCATE t6;
 
10000
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10001
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10002
 
 
10003
# Update using Const
 
10004
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10005
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
10006
--sorted_result
 
10007
SELECT hex(c1),hex(c2) FROM t5;
 
10008
 
 
10009
# Update using range
 
10010
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10011
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
10012
--sorted_result
 
10013
SELECT hex(c1),hex(c2) FROM t5;
 
10014
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10015
--disable_warnings
 
10016
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
10017
--enable_warnings
 
10018
--sorted_result
 
10019
SELECT hex(c1),hex(c2) FROM t5;
 
10020
 
 
10021
# Update using eq_ref
 
10022
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10023
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10024
 
 
10025
############# DELETE ###########
 
10026
 
 
10027
TRUNCATE t5;
 
10028
TRUNCATE t6;
 
10029
 
 
10030
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10031
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10032
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
10033
 
 
10034
# Delete by order by limit
 
10035
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10036
 
 
10037
 
 
10038
# Delete rows with NULL column
 
10039
DELETE FROM t6 WHERE c2=NULL;
 
10040
 
 
10041
 
 
10042
# Delete with range values 
 
10043
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
10044
 
 
10045
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
10046
 
 
10047
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
10048
 
 
10049
 
 
10050
#Multi table delete
 
10051
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10052
--sorted_result
 
10053
SELECT hex(c1),hex(c2) FROM t5;
 
10054
 
 
10055
 
 
10056
# Delete using various access methods
 
10057
TRUNCATE t5;
 
10058
TRUNCATE t6;
 
10059
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10060
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10061
 
 
10062
# Update using Const
 
10063
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10064
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
10065
--sorted_result
 
10066
SELECT hex(c1),hex(c2) FROM t5;
 
10067
 
 
10068
# Update using range
 
10069
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10070
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10071
--sorted_result
 
10072
SELECT hex(c1),hex(c2) FROM t5;
 
10073
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10074
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10075
--sorted_result
 
10076
SELECT hex(c1),hex(c2) FROM t5;
 
10077
 
 
10078
# Update using eq_ref
 
10079
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10080
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10081
 
 
10082
# Droping the tables
 
10083
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
10084
 
 
10085
####Checking the bit values####
 
10086
SELECT 0 + b'1010101010101010'; 
 
10087
SELECT 0 + (1010101010101010<<4);
 
10088
######### INSERT/SELECT######### 
 
10089
 
 
10090
#### Insert and select 4 bit data into the table####
 
10091
CREATE TABLE t1(c1 BIT(4));
 
10092
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
10093
let $i=4;
 
10094
while($i){
 
10095
let $j=$i/2;
 
10096
eval set @v1=$i;
 
10097
eval set @v2=$j;
 
10098
set @v3=repeat('1',@v1);
 
10099
let $STR0= query_get_value(select @v3 as I,I,1);
 
10100
eval INSERT INTO t1 VALUES (b'$STR0');
 
10101
set @v3=repeat('0',@v1);
 
10102
let $STR1= query_get_value(select @v3 as I,I,1);
 
10103
eval INSERT INTO t1 VALUES (b'$STR1');
 
10104
set @v3=repeat('01',@v2);
 
10105
let $STR2= query_get_value(select @v3 as I,I,1);
 
10106
eval INSERT INTO t1 VALUES (b'$STR2');
 
10107
set @v3=repeat('10',@v2);
 
10108
let $STR3= query_get_value(select @v3 as I,I,1);
 
10109
eval INSERT INTO t1 VALUES (b'$STR3');
 
10110
set @v3=repeat('1',@v1);
 
10111
set @v4=repeat('01',@v2);
 
10112
set @v5=repeat('10',@v2);
 
10113
let $STR0= query_get_value(select @v3 as I,I,1);
 
10114
let $STR2= query_get_value(select @v4 as I,I,1);
 
10115
let $STR3= query_get_value(select @v5 as I,I,1);
 
10116
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
10117
dec $i;
 
10118
}
 
10119
INSERT INTO t1 VALUES (b'1010101010101010');
 
10120
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
10121
--sorted_result
 
10122
SELECT HEX(c1) FROM t1;
 
10123
--sorted_result
 
10124
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
10125
--sorted_result
 
10126
SELECT OCT(c1) FROM t1;
 
10127
--sorted_result
 
10128
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
10129
--sorted_result
 
10130
SELECT BIN(c1) FROM t1;
 
10131
--sorted_result
 
10132
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
10133
--sorted_result
 
10134
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
10135
--sorted_result
 
10136
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
10137
--sorted_result
 
10138
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
10139
--sorted_result
 
10140
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
10141
--sorted_result
 
10142
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
10143
--sorted_result
 
10144
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
10145
--sorted_result
 
10146
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
10147
--error 1439
 
10148
CREATE TABLE t3 (c1 BIT(65));
 
10149
# Checking for bug #9571
 
10150
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
10151
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
10152
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
10153
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
10154
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10155
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10156
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10157
--sorted_result
 
10158
SELECT HEX(c1),HEX(c2) FROM t5;
 
10159
 
 
10160
#Insert permissible NULLs
 
10161
INSERT IGNORE INTO t5 VALUES(96,null);
 
10162
INSERT INTO t6 VALUES(null,null);
 
10163
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
10164
## Full table scan ##
 
10165
--sorted_result
 
10166
SELECT HEX(c1),HEX(c2) FROM t5;
 
10167
--sorted_result
 
10168
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
10169
--sorted_result
 
10170
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
10171
## Forward index scan, covering ##
 
10172
--sorted_result
 
10173
SELECT bin(c1) FROM t5;
 
10174
## Backward index scan, covering ##
 
10175
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
10176
## Forward index scan, non-covering ##
 
10177
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
10178
## Backward index scan, non-covering ##
 
10179
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
10180
## ref type access
 
10181
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
10182
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
10183
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
10184
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
10185
## Range access, ordered ##
 
10186
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
10187
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
10188
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
10189
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
10190
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
10191
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
10192
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
10193
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
10194
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
10195
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
10196
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
10197
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
10198
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
10199
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
10200
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
10201
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
10202
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
10203
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
10204
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
10205
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
10206
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
10207
## Range access, backwards scan ##
 
10208
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
10209
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
10210
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
10211
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
10212
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
10213
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
10214
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
10215
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
10216
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
10217
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
10218
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
10219
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
10220
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
10221
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
10222
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
10223
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
10224
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
10225
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
10226
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
10227
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
10228
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
10229
#Inserting different charachers
 
10230
CREATE TABLE t7(c1  BIT(4));
 
10231
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
10232
--sorted_result
 
10233
SELECT * FROM t7;
 
10234
############# UPDATE ###########
 
10235
 
 
10236
# Update order by limit
 
10237
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10238
 
 
10239
 
 
10240
# Update with arithmetic operations 
 
10241
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
10242
 
 
10243
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
10244
 
 
10245
 
 
10246
# Update with NULL ( NULL to number & number to NULL)
 
10247
UPDATE t6 SET c2=NULL WHERE c1=23;
 
10248
 
 
10249
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
10250
 
 
10251
 
 
10252
# Update range values
 
10253
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
10254
 
 
10255
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
10256
 
 
10257
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
10258
 
 
10259
 
 
10260
# Update outside range would be clipped to closest endpoints
 
10261
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
10262
 
 
10263
UPDATE t6 SET c2=-1 WHERE c1=94;
 
10264
 
 
10265
 
 
10266
# Update ignore on bad null error
 
10267
--sorted_result
 
10268
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
10269
SET SQL_MODE=STRICT_ALL_TABLES;
 
10270
--error ER_BAD_NULL_ERROR
 
10271
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
10272
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
10273
--sorted_result
 
10274
SELECT hex(c1),hex(c2) FROM t5;
 
10275
SET SQL_MODE=DEFAULT;
 
10276
 
 
10277
#Multi table update
 
10278
--disable_warnings
 
10279
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10280
--enable_warnings
 
10281
--sorted_result
 
10282
SELECT hex(c1),hex(c2) FROM t5;
 
10283
 
 
10284
 
 
10285
# Update using various access methods
 
10286
TRUNCATE t5;
 
10287
TRUNCATE t6;
 
10288
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10289
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10290
 
 
10291
# Update using Const
 
10292
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10293
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
10294
--sorted_result
 
10295
SELECT hex(c1),hex(c2) FROM t5;
 
10296
 
 
10297
# Update using range
 
10298
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10299
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
10300
--sorted_result
 
10301
SELECT hex(c1),hex(c2) FROM t5;
 
10302
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10303
--disable_warnings
 
10304
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
10305
--enable_warnings
 
10306
--sorted_result
 
10307
SELECT hex(c1),hex(c2) FROM t5;
 
10308
 
 
10309
# Update using eq_ref
 
10310
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10311
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10312
 
 
10313
############# DELETE ###########
 
10314
 
 
10315
TRUNCATE t5;
 
10316
TRUNCATE t6;
 
10317
 
 
10318
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10319
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10320
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
10321
 
 
10322
# Delete by order by limit
 
10323
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10324
 
 
10325
 
 
10326
# Delete rows with NULL column
 
10327
DELETE FROM t6 WHERE c2=NULL;
 
10328
 
 
10329
 
 
10330
# Delete with range values 
 
10331
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
10332
 
 
10333
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
10334
 
 
10335
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
10336
 
 
10337
 
 
10338
#Multi table delete
 
10339
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10340
--sorted_result
 
10341
SELECT hex(c1),hex(c2) FROM t5;
 
10342
 
 
10343
 
 
10344
# Delete using various access methods
 
10345
TRUNCATE t5;
 
10346
TRUNCATE t6;
 
10347
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10348
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10349
 
 
10350
# Update using Const
 
10351
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10352
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
10353
--sorted_result
 
10354
SELECT hex(c1),hex(c2) FROM t5;
 
10355
 
 
10356
# Update using range
 
10357
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10358
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10359
--sorted_result
 
10360
SELECT hex(c1),hex(c2) FROM t5;
 
10361
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10362
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10363
--sorted_result
 
10364
SELECT hex(c1),hex(c2) FROM t5;
 
10365
 
 
10366
# Update using eq_ref
 
10367
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10368
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10369
 
 
10370
# Droping the tables
 
10371
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
10372
 
 
10373
####Checking the bit values####
 
10374
SELECT 0 + b'1010101010101010'; 
 
10375
SELECT 0 + (1010101010101010<<8);
 
10376
######### INSERT/SELECT######### 
 
10377
 
 
10378
#### Insert and select 8 bit data into the table####
 
10379
CREATE TABLE t1(c1 BIT(8));
 
10380
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
10381
let $i=8;
 
10382
while($i){
 
10383
let $j=$i/2;
 
10384
eval set @v1=$i;
 
10385
eval set @v2=$j;
 
10386
set @v3=repeat('1',@v1);
 
10387
let $STR0= query_get_value(select @v3 as I,I,1);
 
10388
eval INSERT INTO t1 VALUES (b'$STR0');
 
10389
set @v3=repeat('0',@v1);
 
10390
let $STR1= query_get_value(select @v3 as I,I,1);
 
10391
eval INSERT INTO t1 VALUES (b'$STR1');
 
10392
set @v3=repeat('01',@v2);
 
10393
let $STR2= query_get_value(select @v3 as I,I,1);
 
10394
eval INSERT INTO t1 VALUES (b'$STR2');
 
10395
set @v3=repeat('10',@v2);
 
10396
let $STR3= query_get_value(select @v3 as I,I,1);
 
10397
eval INSERT INTO t1 VALUES (b'$STR3');
 
10398
set @v3=repeat('1',@v1);
 
10399
set @v4=repeat('01',@v2);
 
10400
set @v5=repeat('10',@v2);
 
10401
let $STR0= query_get_value(select @v3 as I,I,1);
 
10402
let $STR2= query_get_value(select @v4 as I,I,1);
 
10403
let $STR3= query_get_value(select @v5 as I,I,1);
 
10404
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
10405
dec $i;
 
10406
}
 
10407
INSERT INTO t1 VALUES (b'1010101010101010');
 
10408
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
10409
--sorted_result
 
10410
SELECT HEX(c1) FROM t1;
 
10411
--sorted_result
 
10412
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
10413
--sorted_result
 
10414
SELECT OCT(c1) FROM t1;
 
10415
--sorted_result
 
10416
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
10417
--sorted_result
 
10418
SELECT BIN(c1) FROM t1;
 
10419
--sorted_result
 
10420
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
10421
--sorted_result
 
10422
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
10423
--sorted_result
 
10424
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
10425
--sorted_result
 
10426
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
10427
--sorted_result
 
10428
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
10429
--sorted_result
 
10430
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
10431
--sorted_result
 
10432
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
10433
--sorted_result
 
10434
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
10435
--error 1439
 
10436
CREATE TABLE t3 (c1 BIT(65));
 
10437
# Checking for bug #9571
 
10438
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
10439
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
10440
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
10441
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
10442
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10443
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10444
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10445
--sorted_result
 
10446
SELECT HEX(c1),HEX(c2) FROM t5;
 
10447
 
 
10448
#Insert permissible NULLs
 
10449
INSERT IGNORE INTO t5 VALUES(96,null);
 
10450
INSERT INTO t6 VALUES(null,null);
 
10451
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
10452
## Full table scan ##
 
10453
--sorted_result
 
10454
SELECT HEX(c1),HEX(c2) FROM t5;
 
10455
--sorted_result
 
10456
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
10457
--sorted_result
 
10458
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
10459
## Forward index scan, covering ##
 
10460
--sorted_result
 
10461
SELECT bin(c1) FROM t5;
 
10462
## Backward index scan, covering ##
 
10463
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
10464
## Forward index scan, non-covering ##
 
10465
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
10466
## Backward index scan, non-covering ##
 
10467
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
10468
## ref type access
 
10469
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
10470
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
10471
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
10472
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
10473
## Range access, ordered ##
 
10474
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
10475
 
 
10476
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
10477
 
 
10478
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
10479
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
10480
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
10481
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
10482
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
10483
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
10484
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
10485
 
 
10486
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
10487
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
10488
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
10489
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
10490
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
10491
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
10492
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
10493
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
10494
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
10495
## Range access, backwards scan ##
 
10496
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
10497
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
10498
 
 
10499
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
10500
 
 
10501
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
10502
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
10503
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
10504
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
10505
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
10506
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
10507
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
10508
 
 
10509
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
10510
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
10511
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
10512
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
10513
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
10514
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
10515
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
10516
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
10517
#Inserting different charachers
 
10518
CREATE TABLE t7(c1  BIT(8));
 
10519
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
10520
--sorted_result
 
10521
SELECT * FROM t7;
 
10522
############# UPDATE ###########
 
10523
 
 
10524
# Update order by limit
 
10525
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10526
 
 
10527
 
 
10528
# Update with arithmetic operations 
 
10529
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
10530
 
 
10531
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
10532
 
 
10533
 
 
10534
# Update with NULL ( NULL to number & number to NULL)
 
10535
UPDATE t6 SET c2=NULL WHERE c1=23;
 
10536
 
 
10537
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
10538
 
 
10539
 
 
10540
# Update range values
 
10541
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
10542
 
 
10543
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
10544
 
 
10545
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
10546
 
 
10547
 
 
10548
# Update outside range would be clipped to closest endpoints
 
10549
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
10550
 
 
10551
UPDATE t6 SET c2=-1 WHERE c1=94;
 
10552
 
 
10553
 
 
10554
# Update ignore on bad null error
 
10555
--sorted_result
 
10556
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
10557
SET SQL_MODE=STRICT_ALL_TABLES;
 
10558
--error ER_BAD_NULL_ERROR
 
10559
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
10560
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
10561
--sorted_result
 
10562
SELECT hex(c1),hex(c2) FROM t5;
 
10563
SET SQL_MODE=DEFAULT;
 
10564
 
 
10565
#Multi table update
 
10566
--disable_warnings
 
10567
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10568
--enable_warnings
 
10569
--sorted_result
 
10570
SELECT hex(c1),hex(c2) FROM t5;
 
10571
 
 
10572
 
 
10573
# Update using various access methods
 
10574
TRUNCATE t5;
 
10575
TRUNCATE t6;
 
10576
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10577
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10578
 
 
10579
# Update using Const
 
10580
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10581
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
10582
--sorted_result
 
10583
SELECT hex(c1),hex(c2) FROM t5;
 
10584
 
 
10585
# Update using range
 
10586
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10587
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
10588
--sorted_result
 
10589
SELECT hex(c1),hex(c2) FROM t5;
 
10590
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10591
--disable_warnings
 
10592
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
10593
--enable_warnings
 
10594
--sorted_result
 
10595
SELECT hex(c1),hex(c2) FROM t5;
 
10596
 
 
10597
# Update using eq_ref
 
10598
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10599
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10600
 
 
10601
############# DELETE ###########
 
10602
 
 
10603
TRUNCATE t5;
 
10604
TRUNCATE t6;
 
10605
 
 
10606
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10607
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10608
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
10609
 
 
10610
# Delete by order by limit
 
10611
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10612
 
 
10613
 
 
10614
# Delete rows with NULL column
 
10615
DELETE FROM t6 WHERE c2=NULL;
 
10616
 
 
10617
 
 
10618
# Delete with range values 
 
10619
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
10620
 
 
10621
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
10622
 
 
10623
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
10624
 
 
10625
 
 
10626
#Multi table delete
 
10627
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10628
--sorted_result
 
10629
SELECT hex(c1),hex(c2) FROM t5;
 
10630
 
 
10631
 
 
10632
# Delete using various access methods
 
10633
TRUNCATE t5;
 
10634
TRUNCATE t6;
 
10635
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10636
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10637
 
 
10638
# Update using Const
 
10639
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10640
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
10641
--sorted_result
 
10642
SELECT hex(c1),hex(c2) FROM t5;
 
10643
 
 
10644
# Update using range
 
10645
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10646
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10647
--sorted_result
 
10648
SELECT hex(c1),hex(c2) FROM t5;
 
10649
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10650
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10651
--sorted_result
 
10652
SELECT hex(c1),hex(c2) FROM t5;
 
10653
 
 
10654
# Update using eq_ref
 
10655
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10656
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10657
 
 
10658
# Droping the tables
 
10659
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
10660
 
 
10661
####Checking the bit values####
 
10662
SELECT 0 + b'1010101010101010'; 
 
10663
SELECT 0 + (1010101010101010<<16);
 
10664
######### INSERT/SELECT######### 
 
10665
 
 
10666
#### Insert and select 16 bit data into the table####
 
10667
CREATE TABLE t1(c1 BIT(16));
 
10668
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
10669
let $i=16;
 
10670
while($i){
 
10671
let $j=$i/2;
 
10672
eval set @v1=$i;
 
10673
eval set @v2=$j;
 
10674
set @v3=repeat('1',@v1);
 
10675
let $STR0= query_get_value(select @v3 as I,I,1);
 
10676
eval INSERT INTO t1 VALUES (b'$STR0');
 
10677
set @v3=repeat('0',@v1);
 
10678
let $STR1= query_get_value(select @v3 as I,I,1);
 
10679
eval INSERT INTO t1 VALUES (b'$STR1');
 
10680
set @v3=repeat('01',@v2);
 
10681
let $STR2= query_get_value(select @v3 as I,I,1);
 
10682
eval INSERT INTO t1 VALUES (b'$STR2');
 
10683
set @v3=repeat('10',@v2);
 
10684
let $STR3= query_get_value(select @v3 as I,I,1);
 
10685
eval INSERT INTO t1 VALUES (b'$STR3');
 
10686
set @v3=repeat('1',@v1);
 
10687
set @v4=repeat('01',@v2);
 
10688
set @v5=repeat('10',@v2);
 
10689
let $STR0= query_get_value(select @v3 as I,I,1);
 
10690
let $STR2= query_get_value(select @v4 as I,I,1);
 
10691
let $STR3= query_get_value(select @v5 as I,I,1);
 
10692
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
10693
dec $i;
 
10694
}
 
10695
INSERT INTO t1 VALUES (b'1010101010101010');
 
10696
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
10697
--sorted_result
 
10698
SELECT HEX(c1) FROM t1;
 
10699
--sorted_result
 
10700
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
10701
--sorted_result
 
10702
SELECT OCT(c1) FROM t1;
 
10703
--sorted_result
 
10704
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
10705
--sorted_result
 
10706
SELECT BIN(c1) FROM t1;
 
10707
--sorted_result
 
10708
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
10709
--sorted_result
 
10710
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
10711
--sorted_result
 
10712
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
10713
--sorted_result
 
10714
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
10715
--sorted_result
 
10716
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
10717
--sorted_result
 
10718
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
10719
--sorted_result
 
10720
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
10721
--sorted_result
 
10722
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
10723
--error 1439
 
10724
CREATE TABLE t3 (c1 BIT(65));
 
10725
# Checking for bug #9571
 
10726
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
10727
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
10728
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
10729
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
10730
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10731
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10732
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10733
--sorted_result
 
10734
SELECT HEX(c1),HEX(c2) FROM t5;
 
10735
 
 
10736
#Insert permissible NULLs
 
10737
INSERT IGNORE INTO t5 VALUES(96,null);
 
10738
INSERT INTO t6 VALUES(null,null);
 
10739
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
10740
## Full table scan ##
 
10741
--sorted_result
 
10742
SELECT HEX(c1),HEX(c2) FROM t5;
 
10743
--sorted_result
 
10744
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
10745
--sorted_result
 
10746
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
10747
## Forward index scan, covering ##
 
10748
--sorted_result
 
10749
SELECT bin(c1) FROM t5;
 
10750
## Backward index scan, covering ##
 
10751
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
10752
## Forward index scan, non-covering ##
 
10753
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
10754
## Backward index scan, non-covering ##
 
10755
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
10756
## ref type access
 
10757
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
10758
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
10759
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
10760
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
10761
## Range access, ordered ##
 
10762
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
10763
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
10764
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
10765
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
10766
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
10767
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
10768
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
10769
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
10770
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
10771
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
10772
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
10773
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
10774
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
10775
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
10776
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
10777
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
10778
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
10779
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
10780
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
10781
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
10782
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
10783
## Range access, backwards scan ##
 
10784
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
10785
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
10786
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
10787
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
10788
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
10789
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
10790
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
10791
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
10792
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
10793
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
10794
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
10795
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
10796
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
10797
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
10798
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
10799
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
10800
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
10801
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
10802
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
10803
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
10804
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
10805
#Inserting different charachers
 
10806
CREATE TABLE t7(c1  BIT(16));
 
10807
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
10808
--sorted_result
 
10809
SELECT * FROM t7;
 
10810
############# UPDATE ###########
 
10811
 
 
10812
# Update order by limit
 
10813
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10814
 
 
10815
 
 
10816
# Update with arithmetic operations 
 
10817
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
10818
 
 
10819
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
10820
 
 
10821
 
 
10822
# Update with NULL ( NULL to number & number to NULL)
 
10823
UPDATE t6 SET c2=NULL WHERE c1=23;
 
10824
 
 
10825
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
10826
 
 
10827
 
 
10828
# Update range values
 
10829
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
10830
 
 
10831
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
10832
 
 
10833
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
10834
 
 
10835
 
 
10836
# Update outside range would be clipped to closest endpoints
 
10837
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
10838
 
 
10839
UPDATE t6 SET c2=-1 WHERE c1=94;
 
10840
 
 
10841
 
 
10842
# Update ignore on bad null error
 
10843
--sorted_result
 
10844
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
10845
SET SQL_MODE=STRICT_ALL_TABLES;
 
10846
--error ER_BAD_NULL_ERROR
 
10847
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
10848
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
10849
--sorted_result
 
10850
SELECT hex(c1),hex(c2) FROM t5;
 
10851
SET SQL_MODE=DEFAULT;
 
10852
 
 
10853
#Multi table update
 
10854
--disable_warnings
 
10855
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10856
--enable_warnings
 
10857
--sorted_result
 
10858
SELECT hex(c1),hex(c2) FROM t5;
 
10859
 
 
10860
 
 
10861
# Update using various access methods
 
10862
TRUNCATE t5;
 
10863
TRUNCATE t6;
 
10864
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10865
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10866
 
 
10867
# Update using Const
 
10868
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10869
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
10870
--sorted_result
 
10871
SELECT hex(c1),hex(c2) FROM t5;
 
10872
 
 
10873
# Update using range
 
10874
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10875
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
10876
--sorted_result
 
10877
SELECT hex(c1),hex(c2) FROM t5;
 
10878
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10879
--disable_warnings
 
10880
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
10881
--enable_warnings
 
10882
--sorted_result
 
10883
SELECT hex(c1),hex(c2) FROM t5;
 
10884
 
 
10885
# Update using eq_ref
 
10886
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10887
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10888
 
 
10889
############# DELETE ###########
 
10890
 
 
10891
TRUNCATE t5;
 
10892
TRUNCATE t6;
 
10893
 
 
10894
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
10895
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
10896
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
10897
 
 
10898
# Delete by order by limit
 
10899
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
10900
 
 
10901
 
 
10902
# Delete rows with NULL column
 
10903
DELETE FROM t6 WHERE c2=NULL;
 
10904
 
 
10905
 
 
10906
# Delete with range values 
 
10907
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
10908
 
 
10909
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
10910
 
 
10911
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
10912
 
 
10913
 
 
10914
#Multi table delete
 
10915
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
10916
--sorted_result
 
10917
SELECT hex(c1),hex(c2) FROM t5;
 
10918
 
 
10919
 
 
10920
# Delete using various access methods
 
10921
TRUNCATE t5;
 
10922
TRUNCATE t6;
 
10923
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10924
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
10925
 
 
10926
# Update using Const
 
10927
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
10928
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
10929
--sorted_result
 
10930
SELECT hex(c1),hex(c2) FROM t5;
 
10931
 
 
10932
# Update using range
 
10933
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10934
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
10935
--sorted_result
 
10936
SELECT hex(c1),hex(c2) FROM t5;
 
10937
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10938
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
10939
--sorted_result
 
10940
SELECT hex(c1),hex(c2) FROM t5;
 
10941
 
 
10942
# Update using eq_ref
 
10943
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10944
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
10945
 
 
10946
# Droping the tables
 
10947
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
10948
 
 
10949
####Checking the bit values####
 
10950
SELECT 0 + b'1010101010101010'; 
 
10951
SELECT 0 + (1010101010101010<<32);
 
10952
######### INSERT/SELECT######### 
 
10953
 
 
10954
#### Insert and select 32 bit data into the table####
 
10955
CREATE TABLE t1(c1 BIT(32));
 
10956
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
10957
let $i=32;
 
10958
while($i){
 
10959
let $j=$i/2;
 
10960
eval set @v1=$i;
 
10961
eval set @v2=$j;
 
10962
set @v3=repeat('1',@v1);
 
10963
let $STR0= query_get_value(select @v3 as I,I,1);
 
10964
eval INSERT INTO t1 VALUES (b'$STR0');
 
10965
set @v3=repeat('0',@v1);
 
10966
let $STR1= query_get_value(select @v3 as I,I,1);
 
10967
eval INSERT INTO t1 VALUES (b'$STR1');
 
10968
set @v3=repeat('01',@v2);
 
10969
let $STR2= query_get_value(select @v3 as I,I,1);
 
10970
eval INSERT INTO t1 VALUES (b'$STR2');
 
10971
set @v3=repeat('10',@v2);
 
10972
let $STR3= query_get_value(select @v3 as I,I,1);
 
10973
eval INSERT INTO t1 VALUES (b'$STR3');
 
10974
set @v3=repeat('1',@v1);
 
10975
set @v4=repeat('01',@v2);
 
10976
set @v5=repeat('10',@v2);
 
10977
let $STR0= query_get_value(select @v3 as I,I,1);
 
10978
let $STR2= query_get_value(select @v4 as I,I,1);
 
10979
let $STR3= query_get_value(select @v5 as I,I,1);
 
10980
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
10981
dec $i;
 
10982
}
 
10983
INSERT INTO t1 VALUES (b'1010101010101010');
 
10984
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
10985
--sorted_result
 
10986
SELECT HEX(c1) FROM t1;
 
10987
--sorted_result
 
10988
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
10989
--sorted_result
 
10990
SELECT OCT(c1) FROM t1;
 
10991
--sorted_result
 
10992
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
10993
--sorted_result
 
10994
SELECT BIN(c1) FROM t1;
 
10995
--sorted_result
 
10996
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
10997
--sorted_result
 
10998
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
10999
--sorted_result
 
11000
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
11001
--sorted_result
 
11002
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
11003
--sorted_result
 
11004
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
11005
--sorted_result
 
11006
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
11007
--sorted_result
 
11008
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
11009
--sorted_result
 
11010
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
11011
--error 1439
 
11012
CREATE TABLE t3 (c1 BIT(65));
 
11013
# Checking for bug #9571
 
11014
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
11015
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
11016
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
11017
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
11018
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11019
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11020
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11021
--sorted_result
 
11022
SELECT HEX(c1),HEX(c2) FROM t5;
 
11023
 
 
11024
#Insert permissible NULLs
 
11025
INSERT IGNORE INTO t5 VALUES(96,null);
 
11026
INSERT INTO t6 VALUES(null,null);
 
11027
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
11028
## Full table scan ##
 
11029
--sorted_result
 
11030
SELECT HEX(c1),HEX(c2) FROM t5;
 
11031
--sorted_result
 
11032
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
11033
--sorted_result
 
11034
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
11035
## Forward index scan, covering ##
 
11036
--sorted_result
 
11037
SELECT bin(c1) FROM t5;
 
11038
## Backward index scan, covering ##
 
11039
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
11040
## Forward index scan, non-covering ##
 
11041
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
11042
## Backward index scan, non-covering ##
 
11043
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
11044
## ref type access
 
11045
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
11046
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
11047
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
11048
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
11049
## Range access, ordered ##
 
11050
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
11051
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
11052
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
11053
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
11054
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
11055
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
11056
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
11057
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
11058
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
11059
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
11060
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
11061
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
11062
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
11063
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
11064
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
11065
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
11066
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
11067
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
11068
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
11069
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
11070
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
11071
## Range access, backwards scan ##
 
11072
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
11073
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
11074
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
11075
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
11076
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
11077
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
11078
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
11079
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
11080
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
11081
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
11082
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
11083
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
11084
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
11085
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
11086
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
11087
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
11088
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
11089
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
11090
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
11091
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
11092
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
11093
#Inserting different charachers
 
11094
CREATE TABLE t7(c1  BIT(32));
 
11095
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
11096
--sorted_result
 
11097
SELECT * FROM t7;
 
11098
############# UPDATE ###########
 
11099
 
 
11100
# Update order by limit
 
11101
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11102
 
 
11103
 
 
11104
# Update with arithmetic operations 
 
11105
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
11106
 
 
11107
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
11108
 
 
11109
 
 
11110
# Update with NULL ( NULL to number & number to NULL)
 
11111
UPDATE t6 SET c2=NULL WHERE c1=23;
 
11112
 
 
11113
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
11114
 
 
11115
 
 
11116
# Update range values
 
11117
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
11118
 
 
11119
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
11120
 
 
11121
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
11122
 
 
11123
 
 
11124
# Update outside range would be clipped to closest endpoints
 
11125
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
11126
 
 
11127
UPDATE t6 SET c2=-1 WHERE c1=94;
 
11128
 
 
11129
 
 
11130
# Update ignore on bad null error
 
11131
--sorted_result
 
11132
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
11133
SET SQL_MODE=STRICT_ALL_TABLES;
 
11134
--error ER_BAD_NULL_ERROR
 
11135
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
11136
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
11137
--sorted_result
 
11138
SELECT hex(c1),hex(c2) FROM t5;
 
11139
SET SQL_MODE=DEFAULT;
 
11140
 
 
11141
#Multi table update
 
11142
--disable_warnings
 
11143
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11144
--enable_warnings
 
11145
--sorted_result
 
11146
SELECT hex(c1),hex(c2) FROM t5;
 
11147
 
 
11148
 
 
11149
# Update using various access methods
 
11150
TRUNCATE t5;
 
11151
TRUNCATE t6;
 
11152
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11153
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11154
 
 
11155
# Update using Const
 
11156
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11157
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
11158
--sorted_result
 
11159
SELECT hex(c1),hex(c2) FROM t5;
 
11160
 
 
11161
# Update using range
 
11162
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11163
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
11164
--sorted_result
 
11165
SELECT hex(c1),hex(c2) FROM t5;
 
11166
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11167
--disable_warnings
 
11168
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
11169
--enable_warnings
 
11170
--sorted_result
 
11171
SELECT hex(c1),hex(c2) FROM t5;
 
11172
 
 
11173
# Update using eq_ref
 
11174
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11175
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11176
 
 
11177
############# DELETE ###########
 
11178
 
 
11179
TRUNCATE t5;
 
11180
TRUNCATE t6;
 
11181
 
 
11182
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11183
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11184
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
11185
 
 
11186
# Delete by order by limit
 
11187
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11188
 
 
11189
 
 
11190
# Delete rows with NULL column
 
11191
DELETE FROM t6 WHERE c2=NULL;
 
11192
 
 
11193
 
 
11194
# Delete with range values 
 
11195
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
11196
 
 
11197
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
11198
 
 
11199
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
11200
 
 
11201
 
 
11202
#Multi table delete
 
11203
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11204
--sorted_result
 
11205
SELECT hex(c1),hex(c2) FROM t5;
 
11206
 
 
11207
 
 
11208
# Delete using various access methods
 
11209
TRUNCATE t5;
 
11210
TRUNCATE t6;
 
11211
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11212
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11213
 
 
11214
# Update using Const
 
11215
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11216
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
11217
--sorted_result
 
11218
SELECT hex(c1),hex(c2) FROM t5;
 
11219
 
 
11220
# Update using range
 
11221
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11222
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11223
--sorted_result
 
11224
SELECT hex(c1),hex(c2) FROM t5;
 
11225
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11226
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11227
--sorted_result
 
11228
SELECT hex(c1),hex(c2) FROM t5;
 
11229
 
 
11230
# Update using eq_ref
 
11231
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11232
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11233
 
 
11234
# Droping the tables
 
11235
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
11236
 
 
11237
####Checking the bit values####
 
11238
SELECT 0 + b'1010101010101010'; 
 
11239
SELECT 0 + (1010101010101010<<64);
 
11240
######### INSERT/SELECT######### 
 
11241
 
 
11242
#### Insert and select 64 bit data into the table####
 
11243
CREATE TABLE t1(c1 BIT(64));
 
11244
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
11245
let $i=64;
 
11246
while($i){
 
11247
let $j=$i/2;
 
11248
eval set @v1=$i;
 
11249
eval set @v2=$j;
 
11250
set @v3=repeat('1',@v1);
 
11251
let $STR0= query_get_value(select @v3 as I,I,1);
 
11252
eval INSERT INTO t1 VALUES (b'$STR0');
 
11253
set @v3=repeat('0',@v1);
 
11254
let $STR1= query_get_value(select @v3 as I,I,1);
 
11255
eval INSERT INTO t1 VALUES (b'$STR1');
 
11256
set @v3=repeat('01',@v2);
 
11257
let $STR2= query_get_value(select @v3 as I,I,1);
 
11258
eval INSERT INTO t1 VALUES (b'$STR2');
 
11259
set @v3=repeat('10',@v2);
 
11260
let $STR3= query_get_value(select @v3 as I,I,1);
 
11261
eval INSERT INTO t1 VALUES (b'$STR3');
 
11262
set @v3=repeat('1',@v1);
 
11263
set @v4=repeat('01',@v2);
 
11264
set @v5=repeat('10',@v2);
 
11265
let $STR0= query_get_value(select @v3 as I,I,1);
 
11266
let $STR2= query_get_value(select @v4 as I,I,1);
 
11267
let $STR3= query_get_value(select @v5 as I,I,1);
 
11268
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
11269
dec $i;
 
11270
}
 
11271
INSERT INTO t1 VALUES (b'1010101010101010');
 
11272
INSERT INTO t2 VALUES (b'1010101010101010', b'1010101010101010', b'1010101010101010');
 
11273
--sorted_result
 
11274
SELECT HEX(c1) FROM t1;
 
11275
--sorted_result
 
11276
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
11277
--sorted_result
 
11278
SELECT OCT(c1) FROM t1;
 
11279
--sorted_result
 
11280
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
11281
--sorted_result
 
11282
SELECT BIN(c1) FROM t1;
 
11283
--sorted_result
 
11284
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
11285
--sorted_result
 
11286
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
11287
--sorted_result
 
11288
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
11289
--sorted_result
 
11290
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
11291
--sorted_result
 
11292
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
11293
--sorted_result
 
11294
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
11295
--sorted_result
 
11296
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
11297
--sorted_result
 
11298
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
11299
--error 1439
 
11300
CREATE TABLE t3 (c1 BIT(65));
 
11301
# Checking for bug #9571
 
11302
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
11303
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
11304
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
11305
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
11306
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11307
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11308
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11309
--sorted_result
 
11310
SELECT HEX(c1),HEX(c2) FROM t5;
 
11311
 
 
11312
#Insert permissible NULLs
 
11313
INSERT IGNORE INTO t5 VALUES(96,null);
 
11314
INSERT INTO t6 VALUES(null,null);
 
11315
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
11316
## Full table scan ##
 
11317
--sorted_result
 
11318
SELECT HEX(c1),HEX(c2) FROM t5;
 
11319
--sorted_result
 
11320
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
11321
--sorted_result
 
11322
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
11323
## Forward index scan, covering ##
 
11324
--sorted_result
 
11325
SELECT bin(c1) FROM t5;
 
11326
## Backward index scan, covering ##
 
11327
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
11328
## Forward index scan, non-covering ##
 
11329
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
11330
## Backward index scan, non-covering ##
 
11331
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
11332
## ref type access
 
11333
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
11334
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
11335
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
11336
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
11337
## Range access, ordered ##
 
11338
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
11339
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
11340
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
11341
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
11342
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
11343
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
11344
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
11345
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
11346
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
11347
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
11348
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
11349
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
11350
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
11351
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
11352
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
11353
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
11354
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
11355
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
11356
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
11357
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
11358
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
11359
## Range access, backwards scan ##
 
11360
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
11361
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
11362
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
11363
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
11364
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
11365
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
11366
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
11367
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
11368
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
11369
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
11370
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
11371
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
11372
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
11373
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
11374
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
11375
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
11376
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
11377
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
11378
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
11379
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
11380
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
11381
#Inserting different charachers
 
11382
CREATE TABLE t7(c1  BIT(64));
 
11383
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
11384
--sorted_result
 
11385
SELECT * FROM t7;
 
11386
############# UPDATE ###########
 
11387
 
 
11388
# Update order by limit
 
11389
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11390
 
 
11391
 
 
11392
# Update with arithmetic operations 
 
11393
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
11394
 
 
11395
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
11396
 
 
11397
 
 
11398
# Update with NULL ( NULL to number & number to NULL)
 
11399
UPDATE t6 SET c2=NULL WHERE c1=23;
 
11400
 
 
11401
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
11402
 
 
11403
 
 
11404
# Update range values
 
11405
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
11406
 
 
11407
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
11408
 
 
11409
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
11410
 
 
11411
 
 
11412
# Update outside range would be clipped to closest endpoints
 
11413
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
11414
 
 
11415
UPDATE t6 SET c2=-1 WHERE c1=94;
 
11416
 
 
11417
 
 
11418
# Update ignore on bad null error
 
11419
--sorted_result
 
11420
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
11421
SET SQL_MODE=STRICT_ALL_TABLES;
 
11422
--error ER_BAD_NULL_ERROR
 
11423
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
11424
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
11425
--sorted_result
 
11426
SELECT hex(c1),hex(c2) FROM t5;
 
11427
SET SQL_MODE=DEFAULT;
 
11428
 
 
11429
#Multi table update
 
11430
--disable_warnings
 
11431
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11432
--enable_warnings
 
11433
--sorted_result
 
11434
SELECT hex(c1),hex(c2) FROM t5;
 
11435
 
 
11436
 
 
11437
# Update using various access methods
 
11438
TRUNCATE t5;
 
11439
TRUNCATE t6;
 
11440
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11441
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11442
 
 
11443
# Update using Const
 
11444
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11445
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
11446
--sorted_result
 
11447
SELECT hex(c1),hex(c2) FROM t5;
 
11448
 
 
11449
# Update using range
 
11450
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11451
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
11452
--sorted_result
 
11453
SELECT hex(c1),hex(c2) FROM t5;
 
11454
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11455
--disable_warnings
 
11456
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
11457
--enable_warnings
 
11458
--sorted_result
 
11459
SELECT hex(c1),hex(c2) FROM t5;
 
11460
 
 
11461
# Update using eq_ref
 
11462
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11463
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11464
 
 
11465
############# DELETE ###########
 
11466
 
 
11467
TRUNCATE t5;
 
11468
TRUNCATE t6;
 
11469
 
 
11470
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11471
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11472
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
11473
 
 
11474
# Delete by order by limit
 
11475
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11476
 
 
11477
 
 
11478
# Delete rows with NULL column
 
11479
DELETE FROM t6 WHERE c2=NULL;
 
11480
 
 
11481
 
 
11482
# Delete with range values 
 
11483
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
11484
 
 
11485
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
11486
 
 
11487
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
11488
 
 
11489
 
 
11490
#Multi table delete
 
11491
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11492
--sorted_result
 
11493
SELECT hex(c1),hex(c2) FROM t5;
 
11494
 
 
11495
 
 
11496
# Delete using various access methods
 
11497
TRUNCATE t5;
 
11498
TRUNCATE t6;
 
11499
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11500
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11501
 
 
11502
# Update using Const
 
11503
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11504
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
11505
--sorted_result
 
11506
SELECT hex(c1),hex(c2) FROM t5;
 
11507
 
 
11508
# Update using range
 
11509
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11510
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11511
--sorted_result
 
11512
SELECT hex(c1),hex(c2) FROM t5;
 
11513
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11514
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11515
--sorted_result
 
11516
SELECT hex(c1),hex(c2) FROM t5;
 
11517
 
 
11518
# Update using eq_ref
 
11519
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11520
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11521
 
 
11522
# Droping the tables
 
11523
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
11524
 
 
11525
####Checking the bit values####
 
11526
SELECT 0 + b'101010101010101010101010101010'; 
 
11527
SELECT 0 + (101010101010101010101010101010<<0);
 
11528
######### INSERT/SELECT######### 
 
11529
 
 
11530
#### Insert and select 0 bit data into the table####
 
11531
CREATE TABLE t1(c1 BIT(0));
 
11532
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
11533
let $i=0;
 
11534
while($i){
 
11535
let $j=$i/2;
 
11536
eval set @v1=$i;
 
11537
eval set @v2=$j;
 
11538
set @v3=repeat('1',@v1);
 
11539
let $STR0= query_get_value(select @v3 as I,I,1);
 
11540
eval INSERT INTO t1 VALUES (b'$STR0');
 
11541
set @v3=repeat('0',@v1);
 
11542
let $STR1= query_get_value(select @v3 as I,I,1);
 
11543
eval INSERT INTO t1 VALUES (b'$STR1');
 
11544
set @v3=repeat('01',@v2);
 
11545
let $STR2= query_get_value(select @v3 as I,I,1);
 
11546
eval INSERT INTO t1 VALUES (b'$STR2');
 
11547
set @v3=repeat('10',@v2);
 
11548
let $STR3= query_get_value(select @v3 as I,I,1);
 
11549
eval INSERT INTO t1 VALUES (b'$STR3');
 
11550
set @v3=repeat('1',@v1);
 
11551
set @v4=repeat('01',@v2);
 
11552
set @v5=repeat('10',@v2);
 
11553
let $STR0= query_get_value(select @v3 as I,I,1);
 
11554
let $STR2= query_get_value(select @v4 as I,I,1);
 
11555
let $STR3= query_get_value(select @v5 as I,I,1);
 
11556
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
11557
dec $i;
 
11558
}
 
11559
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
11560
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
11561
--sorted_result
 
11562
SELECT HEX(c1) FROM t1;
 
11563
--sorted_result
 
11564
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
11565
--sorted_result
 
11566
SELECT OCT(c1) FROM t1;
 
11567
--sorted_result
 
11568
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
11569
--sorted_result
 
11570
SELECT BIN(c1) FROM t1;
 
11571
--sorted_result
 
11572
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
11573
--sorted_result
 
11574
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
11575
--sorted_result
 
11576
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
11577
--sorted_result
 
11578
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
11579
--sorted_result
 
11580
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
11581
--sorted_result
 
11582
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
11583
--sorted_result
 
11584
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
11585
--sorted_result
 
11586
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
11587
--error 1439
 
11588
CREATE TABLE t3 (c1 BIT(65));
 
11589
# Checking for bug #9571
 
11590
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
11591
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
11592
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
11593
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
11594
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11595
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11596
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11597
--sorted_result
 
11598
SELECT HEX(c1),HEX(c2) FROM t5;
 
11599
 
 
11600
#Insert permissible NULLs
 
11601
INSERT IGNORE INTO t5 VALUES(96,null);
 
11602
INSERT INTO t6 VALUES(null,null);
 
11603
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
11604
## Full table scan ##
 
11605
--sorted_result
 
11606
SELECT HEX(c1),HEX(c2) FROM t5;
 
11607
--sorted_result
 
11608
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
11609
--sorted_result
 
11610
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
11611
## Forward index scan, covering ##
 
11612
--sorted_result
 
11613
SELECT bin(c1) FROM t5;
 
11614
## Backward index scan, covering ##
 
11615
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
11616
## Forward index scan, non-covering ##
 
11617
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
11618
## Backward index scan, non-covering ##
 
11619
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
11620
## ref type access
 
11621
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
11622
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
11623
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
11624
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
11625
## Range access, ordered ##
 
11626
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
11627
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
11628
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
11629
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
11630
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
11631
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
11632
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
11633
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
11634
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
11635
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
11636
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
11637
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
11638
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
11639
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
11640
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
11641
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
11642
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
11643
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
11644
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
11645
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
11646
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
11647
## Range access, backwards scan ##
 
11648
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
11649
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
11650
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
11651
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
11652
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
11653
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
11654
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
11655
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
11656
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
11657
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
11658
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
11659
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
11660
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
11661
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
11662
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
11663
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
11664
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
11665
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
11666
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
11667
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
11668
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
11669
#Inserting different charachers
 
11670
CREATE TABLE t7(c1  BIT(0));
 
11671
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
11672
--sorted_result
 
11673
SELECT * FROM t7;
 
11674
############# UPDATE ###########
 
11675
 
 
11676
# Update order by limit
 
11677
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11678
 
 
11679
 
 
11680
# Update with arithmetic operations 
 
11681
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
11682
 
 
11683
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
11684
 
 
11685
 
 
11686
# Update with NULL ( NULL to number & number to NULL)
 
11687
UPDATE t6 SET c2=NULL WHERE c1=23;
 
11688
 
 
11689
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
11690
 
 
11691
 
 
11692
# Update range values
 
11693
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
11694
 
 
11695
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
11696
 
 
11697
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
11698
 
 
11699
 
 
11700
# Update outside range would be clipped to closest endpoints
 
11701
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
11702
 
 
11703
UPDATE t6 SET c2=-1 WHERE c1=94;
 
11704
 
 
11705
 
 
11706
# Update ignore on bad null error
 
11707
--sorted_result
 
11708
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
11709
SET SQL_MODE=STRICT_ALL_TABLES;
 
11710
--error ER_BAD_NULL_ERROR
 
11711
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
11712
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
11713
--sorted_result
 
11714
SELECT hex(c1),hex(c2) FROM t5;
 
11715
SET SQL_MODE=DEFAULT;
 
11716
 
 
11717
#Multi table update
 
11718
--disable_warnings
 
11719
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11720
--enable_warnings
 
11721
--sorted_result
 
11722
SELECT hex(c1),hex(c2) FROM t5;
 
11723
 
 
11724
 
 
11725
# Update using various access methods
 
11726
TRUNCATE t5;
 
11727
TRUNCATE t6;
 
11728
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11729
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11730
 
 
11731
# Update using Const
 
11732
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11733
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
11734
--sorted_result
 
11735
SELECT hex(c1),hex(c2) FROM t5;
 
11736
 
 
11737
# Update using range
 
11738
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11739
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
11740
--sorted_result
 
11741
SELECT hex(c1),hex(c2) FROM t5;
 
11742
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11743
--disable_warnings
 
11744
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
11745
--enable_warnings
 
11746
--sorted_result
 
11747
SELECT hex(c1),hex(c2) FROM t5;
 
11748
 
 
11749
# Update using eq_ref
 
11750
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11751
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11752
 
 
11753
############# DELETE ###########
 
11754
 
 
11755
TRUNCATE t5;
 
11756
TRUNCATE t6;
 
11757
 
 
11758
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11759
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11760
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
11761
 
 
11762
# Delete by order by limit
 
11763
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11764
 
 
11765
 
 
11766
# Delete rows with NULL column
 
11767
DELETE FROM t6 WHERE c2=NULL;
 
11768
 
 
11769
 
 
11770
# Delete with range values 
 
11771
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
11772
 
 
11773
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
11774
 
 
11775
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
11776
 
 
11777
 
 
11778
#Multi table delete
 
11779
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
11780
--sorted_result
 
11781
SELECT hex(c1),hex(c2) FROM t5;
 
11782
 
 
11783
 
 
11784
# Delete using various access methods
 
11785
TRUNCATE t5;
 
11786
TRUNCATE t6;
 
11787
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11788
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
11789
 
 
11790
# Update using Const
 
11791
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
11792
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
11793
--sorted_result
 
11794
SELECT hex(c1),hex(c2) FROM t5;
 
11795
 
 
11796
# Update using range
 
11797
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11798
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
11799
--sorted_result
 
11800
SELECT hex(c1),hex(c2) FROM t5;
 
11801
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11802
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
11803
--sorted_result
 
11804
SELECT hex(c1),hex(c2) FROM t5;
 
11805
 
 
11806
# Update using eq_ref
 
11807
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11808
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
11809
 
 
11810
# Droping the tables
 
11811
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
11812
 
 
11813
####Checking the bit values####
 
11814
SELECT 0 + b'101010101010101010101010101010'; 
 
11815
SELECT 0 + (101010101010101010101010101010<<1);
 
11816
######### INSERT/SELECT######### 
 
11817
 
 
11818
#### Insert and select 1 bit data into the table####
 
11819
CREATE TABLE t1(c1 BIT(1));
 
11820
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
11821
let $i=1;
 
11822
while($i){
 
11823
let $j=$i/2;
 
11824
eval set @v1=$i;
 
11825
eval set @v2=$j;
 
11826
set @v3=repeat('1',@v1);
 
11827
let $STR0= query_get_value(select @v3 as I,I,1);
 
11828
eval INSERT INTO t1 VALUES (b'$STR0');
 
11829
set @v3=repeat('0',@v1);
 
11830
let $STR1= query_get_value(select @v3 as I,I,1);
 
11831
eval INSERT INTO t1 VALUES (b'$STR1');
 
11832
set @v3=repeat('01',@v2);
 
11833
let $STR2= query_get_value(select @v3 as I,I,1);
 
11834
eval INSERT INTO t1 VALUES (b'$STR2');
 
11835
set @v3=repeat('10',@v2);
 
11836
let $STR3= query_get_value(select @v3 as I,I,1);
 
11837
eval INSERT INTO t1 VALUES (b'$STR3');
 
11838
set @v3=repeat('1',@v1);
 
11839
set @v4=repeat('01',@v2);
 
11840
set @v5=repeat('10',@v2);
 
11841
let $STR0= query_get_value(select @v3 as I,I,1);
 
11842
let $STR2= query_get_value(select @v4 as I,I,1);
 
11843
let $STR3= query_get_value(select @v5 as I,I,1);
 
11844
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
11845
dec $i;
 
11846
}
 
11847
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
11848
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
11849
--sorted_result
 
11850
SELECT HEX(c1) FROM t1;
 
11851
--sorted_result
 
11852
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
11853
--sorted_result
 
11854
SELECT OCT(c1) FROM t1;
 
11855
--sorted_result
 
11856
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
11857
--sorted_result
 
11858
SELECT BIN(c1) FROM t1;
 
11859
--sorted_result
 
11860
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
11861
--sorted_result
 
11862
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
11863
--sorted_result
 
11864
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
11865
--sorted_result
 
11866
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
11867
--sorted_result
 
11868
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
11869
--sorted_result
 
11870
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
11871
--sorted_result
 
11872
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
11873
--sorted_result
 
11874
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
11875
--error 1439
 
11876
CREATE TABLE t3 (c1 BIT(65));
 
11877
# Checking for bug #9571
 
11878
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
11879
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
11880
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
11881
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
11882
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
11883
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11884
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
11885
--sorted_result
 
11886
SELECT HEX(c1),HEX(c2) FROM t5;
 
11887
 
 
11888
#Insert permissible NULLs
 
11889
INSERT IGNORE INTO t5 VALUES(96,null);
 
11890
INSERT INTO t6 VALUES(null,null);
 
11891
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
11892
## Full table scan ##
 
11893
--sorted_result
 
11894
SELECT HEX(c1),HEX(c2) FROM t5;
 
11895
--sorted_result
 
11896
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
11897
--sorted_result
 
11898
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
11899
## Forward index scan, covering ##
 
11900
--sorted_result
 
11901
SELECT bin(c1) FROM t5;
 
11902
## Backward index scan, covering ##
 
11903
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
11904
## Forward index scan, non-covering ##
 
11905
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
11906
## Backward index scan, non-covering ##
 
11907
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
11908
## ref type access
 
11909
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
11910
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
11911
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
11912
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
11913
## Range access, ordered ##
 
11914
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
11915
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
11916
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
11917
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
11918
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
11919
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
11920
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
11921
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
11922
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
11923
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
11924
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
11925
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
11926
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
11927
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
11928
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
11929
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
11930
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
11931
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
11932
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
11933
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
11934
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
11935
## Range access, backwards scan ##
 
11936
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
11937
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
11938
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
11939
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
11940
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
11941
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
11942
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
11943
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
11944
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
11945
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
11946
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
11947
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
11948
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
11949
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
11950
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
11951
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
11952
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
11953
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
11954
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
11955
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
11956
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
11957
#Inserting different charachers
 
11958
CREATE TABLE t7(c1  BIT(1));
 
11959
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
11960
--sorted_result
 
11961
SELECT * FROM t7;
 
11962
############# UPDATE ###########
 
11963
 
 
11964
# Update order by limit
 
11965
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
11966
 
 
11967
 
 
11968
# Update with arithmetic operations 
 
11969
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
11970
 
 
11971
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
11972
 
 
11973
 
 
11974
# Update with NULL ( NULL to number & number to NULL)
 
11975
UPDATE t6 SET c2=NULL WHERE c1=23;
 
11976
 
 
11977
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
11978
 
 
11979
 
 
11980
# Update range values
 
11981
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
11982
 
 
11983
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
11984
 
 
11985
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
11986
 
 
11987
 
 
11988
# Update outside range would be clipped to closest endpoints
 
11989
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
11990
 
 
11991
UPDATE t6 SET c2=-1 WHERE c1=94;
 
11992
 
 
11993
 
 
11994
# Update ignore on bad null error
 
11995
--sorted_result
 
11996
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
11997
SET SQL_MODE=STRICT_ALL_TABLES;
 
11998
--error ER_BAD_NULL_ERROR
 
11999
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
12000
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
12001
--sorted_result
 
12002
SELECT hex(c1),hex(c2) FROM t5;
 
12003
SET SQL_MODE=DEFAULT;
 
12004
 
 
12005
#Multi table update
 
12006
--disable_warnings
 
12007
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12008
--enable_warnings
 
12009
--sorted_result
 
12010
SELECT hex(c1),hex(c2) FROM t5;
 
12011
 
 
12012
 
 
12013
# Update using various access methods
 
12014
TRUNCATE t5;
 
12015
TRUNCATE t6;
 
12016
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12017
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12018
 
 
12019
# Update using Const
 
12020
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12021
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
12022
--sorted_result
 
12023
SELECT hex(c1),hex(c2) FROM t5;
 
12024
 
 
12025
# Update using range
 
12026
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12027
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
12028
--sorted_result
 
12029
SELECT hex(c1),hex(c2) FROM t5;
 
12030
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12031
--disable_warnings
 
12032
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
12033
--enable_warnings
 
12034
--sorted_result
 
12035
SELECT hex(c1),hex(c2) FROM t5;
 
12036
 
 
12037
# Update using eq_ref
 
12038
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12039
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12040
 
 
12041
############# DELETE ###########
 
12042
 
 
12043
TRUNCATE t5;
 
12044
TRUNCATE t6;
 
12045
 
 
12046
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12047
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12048
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
12049
 
 
12050
# Delete by order by limit
 
12051
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12052
 
 
12053
 
 
12054
# Delete rows with NULL column
 
12055
DELETE FROM t6 WHERE c2=NULL;
 
12056
 
 
12057
 
 
12058
# Delete with range values 
 
12059
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
12060
 
 
12061
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
12062
 
 
12063
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
12064
 
 
12065
 
 
12066
#Multi table delete
 
12067
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12068
--sorted_result
 
12069
SELECT hex(c1),hex(c2) FROM t5;
 
12070
 
 
12071
 
 
12072
# Delete using various access methods
 
12073
TRUNCATE t5;
 
12074
TRUNCATE t6;
 
12075
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12076
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12077
 
 
12078
# Update using Const
 
12079
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12080
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
12081
--sorted_result
 
12082
SELECT hex(c1),hex(c2) FROM t5;
 
12083
 
 
12084
# Update using range
 
12085
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12086
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12087
--sorted_result
 
12088
SELECT hex(c1),hex(c2) FROM t5;
 
12089
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12090
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12091
--sorted_result
 
12092
SELECT hex(c1),hex(c2) FROM t5;
 
12093
 
 
12094
# Update using eq_ref
 
12095
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12096
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12097
 
 
12098
# Droping the tables
 
12099
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
12100
 
 
12101
####Checking the bit values####
 
12102
SELECT 0 + b'101010101010101010101010101010'; 
 
12103
SELECT 0 + (101010101010101010101010101010<<2);
 
12104
######### INSERT/SELECT######### 
 
12105
 
 
12106
#### Insert and select 2 bit data into the table####
 
12107
CREATE TABLE t1(c1 BIT(2));
 
12108
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
12109
let $i=2;
 
12110
while($i){
 
12111
let $j=$i/2;
 
12112
eval set @v1=$i;
 
12113
eval set @v2=$j;
 
12114
set @v3=repeat('1',@v1);
 
12115
let $STR0= query_get_value(select @v3 as I,I,1);
 
12116
eval INSERT INTO t1 VALUES (b'$STR0');
 
12117
set @v3=repeat('0',@v1);
 
12118
let $STR1= query_get_value(select @v3 as I,I,1);
 
12119
eval INSERT INTO t1 VALUES (b'$STR1');
 
12120
set @v3=repeat('01',@v2);
 
12121
let $STR2= query_get_value(select @v3 as I,I,1);
 
12122
eval INSERT INTO t1 VALUES (b'$STR2');
 
12123
set @v3=repeat('10',@v2);
 
12124
let $STR3= query_get_value(select @v3 as I,I,1);
 
12125
eval INSERT INTO t1 VALUES (b'$STR3');
 
12126
set @v3=repeat('1',@v1);
 
12127
set @v4=repeat('01',@v2);
 
12128
set @v5=repeat('10',@v2);
 
12129
let $STR0= query_get_value(select @v3 as I,I,1);
 
12130
let $STR2= query_get_value(select @v4 as I,I,1);
 
12131
let $STR3= query_get_value(select @v5 as I,I,1);
 
12132
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
12133
dec $i;
 
12134
}
 
12135
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
12136
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
12137
--sorted_result
 
12138
SELECT HEX(c1) FROM t1;
 
12139
--sorted_result
 
12140
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
12141
--sorted_result
 
12142
SELECT OCT(c1) FROM t1;
 
12143
--sorted_result
 
12144
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
12145
--sorted_result
 
12146
SELECT BIN(c1) FROM t1;
 
12147
--sorted_result
 
12148
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
12149
--sorted_result
 
12150
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
12151
--sorted_result
 
12152
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
12153
--sorted_result
 
12154
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
12155
--sorted_result
 
12156
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
12157
--sorted_result
 
12158
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
12159
--sorted_result
 
12160
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
12161
--sorted_result
 
12162
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
12163
--error 1439
 
12164
CREATE TABLE t3 (c1 BIT(65));
 
12165
# Checking for bug #9571
 
12166
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
12167
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
12168
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
12169
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
12170
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12171
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12172
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12173
--sorted_result
 
12174
SELECT HEX(c1),HEX(c2) FROM t5;
 
12175
 
 
12176
#Insert permissible NULLs
 
12177
INSERT IGNORE INTO t5 VALUES(96,null);
 
12178
INSERT INTO t6 VALUES(null,null);
 
12179
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
12180
## Full table scan ##
 
12181
--sorted_result
 
12182
SELECT HEX(c1),HEX(c2) FROM t5;
 
12183
--sorted_result
 
12184
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
12185
--sorted_result
 
12186
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
12187
## Forward index scan, covering ##
 
12188
--sorted_result
 
12189
SELECT bin(c1) FROM t5;
 
12190
## Backward index scan, covering ##
 
12191
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
12192
## Forward index scan, non-covering ##
 
12193
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
12194
## Backward index scan, non-covering ##
 
12195
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
12196
## ref type access
 
12197
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
12198
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
12199
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
12200
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
12201
## Range access, ordered ##
 
12202
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
12203
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
12204
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
12205
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
12206
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
12207
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
12208
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
12209
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
12210
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
12211
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
12212
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
12213
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
12214
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
12215
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
12216
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
12217
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
12218
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
12219
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
12220
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
12221
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
12222
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
12223
## Range access, backwards scan ##
 
12224
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
12225
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
12226
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
12227
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
12228
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
12229
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
12230
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
12231
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
12232
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
12233
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
12234
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
12235
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
12236
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
12237
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
12238
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
12239
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
12240
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
12241
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
12242
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
12243
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
12244
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
12245
#Inserting different charachers
 
12246
CREATE TABLE t7(c1  BIT(2));
 
12247
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
12248
--sorted_result
 
12249
SELECT * FROM t7;
 
12250
############# UPDATE ###########
 
12251
 
 
12252
# Update order by limit
 
12253
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12254
 
 
12255
 
 
12256
# Update with arithmetic operations 
 
12257
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
12258
 
 
12259
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
12260
 
 
12261
 
 
12262
# Update with NULL ( NULL to number & number to NULL)
 
12263
UPDATE t6 SET c2=NULL WHERE c1=23;
 
12264
 
 
12265
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
12266
 
 
12267
 
 
12268
# Update range values
 
12269
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
12270
 
 
12271
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
12272
 
 
12273
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
12274
 
 
12275
 
 
12276
# Update outside range would be clipped to closest endpoints
 
12277
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
12278
 
 
12279
UPDATE t6 SET c2=-1 WHERE c1=94;
 
12280
 
 
12281
 
 
12282
# Update ignore on bad null error
 
12283
--sorted_result
 
12284
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
12285
SET SQL_MODE=STRICT_ALL_TABLES;
 
12286
--error ER_BAD_NULL_ERROR
 
12287
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
12288
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
12289
--sorted_result
 
12290
SELECT hex(c1),hex(c2) FROM t5;
 
12291
SET SQL_MODE=DEFAULT;
 
12292
 
 
12293
#Multi table update
 
12294
--disable_warnings
 
12295
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12296
--enable_warnings
 
12297
--sorted_result
 
12298
SELECT hex(c1),hex(c2) FROM t5;
 
12299
 
 
12300
 
 
12301
# Update using various access methods
 
12302
TRUNCATE t5;
 
12303
TRUNCATE t6;
 
12304
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12305
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12306
 
 
12307
# Update using Const
 
12308
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12309
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
12310
--sorted_result
 
12311
SELECT hex(c1),hex(c2) FROM t5;
 
12312
 
 
12313
# Update using range
 
12314
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12315
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
12316
--sorted_result
 
12317
SELECT hex(c1),hex(c2) FROM t5;
 
12318
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12319
--disable_warnings
 
12320
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
12321
--enable_warnings
 
12322
--sorted_result
 
12323
SELECT hex(c1),hex(c2) FROM t5;
 
12324
 
 
12325
# Update using eq_ref
 
12326
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12327
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12328
 
 
12329
############# DELETE ###########
 
12330
 
 
12331
TRUNCATE t5;
 
12332
TRUNCATE t6;
 
12333
 
 
12334
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12335
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12336
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
12337
 
 
12338
# Delete by order by limit
 
12339
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12340
 
 
12341
 
 
12342
# Delete rows with NULL column
 
12343
DELETE FROM t6 WHERE c2=NULL;
 
12344
 
 
12345
 
 
12346
# Delete with range values 
 
12347
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
12348
 
 
12349
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
12350
 
 
12351
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
12352
 
 
12353
 
 
12354
#Multi table delete
 
12355
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12356
--sorted_result
 
12357
SELECT hex(c1),hex(c2) FROM t5;
 
12358
 
 
12359
 
 
12360
# Delete using various access methods
 
12361
TRUNCATE t5;
 
12362
TRUNCATE t6;
 
12363
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12364
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12365
 
 
12366
# Update using Const
 
12367
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12368
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
12369
--sorted_result
 
12370
SELECT hex(c1),hex(c2) FROM t5;
 
12371
 
 
12372
# Update using range
 
12373
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12374
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12375
--sorted_result
 
12376
SELECT hex(c1),hex(c2) FROM t5;
 
12377
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12378
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12379
--sorted_result
 
12380
SELECT hex(c1),hex(c2) FROM t5;
 
12381
 
 
12382
# Update using eq_ref
 
12383
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12384
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12385
 
 
12386
# Droping the tables
 
12387
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
12388
 
 
12389
####Checking the bit values####
 
12390
SELECT 0 + b'101010101010101010101010101010'; 
 
12391
SELECT 0 + (101010101010101010101010101010<<4);
 
12392
######### INSERT/SELECT######### 
 
12393
 
 
12394
#### Insert and select 4 bit data into the table####
 
12395
CREATE TABLE t1(c1 BIT(4));
 
12396
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
12397
let $i=4;
 
12398
while($i){
 
12399
let $j=$i/2;
 
12400
eval set @v1=$i;
 
12401
eval set @v2=$j;
 
12402
set @v3=repeat('1',@v1);
 
12403
let $STR0= query_get_value(select @v3 as I,I,1);
 
12404
eval INSERT INTO t1 VALUES (b'$STR0');
 
12405
set @v3=repeat('0',@v1);
 
12406
let $STR1= query_get_value(select @v3 as I,I,1);
 
12407
eval INSERT INTO t1 VALUES (b'$STR1');
 
12408
set @v3=repeat('01',@v2);
 
12409
let $STR2= query_get_value(select @v3 as I,I,1);
 
12410
eval INSERT INTO t1 VALUES (b'$STR2');
 
12411
set @v3=repeat('10',@v2);
 
12412
let $STR3= query_get_value(select @v3 as I,I,1);
 
12413
eval INSERT INTO t1 VALUES (b'$STR3');
 
12414
set @v3=repeat('1',@v1);
 
12415
set @v4=repeat('01',@v2);
 
12416
set @v5=repeat('10',@v2);
 
12417
let $STR0= query_get_value(select @v3 as I,I,1);
 
12418
let $STR2= query_get_value(select @v4 as I,I,1);
 
12419
let $STR3= query_get_value(select @v5 as I,I,1);
 
12420
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
12421
dec $i;
 
12422
}
 
12423
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
12424
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
12425
--sorted_result
 
12426
SELECT HEX(c1) FROM t1;
 
12427
--sorted_result
 
12428
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
12429
--sorted_result
 
12430
SELECT OCT(c1) FROM t1;
 
12431
--sorted_result
 
12432
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
12433
--sorted_result
 
12434
SELECT BIN(c1) FROM t1;
 
12435
--sorted_result
 
12436
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
12437
--sorted_result
 
12438
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
12439
--sorted_result
 
12440
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
12441
--sorted_result
 
12442
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
12443
--sorted_result
 
12444
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
12445
--sorted_result
 
12446
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
12447
--sorted_result
 
12448
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
12449
--sorted_result
 
12450
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
12451
--error 1439
 
12452
CREATE TABLE t3 (c1 BIT(65));
 
12453
# Checking for bug #9571
 
12454
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
12455
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
12456
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
12457
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
12458
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12459
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12460
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12461
--sorted_result
 
12462
SELECT HEX(c1),HEX(c2) FROM t5;
 
12463
 
 
12464
#Insert permissible NULLs
 
12465
INSERT IGNORE INTO t5 VALUES(96,null);
 
12466
INSERT INTO t6 VALUES(null,null);
 
12467
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
12468
## Full table scan ##
 
12469
--sorted_result
 
12470
SELECT HEX(c1),HEX(c2) FROM t5;
 
12471
--sorted_result
 
12472
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
12473
--sorted_result
 
12474
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
12475
## Forward index scan, covering ##
 
12476
--sorted_result
 
12477
SELECT bin(c1) FROM t5;
 
12478
## Backward index scan, covering ##
 
12479
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
12480
## Forward index scan, non-covering ##
 
12481
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
12482
## Backward index scan, non-covering ##
 
12483
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
12484
## ref type access
 
12485
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
12486
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
12487
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
12488
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
12489
## Range access, ordered ##
 
12490
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
12491
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
12492
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
12493
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
12494
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
12495
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
12496
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
12497
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
12498
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
12499
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
12500
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
12501
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
12502
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
12503
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
12504
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
12505
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
12506
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
12507
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
12508
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
12509
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
12510
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
12511
## Range access, backwards scan ##
 
12512
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
12513
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
12514
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
12515
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
12516
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
12517
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
12518
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
12519
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
12520
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
12521
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
12522
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
12523
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
12524
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
12525
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
12526
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
12527
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
12528
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
12529
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
12530
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
12531
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
12532
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
12533
#Inserting different charachers
 
12534
CREATE TABLE t7(c1  BIT(4));
 
12535
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
12536
--sorted_result
 
12537
SELECT * FROM t7;
 
12538
############# UPDATE ###########
 
12539
 
 
12540
# Update order by limit
 
12541
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12542
 
 
12543
 
 
12544
# Update with arithmetic operations 
 
12545
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
12546
 
 
12547
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
12548
 
 
12549
 
 
12550
# Update with NULL ( NULL to number & number to NULL)
 
12551
UPDATE t6 SET c2=NULL WHERE c1=23;
 
12552
 
 
12553
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
12554
 
 
12555
 
 
12556
# Update range values
 
12557
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
12558
 
 
12559
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
12560
 
 
12561
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
12562
 
 
12563
 
 
12564
# Update outside range would be clipped to closest endpoints
 
12565
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
12566
 
 
12567
UPDATE t6 SET c2=-1 WHERE c1=94;
 
12568
 
 
12569
 
 
12570
# Update ignore on bad null error
 
12571
--sorted_result
 
12572
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
12573
SET SQL_MODE=STRICT_ALL_TABLES;
 
12574
--error ER_BAD_NULL_ERROR
 
12575
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
12576
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
12577
--sorted_result
 
12578
SELECT hex(c1),hex(c2) FROM t5;
 
12579
SET SQL_MODE=DEFAULT;
 
12580
 
 
12581
#Multi table update
 
12582
--disable_warnings
 
12583
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12584
--enable_warnings
 
12585
--sorted_result
 
12586
SELECT hex(c1),hex(c2) FROM t5;
 
12587
 
 
12588
 
 
12589
# Update using various access methods
 
12590
TRUNCATE t5;
 
12591
TRUNCATE t6;
 
12592
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12593
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12594
 
 
12595
# Update using Const
 
12596
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12597
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
12598
--sorted_result
 
12599
SELECT hex(c1),hex(c2) FROM t5;
 
12600
 
 
12601
# Update using range
 
12602
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12603
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
12604
--sorted_result
 
12605
SELECT hex(c1),hex(c2) FROM t5;
 
12606
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12607
--disable_warnings
 
12608
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
12609
--enable_warnings
 
12610
--sorted_result
 
12611
SELECT hex(c1),hex(c2) FROM t5;
 
12612
 
 
12613
# Update using eq_ref
 
12614
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12615
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12616
 
 
12617
############# DELETE ###########
 
12618
 
 
12619
TRUNCATE t5;
 
12620
TRUNCATE t6;
 
12621
 
 
12622
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12623
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12624
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
12625
 
 
12626
# Delete by order by limit
 
12627
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12628
 
 
12629
 
 
12630
# Delete rows with NULL column
 
12631
DELETE FROM t6 WHERE c2=NULL;
 
12632
 
 
12633
 
 
12634
# Delete with range values 
 
12635
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
12636
 
 
12637
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
12638
 
 
12639
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
12640
 
 
12641
 
 
12642
#Multi table delete
 
12643
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12644
--sorted_result
 
12645
SELECT hex(c1),hex(c2) FROM t5;
 
12646
 
 
12647
 
 
12648
# Delete using various access methods
 
12649
TRUNCATE t5;
 
12650
TRUNCATE t6;
 
12651
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12652
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12653
 
 
12654
# Update using Const
 
12655
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12656
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
12657
--sorted_result
 
12658
SELECT hex(c1),hex(c2) FROM t5;
 
12659
 
 
12660
# Update using range
 
12661
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12662
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12663
--sorted_result
 
12664
SELECT hex(c1),hex(c2) FROM t5;
 
12665
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12666
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12667
--sorted_result
 
12668
SELECT hex(c1),hex(c2) FROM t5;
 
12669
 
 
12670
# Update using eq_ref
 
12671
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12672
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12673
 
 
12674
# Droping the tables
 
12675
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
12676
 
 
12677
####Checking the bit values####
 
12678
SELECT 0 + b'101010101010101010101010101010'; 
 
12679
SELECT 0 + (101010101010101010101010101010<<8);
 
12680
######### INSERT/SELECT######### 
 
12681
 
 
12682
#### Insert and select 8 bit data into the table####
 
12683
CREATE TABLE t1(c1 BIT(8));
 
12684
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
12685
let $i=8;
 
12686
while($i){
 
12687
let $j=$i/2;
 
12688
eval set @v1=$i;
 
12689
eval set @v2=$j;
 
12690
set @v3=repeat('1',@v1);
 
12691
let $STR0= query_get_value(select @v3 as I,I,1);
 
12692
eval INSERT INTO t1 VALUES (b'$STR0');
 
12693
set @v3=repeat('0',@v1);
 
12694
let $STR1= query_get_value(select @v3 as I,I,1);
 
12695
eval INSERT INTO t1 VALUES (b'$STR1');
 
12696
set @v3=repeat('01',@v2);
 
12697
let $STR2= query_get_value(select @v3 as I,I,1);
 
12698
eval INSERT INTO t1 VALUES (b'$STR2');
 
12699
set @v3=repeat('10',@v2);
 
12700
let $STR3= query_get_value(select @v3 as I,I,1);
 
12701
eval INSERT INTO t1 VALUES (b'$STR3');
 
12702
set @v3=repeat('1',@v1);
 
12703
set @v4=repeat('01',@v2);
 
12704
set @v5=repeat('10',@v2);
 
12705
let $STR0= query_get_value(select @v3 as I,I,1);
 
12706
let $STR2= query_get_value(select @v4 as I,I,1);
 
12707
let $STR3= query_get_value(select @v5 as I,I,1);
 
12708
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
12709
dec $i;
 
12710
}
 
12711
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
12712
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
12713
--sorted_result
 
12714
SELECT HEX(c1) FROM t1;
 
12715
--sorted_result
 
12716
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
12717
--sorted_result
 
12718
SELECT OCT(c1) FROM t1;
 
12719
--sorted_result
 
12720
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
12721
--sorted_result
 
12722
SELECT BIN(c1) FROM t1;
 
12723
--sorted_result
 
12724
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
12725
--sorted_result
 
12726
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
12727
--sorted_result
 
12728
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
12729
--sorted_result
 
12730
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
12731
--sorted_result
 
12732
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
12733
--sorted_result
 
12734
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
12735
--sorted_result
 
12736
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
12737
--sorted_result
 
12738
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
12739
--error 1439
 
12740
CREATE TABLE t3 (c1 BIT(65));
 
12741
# Checking for bug #9571
 
12742
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
12743
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
12744
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
12745
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
12746
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12747
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12748
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12749
--sorted_result
 
12750
SELECT HEX(c1),HEX(c2) FROM t5;
 
12751
 
 
12752
#Insert permissible NULLs
 
12753
INSERT IGNORE INTO t5 VALUES(96,null);
 
12754
INSERT INTO t6 VALUES(null,null);
 
12755
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
12756
## Full table scan ##
 
12757
--sorted_result
 
12758
SELECT HEX(c1),HEX(c2) FROM t5;
 
12759
--sorted_result
 
12760
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
12761
--sorted_result
 
12762
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
12763
## Forward index scan, covering ##
 
12764
--sorted_result
 
12765
SELECT bin(c1) FROM t5;
 
12766
## Backward index scan, covering ##
 
12767
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
12768
## Forward index scan, non-covering ##
 
12769
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
12770
## Backward index scan, non-covering ##
 
12771
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
12772
## ref type access
 
12773
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
12774
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
12775
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
12776
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
12777
## Range access, ordered ##
 
12778
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
12779
 
 
12780
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
12781
 
 
12782
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
12783
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
12784
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
12785
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
12786
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
12787
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
12788
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
12789
 
 
12790
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
12791
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
12792
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
12793
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
12794
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
12795
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
12796
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
12797
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
12798
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
12799
## Range access, backwards scan ##
 
12800
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
12801
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
12802
 
 
12803
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
12804
 
 
12805
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
12806
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
12807
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
12808
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
12809
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
12810
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
12811
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
12812
 
 
12813
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
12814
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
12815
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
12816
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
12817
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
12818
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
12819
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
12820
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
12821
#Inserting different charachers
 
12822
CREATE TABLE t7(c1  BIT(8));
 
12823
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
12824
--sorted_result
 
12825
SELECT * FROM t7;
 
12826
############# UPDATE ###########
 
12827
 
 
12828
# Update order by limit
 
12829
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12830
 
 
12831
 
 
12832
# Update with arithmetic operations 
 
12833
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
12834
 
 
12835
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
12836
 
 
12837
 
 
12838
# Update with NULL ( NULL to number & number to NULL)
 
12839
UPDATE t6 SET c2=NULL WHERE c1=23;
 
12840
 
 
12841
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
12842
 
 
12843
 
 
12844
# Update range values
 
12845
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
12846
 
 
12847
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
12848
 
 
12849
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
12850
 
 
12851
 
 
12852
# Update outside range would be clipped to closest endpoints
 
12853
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
12854
 
 
12855
UPDATE t6 SET c2=-1 WHERE c1=94;
 
12856
 
 
12857
 
 
12858
# Update ignore on bad null error
 
12859
--sorted_result
 
12860
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
12861
SET SQL_MODE=STRICT_ALL_TABLES;
 
12862
--error ER_BAD_NULL_ERROR
 
12863
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
12864
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
12865
--sorted_result
 
12866
SELECT hex(c1),hex(c2) FROM t5;
 
12867
SET SQL_MODE=DEFAULT;
 
12868
 
 
12869
#Multi table update
 
12870
--disable_warnings
 
12871
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12872
--enable_warnings
 
12873
--sorted_result
 
12874
SELECT hex(c1),hex(c2) FROM t5;
 
12875
 
 
12876
 
 
12877
# Update using various access methods
 
12878
TRUNCATE t5;
 
12879
TRUNCATE t6;
 
12880
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12881
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12882
 
 
12883
# Update using Const
 
12884
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12885
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
12886
--sorted_result
 
12887
SELECT hex(c1),hex(c2) FROM t5;
 
12888
 
 
12889
# Update using range
 
12890
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12891
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
12892
--sorted_result
 
12893
SELECT hex(c1),hex(c2) FROM t5;
 
12894
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12895
--disable_warnings
 
12896
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
12897
--enable_warnings
 
12898
--sorted_result
 
12899
SELECT hex(c1),hex(c2) FROM t5;
 
12900
 
 
12901
# Update using eq_ref
 
12902
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12903
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12904
 
 
12905
############# DELETE ###########
 
12906
 
 
12907
TRUNCATE t5;
 
12908
TRUNCATE t6;
 
12909
 
 
12910
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
12911
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
12912
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
12913
 
 
12914
# Delete by order by limit
 
12915
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
12916
 
 
12917
 
 
12918
# Delete rows with NULL column
 
12919
DELETE FROM t6 WHERE c2=NULL;
 
12920
 
 
12921
 
 
12922
# Delete with range values 
 
12923
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
12924
 
 
12925
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
12926
 
 
12927
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
12928
 
 
12929
 
 
12930
#Multi table delete
 
12931
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
12932
--sorted_result
 
12933
SELECT hex(c1),hex(c2) FROM t5;
 
12934
 
 
12935
 
 
12936
# Delete using various access methods
 
12937
TRUNCATE t5;
 
12938
TRUNCATE t6;
 
12939
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12940
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
12941
 
 
12942
# Update using Const
 
12943
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
12944
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
12945
--sorted_result
 
12946
SELECT hex(c1),hex(c2) FROM t5;
 
12947
 
 
12948
# Update using range
 
12949
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12950
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
12951
--sorted_result
 
12952
SELECT hex(c1),hex(c2) FROM t5;
 
12953
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12954
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
12955
--sorted_result
 
12956
SELECT hex(c1),hex(c2) FROM t5;
 
12957
 
 
12958
# Update using eq_ref
 
12959
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12960
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
12961
 
 
12962
# Droping the tables
 
12963
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
12964
 
 
12965
####Checking the bit values####
 
12966
SELECT 0 + b'101010101010101010101010101010'; 
 
12967
SELECT 0 + (101010101010101010101010101010<<16);
 
12968
######### INSERT/SELECT######### 
 
12969
 
 
12970
#### Insert and select 16 bit data into the table####
 
12971
CREATE TABLE t1(c1 BIT(16));
 
12972
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
12973
let $i=16;
 
12974
while($i){
 
12975
let $j=$i/2;
 
12976
eval set @v1=$i;
 
12977
eval set @v2=$j;
 
12978
set @v3=repeat('1',@v1);
 
12979
let $STR0= query_get_value(select @v3 as I,I,1);
 
12980
eval INSERT INTO t1 VALUES (b'$STR0');
 
12981
set @v3=repeat('0',@v1);
 
12982
let $STR1= query_get_value(select @v3 as I,I,1);
 
12983
eval INSERT INTO t1 VALUES (b'$STR1');
 
12984
set @v3=repeat('01',@v2);
 
12985
let $STR2= query_get_value(select @v3 as I,I,1);
 
12986
eval INSERT INTO t1 VALUES (b'$STR2');
 
12987
set @v3=repeat('10',@v2);
 
12988
let $STR3= query_get_value(select @v3 as I,I,1);
 
12989
eval INSERT INTO t1 VALUES (b'$STR3');
 
12990
set @v3=repeat('1',@v1);
 
12991
set @v4=repeat('01',@v2);
 
12992
set @v5=repeat('10',@v2);
 
12993
let $STR0= query_get_value(select @v3 as I,I,1);
 
12994
let $STR2= query_get_value(select @v4 as I,I,1);
 
12995
let $STR3= query_get_value(select @v5 as I,I,1);
 
12996
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
12997
dec $i;
 
12998
}
 
12999
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
13000
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
13001
--sorted_result
 
13002
SELECT HEX(c1) FROM t1;
 
13003
--sorted_result
 
13004
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
13005
--sorted_result
 
13006
SELECT OCT(c1) FROM t1;
 
13007
--sorted_result
 
13008
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
13009
--sorted_result
 
13010
SELECT BIN(c1) FROM t1;
 
13011
--sorted_result
 
13012
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
13013
--sorted_result
 
13014
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
13015
--sorted_result
 
13016
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
13017
--sorted_result
 
13018
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
13019
--sorted_result
 
13020
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
13021
--sorted_result
 
13022
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
13023
--sorted_result
 
13024
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
13025
--sorted_result
 
13026
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
13027
--error 1439
 
13028
CREATE TABLE t3 (c1 BIT(65));
 
13029
# Checking for bug #9571
 
13030
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
13031
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
13032
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
13033
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
13034
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13035
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13036
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13037
--sorted_result
 
13038
SELECT HEX(c1),HEX(c2) FROM t5;
 
13039
 
 
13040
#Insert permissible NULLs
 
13041
INSERT IGNORE INTO t5 VALUES(96,null);
 
13042
INSERT INTO t6 VALUES(null,null);
 
13043
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
13044
## Full table scan ##
 
13045
--sorted_result
 
13046
SELECT HEX(c1),HEX(c2) FROM t5;
 
13047
--sorted_result
 
13048
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
13049
--sorted_result
 
13050
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
13051
## Forward index scan, covering ##
 
13052
--sorted_result
 
13053
SELECT bin(c1) FROM t5;
 
13054
## Backward index scan, covering ##
 
13055
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
13056
## Forward index scan, non-covering ##
 
13057
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
13058
## Backward index scan, non-covering ##
 
13059
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
13060
## ref type access
 
13061
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
13062
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
13063
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
13064
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
13065
## Range access, ordered ##
 
13066
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
13067
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
13068
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
13069
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
13070
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
13071
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
13072
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
13073
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
13074
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
13075
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
13076
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
13077
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
13078
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
13079
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
13080
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
13081
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
13082
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
13083
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
13084
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
13085
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
13086
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
13087
## Range access, backwards scan ##
 
13088
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
13089
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
13090
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
13091
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
13092
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
13093
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
13094
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
13095
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
13096
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
13097
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
13098
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
13099
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
13100
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
13101
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
13102
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
13103
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
13104
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
13105
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
13106
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
13107
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
13108
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
13109
#Inserting different charachers
 
13110
CREATE TABLE t7(c1  BIT(16));
 
13111
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
13112
--sorted_result
 
13113
SELECT * FROM t7;
 
13114
############# UPDATE ###########
 
13115
 
 
13116
# Update order by limit
 
13117
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13118
 
 
13119
 
 
13120
# Update with arithmetic operations 
 
13121
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
13122
 
 
13123
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
13124
 
 
13125
 
 
13126
# Update with NULL ( NULL to number & number to NULL)
 
13127
UPDATE t6 SET c2=NULL WHERE c1=23;
 
13128
 
 
13129
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
13130
 
 
13131
 
 
13132
# Update range values
 
13133
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
13134
 
 
13135
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
13136
 
 
13137
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
13138
 
 
13139
 
 
13140
# Update outside range would be clipped to closest endpoints
 
13141
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
13142
 
 
13143
UPDATE t6 SET c2=-1 WHERE c1=94;
 
13144
 
 
13145
 
 
13146
# Update ignore on bad null error
 
13147
--sorted_result
 
13148
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
13149
SET SQL_MODE=STRICT_ALL_TABLES;
 
13150
--error ER_BAD_NULL_ERROR
 
13151
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
13152
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
13153
--sorted_result
 
13154
SELECT hex(c1),hex(c2) FROM t5;
 
13155
SET SQL_MODE=DEFAULT;
 
13156
 
 
13157
#Multi table update
 
13158
--disable_warnings
 
13159
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13160
--enable_warnings
 
13161
--sorted_result
 
13162
SELECT hex(c1),hex(c2) FROM t5;
 
13163
 
 
13164
 
 
13165
# Update using various access methods
 
13166
TRUNCATE t5;
 
13167
TRUNCATE t6;
 
13168
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13169
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13170
 
 
13171
# Update using Const
 
13172
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13173
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
13174
--sorted_result
 
13175
SELECT hex(c1),hex(c2) FROM t5;
 
13176
 
 
13177
# Update using range
 
13178
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13179
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
13180
--sorted_result
 
13181
SELECT hex(c1),hex(c2) FROM t5;
 
13182
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13183
--disable_warnings
 
13184
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
13185
--enable_warnings
 
13186
--sorted_result
 
13187
SELECT hex(c1),hex(c2) FROM t5;
 
13188
 
 
13189
# Update using eq_ref
 
13190
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13191
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13192
 
 
13193
############# DELETE ###########
 
13194
 
 
13195
TRUNCATE t5;
 
13196
TRUNCATE t6;
 
13197
 
 
13198
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13199
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13200
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
13201
 
 
13202
# Delete by order by limit
 
13203
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13204
 
 
13205
 
 
13206
# Delete rows with NULL column
 
13207
DELETE FROM t6 WHERE c2=NULL;
 
13208
 
 
13209
 
 
13210
# Delete with range values 
 
13211
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
13212
 
 
13213
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
13214
 
 
13215
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
13216
 
 
13217
 
 
13218
#Multi table delete
 
13219
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13220
--sorted_result
 
13221
SELECT hex(c1),hex(c2) FROM t5;
 
13222
 
 
13223
 
 
13224
# Delete using various access methods
 
13225
TRUNCATE t5;
 
13226
TRUNCATE t6;
 
13227
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13228
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13229
 
 
13230
# Update using Const
 
13231
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13232
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
13233
--sorted_result
 
13234
SELECT hex(c1),hex(c2) FROM t5;
 
13235
 
 
13236
# Update using range
 
13237
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13238
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13239
--sorted_result
 
13240
SELECT hex(c1),hex(c2) FROM t5;
 
13241
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13242
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13243
--sorted_result
 
13244
SELECT hex(c1),hex(c2) FROM t5;
 
13245
 
 
13246
# Update using eq_ref
 
13247
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13248
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13249
 
 
13250
# Droping the tables
 
13251
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
13252
 
 
13253
####Checking the bit values####
 
13254
SELECT 0 + b'101010101010101010101010101010'; 
 
13255
SELECT 0 + (101010101010101010101010101010<<32);
 
13256
######### INSERT/SELECT######### 
 
13257
 
 
13258
#### Insert and select 32 bit data into the table####
 
13259
CREATE TABLE t1(c1 BIT(32));
 
13260
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
13261
let $i=32;
 
13262
while($i){
 
13263
let $j=$i/2;
 
13264
eval set @v1=$i;
 
13265
eval set @v2=$j;
 
13266
set @v3=repeat('1',@v1);
 
13267
let $STR0= query_get_value(select @v3 as I,I,1);
 
13268
eval INSERT INTO t1 VALUES (b'$STR0');
 
13269
set @v3=repeat('0',@v1);
 
13270
let $STR1= query_get_value(select @v3 as I,I,1);
 
13271
eval INSERT INTO t1 VALUES (b'$STR1');
 
13272
set @v3=repeat('01',@v2);
 
13273
let $STR2= query_get_value(select @v3 as I,I,1);
 
13274
eval INSERT INTO t1 VALUES (b'$STR2');
 
13275
set @v3=repeat('10',@v2);
 
13276
let $STR3= query_get_value(select @v3 as I,I,1);
 
13277
eval INSERT INTO t1 VALUES (b'$STR3');
 
13278
set @v3=repeat('1',@v1);
 
13279
set @v4=repeat('01',@v2);
 
13280
set @v5=repeat('10',@v2);
 
13281
let $STR0= query_get_value(select @v3 as I,I,1);
 
13282
let $STR2= query_get_value(select @v4 as I,I,1);
 
13283
let $STR3= query_get_value(select @v5 as I,I,1);
 
13284
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
13285
dec $i;
 
13286
}
 
13287
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
13288
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
13289
--sorted_result
 
13290
SELECT HEX(c1) FROM t1;
 
13291
--sorted_result
 
13292
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
13293
--sorted_result
 
13294
SELECT OCT(c1) FROM t1;
 
13295
--sorted_result
 
13296
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
13297
--sorted_result
 
13298
SELECT BIN(c1) FROM t1;
 
13299
--sorted_result
 
13300
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
13301
--sorted_result
 
13302
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
13303
--sorted_result
 
13304
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
13305
--sorted_result
 
13306
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
13307
--sorted_result
 
13308
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
13309
--sorted_result
 
13310
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
13311
--sorted_result
 
13312
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
13313
--sorted_result
 
13314
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
13315
--error 1439
 
13316
CREATE TABLE t3 (c1 BIT(65));
 
13317
# Checking for bug #9571
 
13318
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
13319
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
13320
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
13321
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
13322
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13323
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13324
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13325
--sorted_result
 
13326
SELECT HEX(c1),HEX(c2) FROM t5;
 
13327
 
 
13328
#Insert permissible NULLs
 
13329
INSERT IGNORE INTO t5 VALUES(96,null);
 
13330
INSERT INTO t6 VALUES(null,null);
 
13331
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
13332
## Full table scan ##
 
13333
--sorted_result
 
13334
SELECT HEX(c1),HEX(c2) FROM t5;
 
13335
--sorted_result
 
13336
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
13337
--sorted_result
 
13338
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
13339
## Forward index scan, covering ##
 
13340
--sorted_result
 
13341
SELECT bin(c1) FROM t5;
 
13342
## Backward index scan, covering ##
 
13343
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
13344
## Forward index scan, non-covering ##
 
13345
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
13346
## Backward index scan, non-covering ##
 
13347
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
13348
## ref type access
 
13349
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
13350
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
13351
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
13352
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
13353
## Range access, ordered ##
 
13354
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
13355
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
13356
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
13357
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
13358
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
13359
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
13360
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
13361
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
13362
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
13363
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
13364
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
13365
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
13366
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
13367
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
13368
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
13369
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
13370
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
13371
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
13372
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
13373
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
13374
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
13375
## Range access, backwards scan ##
 
13376
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
13377
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
13378
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
13379
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
13380
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
13381
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
13382
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
13383
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
13384
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
13385
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
13386
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
13387
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
13388
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
13389
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
13390
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
13391
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
13392
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
13393
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
13394
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
13395
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
13396
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
13397
#Inserting different charachers
 
13398
CREATE TABLE t7(c1  BIT(32));
 
13399
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
13400
--sorted_result
 
13401
SELECT * FROM t7;
 
13402
############# UPDATE ###########
 
13403
 
 
13404
# Update order by limit
 
13405
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13406
 
 
13407
 
 
13408
# Update with arithmetic operations 
 
13409
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
13410
 
 
13411
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
13412
 
 
13413
 
 
13414
# Update with NULL ( NULL to number & number to NULL)
 
13415
UPDATE t6 SET c2=NULL WHERE c1=23;
 
13416
 
 
13417
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
13418
 
 
13419
 
 
13420
# Update range values
 
13421
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
13422
 
 
13423
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
13424
 
 
13425
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
13426
 
 
13427
 
 
13428
# Update outside range would be clipped to closest endpoints
 
13429
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
13430
 
 
13431
UPDATE t6 SET c2=-1 WHERE c1=94;
 
13432
 
 
13433
 
 
13434
# Update ignore on bad null error
 
13435
--sorted_result
 
13436
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
13437
SET SQL_MODE=STRICT_ALL_TABLES;
 
13438
--error ER_BAD_NULL_ERROR
 
13439
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
13440
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
13441
--sorted_result
 
13442
SELECT hex(c1),hex(c2) FROM t5;
 
13443
SET SQL_MODE=DEFAULT;
 
13444
 
 
13445
#Multi table update
 
13446
--disable_warnings
 
13447
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13448
--enable_warnings
 
13449
--sorted_result
 
13450
SELECT hex(c1),hex(c2) FROM t5;
 
13451
 
 
13452
 
 
13453
# Update using various access methods
 
13454
TRUNCATE t5;
 
13455
TRUNCATE t6;
 
13456
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13457
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13458
 
 
13459
# Update using Const
 
13460
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13461
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
13462
--sorted_result
 
13463
SELECT hex(c1),hex(c2) FROM t5;
 
13464
 
 
13465
# Update using range
 
13466
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13467
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
13468
--sorted_result
 
13469
SELECT hex(c1),hex(c2) FROM t5;
 
13470
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13471
--disable_warnings
 
13472
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
13473
--enable_warnings
 
13474
--sorted_result
 
13475
SELECT hex(c1),hex(c2) FROM t5;
 
13476
 
 
13477
# Update using eq_ref
 
13478
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13479
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13480
 
 
13481
############# DELETE ###########
 
13482
 
 
13483
TRUNCATE t5;
 
13484
TRUNCATE t6;
 
13485
 
 
13486
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13487
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13488
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
13489
 
 
13490
# Delete by order by limit
 
13491
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13492
 
 
13493
 
 
13494
# Delete rows with NULL column
 
13495
DELETE FROM t6 WHERE c2=NULL;
 
13496
 
 
13497
 
 
13498
# Delete with range values 
 
13499
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
13500
 
 
13501
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
13502
 
 
13503
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
13504
 
 
13505
 
 
13506
#Multi table delete
 
13507
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13508
--sorted_result
 
13509
SELECT hex(c1),hex(c2) FROM t5;
 
13510
 
 
13511
 
 
13512
# Delete using various access methods
 
13513
TRUNCATE t5;
 
13514
TRUNCATE t6;
 
13515
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13516
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13517
 
 
13518
# Update using Const
 
13519
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13520
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
13521
--sorted_result
 
13522
SELECT hex(c1),hex(c2) FROM t5;
 
13523
 
 
13524
# Update using range
 
13525
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13526
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13527
--sorted_result
 
13528
SELECT hex(c1),hex(c2) FROM t5;
 
13529
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13530
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13531
--sorted_result
 
13532
SELECT hex(c1),hex(c2) FROM t5;
 
13533
 
 
13534
# Update using eq_ref
 
13535
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13536
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13537
 
 
13538
# Droping the tables
 
13539
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
13540
 
 
13541
####Checking the bit values####
 
13542
SELECT 0 + b'101010101010101010101010101010'; 
 
13543
SELECT 0 + (101010101010101010101010101010<<64);
 
13544
######### INSERT/SELECT######### 
 
13545
 
 
13546
#### Insert and select 64 bit data into the table####
 
13547
CREATE TABLE t1(c1 BIT(64));
 
13548
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
13549
let $i=64;
 
13550
while($i){
 
13551
let $j=$i/2;
 
13552
eval set @v1=$i;
 
13553
eval set @v2=$j;
 
13554
set @v3=repeat('1',@v1);
 
13555
let $STR0= query_get_value(select @v3 as I,I,1);
 
13556
eval INSERT INTO t1 VALUES (b'$STR0');
 
13557
set @v3=repeat('0',@v1);
 
13558
let $STR1= query_get_value(select @v3 as I,I,1);
 
13559
eval INSERT INTO t1 VALUES (b'$STR1');
 
13560
set @v3=repeat('01',@v2);
 
13561
let $STR2= query_get_value(select @v3 as I,I,1);
 
13562
eval INSERT INTO t1 VALUES (b'$STR2');
 
13563
set @v3=repeat('10',@v2);
 
13564
let $STR3= query_get_value(select @v3 as I,I,1);
 
13565
eval INSERT INTO t1 VALUES (b'$STR3');
 
13566
set @v3=repeat('1',@v1);
 
13567
set @v4=repeat('01',@v2);
 
13568
set @v5=repeat('10',@v2);
 
13569
let $STR0= query_get_value(select @v3 as I,I,1);
 
13570
let $STR2= query_get_value(select @v4 as I,I,1);
 
13571
let $STR3= query_get_value(select @v5 as I,I,1);
 
13572
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
13573
dec $i;
 
13574
}
 
13575
INSERT INTO t1 VALUES (b'101010101010101010101010101010');
 
13576
INSERT INTO t2 VALUES (b'101010101010101010101010101010', b'101010101010101010101010101010', b'101010101010101010101010101010');
 
13577
--sorted_result
 
13578
SELECT HEX(c1) FROM t1;
 
13579
--sorted_result
 
13580
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
13581
--sorted_result
 
13582
SELECT OCT(c1) FROM t1;
 
13583
--sorted_result
 
13584
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
13585
--sorted_result
 
13586
SELECT BIN(c1) FROM t1;
 
13587
--sorted_result
 
13588
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
13589
--sorted_result
 
13590
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
13591
--sorted_result
 
13592
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
13593
--sorted_result
 
13594
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
13595
--sorted_result
 
13596
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
13597
--sorted_result
 
13598
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
13599
--sorted_result
 
13600
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
13601
--sorted_result
 
13602
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
13603
--error 1439
 
13604
CREATE TABLE t3 (c1 BIT(65));
 
13605
# Checking for bug #9571
 
13606
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
13607
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
13608
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
13609
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
13610
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13611
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13612
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13613
--sorted_result
 
13614
SELECT HEX(c1),HEX(c2) FROM t5;
 
13615
 
 
13616
#Insert permissible NULLs
 
13617
INSERT IGNORE INTO t5 VALUES(96,null);
 
13618
INSERT INTO t6 VALUES(null,null);
 
13619
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
13620
## Full table scan ##
 
13621
--sorted_result
 
13622
SELECT HEX(c1),HEX(c2) FROM t5;
 
13623
--sorted_result
 
13624
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
13625
--sorted_result
 
13626
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
13627
## Forward index scan, covering ##
 
13628
--sorted_result
 
13629
SELECT bin(c1) FROM t5;
 
13630
## Backward index scan, covering ##
 
13631
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
13632
## Forward index scan, non-covering ##
 
13633
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
13634
## Backward index scan, non-covering ##
 
13635
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
13636
## ref type access
 
13637
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
13638
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
13639
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
13640
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
13641
## Range access, ordered ##
 
13642
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
13643
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
13644
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
13645
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
13646
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
13647
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
13648
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
13649
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
13650
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
13651
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
13652
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
13653
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
13654
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
13655
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
13656
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
13657
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
13658
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
13659
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
13660
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
13661
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
13662
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
13663
## Range access, backwards scan ##
 
13664
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
13665
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
13666
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
13667
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
13668
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
13669
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
13670
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
13671
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
13672
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
13673
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
13674
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
13675
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
13676
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
13677
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
13678
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
13679
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
13680
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
13681
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
13682
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
13683
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
13684
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
13685
#Inserting different charachers
 
13686
CREATE TABLE t7(c1  BIT(64));
 
13687
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
13688
--sorted_result
 
13689
SELECT * FROM t7;
 
13690
############# UPDATE ###########
 
13691
 
 
13692
# Update order by limit
 
13693
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13694
 
 
13695
 
 
13696
# Update with arithmetic operations 
 
13697
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
13698
 
 
13699
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
13700
 
 
13701
 
 
13702
# Update with NULL ( NULL to number & number to NULL)
 
13703
UPDATE t6 SET c2=NULL WHERE c1=23;
 
13704
 
 
13705
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
13706
 
 
13707
 
 
13708
# Update range values
 
13709
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
13710
 
 
13711
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
13712
 
 
13713
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
13714
 
 
13715
 
 
13716
# Update outside range would be clipped to closest endpoints
 
13717
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
13718
 
 
13719
UPDATE t6 SET c2=-1 WHERE c1=94;
 
13720
 
 
13721
 
 
13722
# Update ignore on bad null error
 
13723
--sorted_result
 
13724
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
13725
SET SQL_MODE=STRICT_ALL_TABLES;
 
13726
--error ER_BAD_NULL_ERROR
 
13727
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
13728
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
13729
--sorted_result
 
13730
SELECT hex(c1),hex(c2) FROM t5;
 
13731
SET SQL_MODE=DEFAULT;
 
13732
 
 
13733
#Multi table update
 
13734
--disable_warnings
 
13735
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13736
--enable_warnings
 
13737
--sorted_result
 
13738
SELECT hex(c1),hex(c2) FROM t5;
 
13739
 
 
13740
 
 
13741
# Update using various access methods
 
13742
TRUNCATE t5;
 
13743
TRUNCATE t6;
 
13744
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13745
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13746
 
 
13747
# Update using Const
 
13748
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13749
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
13750
--sorted_result
 
13751
SELECT hex(c1),hex(c2) FROM t5;
 
13752
 
 
13753
# Update using range
 
13754
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13755
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
13756
--sorted_result
 
13757
SELECT hex(c1),hex(c2) FROM t5;
 
13758
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13759
--disable_warnings
 
13760
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
13761
--enable_warnings
 
13762
--sorted_result
 
13763
SELECT hex(c1),hex(c2) FROM t5;
 
13764
 
 
13765
# Update using eq_ref
 
13766
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13767
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13768
 
 
13769
############# DELETE ###########
 
13770
 
 
13771
TRUNCATE t5;
 
13772
TRUNCATE t6;
 
13773
 
 
13774
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13775
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13776
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
13777
 
 
13778
# Delete by order by limit
 
13779
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13780
 
 
13781
 
 
13782
# Delete rows with NULL column
 
13783
DELETE FROM t6 WHERE c2=NULL;
 
13784
 
 
13785
 
 
13786
# Delete with range values 
 
13787
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
13788
 
 
13789
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
13790
 
 
13791
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
13792
 
 
13793
 
 
13794
#Multi table delete
 
13795
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
13796
--sorted_result
 
13797
SELECT hex(c1),hex(c2) FROM t5;
 
13798
 
 
13799
 
 
13800
# Delete using various access methods
 
13801
TRUNCATE t5;
 
13802
TRUNCATE t6;
 
13803
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13804
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
13805
 
 
13806
# Update using Const
 
13807
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
13808
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
13809
--sorted_result
 
13810
SELECT hex(c1),hex(c2) FROM t5;
 
13811
 
 
13812
# Update using range
 
13813
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13814
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
13815
--sorted_result
 
13816
SELECT hex(c1),hex(c2) FROM t5;
 
13817
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13818
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
13819
--sorted_result
 
13820
SELECT hex(c1),hex(c2) FROM t5;
 
13821
 
 
13822
# Update using eq_ref
 
13823
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13824
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
13825
 
 
13826
# Droping the tables
 
13827
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
13828
 
 
13829
####Checking the bit values####
 
13830
# Produces different output on different platforms
 
13831
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
13832
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<0);
 
13833
######### INSERT/SELECT######### 
 
13834
 
 
13835
#### Insert and select 0 bit data into the table####
 
13836
CREATE TABLE t1(c1 BIT(0));
 
13837
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
13838
let $i=0;
 
13839
while($i){
 
13840
let $j=$i/2;
 
13841
eval set @v1=$i;
 
13842
eval set @v2=$j;
 
13843
set @v3=repeat('1',@v1);
 
13844
let $STR0= query_get_value(select @v3 as I,I,1);
 
13845
eval INSERT INTO t1 VALUES (b'$STR0');
 
13846
set @v3=repeat('0',@v1);
 
13847
let $STR1= query_get_value(select @v3 as I,I,1);
 
13848
eval INSERT INTO t1 VALUES (b'$STR1');
 
13849
set @v3=repeat('01',@v2);
 
13850
let $STR2= query_get_value(select @v3 as I,I,1);
 
13851
eval INSERT INTO t1 VALUES (b'$STR2');
 
13852
set @v3=repeat('10',@v2);
 
13853
let $STR3= query_get_value(select @v3 as I,I,1);
 
13854
eval INSERT INTO t1 VALUES (b'$STR3');
 
13855
set @v3=repeat('1',@v1);
 
13856
set @v4=repeat('01',@v2);
 
13857
set @v5=repeat('10',@v2);
 
13858
let $STR0= query_get_value(select @v3 as I,I,1);
 
13859
let $STR2= query_get_value(select @v4 as I,I,1);
 
13860
let $STR3= query_get_value(select @v5 as I,I,1);
 
13861
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
13862
dec $i;
 
13863
}
 
13864
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
13865
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
13866
--sorted_result
 
13867
SELECT HEX(c1) FROM t1;
 
13868
--sorted_result
 
13869
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
13870
--sorted_result
 
13871
SELECT OCT(c1) FROM t1;
 
13872
--sorted_result
 
13873
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
13874
--sorted_result
 
13875
SELECT BIN(c1) FROM t1;
 
13876
--sorted_result
 
13877
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
13878
--sorted_result
 
13879
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
13880
--sorted_result
 
13881
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
13882
--sorted_result
 
13883
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
13884
--sorted_result
 
13885
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
13886
--sorted_result
 
13887
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
13888
--sorted_result
 
13889
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
13890
--sorted_result
 
13891
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
13892
--error 1439
 
13893
CREATE TABLE t3 (c1 BIT(65));
 
13894
# Checking for bug #9571
 
13895
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
13896
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
13897
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
13898
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
13899
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
13900
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13901
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
13902
--sorted_result
 
13903
SELECT HEX(c1),HEX(c2) FROM t5;
 
13904
 
 
13905
#Insert permissible NULLs
 
13906
INSERT IGNORE INTO t5 VALUES(96,null);
 
13907
INSERT INTO t6 VALUES(null,null);
 
13908
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
13909
## Full table scan ##
 
13910
--sorted_result
 
13911
SELECT HEX(c1),HEX(c2) FROM t5;
 
13912
--sorted_result
 
13913
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
13914
--sorted_result
 
13915
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
13916
## Forward index scan, covering ##
 
13917
--sorted_result
 
13918
SELECT bin(c1) FROM t5;
 
13919
## Backward index scan, covering ##
 
13920
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
13921
## Forward index scan, non-covering ##
 
13922
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
13923
## Backward index scan, non-covering ##
 
13924
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
13925
## ref type access
 
13926
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
13927
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
13928
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
13929
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
13930
## Range access, ordered ##
 
13931
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
13932
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
13933
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
13934
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
13935
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
13936
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
13937
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
13938
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
13939
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
13940
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
13941
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
13942
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
13943
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
13944
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
13945
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
13946
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
13947
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
13948
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
13949
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
13950
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
13951
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
13952
## Range access, backwards scan ##
 
13953
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
13954
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
13955
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
13956
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
13957
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
13958
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
13959
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
13960
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
13961
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
13962
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
13963
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
13964
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
13965
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
13966
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
13967
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
13968
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
13969
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
13970
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
13971
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
13972
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
13973
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
13974
#Inserting different charachers
 
13975
CREATE TABLE t7(c1  BIT(0));
 
13976
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
13977
--sorted_result
 
13978
SELECT * FROM t7;
 
13979
############# UPDATE ###########
 
13980
 
 
13981
# Update order by limit
 
13982
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
13983
 
 
13984
 
 
13985
# Update with arithmetic operations 
 
13986
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
13987
 
 
13988
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
13989
 
 
13990
 
 
13991
# Update with NULL ( NULL to number & number to NULL)
 
13992
UPDATE t6 SET c2=NULL WHERE c1=23;
 
13993
 
 
13994
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
13995
 
 
13996
 
 
13997
# Update range values
 
13998
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
13999
 
 
14000
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
14001
 
 
14002
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
14003
 
 
14004
 
 
14005
# Update outside range would be clipped to closest endpoints
 
14006
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
14007
 
 
14008
UPDATE t6 SET c2=-1 WHERE c1=94;
 
14009
 
 
14010
 
 
14011
# Update ignore on bad null error
 
14012
--sorted_result
 
14013
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
14014
SET SQL_MODE=STRICT_ALL_TABLES;
 
14015
--error ER_BAD_NULL_ERROR
 
14016
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
14017
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
14018
--sorted_result
 
14019
SELECT hex(c1),hex(c2) FROM t5;
 
14020
SET SQL_MODE=DEFAULT;
 
14021
 
 
14022
#Multi table update
 
14023
--disable_warnings
 
14024
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14025
--enable_warnings
 
14026
--sorted_result
 
14027
SELECT hex(c1),hex(c2) FROM t5;
 
14028
 
 
14029
 
 
14030
# Update using various access methods
 
14031
TRUNCATE t5;
 
14032
TRUNCATE t6;
 
14033
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14034
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14035
 
 
14036
# Update using Const
 
14037
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14038
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
14039
--sorted_result
 
14040
SELECT hex(c1),hex(c2) FROM t5;
 
14041
 
 
14042
# Update using range
 
14043
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14044
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
14045
--sorted_result
 
14046
SELECT hex(c1),hex(c2) FROM t5;
 
14047
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14048
--disable_warnings
 
14049
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
14050
--enable_warnings
 
14051
--sorted_result
 
14052
SELECT hex(c1),hex(c2) FROM t5;
 
14053
 
 
14054
# Update using eq_ref
 
14055
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14056
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14057
 
 
14058
############# DELETE ###########
 
14059
 
 
14060
TRUNCATE t5;
 
14061
TRUNCATE t6;
 
14062
 
 
14063
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14064
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14065
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
14066
 
 
14067
# Delete by order by limit
 
14068
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14069
 
 
14070
 
 
14071
# Delete rows with NULL column
 
14072
DELETE FROM t6 WHERE c2=NULL;
 
14073
 
 
14074
 
 
14075
# Delete with range values 
 
14076
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
14077
 
 
14078
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
14079
 
 
14080
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
14081
 
 
14082
 
 
14083
#Multi table delete
 
14084
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14085
--sorted_result
 
14086
SELECT hex(c1),hex(c2) FROM t5;
 
14087
 
 
14088
 
 
14089
# Delete using various access methods
 
14090
TRUNCATE t5;
 
14091
TRUNCATE t6;
 
14092
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14093
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14094
 
 
14095
# Update using Const
 
14096
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14097
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
14098
--sorted_result
 
14099
SELECT hex(c1),hex(c2) FROM t5;
 
14100
 
 
14101
# Update using range
 
14102
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14103
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14104
--sorted_result
 
14105
SELECT hex(c1),hex(c2) FROM t5;
 
14106
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14107
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14108
--sorted_result
 
14109
SELECT hex(c1),hex(c2) FROM t5;
 
14110
 
 
14111
# Update using eq_ref
 
14112
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14113
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14114
 
 
14115
# Droping the tables
 
14116
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
14117
 
 
14118
####Checking the bit values####
 
14119
# Produces different output on different platforms
 
14120
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
14121
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<1);
 
14122
######### INSERT/SELECT######### 
 
14123
 
 
14124
#### Insert and select 1 bit data into the table####
 
14125
CREATE TABLE t1(c1 BIT(1));
 
14126
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
14127
let $i=1;
 
14128
while($i){
 
14129
let $j=$i/2;
 
14130
eval set @v1=$i;
 
14131
eval set @v2=$j;
 
14132
set @v3=repeat('1',@v1);
 
14133
let $STR0= query_get_value(select @v3 as I,I,1);
 
14134
eval INSERT INTO t1 VALUES (b'$STR0');
 
14135
set @v3=repeat('0',@v1);
 
14136
let $STR1= query_get_value(select @v3 as I,I,1);
 
14137
eval INSERT INTO t1 VALUES (b'$STR1');
 
14138
set @v3=repeat('01',@v2);
 
14139
let $STR2= query_get_value(select @v3 as I,I,1);
 
14140
eval INSERT INTO t1 VALUES (b'$STR2');
 
14141
set @v3=repeat('10',@v2);
 
14142
let $STR3= query_get_value(select @v3 as I,I,1);
 
14143
eval INSERT INTO t1 VALUES (b'$STR3');
 
14144
set @v3=repeat('1',@v1);
 
14145
set @v4=repeat('01',@v2);
 
14146
set @v5=repeat('10',@v2);
 
14147
let $STR0= query_get_value(select @v3 as I,I,1);
 
14148
let $STR2= query_get_value(select @v4 as I,I,1);
 
14149
let $STR3= query_get_value(select @v5 as I,I,1);
 
14150
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
14151
dec $i;
 
14152
}
 
14153
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
14154
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
14155
--sorted_result
 
14156
SELECT HEX(c1) FROM t1;
 
14157
--sorted_result
 
14158
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
14159
--sorted_result
 
14160
SELECT OCT(c1) FROM t1;
 
14161
--sorted_result
 
14162
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
14163
--sorted_result
 
14164
SELECT BIN(c1) FROM t1;
 
14165
--sorted_result
 
14166
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
14167
--sorted_result
 
14168
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
14169
--sorted_result
 
14170
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
14171
--sorted_result
 
14172
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
14173
--sorted_result
 
14174
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
14175
--sorted_result
 
14176
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
14177
--sorted_result
 
14178
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
14179
--sorted_result
 
14180
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
14181
--error 1439
 
14182
CREATE TABLE t3 (c1 BIT(65));
 
14183
# Checking for bug #9571
 
14184
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
14185
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
14186
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
14187
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
14188
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14189
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14190
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14191
--sorted_result
 
14192
SELECT HEX(c1),HEX(c2) FROM t5;
 
14193
 
 
14194
#Insert permissible NULLs
 
14195
INSERT IGNORE INTO t5 VALUES(96,null);
 
14196
INSERT INTO t6 VALUES(null,null);
 
14197
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
14198
## Full table scan ##
 
14199
--sorted_result
 
14200
SELECT HEX(c1),HEX(c2) FROM t5;
 
14201
--sorted_result
 
14202
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
14203
--sorted_result
 
14204
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
14205
## Forward index scan, covering ##
 
14206
--sorted_result
 
14207
SELECT bin(c1) FROM t5;
 
14208
## Backward index scan, covering ##
 
14209
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
14210
## Forward index scan, non-covering ##
 
14211
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
14212
## Backward index scan, non-covering ##
 
14213
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
14214
## ref type access
 
14215
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
14216
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
14217
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
14218
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
14219
## Range access, ordered ##
 
14220
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
14221
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
14222
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
14223
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
14224
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
14225
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
14226
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
14227
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
14228
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
14229
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
14230
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
14231
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
14232
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
14233
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
14234
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
14235
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
14236
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
14237
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
14238
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
14239
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
14240
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
14241
## Range access, backwards scan ##
 
14242
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
14243
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
14244
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
14245
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
14246
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
14247
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
14248
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
14249
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
14250
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
14251
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
14252
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
14253
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
14254
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
14255
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
14256
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
14257
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
14258
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
14259
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
14260
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
14261
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
14262
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
14263
#Inserting different charachers
 
14264
CREATE TABLE t7(c1  BIT(1));
 
14265
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
14266
--sorted_result
 
14267
SELECT * FROM t7;
 
14268
############# UPDATE ###########
 
14269
 
 
14270
# Update order by limit
 
14271
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14272
 
 
14273
 
 
14274
# Update with arithmetic operations 
 
14275
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
14276
 
 
14277
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
14278
 
 
14279
 
 
14280
# Update with NULL ( NULL to number & number to NULL)
 
14281
UPDATE t6 SET c2=NULL WHERE c1=23;
 
14282
 
 
14283
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
14284
 
 
14285
 
 
14286
# Update range values
 
14287
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
14288
 
 
14289
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
14290
 
 
14291
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
14292
 
 
14293
 
 
14294
# Update outside range would be clipped to closest endpoints
 
14295
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
14296
 
 
14297
UPDATE t6 SET c2=-1 WHERE c1=94;
 
14298
 
 
14299
 
 
14300
# Update ignore on bad null error
 
14301
--sorted_result
 
14302
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
14303
SET SQL_MODE=STRICT_ALL_TABLES;
 
14304
--error ER_BAD_NULL_ERROR
 
14305
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
14306
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
14307
--sorted_result
 
14308
SELECT hex(c1),hex(c2) FROM t5;
 
14309
SET SQL_MODE=DEFAULT;
 
14310
 
 
14311
#Multi table update
 
14312
--disable_warnings
 
14313
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14314
--enable_warnings
 
14315
--sorted_result
 
14316
SELECT hex(c1),hex(c2) FROM t5;
 
14317
 
 
14318
 
 
14319
# Update using various access methods
 
14320
TRUNCATE t5;
 
14321
TRUNCATE t6;
 
14322
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14323
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14324
 
 
14325
# Update using Const
 
14326
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14327
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
14328
--sorted_result
 
14329
SELECT hex(c1),hex(c2) FROM t5;
 
14330
 
 
14331
# Update using range
 
14332
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14333
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
14334
--sorted_result
 
14335
SELECT hex(c1),hex(c2) FROM t5;
 
14336
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14337
--disable_warnings
 
14338
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
14339
--enable_warnings
 
14340
--sorted_result
 
14341
SELECT hex(c1),hex(c2) FROM t5;
 
14342
 
 
14343
# Update using eq_ref
 
14344
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14345
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14346
 
 
14347
############# DELETE ###########
 
14348
 
 
14349
TRUNCATE t5;
 
14350
TRUNCATE t6;
 
14351
 
 
14352
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14353
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14354
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
14355
 
 
14356
# Delete by order by limit
 
14357
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14358
 
 
14359
 
 
14360
# Delete rows with NULL column
 
14361
DELETE FROM t6 WHERE c2=NULL;
 
14362
 
 
14363
 
 
14364
# Delete with range values 
 
14365
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
14366
 
 
14367
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
14368
 
 
14369
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
14370
 
 
14371
 
 
14372
#Multi table delete
 
14373
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14374
--sorted_result
 
14375
SELECT hex(c1),hex(c2) FROM t5;
 
14376
 
 
14377
 
 
14378
# Delete using various access methods
 
14379
TRUNCATE t5;
 
14380
TRUNCATE t6;
 
14381
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14382
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14383
 
 
14384
# Update using Const
 
14385
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14386
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
14387
--sorted_result
 
14388
SELECT hex(c1),hex(c2) FROM t5;
 
14389
 
 
14390
# Update using range
 
14391
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14392
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14393
--sorted_result
 
14394
SELECT hex(c1),hex(c2) FROM t5;
 
14395
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14396
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14397
--sorted_result
 
14398
SELECT hex(c1),hex(c2) FROM t5;
 
14399
 
 
14400
# Update using eq_ref
 
14401
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14402
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14403
 
 
14404
# Droping the tables
 
14405
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
14406
 
 
14407
####Checking the bit values####
 
14408
# Produces different output on different platforms
 
14409
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
14410
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<2);
 
14411
######### INSERT/SELECT######### 
 
14412
 
 
14413
#### Insert and select 2 bit data into the table####
 
14414
CREATE TABLE t1(c1 BIT(2));
 
14415
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
14416
let $i=2;
 
14417
while($i){
 
14418
let $j=$i/2;
 
14419
eval set @v1=$i;
 
14420
eval set @v2=$j;
 
14421
set @v3=repeat('1',@v1);
 
14422
let $STR0= query_get_value(select @v3 as I,I,1);
 
14423
eval INSERT INTO t1 VALUES (b'$STR0');
 
14424
set @v3=repeat('0',@v1);
 
14425
let $STR1= query_get_value(select @v3 as I,I,1);
 
14426
eval INSERT INTO t1 VALUES (b'$STR1');
 
14427
set @v3=repeat('01',@v2);
 
14428
let $STR2= query_get_value(select @v3 as I,I,1);
 
14429
eval INSERT INTO t1 VALUES (b'$STR2');
 
14430
set @v3=repeat('10',@v2);
 
14431
let $STR3= query_get_value(select @v3 as I,I,1);
 
14432
eval INSERT INTO t1 VALUES (b'$STR3');
 
14433
set @v3=repeat('1',@v1);
 
14434
set @v4=repeat('01',@v2);
 
14435
set @v5=repeat('10',@v2);
 
14436
let $STR0= query_get_value(select @v3 as I,I,1);
 
14437
let $STR2= query_get_value(select @v4 as I,I,1);
 
14438
let $STR3= query_get_value(select @v5 as I,I,1);
 
14439
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
14440
dec $i;
 
14441
}
 
14442
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
14443
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
14444
--sorted_result
 
14445
SELECT HEX(c1) FROM t1;
 
14446
--sorted_result
 
14447
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
14448
--sorted_result
 
14449
SELECT OCT(c1) FROM t1;
 
14450
--sorted_result
 
14451
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
14452
--sorted_result
 
14453
SELECT BIN(c1) FROM t1;
 
14454
--sorted_result
 
14455
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
14456
--sorted_result
 
14457
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
14458
--sorted_result
 
14459
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
14460
--sorted_result
 
14461
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
14462
--sorted_result
 
14463
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
14464
--sorted_result
 
14465
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
14466
--sorted_result
 
14467
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
14468
--sorted_result
 
14469
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
14470
--error 1439
 
14471
CREATE TABLE t3 (c1 BIT(65));
 
14472
# Checking for bug #9571
 
14473
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
14474
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
14475
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
14476
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
14477
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14478
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14479
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14480
--sorted_result
 
14481
SELECT HEX(c1),HEX(c2) FROM t5;
 
14482
 
 
14483
#Insert permissible NULLs
 
14484
INSERT IGNORE INTO t5 VALUES(96,null);
 
14485
INSERT INTO t6 VALUES(null,null);
 
14486
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
14487
## Full table scan ##
 
14488
--sorted_result
 
14489
SELECT HEX(c1),HEX(c2) FROM t5;
 
14490
--sorted_result
 
14491
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
14492
--sorted_result
 
14493
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
14494
## Forward index scan, covering ##
 
14495
--sorted_result
 
14496
SELECT bin(c1) FROM t5;
 
14497
## Backward index scan, covering ##
 
14498
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
14499
## Forward index scan, non-covering ##
 
14500
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
14501
## Backward index scan, non-covering ##
 
14502
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
14503
## ref type access
 
14504
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
14505
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
14506
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
14507
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
14508
## Range access, ordered ##
 
14509
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
14510
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
14511
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
14512
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
14513
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
14514
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
14515
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
14516
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
14517
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
14518
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
14519
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
14520
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
14521
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
14522
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
14523
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
14524
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
14525
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
14526
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
14527
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
14528
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
14529
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
14530
## Range access, backwards scan ##
 
14531
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
14532
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
14533
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
14534
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
14535
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
14536
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
14537
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
14538
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
14539
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
14540
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
14541
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
14542
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
14543
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
14544
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
14545
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
14546
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
14547
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
14548
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
14549
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
14550
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
14551
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
14552
#Inserting different charachers
 
14553
CREATE TABLE t7(c1  BIT(2));
 
14554
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
14555
--sorted_result
 
14556
SELECT * FROM t7;
 
14557
############# UPDATE ###########
 
14558
 
 
14559
# Update order by limit
 
14560
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14561
 
 
14562
 
 
14563
# Update with arithmetic operations 
 
14564
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
14565
 
 
14566
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
14567
 
 
14568
 
 
14569
# Update with NULL ( NULL to number & number to NULL)
 
14570
UPDATE t6 SET c2=NULL WHERE c1=23;
 
14571
 
 
14572
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
14573
 
 
14574
 
 
14575
# Update range values
 
14576
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
14577
 
 
14578
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
14579
 
 
14580
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
14581
 
 
14582
 
 
14583
# Update outside range would be clipped to closest endpoints
 
14584
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
14585
 
 
14586
UPDATE t6 SET c2=-1 WHERE c1=94;
 
14587
 
 
14588
 
 
14589
# Update ignore on bad null error
 
14590
--sorted_result
 
14591
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
14592
SET SQL_MODE=STRICT_ALL_TABLES;
 
14593
--error ER_BAD_NULL_ERROR
 
14594
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
14595
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
14596
--sorted_result
 
14597
SELECT hex(c1),hex(c2) FROM t5;
 
14598
SET SQL_MODE=DEFAULT;
 
14599
 
 
14600
#Multi table update
 
14601
--disable_warnings
 
14602
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14603
--enable_warnings
 
14604
--sorted_result
 
14605
SELECT hex(c1),hex(c2) FROM t5;
 
14606
 
 
14607
 
 
14608
# Update using various access methods
 
14609
TRUNCATE t5;
 
14610
TRUNCATE t6;
 
14611
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14612
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14613
 
 
14614
# Update using Const
 
14615
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14616
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
14617
--sorted_result
 
14618
SELECT hex(c1),hex(c2) FROM t5;
 
14619
 
 
14620
# Update using range
 
14621
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14622
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
14623
--sorted_result
 
14624
SELECT hex(c1),hex(c2) FROM t5;
 
14625
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14626
--disable_warnings
 
14627
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
14628
--enable_warnings
 
14629
--sorted_result
 
14630
SELECT hex(c1),hex(c2) FROM t5;
 
14631
 
 
14632
# Update using eq_ref
 
14633
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14634
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14635
 
 
14636
############# DELETE ###########
 
14637
 
 
14638
TRUNCATE t5;
 
14639
TRUNCATE t6;
 
14640
 
 
14641
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14642
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14643
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
14644
 
 
14645
# Delete by order by limit
 
14646
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14647
 
 
14648
 
 
14649
# Delete rows with NULL column
 
14650
DELETE FROM t6 WHERE c2=NULL;
 
14651
 
 
14652
 
 
14653
# Delete with range values 
 
14654
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
14655
 
 
14656
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
14657
 
 
14658
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
14659
 
 
14660
 
 
14661
#Multi table delete
 
14662
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14663
--sorted_result
 
14664
SELECT hex(c1),hex(c2) FROM t5;
 
14665
 
 
14666
 
 
14667
# Delete using various access methods
 
14668
TRUNCATE t5;
 
14669
TRUNCATE t6;
 
14670
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14671
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14672
 
 
14673
# Update using Const
 
14674
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14675
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
14676
--sorted_result
 
14677
SELECT hex(c1),hex(c2) FROM t5;
 
14678
 
 
14679
# Update using range
 
14680
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14681
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14682
--sorted_result
 
14683
SELECT hex(c1),hex(c2) FROM t5;
 
14684
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14685
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14686
--sorted_result
 
14687
SELECT hex(c1),hex(c2) FROM t5;
 
14688
 
 
14689
# Update using eq_ref
 
14690
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14691
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14692
 
 
14693
# Droping the tables
 
14694
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
14695
 
 
14696
####Checking the bit values####
 
14697
# Produces different output on different platforms
 
14698
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
14699
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<4);
 
14700
######### INSERT/SELECT######### 
 
14701
 
 
14702
#### Insert and select 4 bit data into the table####
 
14703
CREATE TABLE t1(c1 BIT(4));
 
14704
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
14705
let $i=4;
 
14706
while($i){
 
14707
let $j=$i/2;
 
14708
eval set @v1=$i;
 
14709
eval set @v2=$j;
 
14710
set @v3=repeat('1',@v1);
 
14711
let $STR0= query_get_value(select @v3 as I,I,1);
 
14712
eval INSERT INTO t1 VALUES (b'$STR0');
 
14713
set @v3=repeat('0',@v1);
 
14714
let $STR1= query_get_value(select @v3 as I,I,1);
 
14715
eval INSERT INTO t1 VALUES (b'$STR1');
 
14716
set @v3=repeat('01',@v2);
 
14717
let $STR2= query_get_value(select @v3 as I,I,1);
 
14718
eval INSERT INTO t1 VALUES (b'$STR2');
 
14719
set @v3=repeat('10',@v2);
 
14720
let $STR3= query_get_value(select @v3 as I,I,1);
 
14721
eval INSERT INTO t1 VALUES (b'$STR3');
 
14722
set @v3=repeat('1',@v1);
 
14723
set @v4=repeat('01',@v2);
 
14724
set @v5=repeat('10',@v2);
 
14725
let $STR0= query_get_value(select @v3 as I,I,1);
 
14726
let $STR2= query_get_value(select @v4 as I,I,1);
 
14727
let $STR3= query_get_value(select @v5 as I,I,1);
 
14728
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
14729
dec $i;
 
14730
}
 
14731
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
14732
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
14733
--sorted_result
 
14734
SELECT HEX(c1) FROM t1;
 
14735
--sorted_result
 
14736
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
14737
--sorted_result
 
14738
SELECT OCT(c1) FROM t1;
 
14739
--sorted_result
 
14740
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
14741
--sorted_result
 
14742
SELECT BIN(c1) FROM t1;
 
14743
--sorted_result
 
14744
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
14745
--sorted_result
 
14746
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
14747
--sorted_result
 
14748
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
14749
--sorted_result
 
14750
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
14751
--sorted_result
 
14752
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
14753
--sorted_result
 
14754
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
14755
--sorted_result
 
14756
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
14757
--sorted_result
 
14758
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
14759
--error 1439
 
14760
CREATE TABLE t3 (c1 BIT(65));
 
14761
# Checking for bug #9571
 
14762
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
14763
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
14764
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
14765
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
14766
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14767
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14768
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14769
--sorted_result
 
14770
SELECT HEX(c1),HEX(c2) FROM t5;
 
14771
 
 
14772
#Insert permissible NULLs
 
14773
INSERT IGNORE INTO t5 VALUES(96,null);
 
14774
INSERT INTO t6 VALUES(null,null);
 
14775
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
14776
## Full table scan ##
 
14777
--sorted_result
 
14778
SELECT HEX(c1),HEX(c2) FROM t5;
 
14779
--sorted_result
 
14780
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
14781
--sorted_result
 
14782
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
14783
## Forward index scan, covering ##
 
14784
--sorted_result
 
14785
SELECT bin(c1) FROM t5;
 
14786
## Backward index scan, covering ##
 
14787
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
14788
## Forward index scan, non-covering ##
 
14789
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
14790
## Backward index scan, non-covering ##
 
14791
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
14792
## ref type access
 
14793
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
14794
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
14795
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
14796
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
14797
## Range access, ordered ##
 
14798
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
14799
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
14800
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
14801
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
14802
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
14803
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
14804
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
14805
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
14806
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
14807
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
14808
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
14809
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
14810
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
14811
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
14812
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
14813
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
14814
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
14815
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
14816
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
14817
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
14818
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
14819
## Range access, backwards scan ##
 
14820
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
14821
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
14822
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
14823
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
14824
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
14825
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
14826
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
14827
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
14828
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
14829
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
14830
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
14831
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
14832
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
14833
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
14834
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
14835
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
14836
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
14837
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
14838
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
14839
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
14840
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
14841
#Inserting different charachers
 
14842
CREATE TABLE t7(c1  BIT(4));
 
14843
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
14844
--sorted_result
 
14845
SELECT * FROM t7;
 
14846
############# UPDATE ###########
 
14847
 
 
14848
# Update order by limit
 
14849
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14850
 
 
14851
 
 
14852
# Update with arithmetic operations 
 
14853
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
14854
 
 
14855
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
14856
 
 
14857
 
 
14858
# Update with NULL ( NULL to number & number to NULL)
 
14859
UPDATE t6 SET c2=NULL WHERE c1=23;
 
14860
 
 
14861
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
14862
 
 
14863
 
 
14864
# Update range values
 
14865
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
14866
 
 
14867
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
14868
 
 
14869
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
14870
 
 
14871
 
 
14872
# Update outside range would be clipped to closest endpoints
 
14873
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
14874
 
 
14875
UPDATE t6 SET c2=-1 WHERE c1=94;
 
14876
 
 
14877
 
 
14878
# Update ignore on bad null error
 
14879
--sorted_result
 
14880
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
14881
SET SQL_MODE=STRICT_ALL_TABLES;
 
14882
--error ER_BAD_NULL_ERROR
 
14883
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
14884
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
14885
--sorted_result
 
14886
SELECT hex(c1),hex(c2) FROM t5;
 
14887
SET SQL_MODE=DEFAULT;
 
14888
 
 
14889
#Multi table update
 
14890
--disable_warnings
 
14891
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14892
--enable_warnings
 
14893
--sorted_result
 
14894
SELECT hex(c1),hex(c2) FROM t5;
 
14895
 
 
14896
 
 
14897
# Update using various access methods
 
14898
TRUNCATE t5;
 
14899
TRUNCATE t6;
 
14900
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14901
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14902
 
 
14903
# Update using Const
 
14904
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14905
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
14906
--sorted_result
 
14907
SELECT hex(c1),hex(c2) FROM t5;
 
14908
 
 
14909
# Update using range
 
14910
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14911
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
14912
--sorted_result
 
14913
SELECT hex(c1),hex(c2) FROM t5;
 
14914
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14915
--disable_warnings
 
14916
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
14917
--enable_warnings
 
14918
--sorted_result
 
14919
SELECT hex(c1),hex(c2) FROM t5;
 
14920
 
 
14921
# Update using eq_ref
 
14922
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14923
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14924
 
 
14925
############# DELETE ###########
 
14926
 
 
14927
TRUNCATE t5;
 
14928
TRUNCATE t6;
 
14929
 
 
14930
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
14931
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
14932
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
14933
 
 
14934
# Delete by order by limit
 
14935
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
14936
 
 
14937
 
 
14938
# Delete rows with NULL column
 
14939
DELETE FROM t6 WHERE c2=NULL;
 
14940
 
 
14941
 
 
14942
# Delete with range values 
 
14943
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
14944
 
 
14945
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
14946
 
 
14947
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
14948
 
 
14949
 
 
14950
#Multi table delete
 
14951
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
14952
--sorted_result
 
14953
SELECT hex(c1),hex(c2) FROM t5;
 
14954
 
 
14955
 
 
14956
# Delete using various access methods
 
14957
TRUNCATE t5;
 
14958
TRUNCATE t6;
 
14959
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14960
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
14961
 
 
14962
# Update using Const
 
14963
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
14964
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
14965
--sorted_result
 
14966
SELECT hex(c1),hex(c2) FROM t5;
 
14967
 
 
14968
# Update using range
 
14969
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14970
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
14971
--sorted_result
 
14972
SELECT hex(c1),hex(c2) FROM t5;
 
14973
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14974
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
14975
--sorted_result
 
14976
SELECT hex(c1),hex(c2) FROM t5;
 
14977
 
 
14978
# Update using eq_ref
 
14979
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14980
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
14981
 
 
14982
# Droping the tables
 
14983
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
14984
 
 
14985
####Checking the bit values####
 
14986
# Produces different output on different platforms
 
14987
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
14988
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<8);
 
14989
######### INSERT/SELECT######### 
 
14990
 
 
14991
#### Insert and select 8 bit data into the table####
 
14992
CREATE TABLE t1(c1 BIT(8));
 
14993
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
14994
let $i=8;
 
14995
while($i){
 
14996
let $j=$i/2;
 
14997
eval set @v1=$i;
 
14998
eval set @v2=$j;
 
14999
set @v3=repeat('1',@v1);
 
15000
let $STR0= query_get_value(select @v3 as I,I,1);
 
15001
eval INSERT INTO t1 VALUES (b'$STR0');
 
15002
set @v3=repeat('0',@v1);
 
15003
let $STR1= query_get_value(select @v3 as I,I,1);
 
15004
eval INSERT INTO t1 VALUES (b'$STR1');
 
15005
set @v3=repeat('01',@v2);
 
15006
let $STR2= query_get_value(select @v3 as I,I,1);
 
15007
eval INSERT INTO t1 VALUES (b'$STR2');
 
15008
set @v3=repeat('10',@v2);
 
15009
let $STR3= query_get_value(select @v3 as I,I,1);
 
15010
eval INSERT INTO t1 VALUES (b'$STR3');
 
15011
set @v3=repeat('1',@v1);
 
15012
set @v4=repeat('01',@v2);
 
15013
set @v5=repeat('10',@v2);
 
15014
let $STR0= query_get_value(select @v3 as I,I,1);
 
15015
let $STR2= query_get_value(select @v4 as I,I,1);
 
15016
let $STR3= query_get_value(select @v5 as I,I,1);
 
15017
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
15018
dec $i;
 
15019
}
 
15020
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
15021
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
15022
--sorted_result
 
15023
SELECT HEX(c1) FROM t1;
 
15024
--sorted_result
 
15025
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
15026
--sorted_result
 
15027
SELECT OCT(c1) FROM t1;
 
15028
--sorted_result
 
15029
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
15030
--sorted_result
 
15031
SELECT BIN(c1) FROM t1;
 
15032
--sorted_result
 
15033
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
15034
--sorted_result
 
15035
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
15036
--sorted_result
 
15037
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
15038
--sorted_result
 
15039
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
15040
--sorted_result
 
15041
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
15042
--sorted_result
 
15043
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
15044
--sorted_result
 
15045
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
15046
--sorted_result
 
15047
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
15048
--error 1439
 
15049
CREATE TABLE t3 (c1 BIT(65));
 
15050
# Checking for bug #9571
 
15051
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
15052
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
15053
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
15054
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
15055
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15056
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15057
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15058
--sorted_result
 
15059
SELECT HEX(c1),HEX(c2) FROM t5;
 
15060
 
 
15061
#Insert permissible NULLs
 
15062
INSERT IGNORE INTO t5 VALUES(96,null);
 
15063
INSERT INTO t6 VALUES(null,null);
 
15064
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
15065
## Full table scan ##
 
15066
--sorted_result
 
15067
SELECT HEX(c1),HEX(c2) FROM t5;
 
15068
--sorted_result
 
15069
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
15070
--sorted_result
 
15071
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
15072
## Forward index scan, covering ##
 
15073
--sorted_result
 
15074
SELECT bin(c1) FROM t5;
 
15075
## Backward index scan, covering ##
 
15076
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
15077
## Forward index scan, non-covering ##
 
15078
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
15079
## Backward index scan, non-covering ##
 
15080
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
15081
## ref type access
 
15082
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
15083
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
15084
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
15085
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
15086
## Range access, ordered ##
 
15087
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
15088
 
 
15089
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
15090
 
 
15091
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
15092
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
15093
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
15094
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
15095
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
15096
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
15097
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
15098
 
 
15099
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
15100
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
15101
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
15102
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
15103
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
15104
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
15105
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
15106
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
15107
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
15108
## Range access, backwards scan ##
 
15109
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
15110
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
15111
 
 
15112
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
15113
 
 
15114
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
15115
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
15116
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
15117
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
15118
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
15119
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
15120
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
15121
 
 
15122
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
15123
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
15124
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
15125
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
15126
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
15127
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
15128
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
15129
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
15130
#Inserting different charachers
 
15131
CREATE TABLE t7(c1  BIT(8));
 
15132
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
15133
--sorted_result
 
15134
SELECT * FROM t7;
 
15135
############# UPDATE ###########
 
15136
 
 
15137
# Update order by limit
 
15138
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15139
 
 
15140
 
 
15141
# Update with arithmetic operations 
 
15142
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
15143
 
 
15144
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
15145
 
 
15146
 
 
15147
# Update with NULL ( NULL to number & number to NULL)
 
15148
UPDATE t6 SET c2=NULL WHERE c1=23;
 
15149
 
 
15150
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
15151
 
 
15152
 
 
15153
# Update range values
 
15154
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
15155
 
 
15156
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
15157
 
 
15158
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
15159
 
 
15160
 
 
15161
# Update outside range would be clipped to closest endpoints
 
15162
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
15163
 
 
15164
UPDATE t6 SET c2=-1 WHERE c1=94;
 
15165
 
 
15166
 
 
15167
# Update ignore on bad null error
 
15168
--sorted_result
 
15169
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
15170
SET SQL_MODE=STRICT_ALL_TABLES;
 
15171
--error ER_BAD_NULL_ERROR
 
15172
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
15173
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
15174
--sorted_result
 
15175
SELECT hex(c1),hex(c2) FROM t5;
 
15176
SET SQL_MODE=DEFAULT;
 
15177
 
 
15178
#Multi table update
 
15179
--disable_warnings
 
15180
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15181
--enable_warnings
 
15182
--sorted_result
 
15183
SELECT hex(c1),hex(c2) FROM t5;
 
15184
 
 
15185
 
 
15186
# Update using various access methods
 
15187
TRUNCATE t5;
 
15188
TRUNCATE t6;
 
15189
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15190
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15191
 
 
15192
# Update using Const
 
15193
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15194
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
15195
--sorted_result
 
15196
SELECT hex(c1),hex(c2) FROM t5;
 
15197
 
 
15198
# Update using range
 
15199
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15200
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
15201
--sorted_result
 
15202
SELECT hex(c1),hex(c2) FROM t5;
 
15203
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15204
--disable_warnings
 
15205
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
15206
--enable_warnings
 
15207
--sorted_result
 
15208
SELECT hex(c1),hex(c2) FROM t5;
 
15209
 
 
15210
# Update using eq_ref
 
15211
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15212
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15213
 
 
15214
############# DELETE ###########
 
15215
 
 
15216
TRUNCATE t5;
 
15217
TRUNCATE t6;
 
15218
 
 
15219
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15220
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15221
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
15222
 
 
15223
# Delete by order by limit
 
15224
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15225
 
 
15226
 
 
15227
# Delete rows with NULL column
 
15228
DELETE FROM t6 WHERE c2=NULL;
 
15229
 
 
15230
 
 
15231
# Delete with range values 
 
15232
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
15233
 
 
15234
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
15235
 
 
15236
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
15237
 
 
15238
 
 
15239
#Multi table delete
 
15240
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15241
--sorted_result
 
15242
SELECT hex(c1),hex(c2) FROM t5;
 
15243
 
 
15244
 
 
15245
# Delete using various access methods
 
15246
TRUNCATE t5;
 
15247
TRUNCATE t6;
 
15248
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15249
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15250
 
 
15251
# Update using Const
 
15252
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15253
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
15254
--sorted_result
 
15255
SELECT hex(c1),hex(c2) FROM t5;
 
15256
 
 
15257
# Update using range
 
15258
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15259
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15260
--sorted_result
 
15261
SELECT hex(c1),hex(c2) FROM t5;
 
15262
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15263
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15264
--sorted_result
 
15265
SELECT hex(c1),hex(c2) FROM t5;
 
15266
 
 
15267
# Update using eq_ref
 
15268
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15269
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15270
 
 
15271
# Droping the tables
 
15272
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
15273
 
 
15274
####Checking the bit values####
 
15275
# Produces different output on different platforms
 
15276
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
15277
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<16);
 
15278
######### INSERT/SELECT######### 
 
15279
 
 
15280
#### Insert and select 16 bit data into the table####
 
15281
CREATE TABLE t1(c1 BIT(16));
 
15282
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
15283
let $i=16;
 
15284
while($i){
 
15285
let $j=$i/2;
 
15286
eval set @v1=$i;
 
15287
eval set @v2=$j;
 
15288
set @v3=repeat('1',@v1);
 
15289
let $STR0= query_get_value(select @v3 as I,I,1);
 
15290
eval INSERT INTO t1 VALUES (b'$STR0');
 
15291
set @v3=repeat('0',@v1);
 
15292
let $STR1= query_get_value(select @v3 as I,I,1);
 
15293
eval INSERT INTO t1 VALUES (b'$STR1');
 
15294
set @v3=repeat('01',@v2);
 
15295
let $STR2= query_get_value(select @v3 as I,I,1);
 
15296
eval INSERT INTO t1 VALUES (b'$STR2');
 
15297
set @v3=repeat('10',@v2);
 
15298
let $STR3= query_get_value(select @v3 as I,I,1);
 
15299
eval INSERT INTO t1 VALUES (b'$STR3');
 
15300
set @v3=repeat('1',@v1);
 
15301
set @v4=repeat('01',@v2);
 
15302
set @v5=repeat('10',@v2);
 
15303
let $STR0= query_get_value(select @v3 as I,I,1);
 
15304
let $STR2= query_get_value(select @v4 as I,I,1);
 
15305
let $STR3= query_get_value(select @v5 as I,I,1);
 
15306
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
15307
dec $i;
 
15308
}
 
15309
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
15310
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
15311
--sorted_result
 
15312
SELECT HEX(c1) FROM t1;
 
15313
--sorted_result
 
15314
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
15315
--sorted_result
 
15316
SELECT OCT(c1) FROM t1;
 
15317
--sorted_result
 
15318
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
15319
--sorted_result
 
15320
SELECT BIN(c1) FROM t1;
 
15321
--sorted_result
 
15322
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
15323
--sorted_result
 
15324
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
15325
--sorted_result
 
15326
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
15327
--sorted_result
 
15328
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
15329
--sorted_result
 
15330
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
15331
--sorted_result
 
15332
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
15333
--sorted_result
 
15334
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
15335
--sorted_result
 
15336
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
15337
--error 1439
 
15338
CREATE TABLE t3 (c1 BIT(65));
 
15339
# Checking for bug #9571
 
15340
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
15341
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
15342
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
15343
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
15344
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15345
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15346
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15347
--sorted_result
 
15348
SELECT HEX(c1),HEX(c2) FROM t5;
 
15349
 
 
15350
#Insert permissible NULLs
 
15351
INSERT IGNORE INTO t5 VALUES(96,null);
 
15352
INSERT INTO t6 VALUES(null,null);
 
15353
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
15354
## Full table scan ##
 
15355
--sorted_result
 
15356
SELECT HEX(c1),HEX(c2) FROM t5;
 
15357
--sorted_result
 
15358
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
15359
--sorted_result
 
15360
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
15361
## Forward index scan, covering ##
 
15362
--sorted_result
 
15363
SELECT bin(c1) FROM t5;
 
15364
## Backward index scan, covering ##
 
15365
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
15366
## Forward index scan, non-covering ##
 
15367
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
15368
## Backward index scan, non-covering ##
 
15369
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
15370
## ref type access
 
15371
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
15372
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
15373
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
15374
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
15375
## Range access, ordered ##
 
15376
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
15377
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
15378
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
15379
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
15380
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
15381
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
15382
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
15383
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
15384
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
15385
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
15386
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
15387
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
15388
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
15389
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
15390
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
15391
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
15392
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
15393
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
15394
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
15395
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
15396
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
15397
## Range access, backwards scan ##
 
15398
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
15399
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
15400
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
15401
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
15402
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
15403
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
15404
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
15405
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
15406
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
15407
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
15408
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
15409
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
15410
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
15411
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
15412
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
15413
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
15414
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
15415
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
15416
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
15417
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
15418
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
15419
#Inserting different charachers
 
15420
CREATE TABLE t7(c1  BIT(16));
 
15421
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
15422
--sorted_result
 
15423
SELECT * FROM t7;
 
15424
############# UPDATE ###########
 
15425
 
 
15426
# Update order by limit
 
15427
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15428
 
 
15429
 
 
15430
# Update with arithmetic operations 
 
15431
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
15432
 
 
15433
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
15434
 
 
15435
 
 
15436
# Update with NULL ( NULL to number & number to NULL)
 
15437
UPDATE t6 SET c2=NULL WHERE c1=23;
 
15438
 
 
15439
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
15440
 
 
15441
 
 
15442
# Update range values
 
15443
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
15444
 
 
15445
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
15446
 
 
15447
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
15448
 
 
15449
 
 
15450
# Update outside range would be clipped to closest endpoints
 
15451
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
15452
 
 
15453
UPDATE t6 SET c2=-1 WHERE c1=94;
 
15454
 
 
15455
 
 
15456
# Update ignore on bad null error
 
15457
--sorted_result
 
15458
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
15459
SET SQL_MODE=STRICT_ALL_TABLES;
 
15460
--error ER_BAD_NULL_ERROR
 
15461
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
15462
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
15463
--sorted_result
 
15464
SELECT hex(c1),hex(c2) FROM t5;
 
15465
SET SQL_MODE=DEFAULT;
 
15466
 
 
15467
#Multi table update
 
15468
--disable_warnings
 
15469
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15470
--enable_warnings
 
15471
--sorted_result
 
15472
SELECT hex(c1),hex(c2) FROM t5;
 
15473
 
 
15474
 
 
15475
# Update using various access methods
 
15476
TRUNCATE t5;
 
15477
TRUNCATE t6;
 
15478
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15479
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15480
 
 
15481
# Update using Const
 
15482
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15483
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
15484
--sorted_result
 
15485
SELECT hex(c1),hex(c2) FROM t5;
 
15486
 
 
15487
# Update using range
 
15488
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15489
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
15490
--sorted_result
 
15491
SELECT hex(c1),hex(c2) FROM t5;
 
15492
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15493
--disable_warnings
 
15494
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
15495
--enable_warnings
 
15496
--sorted_result
 
15497
SELECT hex(c1),hex(c2) FROM t5;
 
15498
 
 
15499
# Update using eq_ref
 
15500
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15501
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15502
 
 
15503
############# DELETE ###########
 
15504
 
 
15505
TRUNCATE t5;
 
15506
TRUNCATE t6;
 
15507
 
 
15508
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15509
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15510
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
15511
 
 
15512
# Delete by order by limit
 
15513
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15514
 
 
15515
 
 
15516
# Delete rows with NULL column
 
15517
DELETE FROM t6 WHERE c2=NULL;
 
15518
 
 
15519
 
 
15520
# Delete with range values 
 
15521
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
15522
 
 
15523
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
15524
 
 
15525
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
15526
 
 
15527
 
 
15528
#Multi table delete
 
15529
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15530
--sorted_result
 
15531
SELECT hex(c1),hex(c2) FROM t5;
 
15532
 
 
15533
 
 
15534
# Delete using various access methods
 
15535
TRUNCATE t5;
 
15536
TRUNCATE t6;
 
15537
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15538
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15539
 
 
15540
# Update using Const
 
15541
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15542
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
15543
--sorted_result
 
15544
SELECT hex(c1),hex(c2) FROM t5;
 
15545
 
 
15546
# Update using range
 
15547
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15548
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15549
--sorted_result
 
15550
SELECT hex(c1),hex(c2) FROM t5;
 
15551
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15552
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15553
--sorted_result
 
15554
SELECT hex(c1),hex(c2) FROM t5;
 
15555
 
 
15556
# Update using eq_ref
 
15557
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15558
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15559
 
 
15560
# Droping the tables
 
15561
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
15562
 
 
15563
####Checking the bit values####
 
15564
# Produces different output on different platforms
 
15565
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
15566
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<32);
 
15567
######### INSERT/SELECT######### 
 
15568
 
 
15569
#### Insert and select 32 bit data into the table####
 
15570
CREATE TABLE t1(c1 BIT(32));
 
15571
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
15572
let $i=32;
 
15573
while($i){
 
15574
let $j=$i/2;
 
15575
eval set @v1=$i;
 
15576
eval set @v2=$j;
 
15577
set @v3=repeat('1',@v1);
 
15578
let $STR0= query_get_value(select @v3 as I,I,1);
 
15579
eval INSERT INTO t1 VALUES (b'$STR0');
 
15580
set @v3=repeat('0',@v1);
 
15581
let $STR1= query_get_value(select @v3 as I,I,1);
 
15582
eval INSERT INTO t1 VALUES (b'$STR1');
 
15583
set @v3=repeat('01',@v2);
 
15584
let $STR2= query_get_value(select @v3 as I,I,1);
 
15585
eval INSERT INTO t1 VALUES (b'$STR2');
 
15586
set @v3=repeat('10',@v2);
 
15587
let $STR3= query_get_value(select @v3 as I,I,1);
 
15588
eval INSERT INTO t1 VALUES (b'$STR3');
 
15589
set @v3=repeat('1',@v1);
 
15590
set @v4=repeat('01',@v2);
 
15591
set @v5=repeat('10',@v2);
 
15592
let $STR0= query_get_value(select @v3 as I,I,1);
 
15593
let $STR2= query_get_value(select @v4 as I,I,1);
 
15594
let $STR3= query_get_value(select @v5 as I,I,1);
 
15595
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
15596
dec $i;
 
15597
}
 
15598
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
15599
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
15600
--sorted_result
 
15601
SELECT HEX(c1) FROM t1;
 
15602
--sorted_result
 
15603
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
15604
--sorted_result
 
15605
SELECT OCT(c1) FROM t1;
 
15606
--sorted_result
 
15607
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
15608
--sorted_result
 
15609
SELECT BIN(c1) FROM t1;
 
15610
--sorted_result
 
15611
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
15612
--sorted_result
 
15613
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
15614
--sorted_result
 
15615
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
15616
--sorted_result
 
15617
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
15618
--sorted_result
 
15619
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
15620
--sorted_result
 
15621
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
15622
--sorted_result
 
15623
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
15624
--sorted_result
 
15625
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
15626
--error 1439
 
15627
CREATE TABLE t3 (c1 BIT(65));
 
15628
# Checking for bug #9571
 
15629
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
15630
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
15631
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
15632
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
15633
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15634
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15635
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15636
--sorted_result
 
15637
SELECT HEX(c1),HEX(c2) FROM t5;
 
15638
 
 
15639
#Insert permissible NULLs
 
15640
INSERT IGNORE INTO t5 VALUES(96,null);
 
15641
INSERT INTO t6 VALUES(null,null);
 
15642
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
15643
## Full table scan ##
 
15644
--sorted_result
 
15645
SELECT HEX(c1),HEX(c2) FROM t5;
 
15646
--sorted_result
 
15647
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
15648
--sorted_result
 
15649
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
15650
## Forward index scan, covering ##
 
15651
--sorted_result
 
15652
SELECT bin(c1) FROM t5;
 
15653
## Backward index scan, covering ##
 
15654
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
15655
## Forward index scan, non-covering ##
 
15656
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
15657
## Backward index scan, non-covering ##
 
15658
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
15659
## ref type access
 
15660
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
15661
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
15662
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
15663
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
15664
## Range access, ordered ##
 
15665
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
15666
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
15667
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
15668
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
15669
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
15670
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
15671
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
15672
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
15673
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
15674
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
15675
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
15676
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
15677
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
15678
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
15679
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
15680
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
15681
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
15682
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
15683
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
15684
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
15685
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
15686
## Range access, backwards scan ##
 
15687
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
15688
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
15689
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
15690
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
15691
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
15692
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
15693
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
15694
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
15695
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
15696
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
15697
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
15698
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
15699
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
15700
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
15701
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
15702
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
15703
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
15704
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
15705
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
15706
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
15707
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
15708
#Inserting different charachers
 
15709
CREATE TABLE t7(c1  BIT(32));
 
15710
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
15711
--sorted_result
 
15712
SELECT * FROM t7;
 
15713
############# UPDATE ###########
 
15714
 
 
15715
# Update order by limit
 
15716
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15717
 
 
15718
 
 
15719
# Update with arithmetic operations 
 
15720
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
15721
 
 
15722
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
15723
 
 
15724
 
 
15725
# Update with NULL ( NULL to number & number to NULL)
 
15726
UPDATE t6 SET c2=NULL WHERE c1=23;
 
15727
 
 
15728
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
15729
 
 
15730
 
 
15731
# Update range values
 
15732
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
15733
 
 
15734
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
15735
 
 
15736
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
15737
 
 
15738
 
 
15739
# Update outside range would be clipped to closest endpoints
 
15740
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
15741
 
 
15742
UPDATE t6 SET c2=-1 WHERE c1=94;
 
15743
 
 
15744
 
 
15745
# Update ignore on bad null error
 
15746
--sorted_result
 
15747
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
15748
SET SQL_MODE=STRICT_ALL_TABLES;
 
15749
--error ER_BAD_NULL_ERROR
 
15750
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
15751
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
15752
--sorted_result
 
15753
SELECT hex(c1),hex(c2) FROM t5;
 
15754
SET SQL_MODE=DEFAULT;
 
15755
 
 
15756
#Multi table update
 
15757
--disable_warnings
 
15758
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15759
--enable_warnings
 
15760
--sorted_result
 
15761
SELECT hex(c1),hex(c2) FROM t5;
 
15762
 
 
15763
 
 
15764
# Update using various access methods
 
15765
TRUNCATE t5;
 
15766
TRUNCATE t6;
 
15767
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15768
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15769
 
 
15770
# Update using Const
 
15771
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15772
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
15773
--sorted_result
 
15774
SELECT hex(c1),hex(c2) FROM t5;
 
15775
 
 
15776
# Update using range
 
15777
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15778
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
15779
--sorted_result
 
15780
SELECT hex(c1),hex(c2) FROM t5;
 
15781
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15782
--disable_warnings
 
15783
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
15784
--enable_warnings
 
15785
--sorted_result
 
15786
SELECT hex(c1),hex(c2) FROM t5;
 
15787
 
 
15788
# Update using eq_ref
 
15789
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15790
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15791
 
 
15792
############# DELETE ###########
 
15793
 
 
15794
TRUNCATE t5;
 
15795
TRUNCATE t6;
 
15796
 
 
15797
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15798
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15799
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
15800
 
 
15801
# Delete by order by limit
 
15802
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
15803
 
 
15804
 
 
15805
# Delete rows with NULL column
 
15806
DELETE FROM t6 WHERE c2=NULL;
 
15807
 
 
15808
 
 
15809
# Delete with range values 
 
15810
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
15811
 
 
15812
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
15813
 
 
15814
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
15815
 
 
15816
 
 
15817
#Multi table delete
 
15818
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
15819
--sorted_result
 
15820
SELECT hex(c1),hex(c2) FROM t5;
 
15821
 
 
15822
 
 
15823
# Delete using various access methods
 
15824
TRUNCATE t5;
 
15825
TRUNCATE t6;
 
15826
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15827
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
15828
 
 
15829
# Update using Const
 
15830
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
15831
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
15832
--sorted_result
 
15833
SELECT hex(c1),hex(c2) FROM t5;
 
15834
 
 
15835
# Update using range
 
15836
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15837
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
15838
--sorted_result
 
15839
SELECT hex(c1),hex(c2) FROM t5;
 
15840
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15841
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
15842
--sorted_result
 
15843
SELECT hex(c1),hex(c2) FROM t5;
 
15844
 
 
15845
# Update using eq_ref
 
15846
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15847
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
15848
 
 
15849
# Droping the tables
 
15850
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
15851
 
 
15852
####Checking the bit values####
 
15853
# Produces different output on different platforms
 
15854
#SELECT 0 + b'1010101010101010101010101010101010101010101010101010101010101010'; 
 
15855
SELECT 0 + (1010101010101010101010101010101010101010101010101010101010101010<<64);
 
15856
######### INSERT/SELECT######### 
 
15857
 
 
15858
#### Insert and select 64 bit data into the table####
 
15859
CREATE TABLE t1(c1 BIT(64));
 
15860
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
15861
let $i=64;
 
15862
while($i){
 
15863
let $j=$i/2;
 
15864
eval set @v1=$i;
 
15865
eval set @v2=$j;
 
15866
set @v3=repeat('1',@v1);
 
15867
let $STR0= query_get_value(select @v3 as I,I,1);
 
15868
eval INSERT INTO t1 VALUES (b'$STR0');
 
15869
set @v3=repeat('0',@v1);
 
15870
let $STR1= query_get_value(select @v3 as I,I,1);
 
15871
eval INSERT INTO t1 VALUES (b'$STR1');
 
15872
set @v3=repeat('01',@v2);
 
15873
let $STR2= query_get_value(select @v3 as I,I,1);
 
15874
eval INSERT INTO t1 VALUES (b'$STR2');
 
15875
set @v3=repeat('10',@v2);
 
15876
let $STR3= query_get_value(select @v3 as I,I,1);
 
15877
eval INSERT INTO t1 VALUES (b'$STR3');
 
15878
set @v3=repeat('1',@v1);
 
15879
set @v4=repeat('01',@v2);
 
15880
set @v5=repeat('10',@v2);
 
15881
let $STR0= query_get_value(select @v3 as I,I,1);
 
15882
let $STR2= query_get_value(select @v4 as I,I,1);
 
15883
let $STR3= query_get_value(select @v5 as I,I,1);
 
15884
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
15885
dec $i;
 
15886
}
 
15887
INSERT INTO t1 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010');
 
15888
INSERT INTO t2 VALUES (b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010', b'1010101010101010101010101010101010101010101010101010101010101010');
 
15889
--sorted_result
 
15890
SELECT HEX(c1) FROM t1;
 
15891
--sorted_result
 
15892
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
15893
--sorted_result
 
15894
SELECT OCT(c1) FROM t1;
 
15895
--sorted_result
 
15896
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
15897
--sorted_result
 
15898
SELECT BIN(c1) FROM t1;
 
15899
--sorted_result
 
15900
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
15901
--sorted_result
 
15902
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
15903
--sorted_result
 
15904
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
15905
--sorted_result
 
15906
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
15907
--sorted_result
 
15908
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
15909
--sorted_result
 
15910
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
15911
--sorted_result
 
15912
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
15913
--sorted_result
 
15914
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
15915
--error 1439
 
15916
CREATE TABLE t3 (c1 BIT(65));
 
15917
# Checking for bug #9571
 
15918
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
15919
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
15920
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
15921
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
15922
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
15923
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15924
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
15925
--sorted_result
 
15926
SELECT HEX(c1),HEX(c2) FROM t5;
 
15927
 
 
15928
#Insert permissible NULLs
 
15929
INSERT IGNORE INTO t5 VALUES(96,null);
 
15930
INSERT INTO t6 VALUES(null,null);
 
15931
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
15932
## Full table scan ##
 
15933
--sorted_result
 
15934
SELECT HEX(c1),HEX(c2) FROM t5;
 
15935
--sorted_result
 
15936
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
15937
--sorted_result
 
15938
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
15939
## Forward index scan, covering ##
 
15940
--sorted_result
 
15941
SELECT bin(c1) FROM t5;
 
15942
## Backward index scan, covering ##
 
15943
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
15944
## Forward index scan, non-covering ##
 
15945
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
15946
## Backward index scan, non-covering ##
 
15947
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
15948
## ref type access
 
15949
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
15950
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
15951
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
15952
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
15953
## Range access, ordered ##
 
15954
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
15955
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
15956
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
15957
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
15958
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
15959
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
15960
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
15961
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
15962
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
15963
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
15964
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
15965
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
15966
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
15967
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
15968
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
15969
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
15970
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
15971
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
15972
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
15973
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
15974
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
15975
## Range access, backwards scan ##
 
15976
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
15977
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
15978
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
15979
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
15980
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
15981
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
15982
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
15983
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
15984
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
15985
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
15986
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
15987
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
15988
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
15989
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
15990
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
15991
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
15992
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
15993
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
15994
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
15995
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
15996
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
15997
#Inserting different charachers
 
15998
CREATE TABLE t7(c1  BIT(64));
 
15999
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
16000
--sorted_result
 
16001
SELECT * FROM t7;
 
16002
############# UPDATE ###########
 
16003
 
 
16004
# Update order by limit
 
16005
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16006
 
 
16007
 
 
16008
# Update with arithmetic operations 
 
16009
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
16010
 
 
16011
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
16012
 
 
16013
 
 
16014
# Update with NULL ( NULL to number & number to NULL)
 
16015
UPDATE t6 SET c2=NULL WHERE c1=23;
 
16016
 
 
16017
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
16018
 
 
16019
 
 
16020
# Update range values
 
16021
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
16022
 
 
16023
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
16024
 
 
16025
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
16026
 
 
16027
 
 
16028
# Update outside range would be clipped to closest endpoints
 
16029
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
16030
 
 
16031
UPDATE t6 SET c2=-1 WHERE c1=94;
 
16032
 
 
16033
 
 
16034
# Update ignore on bad null error
 
16035
--sorted_result
 
16036
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
16037
SET SQL_MODE=STRICT_ALL_TABLES;
 
16038
--error ER_BAD_NULL_ERROR
 
16039
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
16040
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
16041
--sorted_result
 
16042
SELECT hex(c1),hex(c2) FROM t5;
 
16043
SET SQL_MODE=DEFAULT;
 
16044
 
 
16045
#Multi table update
 
16046
--disable_warnings
 
16047
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16048
--enable_warnings
 
16049
--sorted_result
 
16050
SELECT hex(c1),hex(c2) FROM t5;
 
16051
 
 
16052
 
 
16053
# Update using various access methods
 
16054
TRUNCATE t5;
 
16055
TRUNCATE t6;
 
16056
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16057
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16058
 
 
16059
# Update using Const
 
16060
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16061
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
16062
--sorted_result
 
16063
SELECT hex(c1),hex(c2) FROM t5;
 
16064
 
 
16065
# Update using range
 
16066
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16067
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
16068
--sorted_result
 
16069
SELECT hex(c1),hex(c2) FROM t5;
 
16070
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16071
--disable_warnings
 
16072
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
16073
--enable_warnings
 
16074
--sorted_result
 
16075
SELECT hex(c1),hex(c2) FROM t5;
 
16076
 
 
16077
# Update using eq_ref
 
16078
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16079
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16080
 
 
16081
############# DELETE ###########
 
16082
 
 
16083
TRUNCATE t5;
 
16084
TRUNCATE t6;
 
16085
 
 
16086
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16087
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16088
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
16089
 
 
16090
# Delete by order by limit
 
16091
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16092
 
 
16093
 
 
16094
# Delete rows with NULL column
 
16095
DELETE FROM t6 WHERE c2=NULL;
 
16096
 
 
16097
 
 
16098
# Delete with range values 
 
16099
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
16100
 
 
16101
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
16102
 
 
16103
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
16104
 
 
16105
 
 
16106
#Multi table delete
 
16107
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16108
--sorted_result
 
16109
SELECT hex(c1),hex(c2) FROM t5;
 
16110
 
 
16111
 
 
16112
# Delete using various access methods
 
16113
TRUNCATE t5;
 
16114
TRUNCATE t6;
 
16115
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16116
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16117
 
 
16118
# Update using Const
 
16119
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16120
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
16121
--sorted_result
 
16122
SELECT hex(c1),hex(c2) FROM t5;
 
16123
 
 
16124
# Update using range
 
16125
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16126
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16127
--sorted_result
 
16128
SELECT hex(c1),hex(c2) FROM t5;
 
16129
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16130
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16131
--sorted_result
 
16132
SELECT hex(c1),hex(c2) FROM t5;
 
16133
 
 
16134
# Update using eq_ref
 
16135
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16136
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16137
 
 
16138
# Droping the tables
 
16139
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
16140
 
 
16141
####Checking the bit values####
 
16142
# Produces different output for different platform
 
16143
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
16144
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<0);
 
16145
######### INSERT/SELECT######### 
 
16146
 
 
16147
#### Insert and select 0 bit data into the table####
 
16148
CREATE TABLE t1(c1 BIT(0));
 
16149
CREATE TABLE t2(c1 BIT(0), c2 BIT(0), c3 BIT(0));
 
16150
let $i=0;
 
16151
while($i){
 
16152
let $j=$i/2;
 
16153
eval set @v1=$i;
 
16154
eval set @v2=$j;
 
16155
set @v3=repeat('1',@v1);
 
16156
let $STR0= query_get_value(select @v3 as I,I,1);
 
16157
eval INSERT INTO t1 VALUES (b'$STR0');
 
16158
set @v3=repeat('0',@v1);
 
16159
let $STR1= query_get_value(select @v3 as I,I,1);
 
16160
eval INSERT INTO t1 VALUES (b'$STR1');
 
16161
set @v3=repeat('01',@v2);
 
16162
let $STR2= query_get_value(select @v3 as I,I,1);
 
16163
eval INSERT INTO t1 VALUES (b'$STR2');
 
16164
set @v3=repeat('10',@v2);
 
16165
let $STR3= query_get_value(select @v3 as I,I,1);
 
16166
eval INSERT INTO t1 VALUES (b'$STR3');
 
16167
set @v3=repeat('1',@v1);
 
16168
set @v4=repeat('01',@v2);
 
16169
set @v5=repeat('10',@v2);
 
16170
let $STR0= query_get_value(select @v3 as I,I,1);
 
16171
let $STR2= query_get_value(select @v4 as I,I,1);
 
16172
let $STR3= query_get_value(select @v5 as I,I,1);
 
16173
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
16174
dec $i;
 
16175
}
 
16176
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
16177
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
16178
--sorted_result
 
16179
SELECT HEX(c1) FROM t1;
 
16180
--sorted_result
 
16181
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
16182
--sorted_result
 
16183
SELECT OCT(c1) FROM t1;
 
16184
--sorted_result
 
16185
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
16186
--sorted_result
 
16187
SELECT BIN(c1) FROM t1;
 
16188
--sorted_result
 
16189
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
16190
--sorted_result
 
16191
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
16192
--sorted_result
 
16193
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
16194
--sorted_result
 
16195
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
16196
--sorted_result
 
16197
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
16198
--sorted_result
 
16199
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
16200
--sorted_result
 
16201
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
16202
--sorted_result
 
16203
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
16204
--error 1439
 
16205
CREATE TABLE t3 (c1 BIT(65));
 
16206
# Checking for bug #9571
 
16207
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
16208
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
16209
CREATE TABLE t5(c1  BIT(0) NOT NULL PRIMARY KEY, c2  BIT(0));
 
16210
CREATE TABLE t6(c1  BIT(0), c2  BIT(0));
 
16211
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16212
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16213
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16214
--sorted_result
 
16215
SELECT HEX(c1),HEX(c2) FROM t5;
 
16216
 
 
16217
#Insert permissible NULLs
 
16218
INSERT IGNORE INTO t5 VALUES(96,null);
 
16219
INSERT INTO t6 VALUES(null,null);
 
16220
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
16221
## Full table scan ##
 
16222
--sorted_result
 
16223
SELECT HEX(c1),HEX(c2) FROM t5;
 
16224
--sorted_result
 
16225
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
16226
--sorted_result
 
16227
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
16228
## Forward index scan, covering ##
 
16229
--sorted_result
 
16230
SELECT bin(c1) FROM t5;
 
16231
## Backward index scan, covering ##
 
16232
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
16233
## Forward index scan, non-covering ##
 
16234
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
16235
## Backward index scan, non-covering ##
 
16236
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
16237
## ref type access
 
16238
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1;
 
16239
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 LIMIT 2;
 
16240
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC ;
 
16241
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
16242
## Range access, ordered ##
 
16243
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 ;
 
16244
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 ;
 
16245
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 LIMIT 2 ;
 
16246
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 ;
 
16247
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 LIMIT 2 ;
 
16248
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1;
 
16249
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 LIMIT 2 ;
 
16250
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
16251
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 LIMIT 2 ;
 
16252
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1;
 
16253
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 LIMIT 2 ;
 
16254
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1;
 
16255
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64'  ORDER BY c1 LIMIT 2 ;
 
16256
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1;
 
16257
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 LIMIT 2 ;
 
16258
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 ;
 
16259
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 LIMIT 2 ;
 
16260
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
16261
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
16262
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
16263
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
16264
## Range access, backwards scan ##
 
16265
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0'  ORDER BY c1 DESC;
 
16266
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '0' ORDER BY c1 DESC LIMIT 2 ;
 
16267
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0'  ORDER BY c1 DESC;
 
16268
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '0' ORDER BY c1 DESC LIMIT 2 ;
 
16269
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC ;
 
16270
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' ORDER BY c1 DESC LIMIT 2 ;
 
16271
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'  ORDER BY c1 DESC;
 
16272
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '0'   ORDER BY c1 DESC LIMIT 2 ;
 
16273
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC ;
 
16274
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '0' ORDER BY c1 DESC LIMIT 2 ;
 
16275
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0'  ORDER BY c1 DESC ;
 
16276
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'0' ORDER BY c1 DESC LIMIT 2 ;
 
16277
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC;
 
16278
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '0' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
16279
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC ;
 
16280
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '0' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
16281
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '0' AND c1 < '64' AND c2 = '0' ORDER BY c1 DESC LIMIT 2 ;
 
16282
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
16283
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
16284
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
16285
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
16286
#Inserting different charachers
 
16287
CREATE TABLE t7(c1  BIT(0));
 
16288
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
16289
--sorted_result
 
16290
SELECT * FROM t7;
 
16291
############# UPDATE ###########
 
16292
 
 
16293
# Update order by limit
 
16294
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16295
 
 
16296
 
 
16297
# Update with arithmetic operations 
 
16298
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
16299
 
 
16300
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
16301
 
 
16302
 
 
16303
# Update with NULL ( NULL to number & number to NULL)
 
16304
UPDATE t6 SET c2=NULL WHERE c1=23;
 
16305
 
 
16306
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
16307
 
 
16308
 
 
16309
# Update range values
 
16310
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
16311
 
 
16312
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
16313
 
 
16314
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
16315
 
 
16316
 
 
16317
# Update outside range would be clipped to closest endpoints
 
16318
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
16319
 
 
16320
UPDATE t6 SET c2=-1 WHERE c1=94;
 
16321
 
 
16322
 
 
16323
# Update ignore on bad null error
 
16324
--sorted_result
 
16325
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
16326
SET SQL_MODE=STRICT_ALL_TABLES;
 
16327
--error ER_BAD_NULL_ERROR
 
16328
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
16329
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
16330
--sorted_result
 
16331
SELECT hex(c1),hex(c2) FROM t5;
 
16332
SET SQL_MODE=DEFAULT;
 
16333
 
 
16334
#Multi table update
 
16335
--disable_warnings
 
16336
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16337
--enable_warnings
 
16338
--sorted_result
 
16339
SELECT hex(c1),hex(c2) FROM t5;
 
16340
 
 
16341
 
 
16342
# Update using various access methods
 
16343
TRUNCATE t5;
 
16344
TRUNCATE t6;
 
16345
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16346
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16347
 
 
16348
# Update using Const
 
16349
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16350
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
16351
--sorted_result
 
16352
SELECT hex(c1),hex(c2) FROM t5;
 
16353
 
 
16354
# Update using range
 
16355
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16356
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
16357
--sorted_result
 
16358
SELECT hex(c1),hex(c2) FROM t5;
 
16359
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16360
--disable_warnings
 
16361
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
16362
--enable_warnings
 
16363
--sorted_result
 
16364
SELECT hex(c1),hex(c2) FROM t5;
 
16365
 
 
16366
# Update using eq_ref
 
16367
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16368
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16369
 
 
16370
############# DELETE ###########
 
16371
 
 
16372
TRUNCATE t5;
 
16373
TRUNCATE t6;
 
16374
 
 
16375
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16376
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16377
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
16378
 
 
16379
# Delete by order by limit
 
16380
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16381
 
 
16382
 
 
16383
# Delete rows with NULL column
 
16384
DELETE FROM t6 WHERE c2=NULL;
 
16385
 
 
16386
 
 
16387
# Delete with range values 
 
16388
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
16389
 
 
16390
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
16391
 
 
16392
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
16393
 
 
16394
 
 
16395
#Multi table delete
 
16396
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16397
--sorted_result
 
16398
SELECT hex(c1),hex(c2) FROM t5;
 
16399
 
 
16400
 
 
16401
# Delete using various access methods
 
16402
TRUNCATE t5;
 
16403
TRUNCATE t6;
 
16404
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16405
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16406
 
 
16407
# Update using Const
 
16408
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16409
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
16410
--sorted_result
 
16411
SELECT hex(c1),hex(c2) FROM t5;
 
16412
 
 
16413
# Update using range
 
16414
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16415
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16416
--sorted_result
 
16417
SELECT hex(c1),hex(c2) FROM t5;
 
16418
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16419
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16420
--sorted_result
 
16421
SELECT hex(c1),hex(c2) FROM t5;
 
16422
 
 
16423
# Update using eq_ref
 
16424
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16425
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16426
 
 
16427
# Droping the tables
 
16428
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
16429
 
 
16430
####Checking the bit values####
 
16431
# Produces different output for different platform
 
16432
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
16433
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<1);
 
16434
######### INSERT/SELECT######### 
 
16435
 
 
16436
#### Insert and select 1 bit data into the table####
 
16437
CREATE TABLE t1(c1 BIT(1));
 
16438
CREATE TABLE t2(c1 BIT(1), c2 BIT(1), c3 BIT(1));
 
16439
let $i=1;
 
16440
while($i){
 
16441
let $j=$i/2;
 
16442
eval set @v1=$i;
 
16443
eval set @v2=$j;
 
16444
set @v3=repeat('1',@v1);
 
16445
let $STR0= query_get_value(select @v3 as I,I,1);
 
16446
eval INSERT INTO t1 VALUES (b'$STR0');
 
16447
set @v3=repeat('0',@v1);
 
16448
let $STR1= query_get_value(select @v3 as I,I,1);
 
16449
eval INSERT INTO t1 VALUES (b'$STR1');
 
16450
set @v3=repeat('01',@v2);
 
16451
let $STR2= query_get_value(select @v3 as I,I,1);
 
16452
eval INSERT INTO t1 VALUES (b'$STR2');
 
16453
set @v3=repeat('10',@v2);
 
16454
let $STR3= query_get_value(select @v3 as I,I,1);
 
16455
eval INSERT INTO t1 VALUES (b'$STR3');
 
16456
set @v3=repeat('1',@v1);
 
16457
set @v4=repeat('01',@v2);
 
16458
set @v5=repeat('10',@v2);
 
16459
let $STR0= query_get_value(select @v3 as I,I,1);
 
16460
let $STR2= query_get_value(select @v4 as I,I,1);
 
16461
let $STR3= query_get_value(select @v5 as I,I,1);
 
16462
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
16463
dec $i;
 
16464
}
 
16465
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
16466
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
16467
--sorted_result
 
16468
SELECT HEX(c1) FROM t1;
 
16469
--sorted_result
 
16470
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
16471
--sorted_result
 
16472
SELECT OCT(c1) FROM t1;
 
16473
--sorted_result
 
16474
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
16475
--sorted_result
 
16476
SELECT BIN(c1) FROM t1;
 
16477
--sorted_result
 
16478
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
16479
--sorted_result
 
16480
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
16481
--sorted_result
 
16482
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
16483
--sorted_result
 
16484
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
16485
--sorted_result
 
16486
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
16487
--sorted_result
 
16488
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
16489
--sorted_result
 
16490
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
16491
--sorted_result
 
16492
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
16493
--error 1439
 
16494
CREATE TABLE t3 (c1 BIT(65));
 
16495
# Checking for bug #9571
 
16496
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
16497
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
16498
CREATE TABLE t5(c1  BIT(1) NOT NULL PRIMARY KEY, c2  BIT(1));
 
16499
CREATE TABLE t6(c1  BIT(1), c2  BIT(1));
 
16500
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16501
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16502
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16503
--sorted_result
 
16504
SELECT HEX(c1),HEX(c2) FROM t5;
 
16505
 
 
16506
#Insert permissible NULLs
 
16507
INSERT IGNORE INTO t5 VALUES(96,null);
 
16508
INSERT INTO t6 VALUES(null,null);
 
16509
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
16510
## Full table scan ##
 
16511
--sorted_result
 
16512
SELECT HEX(c1),HEX(c2) FROM t5;
 
16513
--sorted_result
 
16514
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
16515
--sorted_result
 
16516
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
16517
## Forward index scan, covering ##
 
16518
--sorted_result
 
16519
SELECT bin(c1) FROM t5;
 
16520
## Backward index scan, covering ##
 
16521
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
16522
## Forward index scan, non-covering ##
 
16523
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
16524
## Backward index scan, non-covering ##
 
16525
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
16526
## ref type access
 
16527
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1;
 
16528
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 LIMIT 2;
 
16529
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC ;
 
16530
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
16531
## Range access, ordered ##
 
16532
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 ;
 
16533
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 ;
 
16534
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 LIMIT 2 ;
 
16535
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 ;
 
16536
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 LIMIT 2 ;
 
16537
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1;
 
16538
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 LIMIT 2 ;
 
16539
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
16540
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 LIMIT 2 ;
 
16541
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1;
 
16542
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 LIMIT 2 ;
 
16543
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1;
 
16544
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64'  ORDER BY c1 LIMIT 2 ;
 
16545
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1;
 
16546
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 LIMIT 2 ;
 
16547
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 ;
 
16548
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 LIMIT 2 ;
 
16549
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
16550
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
16551
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
16552
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
16553
## Range access, backwards scan ##
 
16554
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1'  ORDER BY c1 DESC;
 
16555
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '1' ORDER BY c1 DESC LIMIT 2 ;
 
16556
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1'  ORDER BY c1 DESC;
 
16557
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '1' ORDER BY c1 DESC LIMIT 2 ;
 
16558
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC ;
 
16559
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' ORDER BY c1 DESC LIMIT 2 ;
 
16560
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'  ORDER BY c1 DESC;
 
16561
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '1'   ORDER BY c1 DESC LIMIT 2 ;
 
16562
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC ;
 
16563
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '1' ORDER BY c1 DESC LIMIT 2 ;
 
16564
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1'  ORDER BY c1 DESC ;
 
16565
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'1' ORDER BY c1 DESC LIMIT 2 ;
 
16566
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC;
 
16567
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '1' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
16568
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC ;
 
16569
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '1' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
16570
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '1' AND c1 < '64' AND c2 = '1' ORDER BY c1 DESC LIMIT 2 ;
 
16571
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
16572
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
16573
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
16574
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
16575
#Inserting different charachers
 
16576
CREATE TABLE t7(c1  BIT(1));
 
16577
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
16578
--sorted_result
 
16579
SELECT * FROM t7;
 
16580
############# UPDATE ###########
 
16581
 
 
16582
# Update order by limit
 
16583
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16584
 
 
16585
 
 
16586
# Update with arithmetic operations 
 
16587
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
16588
 
 
16589
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
16590
 
 
16591
 
 
16592
# Update with NULL ( NULL to number & number to NULL)
 
16593
UPDATE t6 SET c2=NULL WHERE c1=23;
 
16594
 
 
16595
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
16596
 
 
16597
 
 
16598
# Update range values
 
16599
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
16600
 
 
16601
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
16602
 
 
16603
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
16604
 
 
16605
 
 
16606
# Update outside range would be clipped to closest endpoints
 
16607
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
16608
 
 
16609
UPDATE t6 SET c2=-1 WHERE c1=94;
 
16610
 
 
16611
 
 
16612
# Update ignore on bad null error
 
16613
--sorted_result
 
16614
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
16615
SET SQL_MODE=STRICT_ALL_TABLES;
 
16616
--error ER_BAD_NULL_ERROR
 
16617
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
16618
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
16619
--sorted_result
 
16620
SELECT hex(c1),hex(c2) FROM t5;
 
16621
SET SQL_MODE=DEFAULT;
 
16622
 
 
16623
#Multi table update
 
16624
--disable_warnings
 
16625
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16626
--enable_warnings
 
16627
--sorted_result
 
16628
SELECT hex(c1),hex(c2) FROM t5;
 
16629
 
 
16630
 
 
16631
# Update using various access methods
 
16632
TRUNCATE t5;
 
16633
TRUNCATE t6;
 
16634
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16635
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16636
 
 
16637
# Update using Const
 
16638
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16639
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
16640
--sorted_result
 
16641
SELECT hex(c1),hex(c2) FROM t5;
 
16642
 
 
16643
# Update using range
 
16644
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16645
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
16646
--sorted_result
 
16647
SELECT hex(c1),hex(c2) FROM t5;
 
16648
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16649
--disable_warnings
 
16650
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
16651
--enable_warnings
 
16652
--sorted_result
 
16653
SELECT hex(c1),hex(c2) FROM t5;
 
16654
 
 
16655
# Update using eq_ref
 
16656
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16657
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16658
 
 
16659
############# DELETE ###########
 
16660
 
 
16661
TRUNCATE t5;
 
16662
TRUNCATE t6;
 
16663
 
 
16664
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16665
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16666
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
16667
 
 
16668
# Delete by order by limit
 
16669
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16670
 
 
16671
 
 
16672
# Delete rows with NULL column
 
16673
DELETE FROM t6 WHERE c2=NULL;
 
16674
 
 
16675
 
 
16676
# Delete with range values 
 
16677
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
16678
 
 
16679
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
16680
 
 
16681
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
16682
 
 
16683
 
 
16684
#Multi table delete
 
16685
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16686
--sorted_result
 
16687
SELECT hex(c1),hex(c2) FROM t5;
 
16688
 
 
16689
 
 
16690
# Delete using various access methods
 
16691
TRUNCATE t5;
 
16692
TRUNCATE t6;
 
16693
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16694
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16695
 
 
16696
# Update using Const
 
16697
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16698
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
16699
--sorted_result
 
16700
SELECT hex(c1),hex(c2) FROM t5;
 
16701
 
 
16702
# Update using range
 
16703
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16704
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16705
--sorted_result
 
16706
SELECT hex(c1),hex(c2) FROM t5;
 
16707
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16708
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16709
--sorted_result
 
16710
SELECT hex(c1),hex(c2) FROM t5;
 
16711
 
 
16712
# Update using eq_ref
 
16713
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16714
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16715
 
 
16716
# Droping the tables
 
16717
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
16718
 
 
16719
####Checking the bit values####
 
16720
# Produces different output for different platform
 
16721
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
16722
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<2);
 
16723
######### INSERT/SELECT######### 
 
16724
 
 
16725
#### Insert and select 2 bit data into the table####
 
16726
CREATE TABLE t1(c1 BIT(2));
 
16727
CREATE TABLE t2(c1 BIT(2), c2 BIT(2), c3 BIT(2));
 
16728
let $i=2;
 
16729
while($i){
 
16730
let $j=$i/2;
 
16731
eval set @v1=$i;
 
16732
eval set @v2=$j;
 
16733
set @v3=repeat('1',@v1);
 
16734
let $STR0= query_get_value(select @v3 as I,I,1);
 
16735
eval INSERT INTO t1 VALUES (b'$STR0');
 
16736
set @v3=repeat('0',@v1);
 
16737
let $STR1= query_get_value(select @v3 as I,I,1);
 
16738
eval INSERT INTO t1 VALUES (b'$STR1');
 
16739
set @v3=repeat('01',@v2);
 
16740
let $STR2= query_get_value(select @v3 as I,I,1);
 
16741
eval INSERT INTO t1 VALUES (b'$STR2');
 
16742
set @v3=repeat('10',@v2);
 
16743
let $STR3= query_get_value(select @v3 as I,I,1);
 
16744
eval INSERT INTO t1 VALUES (b'$STR3');
 
16745
set @v3=repeat('1',@v1);
 
16746
set @v4=repeat('01',@v2);
 
16747
set @v5=repeat('10',@v2);
 
16748
let $STR0= query_get_value(select @v3 as I,I,1);
 
16749
let $STR2= query_get_value(select @v4 as I,I,1);
 
16750
let $STR3= query_get_value(select @v5 as I,I,1);
 
16751
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
16752
dec $i;
 
16753
}
 
16754
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
16755
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
16756
--sorted_result
 
16757
SELECT HEX(c1) FROM t1;
 
16758
--sorted_result
 
16759
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
16760
--sorted_result
 
16761
SELECT OCT(c1) FROM t1;
 
16762
--sorted_result
 
16763
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
16764
--sorted_result
 
16765
SELECT BIN(c1) FROM t1;
 
16766
--sorted_result
 
16767
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
16768
--sorted_result
 
16769
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
16770
--sorted_result
 
16771
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
16772
--sorted_result
 
16773
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
16774
--sorted_result
 
16775
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
16776
--sorted_result
 
16777
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
16778
--sorted_result
 
16779
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
16780
--sorted_result
 
16781
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
16782
--error 1439
 
16783
CREATE TABLE t3 (c1 BIT(65));
 
16784
# Checking for bug #9571
 
16785
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
16786
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
16787
CREATE TABLE t5(c1  BIT(2) NOT NULL PRIMARY KEY, c2  BIT(2));
 
16788
CREATE TABLE t6(c1  BIT(2), c2  BIT(2));
 
16789
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16790
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16791
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16792
--sorted_result
 
16793
SELECT HEX(c1),HEX(c2) FROM t5;
 
16794
 
 
16795
#Insert permissible NULLs
 
16796
INSERT IGNORE INTO t5 VALUES(96,null);
 
16797
INSERT INTO t6 VALUES(null,null);
 
16798
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
16799
## Full table scan ##
 
16800
--sorted_result
 
16801
SELECT HEX(c1),HEX(c2) FROM t5;
 
16802
--sorted_result
 
16803
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
16804
--sorted_result
 
16805
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
16806
## Forward index scan, covering ##
 
16807
--sorted_result
 
16808
SELECT bin(c1) FROM t5;
 
16809
## Backward index scan, covering ##
 
16810
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
16811
## Forward index scan, non-covering ##
 
16812
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
16813
## Backward index scan, non-covering ##
 
16814
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
16815
## ref type access
 
16816
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1;
 
16817
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 LIMIT 2;
 
16818
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC ;
 
16819
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
16820
## Range access, ordered ##
 
16821
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 ;
 
16822
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 ;
 
16823
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 LIMIT 2 ;
 
16824
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 ;
 
16825
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 LIMIT 2 ;
 
16826
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1;
 
16827
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 LIMIT 2 ;
 
16828
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
16829
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 LIMIT 2 ;
 
16830
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1;
 
16831
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 LIMIT 2 ;
 
16832
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1;
 
16833
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64'  ORDER BY c1 LIMIT 2 ;
 
16834
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1;
 
16835
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 LIMIT 2 ;
 
16836
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 ;
 
16837
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 LIMIT 2 ;
 
16838
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
16839
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
16840
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
16841
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
16842
## Range access, backwards scan ##
 
16843
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2'  ORDER BY c1 DESC;
 
16844
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '2' ORDER BY c1 DESC LIMIT 2 ;
 
16845
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2'  ORDER BY c1 DESC;
 
16846
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '2' ORDER BY c1 DESC LIMIT 2 ;
 
16847
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC ;
 
16848
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' ORDER BY c1 DESC LIMIT 2 ;
 
16849
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'  ORDER BY c1 DESC;
 
16850
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '2'   ORDER BY c1 DESC LIMIT 2 ;
 
16851
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC ;
 
16852
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '2' ORDER BY c1 DESC LIMIT 2 ;
 
16853
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2'  ORDER BY c1 DESC ;
 
16854
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'2' ORDER BY c1 DESC LIMIT 2 ;
 
16855
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC;
 
16856
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '2' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
16857
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC ;
 
16858
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '2' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
16859
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '2' AND c1 < '64' AND c2 = '2' ORDER BY c1 DESC LIMIT 2 ;
 
16860
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
16861
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
16862
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
16863
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
16864
#Inserting different charachers
 
16865
CREATE TABLE t7(c1  BIT(2));
 
16866
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
16867
--sorted_result
 
16868
SELECT * FROM t7;
 
16869
############# UPDATE ###########
 
16870
 
 
16871
# Update order by limit
 
16872
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16873
 
 
16874
 
 
16875
# Update with arithmetic operations 
 
16876
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
16877
 
 
16878
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
16879
 
 
16880
 
 
16881
# Update with NULL ( NULL to number & number to NULL)
 
16882
UPDATE t6 SET c2=NULL WHERE c1=23;
 
16883
 
 
16884
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
16885
 
 
16886
 
 
16887
# Update range values
 
16888
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
16889
 
 
16890
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
16891
 
 
16892
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
16893
 
 
16894
 
 
16895
# Update outside range would be clipped to closest endpoints
 
16896
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
16897
 
 
16898
UPDATE t6 SET c2=-1 WHERE c1=94;
 
16899
 
 
16900
 
 
16901
# Update ignore on bad null error
 
16902
--sorted_result
 
16903
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
16904
SET SQL_MODE=STRICT_ALL_TABLES;
 
16905
--error ER_BAD_NULL_ERROR
 
16906
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
16907
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
16908
--sorted_result
 
16909
SELECT hex(c1),hex(c2) FROM t5;
 
16910
SET SQL_MODE=DEFAULT;
 
16911
 
 
16912
#Multi table update
 
16913
--disable_warnings
 
16914
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16915
--enable_warnings
 
16916
--sorted_result
 
16917
SELECT hex(c1),hex(c2) FROM t5;
 
16918
 
 
16919
 
 
16920
# Update using various access methods
 
16921
TRUNCATE t5;
 
16922
TRUNCATE t6;
 
16923
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16924
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16925
 
 
16926
# Update using Const
 
16927
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16928
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
16929
--sorted_result
 
16930
SELECT hex(c1),hex(c2) FROM t5;
 
16931
 
 
16932
# Update using range
 
16933
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16934
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
16935
--sorted_result
 
16936
SELECT hex(c1),hex(c2) FROM t5;
 
16937
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16938
--disable_warnings
 
16939
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
16940
--enable_warnings
 
16941
--sorted_result
 
16942
SELECT hex(c1),hex(c2) FROM t5;
 
16943
 
 
16944
# Update using eq_ref
 
16945
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16946
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
16947
 
 
16948
############# DELETE ###########
 
16949
 
 
16950
TRUNCATE t5;
 
16951
TRUNCATE t6;
 
16952
 
 
16953
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
16954
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
16955
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
16956
 
 
16957
# Delete by order by limit
 
16958
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
16959
 
 
16960
 
 
16961
# Delete rows with NULL column
 
16962
DELETE FROM t6 WHERE c2=NULL;
 
16963
 
 
16964
 
 
16965
# Delete with range values 
 
16966
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
16967
 
 
16968
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
16969
 
 
16970
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
16971
 
 
16972
 
 
16973
#Multi table delete
 
16974
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
16975
--sorted_result
 
16976
SELECT hex(c1),hex(c2) FROM t5;
 
16977
 
 
16978
 
 
16979
# Delete using various access methods
 
16980
TRUNCATE t5;
 
16981
TRUNCATE t6;
 
16982
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16983
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
16984
 
 
16985
# Update using Const
 
16986
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
16987
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
16988
--sorted_result
 
16989
SELECT hex(c1),hex(c2) FROM t5;
 
16990
 
 
16991
# Update using range
 
16992
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16993
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
16994
--sorted_result
 
16995
SELECT hex(c1),hex(c2) FROM t5;
 
16996
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16997
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
16998
--sorted_result
 
16999
SELECT hex(c1),hex(c2) FROM t5;
 
17000
 
 
17001
# Update using eq_ref
 
17002
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17003
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17004
 
 
17005
# Droping the tables
 
17006
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
17007
 
 
17008
####Checking the bit values####
 
17009
# Produces different output for different platform
 
17010
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
17011
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<4);
 
17012
######### INSERT/SELECT######### 
 
17013
 
 
17014
#### Insert and select 4 bit data into the table####
 
17015
CREATE TABLE t1(c1 BIT(4));
 
17016
CREATE TABLE t2(c1 BIT(4), c2 BIT(4), c3 BIT(4));
 
17017
let $i=4;
 
17018
while($i){
 
17019
let $j=$i/2;
 
17020
eval set @v1=$i;
 
17021
eval set @v2=$j;
 
17022
set @v3=repeat('1',@v1);
 
17023
let $STR0= query_get_value(select @v3 as I,I,1);
 
17024
eval INSERT INTO t1 VALUES (b'$STR0');
 
17025
set @v3=repeat('0',@v1);
 
17026
let $STR1= query_get_value(select @v3 as I,I,1);
 
17027
eval INSERT INTO t1 VALUES (b'$STR1');
 
17028
set @v3=repeat('01',@v2);
 
17029
let $STR2= query_get_value(select @v3 as I,I,1);
 
17030
eval INSERT INTO t1 VALUES (b'$STR2');
 
17031
set @v3=repeat('10',@v2);
 
17032
let $STR3= query_get_value(select @v3 as I,I,1);
 
17033
eval INSERT INTO t1 VALUES (b'$STR3');
 
17034
set @v3=repeat('1',@v1);
 
17035
set @v4=repeat('01',@v2);
 
17036
set @v5=repeat('10',@v2);
 
17037
let $STR0= query_get_value(select @v3 as I,I,1);
 
17038
let $STR2= query_get_value(select @v4 as I,I,1);
 
17039
let $STR3= query_get_value(select @v5 as I,I,1);
 
17040
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
17041
dec $i;
 
17042
}
 
17043
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
17044
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
17045
--sorted_result
 
17046
SELECT HEX(c1) FROM t1;
 
17047
--sorted_result
 
17048
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
17049
--sorted_result
 
17050
SELECT OCT(c1) FROM t1;
 
17051
--sorted_result
 
17052
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
17053
--sorted_result
 
17054
SELECT BIN(c1) FROM t1;
 
17055
--sorted_result
 
17056
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
17057
--sorted_result
 
17058
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
17059
--sorted_result
 
17060
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
17061
--sorted_result
 
17062
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
17063
--sorted_result
 
17064
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
17065
--sorted_result
 
17066
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
17067
--sorted_result
 
17068
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
17069
--sorted_result
 
17070
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
17071
--error 1439
 
17072
CREATE TABLE t3 (c1 BIT(65));
 
17073
# Checking for bug #9571
 
17074
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
17075
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
17076
CREATE TABLE t5(c1  BIT(4) NOT NULL PRIMARY KEY, c2  BIT(4));
 
17077
CREATE TABLE t6(c1  BIT(4), c2  BIT(4));
 
17078
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17079
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17080
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17081
--sorted_result
 
17082
SELECT HEX(c1),HEX(c2) FROM t5;
 
17083
 
 
17084
#Insert permissible NULLs
 
17085
INSERT IGNORE INTO t5 VALUES(96,null);
 
17086
INSERT INTO t6 VALUES(null,null);
 
17087
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
17088
## Full table scan ##
 
17089
--sorted_result
 
17090
SELECT HEX(c1),HEX(c2) FROM t5;
 
17091
--sorted_result
 
17092
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
17093
--sorted_result
 
17094
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
17095
## Forward index scan, covering ##
 
17096
--sorted_result
 
17097
SELECT bin(c1) FROM t5;
 
17098
## Backward index scan, covering ##
 
17099
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
17100
## Forward index scan, non-covering ##
 
17101
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
17102
## Backward index scan, non-covering ##
 
17103
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
17104
## ref type access
 
17105
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1;
 
17106
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 LIMIT 2;
 
17107
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC ;
 
17108
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
17109
## Range access, ordered ##
 
17110
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 ;
 
17111
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 ;
 
17112
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 LIMIT 2 ;
 
17113
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 ;
 
17114
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 LIMIT 2 ;
 
17115
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1;
 
17116
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 LIMIT 2 ;
 
17117
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
17118
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 LIMIT 2 ;
 
17119
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1;
 
17120
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 LIMIT 2 ;
 
17121
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1;
 
17122
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64'  ORDER BY c1 LIMIT 2 ;
 
17123
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1;
 
17124
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 LIMIT 2 ;
 
17125
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 ;
 
17126
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 LIMIT 2 ;
 
17127
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
17128
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
17129
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
17130
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
17131
## Range access, backwards scan ##
 
17132
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4'  ORDER BY c1 DESC;
 
17133
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '4' ORDER BY c1 DESC LIMIT 2 ;
 
17134
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4'  ORDER BY c1 DESC;
 
17135
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '4' ORDER BY c1 DESC LIMIT 2 ;
 
17136
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC ;
 
17137
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' ORDER BY c1 DESC LIMIT 2 ;
 
17138
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'  ORDER BY c1 DESC;
 
17139
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '4'   ORDER BY c1 DESC LIMIT 2 ;
 
17140
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC ;
 
17141
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '4' ORDER BY c1 DESC LIMIT 2 ;
 
17142
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4'  ORDER BY c1 DESC ;
 
17143
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'4' ORDER BY c1 DESC LIMIT 2 ;
 
17144
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC;
 
17145
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '4' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
17146
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC ;
 
17147
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '4' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
17148
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '4' AND c1 < '64' AND c2 = '4' ORDER BY c1 DESC LIMIT 2 ;
 
17149
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
17150
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
17151
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
17152
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
17153
#Inserting different charachers
 
17154
CREATE TABLE t7(c1  BIT(4));
 
17155
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
17156
--sorted_result
 
17157
SELECT * FROM t7;
 
17158
############# UPDATE ###########
 
17159
 
 
17160
# Update order by limit
 
17161
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17162
 
 
17163
 
 
17164
# Update with arithmetic operations 
 
17165
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
17166
 
 
17167
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
17168
 
 
17169
 
 
17170
# Update with NULL ( NULL to number & number to NULL)
 
17171
UPDATE t6 SET c2=NULL WHERE c1=23;
 
17172
 
 
17173
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
17174
 
 
17175
 
 
17176
# Update range values
 
17177
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
17178
 
 
17179
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
17180
 
 
17181
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
17182
 
 
17183
 
 
17184
# Update outside range would be clipped to closest endpoints
 
17185
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
17186
 
 
17187
UPDATE t6 SET c2=-1 WHERE c1=94;
 
17188
 
 
17189
 
 
17190
# Update ignore on bad null error
 
17191
--sorted_result
 
17192
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
17193
SET SQL_MODE=STRICT_ALL_TABLES;
 
17194
--error ER_BAD_NULL_ERROR
 
17195
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
17196
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
17197
--sorted_result
 
17198
SELECT hex(c1),hex(c2) FROM t5;
 
17199
SET SQL_MODE=DEFAULT;
 
17200
 
 
17201
#Multi table update
 
17202
--disable_warnings
 
17203
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17204
--enable_warnings
 
17205
--sorted_result
 
17206
SELECT hex(c1),hex(c2) FROM t5;
 
17207
 
 
17208
 
 
17209
# Update using various access methods
 
17210
TRUNCATE t5;
 
17211
TRUNCATE t6;
 
17212
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17213
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17214
 
 
17215
# Update using Const
 
17216
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17217
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
17218
--sorted_result
 
17219
SELECT hex(c1),hex(c2) FROM t5;
 
17220
 
 
17221
# Update using range
 
17222
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17223
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
17224
--sorted_result
 
17225
SELECT hex(c1),hex(c2) FROM t5;
 
17226
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17227
--disable_warnings
 
17228
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
17229
--enable_warnings
 
17230
--sorted_result
 
17231
SELECT hex(c1),hex(c2) FROM t5;
 
17232
 
 
17233
# Update using eq_ref
 
17234
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17235
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17236
 
 
17237
############# DELETE ###########
 
17238
 
 
17239
TRUNCATE t5;
 
17240
TRUNCATE t6;
 
17241
 
 
17242
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17243
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17244
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
17245
 
 
17246
# Delete by order by limit
 
17247
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17248
 
 
17249
 
 
17250
# Delete rows with NULL column
 
17251
DELETE FROM t6 WHERE c2=NULL;
 
17252
 
 
17253
 
 
17254
# Delete with range values 
 
17255
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
17256
 
 
17257
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
17258
 
 
17259
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
17260
 
 
17261
 
 
17262
#Multi table delete
 
17263
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17264
--sorted_result
 
17265
SELECT hex(c1),hex(c2) FROM t5;
 
17266
 
 
17267
 
 
17268
# Delete using various access methods
 
17269
TRUNCATE t5;
 
17270
TRUNCATE t6;
 
17271
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17272
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17273
 
 
17274
# Update using Const
 
17275
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17276
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
17277
--sorted_result
 
17278
SELECT hex(c1),hex(c2) FROM t5;
 
17279
 
 
17280
# Update using range
 
17281
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17282
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17283
--sorted_result
 
17284
SELECT hex(c1),hex(c2) FROM t5;
 
17285
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17286
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17287
--sorted_result
 
17288
SELECT hex(c1),hex(c2) FROM t5;
 
17289
 
 
17290
# Update using eq_ref
 
17291
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17292
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17293
 
 
17294
# Droping the tables
 
17295
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
17296
 
 
17297
####Checking the bit values####
 
17298
# Produces different output for different platform
 
17299
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
17300
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<8);
 
17301
######### INSERT/SELECT######### 
 
17302
 
 
17303
#### Insert and select 8 bit data into the table####
 
17304
CREATE TABLE t1(c1 BIT(8));
 
17305
CREATE TABLE t2(c1 BIT(8), c2 BIT(8), c3 BIT(8));
 
17306
let $i=8;
 
17307
while($i){
 
17308
let $j=$i/2;
 
17309
eval set @v1=$i;
 
17310
eval set @v2=$j;
 
17311
set @v3=repeat('1',@v1);
 
17312
let $STR0= query_get_value(select @v3 as I,I,1);
 
17313
eval INSERT INTO t1 VALUES (b'$STR0');
 
17314
set @v3=repeat('0',@v1);
 
17315
let $STR1= query_get_value(select @v3 as I,I,1);
 
17316
eval INSERT INTO t1 VALUES (b'$STR1');
 
17317
set @v3=repeat('01',@v2);
 
17318
let $STR2= query_get_value(select @v3 as I,I,1);
 
17319
eval INSERT INTO t1 VALUES (b'$STR2');
 
17320
set @v3=repeat('10',@v2);
 
17321
let $STR3= query_get_value(select @v3 as I,I,1);
 
17322
eval INSERT INTO t1 VALUES (b'$STR3');
 
17323
set @v3=repeat('1',@v1);
 
17324
set @v4=repeat('01',@v2);
 
17325
set @v5=repeat('10',@v2);
 
17326
let $STR0= query_get_value(select @v3 as I,I,1);
 
17327
let $STR2= query_get_value(select @v4 as I,I,1);
 
17328
let $STR3= query_get_value(select @v5 as I,I,1);
 
17329
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
17330
dec $i;
 
17331
}
 
17332
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
17333
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
17334
--sorted_result
 
17335
SELECT HEX(c1) FROM t1;
 
17336
--sorted_result
 
17337
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
17338
--sorted_result
 
17339
SELECT OCT(c1) FROM t1;
 
17340
--sorted_result
 
17341
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
17342
--sorted_result
 
17343
SELECT BIN(c1) FROM t1;
 
17344
--sorted_result
 
17345
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
17346
--sorted_result
 
17347
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
17348
--sorted_result
 
17349
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
17350
--sorted_result
 
17351
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
17352
--sorted_result
 
17353
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
17354
--sorted_result
 
17355
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
17356
--sorted_result
 
17357
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
17358
--sorted_result
 
17359
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
17360
--error 1439
 
17361
CREATE TABLE t3 (c1 BIT(65));
 
17362
# Checking for bug #9571
 
17363
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
17364
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
17365
CREATE TABLE t5(c1  BIT(8) NOT NULL PRIMARY KEY, c2  BIT(8));
 
17366
CREATE TABLE t6(c1  BIT(8), c2  BIT(8));
 
17367
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17368
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17369
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17370
--sorted_result
 
17371
SELECT HEX(c1),HEX(c2) FROM t5;
 
17372
 
 
17373
#Insert permissible NULLs
 
17374
INSERT IGNORE INTO t5 VALUES(96,null);
 
17375
INSERT INTO t6 VALUES(null,null);
 
17376
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
17377
## Full table scan ##
 
17378
--sorted_result
 
17379
SELECT HEX(c1),HEX(c2) FROM t5;
 
17380
--sorted_result
 
17381
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
17382
--sorted_result
 
17383
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
17384
## Forward index scan, covering ##
 
17385
--sorted_result
 
17386
SELECT bin(c1) FROM t5;
 
17387
## Backward index scan, covering ##
 
17388
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
17389
## Forward index scan, non-covering ##
 
17390
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
17391
## Backward index scan, non-covering ##
 
17392
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
17393
## ref type access
 
17394
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1;
 
17395
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 LIMIT 2;
 
17396
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC ;
 
17397
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
17398
## Range access, ordered ##
 
17399
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 ;
 
17400
 
 
17401
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8'  ORDER BY c1 LIMIT 2 ;
 
17402
 
 
17403
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 LIMIT 2 ;
 
17404
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1;
 
17405
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 LIMIT 2 ;
 
17406
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
17407
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 LIMIT 2 ;
 
17408
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1;
 
17409
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 LIMIT 2 ;
 
17410
 
 
17411
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64'  ORDER BY c1 LIMIT 2 ;
 
17412
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1;
 
17413
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 LIMIT 2 ;
 
17414
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 ;
 
17415
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 LIMIT 2 ;
 
17416
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
17417
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
17418
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
17419
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
17420
## Range access, backwards scan ##
 
17421
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8'  ORDER BY c1 DESC;
 
17422
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '8' ORDER BY c1 DESC LIMIT 2 ;
 
17423
 
 
17424
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '8' ORDER BY c1 DESC LIMIT 2 ;
 
17425
 
 
17426
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' ORDER BY c1 DESC LIMIT 2 ;
 
17427
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'  ORDER BY c1 DESC;
 
17428
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '8'   ORDER BY c1 DESC LIMIT 2 ;
 
17429
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC ;
 
17430
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '8' ORDER BY c1 DESC LIMIT 2 ;
 
17431
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8'  ORDER BY c1 DESC ;
 
17432
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'8' ORDER BY c1 DESC LIMIT 2 ;
 
17433
 
 
17434
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '8' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
17435
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC ;
 
17436
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '8' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
17437
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '8' AND c1 < '64' AND c2 = '8' ORDER BY c1 DESC LIMIT 2 ;
 
17438
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
17439
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
17440
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
17441
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
17442
#Inserting different charachers
 
17443
CREATE TABLE t7(c1  BIT(8));
 
17444
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
17445
--sorted_result
 
17446
SELECT * FROM t7;
 
17447
############# UPDATE ###########
 
17448
 
 
17449
# Update order by limit
 
17450
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17451
 
 
17452
 
 
17453
# Update with arithmetic operations 
 
17454
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
17455
 
 
17456
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
17457
 
 
17458
 
 
17459
# Update with NULL ( NULL to number & number to NULL)
 
17460
UPDATE t6 SET c2=NULL WHERE c1=23;
 
17461
 
 
17462
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
17463
 
 
17464
 
 
17465
# Update range values
 
17466
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
17467
 
 
17468
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
17469
 
 
17470
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
17471
 
 
17472
 
 
17473
# Update outside range would be clipped to closest endpoints
 
17474
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
17475
 
 
17476
UPDATE t6 SET c2=-1 WHERE c1=94;
 
17477
 
 
17478
 
 
17479
# Update ignore on bad null error
 
17480
--sorted_result
 
17481
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
17482
SET SQL_MODE=STRICT_ALL_TABLES;
 
17483
--error ER_BAD_NULL_ERROR
 
17484
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
17485
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
17486
--sorted_result
 
17487
SELECT hex(c1),hex(c2) FROM t5;
 
17488
SET SQL_MODE=DEFAULT;
 
17489
 
 
17490
#Multi table update
 
17491
--disable_warnings
 
17492
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17493
--enable_warnings
 
17494
--sorted_result
 
17495
SELECT hex(c1),hex(c2) FROM t5;
 
17496
 
 
17497
 
 
17498
# Update using various access methods
 
17499
TRUNCATE t5;
 
17500
TRUNCATE t6;
 
17501
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17502
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17503
 
 
17504
# Update using Const
 
17505
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17506
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
17507
--sorted_result
 
17508
SELECT hex(c1),hex(c2) FROM t5;
 
17509
 
 
17510
# Update using range
 
17511
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17512
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
17513
--sorted_result
 
17514
SELECT hex(c1),hex(c2) FROM t5;
 
17515
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17516
--disable_warnings
 
17517
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
17518
--enable_warnings
 
17519
--sorted_result
 
17520
SELECT hex(c1),hex(c2) FROM t5;
 
17521
 
 
17522
# Update using eq_ref
 
17523
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17524
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17525
 
 
17526
############# DELETE ###########
 
17527
 
 
17528
TRUNCATE t5;
 
17529
TRUNCATE t6;
 
17530
 
 
17531
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17532
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17533
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
17534
 
 
17535
# Delete by order by limit
 
17536
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17537
 
 
17538
 
 
17539
# Delete rows with NULL column
 
17540
DELETE FROM t6 WHERE c2=NULL;
 
17541
 
 
17542
 
 
17543
# Delete with range values 
 
17544
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
17545
 
 
17546
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
17547
 
 
17548
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
17549
 
 
17550
 
 
17551
#Multi table delete
 
17552
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17553
--sorted_result
 
17554
SELECT hex(c1),hex(c2) FROM t5;
 
17555
 
 
17556
 
 
17557
# Delete using various access methods
 
17558
TRUNCATE t5;
 
17559
TRUNCATE t6;
 
17560
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17561
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17562
 
 
17563
# Update using Const
 
17564
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17565
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
17566
--sorted_result
 
17567
SELECT hex(c1),hex(c2) FROM t5;
 
17568
 
 
17569
# Update using range
 
17570
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17571
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17572
--sorted_result
 
17573
SELECT hex(c1),hex(c2) FROM t5;
 
17574
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17575
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17576
--sorted_result
 
17577
SELECT hex(c1),hex(c2) FROM t5;
 
17578
 
 
17579
# Update using eq_ref
 
17580
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17581
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17582
 
 
17583
# Droping the tables
 
17584
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
17585
 
 
17586
####Checking the bit values####
 
17587
# Produces different output for different platform
 
17588
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
17589
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<16);
 
17590
######### INSERT/SELECT######### 
 
17591
 
 
17592
#### Insert and select 16 bit data into the table####
 
17593
CREATE TABLE t1(c1 BIT(16));
 
17594
CREATE TABLE t2(c1 BIT(16), c2 BIT(16), c3 BIT(16));
 
17595
let $i=16;
 
17596
while($i){
 
17597
let $j=$i/2;
 
17598
eval set @v1=$i;
 
17599
eval set @v2=$j;
 
17600
set @v3=repeat('1',@v1);
 
17601
let $STR0= query_get_value(select @v3 as I,I,1);
 
17602
eval INSERT INTO t1 VALUES (b'$STR0');
 
17603
set @v3=repeat('0',@v1);
 
17604
let $STR1= query_get_value(select @v3 as I,I,1);
 
17605
eval INSERT INTO t1 VALUES (b'$STR1');
 
17606
set @v3=repeat('01',@v2);
 
17607
let $STR2= query_get_value(select @v3 as I,I,1);
 
17608
eval INSERT INTO t1 VALUES (b'$STR2');
 
17609
set @v3=repeat('10',@v2);
 
17610
let $STR3= query_get_value(select @v3 as I,I,1);
 
17611
eval INSERT INTO t1 VALUES (b'$STR3');
 
17612
set @v3=repeat('1',@v1);
 
17613
set @v4=repeat('01',@v2);
 
17614
set @v5=repeat('10',@v2);
 
17615
let $STR0= query_get_value(select @v3 as I,I,1);
 
17616
let $STR2= query_get_value(select @v4 as I,I,1);
 
17617
let $STR3= query_get_value(select @v5 as I,I,1);
 
17618
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
17619
dec $i;
 
17620
}
 
17621
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
17622
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
17623
--sorted_result
 
17624
SELECT HEX(c1) FROM t1;
 
17625
--sorted_result
 
17626
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
17627
--sorted_result
 
17628
SELECT OCT(c1) FROM t1;
 
17629
--sorted_result
 
17630
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
17631
--sorted_result
 
17632
SELECT BIN(c1) FROM t1;
 
17633
--sorted_result
 
17634
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
17635
--sorted_result
 
17636
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
17637
--sorted_result
 
17638
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
17639
--sorted_result
 
17640
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
17641
--sorted_result
 
17642
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
17643
--sorted_result
 
17644
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
17645
--sorted_result
 
17646
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
17647
--sorted_result
 
17648
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
17649
--error 1439
 
17650
CREATE TABLE t3 (c1 BIT(65));
 
17651
# Checking for bug #9571
 
17652
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
17653
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
17654
CREATE TABLE t5(c1  BIT(16) NOT NULL PRIMARY KEY, c2  BIT(16));
 
17655
CREATE TABLE t6(c1  BIT(16), c2  BIT(16));
 
17656
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17657
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17658
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17659
--sorted_result
 
17660
SELECT HEX(c1),HEX(c2) FROM t5;
 
17661
 
 
17662
#Insert permissible NULLs
 
17663
INSERT IGNORE INTO t5 VALUES(96,null);
 
17664
INSERT INTO t6 VALUES(null,null);
 
17665
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
17666
## Full table scan ##
 
17667
--sorted_result
 
17668
SELECT HEX(c1),HEX(c2) FROM t5;
 
17669
--sorted_result
 
17670
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
17671
--sorted_result
 
17672
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
17673
## Forward index scan, covering ##
 
17674
--sorted_result
 
17675
SELECT bin(c1) FROM t5;
 
17676
## Backward index scan, covering ##
 
17677
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
17678
## Forward index scan, non-covering ##
 
17679
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
17680
## Backward index scan, non-covering ##
 
17681
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
17682
## ref type access
 
17683
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1;
 
17684
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 LIMIT 2;
 
17685
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC ;
 
17686
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
17687
## Range access, ordered ##
 
17688
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 ;
 
17689
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 ;
 
17690
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 LIMIT 2 ;
 
17691
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 ;
 
17692
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 LIMIT 2 ;
 
17693
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1;
 
17694
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 LIMIT 2 ;
 
17695
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
17696
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 LIMIT 2 ;
 
17697
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1;
 
17698
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 LIMIT 2 ;
 
17699
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1;
 
17700
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64'  ORDER BY c1 LIMIT 2 ;
 
17701
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1;
 
17702
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 LIMIT 2 ;
 
17703
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 ;
 
17704
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 LIMIT 2 ;
 
17705
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
17706
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
17707
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
17708
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
17709
## Range access, backwards scan ##
 
17710
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16'  ORDER BY c1 DESC;
 
17711
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '16' ORDER BY c1 DESC LIMIT 2 ;
 
17712
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16'  ORDER BY c1 DESC;
 
17713
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '16' ORDER BY c1 DESC LIMIT 2 ;
 
17714
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC ;
 
17715
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' ORDER BY c1 DESC LIMIT 2 ;
 
17716
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'  ORDER BY c1 DESC;
 
17717
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '16'   ORDER BY c1 DESC LIMIT 2 ;
 
17718
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC ;
 
17719
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '16' ORDER BY c1 DESC LIMIT 2 ;
 
17720
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16'  ORDER BY c1 DESC ;
 
17721
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'16' ORDER BY c1 DESC LIMIT 2 ;
 
17722
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC;
 
17723
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '16' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
17724
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC ;
 
17725
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '16' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
17726
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '16' AND c1 < '64' AND c2 = '16' ORDER BY c1 DESC LIMIT 2 ;
 
17727
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
17728
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
17729
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
17730
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
17731
#Inserting different charachers
 
17732
CREATE TABLE t7(c1  BIT(16));
 
17733
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
17734
--sorted_result
 
17735
SELECT * FROM t7;
 
17736
############# UPDATE ###########
 
17737
 
 
17738
# Update order by limit
 
17739
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17740
 
 
17741
 
 
17742
# Update with arithmetic operations 
 
17743
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
17744
 
 
17745
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
17746
 
 
17747
 
 
17748
# Update with NULL ( NULL to number & number to NULL)
 
17749
UPDATE t6 SET c2=NULL WHERE c1=23;
 
17750
 
 
17751
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
17752
 
 
17753
 
 
17754
# Update range values
 
17755
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
17756
 
 
17757
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
17758
 
 
17759
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
17760
 
 
17761
 
 
17762
# Update outside range would be clipped to closest endpoints
 
17763
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
17764
 
 
17765
UPDATE t6 SET c2=-1 WHERE c1=94;
 
17766
 
 
17767
 
 
17768
# Update ignore on bad null error
 
17769
--sorted_result
 
17770
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
17771
SET SQL_MODE=STRICT_ALL_TABLES;
 
17772
--error ER_BAD_NULL_ERROR
 
17773
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
17774
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
17775
--sorted_result
 
17776
SELECT hex(c1),hex(c2) FROM t5;
 
17777
SET SQL_MODE=DEFAULT;
 
17778
 
 
17779
#Multi table update
 
17780
--disable_warnings
 
17781
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17782
--enable_warnings
 
17783
--sorted_result
 
17784
SELECT hex(c1),hex(c2) FROM t5;
 
17785
 
 
17786
 
 
17787
# Update using various access methods
 
17788
TRUNCATE t5;
 
17789
TRUNCATE t6;
 
17790
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17791
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17792
 
 
17793
# Update using Const
 
17794
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17795
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
17796
--sorted_result
 
17797
SELECT hex(c1),hex(c2) FROM t5;
 
17798
 
 
17799
# Update using range
 
17800
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17801
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
17802
--sorted_result
 
17803
SELECT hex(c1),hex(c2) FROM t5;
 
17804
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17805
--disable_warnings
 
17806
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
17807
--enable_warnings
 
17808
--sorted_result
 
17809
SELECT hex(c1),hex(c2) FROM t5;
 
17810
 
 
17811
# Update using eq_ref
 
17812
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17813
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17814
 
 
17815
############# DELETE ###########
 
17816
 
 
17817
TRUNCATE t5;
 
17818
TRUNCATE t6;
 
17819
 
 
17820
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17821
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17822
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
17823
 
 
17824
# Delete by order by limit
 
17825
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
17826
 
 
17827
 
 
17828
# Delete rows with NULL column
 
17829
DELETE FROM t6 WHERE c2=NULL;
 
17830
 
 
17831
 
 
17832
# Delete with range values 
 
17833
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
17834
 
 
17835
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
17836
 
 
17837
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
17838
 
 
17839
 
 
17840
#Multi table delete
 
17841
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
17842
--sorted_result
 
17843
SELECT hex(c1),hex(c2) FROM t5;
 
17844
 
 
17845
 
 
17846
# Delete using various access methods
 
17847
TRUNCATE t5;
 
17848
TRUNCATE t6;
 
17849
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17850
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
17851
 
 
17852
# Update using Const
 
17853
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
17854
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
17855
--sorted_result
 
17856
SELECT hex(c1),hex(c2) FROM t5;
 
17857
 
 
17858
# Update using range
 
17859
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17860
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
17861
--sorted_result
 
17862
SELECT hex(c1),hex(c2) FROM t5;
 
17863
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17864
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
17865
--sorted_result
 
17866
SELECT hex(c1),hex(c2) FROM t5;
 
17867
 
 
17868
# Update using eq_ref
 
17869
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17870
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
17871
 
 
17872
# Droping the tables
 
17873
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
17874
 
 
17875
####Checking the bit values####
 
17876
# Produces different output for different platform
 
17877
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
17878
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<32);
 
17879
######### INSERT/SELECT######### 
 
17880
 
 
17881
#### Insert and select 32 bit data into the table####
 
17882
CREATE TABLE t1(c1 BIT(32));
 
17883
CREATE TABLE t2(c1 BIT(32), c2 BIT(32), c3 BIT(32));
 
17884
let $i=32;
 
17885
while($i){
 
17886
let $j=$i/2;
 
17887
eval set @v1=$i;
 
17888
eval set @v2=$j;
 
17889
set @v3=repeat('1',@v1);
 
17890
let $STR0= query_get_value(select @v3 as I,I,1);
 
17891
eval INSERT INTO t1 VALUES (b'$STR0');
 
17892
set @v3=repeat('0',@v1);
 
17893
let $STR1= query_get_value(select @v3 as I,I,1);
 
17894
eval INSERT INTO t1 VALUES (b'$STR1');
 
17895
set @v3=repeat('01',@v2);
 
17896
let $STR2= query_get_value(select @v3 as I,I,1);
 
17897
eval INSERT INTO t1 VALUES (b'$STR2');
 
17898
set @v3=repeat('10',@v2);
 
17899
let $STR3= query_get_value(select @v3 as I,I,1);
 
17900
eval INSERT INTO t1 VALUES (b'$STR3');
 
17901
set @v3=repeat('1',@v1);
 
17902
set @v4=repeat('01',@v2);
 
17903
set @v5=repeat('10',@v2);
 
17904
let $STR0= query_get_value(select @v3 as I,I,1);
 
17905
let $STR2= query_get_value(select @v4 as I,I,1);
 
17906
let $STR3= query_get_value(select @v5 as I,I,1);
 
17907
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
17908
dec $i;
 
17909
}
 
17910
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
17911
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
17912
--sorted_result
 
17913
SELECT HEX(c1) FROM t1;
 
17914
--sorted_result
 
17915
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
17916
--sorted_result
 
17917
SELECT OCT(c1) FROM t1;
 
17918
--sorted_result
 
17919
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
17920
--sorted_result
 
17921
SELECT BIN(c1) FROM t1;
 
17922
--sorted_result
 
17923
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
17924
--sorted_result
 
17925
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
17926
--sorted_result
 
17927
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
17928
--sorted_result
 
17929
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
17930
--sorted_result
 
17931
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
17932
--sorted_result
 
17933
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
17934
--sorted_result
 
17935
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
17936
--sorted_result
 
17937
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
17938
--error 1439
 
17939
CREATE TABLE t3 (c1 BIT(65));
 
17940
# Checking for bug #9571
 
17941
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
17942
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
17943
CREATE TABLE t5(c1  BIT(32) NOT NULL PRIMARY KEY, c2  BIT(32));
 
17944
CREATE TABLE t6(c1  BIT(32), c2  BIT(32));
 
17945
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
17946
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17947
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
17948
--sorted_result
 
17949
SELECT HEX(c1),HEX(c2) FROM t5;
 
17950
 
 
17951
#Insert permissible NULLs
 
17952
INSERT IGNORE INTO t5 VALUES(96,null);
 
17953
INSERT INTO t6 VALUES(null,null);
 
17954
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
17955
## Full table scan ##
 
17956
--sorted_result
 
17957
SELECT HEX(c1),HEX(c2) FROM t5;
 
17958
--sorted_result
 
17959
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
17960
--sorted_result
 
17961
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
17962
## Forward index scan, covering ##
 
17963
--sorted_result
 
17964
SELECT bin(c1) FROM t5;
 
17965
## Backward index scan, covering ##
 
17966
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
17967
## Forward index scan, non-covering ##
 
17968
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
17969
## Backward index scan, non-covering ##
 
17970
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
17971
## ref type access
 
17972
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1;
 
17973
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 LIMIT 2;
 
17974
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC ;
 
17975
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
17976
## Range access, ordered ##
 
17977
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 ;
 
17978
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 ;
 
17979
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 LIMIT 2 ;
 
17980
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 ;
 
17981
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 LIMIT 2 ;
 
17982
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1;
 
17983
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 LIMIT 2 ;
 
17984
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
17985
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 LIMIT 2 ;
 
17986
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1;
 
17987
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 LIMIT 2 ;
 
17988
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1;
 
17989
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64'  ORDER BY c1 LIMIT 2 ;
 
17990
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1;
 
17991
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 LIMIT 2 ;
 
17992
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 ;
 
17993
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 LIMIT 2 ;
 
17994
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
17995
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
17996
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
17997
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
17998
## Range access, backwards scan ##
 
17999
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32'  ORDER BY c1 DESC;
 
18000
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '32' ORDER BY c1 DESC LIMIT 2 ;
 
18001
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32'  ORDER BY c1 DESC;
 
18002
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '32' ORDER BY c1 DESC LIMIT 2 ;
 
18003
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC ;
 
18004
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' ORDER BY c1 DESC LIMIT 2 ;
 
18005
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'  ORDER BY c1 DESC;
 
18006
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '32'   ORDER BY c1 DESC LIMIT 2 ;
 
18007
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC ;
 
18008
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '32' ORDER BY c1 DESC LIMIT 2 ;
 
18009
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32'  ORDER BY c1 DESC ;
 
18010
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'32' ORDER BY c1 DESC LIMIT 2 ;
 
18011
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC;
 
18012
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '32' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
18013
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC ;
 
18014
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '32' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
18015
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '32' AND c1 < '64' AND c2 = '32' ORDER BY c1 DESC LIMIT 2 ;
 
18016
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
18017
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
18018
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
18019
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
18020
#Inserting different charachers
 
18021
CREATE TABLE t7(c1  BIT(32));
 
18022
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
18023
--sorted_result
 
18024
SELECT * FROM t7;
 
18025
############# UPDATE ###########
 
18026
 
 
18027
# Update order by limit
 
18028
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
18029
 
 
18030
 
 
18031
# Update with arithmetic operations 
 
18032
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
18033
 
 
18034
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
18035
 
 
18036
 
 
18037
# Update with NULL ( NULL to number & number to NULL)
 
18038
UPDATE t6 SET c2=NULL WHERE c1=23;
 
18039
 
 
18040
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
18041
 
 
18042
 
 
18043
# Update range values
 
18044
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
18045
 
 
18046
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
18047
 
 
18048
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
18049
 
 
18050
 
 
18051
# Update outside range would be clipped to closest endpoints
 
18052
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
18053
 
 
18054
UPDATE t6 SET c2=-1 WHERE c1=94;
 
18055
 
 
18056
 
 
18057
# Update ignore on bad null error
 
18058
--sorted_result
 
18059
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
18060
SET SQL_MODE=STRICT_ALL_TABLES;
 
18061
--error ER_BAD_NULL_ERROR
 
18062
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
18063
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
18064
--sorted_result
 
18065
SELECT hex(c1),hex(c2) FROM t5;
 
18066
SET SQL_MODE=DEFAULT;
 
18067
 
 
18068
#Multi table update
 
18069
--disable_warnings
 
18070
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
18071
--enable_warnings
 
18072
--sorted_result
 
18073
SELECT hex(c1),hex(c2) FROM t5;
 
18074
 
 
18075
 
 
18076
# Update using various access methods
 
18077
TRUNCATE t5;
 
18078
TRUNCATE t6;
 
18079
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18080
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18081
 
 
18082
# Update using Const
 
18083
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
18084
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
18085
--sorted_result
 
18086
SELECT hex(c1),hex(c2) FROM t5;
 
18087
 
 
18088
# Update using range
 
18089
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18090
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
18091
--sorted_result
 
18092
SELECT hex(c1),hex(c2) FROM t5;
 
18093
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18094
--disable_warnings
 
18095
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
18096
--enable_warnings
 
18097
--sorted_result
 
18098
SELECT hex(c1),hex(c2) FROM t5;
 
18099
 
 
18100
# Update using eq_ref
 
18101
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18102
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18103
 
 
18104
############# DELETE ###########
 
18105
 
 
18106
TRUNCATE t5;
 
18107
TRUNCATE t6;
 
18108
 
 
18109
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
18110
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
18111
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
18112
 
 
18113
# Delete by order by limit
 
18114
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
18115
 
 
18116
 
 
18117
# Delete rows with NULL column
 
18118
DELETE FROM t6 WHERE c2=NULL;
 
18119
 
 
18120
 
 
18121
# Delete with range values 
 
18122
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
18123
 
 
18124
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
18125
 
 
18126
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
18127
 
 
18128
 
 
18129
#Multi table delete
 
18130
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
18131
--sorted_result
 
18132
SELECT hex(c1),hex(c2) FROM t5;
 
18133
 
 
18134
 
 
18135
# Delete using various access methods
 
18136
TRUNCATE t5;
 
18137
TRUNCATE t6;
 
18138
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18139
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18140
 
 
18141
# Update using Const
 
18142
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
18143
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
18144
--sorted_result
 
18145
SELECT hex(c1),hex(c2) FROM t5;
 
18146
 
 
18147
# Update using range
 
18148
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18149
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18150
--sorted_result
 
18151
SELECT hex(c1),hex(c2) FROM t5;
 
18152
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18153
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18154
--sorted_result
 
18155
SELECT hex(c1),hex(c2) FROM t5;
 
18156
 
 
18157
# Update using eq_ref
 
18158
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18159
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18160
 
 
18161
# Droping the tables
 
18162
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
18163
 
 
18164
####Checking the bit values####
 
18165
# Produces different output for different platform
 
18166
#SELECT 0 + b'10101010101010101010101010101010101010101010101010101010101010101'; 
 
18167
SELECT 0 + (10101010101010101010101010101010101010101010101010101010101010101<<64);
 
18168
######### INSERT/SELECT######### 
 
18169
 
 
18170
#### Insert and select 64 bit data into the table####
 
18171
CREATE TABLE t1(c1 BIT(64));
 
18172
CREATE TABLE t2(c1 BIT(64), c2 BIT(64), c3 BIT(64));
 
18173
let $i=64;
 
18174
while($i){
 
18175
let $j=$i/2;
 
18176
eval set @v1=$i;
 
18177
eval set @v2=$j;
 
18178
set @v3=repeat('1',@v1);
 
18179
let $STR0= query_get_value(select @v3 as I,I,1);
 
18180
eval INSERT INTO t1 VALUES (b'$STR0');
 
18181
set @v3=repeat('0',@v1);
 
18182
let $STR1= query_get_value(select @v3 as I,I,1);
 
18183
eval INSERT INTO t1 VALUES (b'$STR1');
 
18184
set @v3=repeat('01',@v2);
 
18185
let $STR2= query_get_value(select @v3 as I,I,1);
 
18186
eval INSERT INTO t1 VALUES (b'$STR2');
 
18187
set @v3=repeat('10',@v2);
 
18188
let $STR3= query_get_value(select @v3 as I,I,1);
 
18189
eval INSERT INTO t1 VALUES (b'$STR3');
 
18190
set @v3=repeat('1',@v1);
 
18191
set @v4=repeat('01',@v2);
 
18192
set @v5=repeat('10',@v2);
 
18193
let $STR0= query_get_value(select @v3 as I,I,1);
 
18194
let $STR2= query_get_value(select @v4 as I,I,1);
 
18195
let $STR3= query_get_value(select @v5 as I,I,1);
 
18196
eval INSERT INTO t2 VALUES ("b'$STR0'","b'$STR2","b'$STR3'");
 
18197
dec $i;
 
18198
}
 
18199
INSERT INTO t1 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101');
 
18200
INSERT INTO t2 VALUES (b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101', b'10101010101010101010101010101010101010101010101010101010101010101');
 
18201
--sorted_result
 
18202
SELECT HEX(c1) FROM t1;
 
18203
--sorted_result
 
18204
SELECT HEX(c1),HEX(c2),HEX(c3) FROM t2;
 
18205
--sorted_result
 
18206
SELECT OCT(c1) FROM t1;
 
18207
--sorted_result
 
18208
SELECT OCT(c1),OCT(c2),OCT(c3) FROM t2;
 
18209
--sorted_result
 
18210
SELECT BIN(c1) FROM t1;
 
18211
--sorted_result
 
18212
SELECT BIN(c1),BIN(c2),BIN(c3) FROM t2;
 
18213
--sorted_result
 
18214
SELECT HEX(c1),OCT(c2),BIN(c3) FROM t2;
 
18215
--sorted_result
 
18216
SELECT HEX(c1+0),HEX(c2+1),HEX(c3+2) FROM t2;
 
18217
--sorted_result
 
18218
SELECT OCT(c1+0),OCT(c2+1),OCT(c3+2) FROM t2;
 
18219
--sorted_result
 
18220
SELECT BIN(c1+0),BIN(c2+1),BIN(c3+2) FROM t2;
 
18221
--sorted_result
 
18222
SELECT CONCAT(HEX(c1),HEX(c2),HEX(c3)) FROM t2;
 
18223
--sorted_result
 
18224
SELECT CONCAT(OCT(c1),OCT(c2),OCT(c3)) FROM t2;
 
18225
--sorted_result
 
18226
SELECT CONCAT(BIN(c1),BIN(c2),BIN(c3)) FROM t2;
 
18227
--error 1439
 
18228
CREATE TABLE t3 (c1 BIT(65));
 
18229
# Checking for bug #9571
 
18230
CREATE TABLE t4(i INT, b BIT NOT NULL);
 
18231
ALTER TABLE t4 ADD PRIMARY KEY (i);
 
18232
CREATE TABLE t5(c1  BIT(64) NOT NULL PRIMARY KEY, c2  BIT(64));
 
18233
CREATE TABLE t6(c1  BIT(64), c2  BIT(64));
 
18234
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
18235
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
18236
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
18237
--sorted_result
 
18238
SELECT HEX(c1),HEX(c2) FROM t5;
 
18239
 
 
18240
#Insert permissible NULLs
 
18241
INSERT IGNORE INTO t5 VALUES(96,null);
 
18242
INSERT INTO t6 VALUES(null,null);
 
18243
# Now select using various table access methods (full table scan, range scan, index scan etc.)
 
18244
## Full table scan ##
 
18245
--sorted_result
 
18246
SELECT HEX(c1),HEX(c2) FROM t5;
 
18247
--sorted_result
 
18248
SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t5;
 
18249
--sorted_result
 
18250
SELECT OCT(c2) FROM t5 WHERE c1 = 68;
 
18251
## Forward index scan, covering ##
 
18252
--sorted_result
 
18253
SELECT bin(c1) FROM t5;
 
18254
## Backward index scan, covering ##
 
18255
SELECT oct(c1) FROM t5 ORDER BY c1 DESC;
 
18256
## Forward index scan, non-covering ##
 
18257
SELECT hex(c1),hex(c2) FROM t5 ORDER BY c1 LIMIT 2 ;
 
18258
## Backward index scan, non-covering ##
 
18259
SELECT * FROM t5 ORDER BY c1 DESC LIMIT 2 /* comment7 */;
 
18260
## ref type access
 
18261
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1;
 
18262
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 LIMIT 2;
 
18263
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC ;
 
18264
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
18265
## Range access, ordered ##
 
18266
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 ;
 
18267
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 ;
 
18268
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 LIMIT 2 ;
 
18269
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 ;
 
18270
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 LIMIT 2 ;
 
18271
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1;
 
18272
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 LIMIT 2 ;
 
18273
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
18274
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 LIMIT 2 ;
 
18275
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1;
 
18276
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 LIMIT 2 ;
 
18277
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1;
 
18278
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64'  ORDER BY c1 LIMIT 2 ;
 
18279
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1;
 
18280
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 LIMIT 2 ;
 
18281
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 ;
 
18282
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 LIMIT 2 ;
 
18283
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1; 
 
18284
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 LIMIT 2 ;
 
18285
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 ;
 
18286
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 LIMIT 2 ;
 
18287
## Range access, backwards scan ##
 
18288
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64'  ORDER BY c1 DESC;
 
18289
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <> '64' ORDER BY c1 DESC LIMIT 2 ;
 
18290
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64'  ORDER BY c1 DESC;
 
18291
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >  '64' ORDER BY c1 DESC LIMIT 2 ;
 
18292
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC ;
 
18293
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' ORDER BY c1 DESC LIMIT 2 ;
 
18294
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'  ORDER BY c1 DESC;
 
18295
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <  '64'   ORDER BY c1 DESC LIMIT 2 ;
 
18296
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC ;
 
18297
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <= '64' ORDER BY c1 DESC LIMIT 2 ;
 
18298
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64'  ORDER BY c1 DESC ;
 
18299
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 <=>'64' ORDER BY c1 DESC LIMIT 2 ;
 
18300
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC;
 
18301
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 BETWEEN '64' AND '64' ORDER BY c1 DESC LIMIT 2 ;
 
18302
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC ;
 
18303
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IN ( '64' , '64' ) ORDER BY c1 DESC LIMIT 2 ;
 
18304
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 >= '64' AND c1 < '64' AND c2 = '64' ORDER BY c1 DESC LIMIT 2 ;
 
18305
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC ;
 
18306
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NULL ORDER BY c1 DESC LIMIT 2 ;
 
18307
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC ;
 
18308
SELECT hex(c1),hex(c2) FROM t5 WHERE c1 IS NOT NULL ORDER BY c1 DESC LIMIT 2 ;
 
18309
#Inserting different charachers
 
18310
CREATE TABLE t7(c1  BIT(64));
 
18311
INSERT INTO t7 VALUES('a'),('A'),('z'),('Z'),('!'),('`'),('@'),('#'),('~'),('$'),('%'),('^'),('&'),('*'),('('),(')'),('-'),('_'),('+'),('='),('1'),('9');
 
18312
--sorted_result
 
18313
SELECT * FROM t7;
 
18314
############# UPDATE ###########
 
18315
 
 
18316
# Update order by limit
 
18317
UPDATE t6 SET c1='10' WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
18318
 
 
18319
 
 
18320
# Update with arithmetic operations 
 
18321
UPDATE t6 SET c1=c2+c1 WHERE c2 < 100;
 
18322
 
 
18323
UPDATE t6 SET c2=c2+100 WHERE c1 >=100 ORDER BY c1 LIMIT 4;
 
18324
 
 
18325
 
 
18326
# Update with NULL ( NULL to number & number to NULL)
 
18327
UPDATE t6 SET c2=NULL WHERE c1=23;
 
18328
 
 
18329
UPDATE t6 SET c2=10 WHERE c2=NULL;
 
18330
 
 
18331
 
 
18332
# Update range values
 
18333
UPDATE t6 SET c1=12 WHERE c1=b'101' AND c2=178;
 
18334
 
 
18335
UPDATE t6 SET c1=c1+2,c2=c1+c2 WHERE c2=46 OR c2=b'1001';
 
18336
 
 
18337
UPDATE t6 SET c2=123 WHERE c1 IN (30,b'101',88);
 
18338
 
 
18339
 
 
18340
# Update outside range would be clipped to closest endpoints
 
18341
UPDATE t6 SET c1=b'1111111111111111111111111111111111111111111111111111111111111111111' WHERE c2 < 10; 
 
18342
 
 
18343
UPDATE t6 SET c2=-1 WHERE c1=94;
 
18344
 
 
18345
 
 
18346
# Update ignore on bad null error
 
18347
--sorted_result
 
18348
SELECT hex(c1) FROM t5 WHERE c1<>0;
 
18349
SET SQL_MODE=STRICT_ALL_TABLES;
 
18350
--error ER_BAD_NULL_ERROR
 
18351
UPDATE t5 SET c1=NULL WHERE c1<>0;
 
18352
UPDATE IGNORE t5 SET c1=NULL WHERE c1>100;
 
18353
--sorted_result
 
18354
SELECT hex(c1),hex(c2) FROM t5;
 
18355
SET SQL_MODE=DEFAULT;
 
18356
 
 
18357
#Multi table update
 
18358
--disable_warnings
 
18359
UPDATE t5,t6 SET t5.c2=t6.c1+t5.c1, t6.c2=t5.c1+t6.c1 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
18360
--enable_warnings
 
18361
--sorted_result
 
18362
SELECT hex(c1),hex(c2) FROM t5;
 
18363
 
 
18364
 
 
18365
# Update using various access methods
 
18366
TRUNCATE t5;
 
18367
TRUNCATE t6;
 
18368
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18369
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18370
 
 
18371
# Update using Const
 
18372
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
18373
UPDATE t5 SET c2='a' WHERE c1=6 AND c2=6;
 
18374
--sorted_result
 
18375
SELECT hex(c1),hex(c2) FROM t5;
 
18376
 
 
18377
# Update using range
 
18378
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18379
UPDATE t5 SET c2=13 where c1 BETWEEN 5 AND 9;
 
18380
--sorted_result
 
18381
SELECT hex(c1),hex(c2) FROM t5;
 
18382
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18383
--disable_warnings
 
18384
UPDATE t5 SET c2=c2+10 WHERE c1 IN (b'001',b'101',b'111');
 
18385
--enable_warnings
 
18386
--sorted_result
 
18387
SELECT hex(c1),hex(c2) FROM t5;
 
18388
 
 
18389
# Update using eq_ref
 
18390
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18391
UPDATE t5,t6 SET t5.c2=t6.c1+t6.c2 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18392
 
 
18393
############# DELETE ###########
 
18394
 
 
18395
TRUNCATE t5;
 
18396
TRUNCATE t6;
 
18397
 
 
18398
#Borrowed from suite/ndb/t/ndb_bitfield.test
 
18399
INSERT IGNORE INTO t5 VALUES (95, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (69, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135);
 
18400
INSERT INTO t6 VALUES (94, 46), (31, 438), (61, 152), (78, 123), (88, 411), (122, 118), (0, 177),(75, 42), (108, 67), (79, 349), (59, 188), (68, 206), (49, 345), (118, 380),(111, 368), (94, 468), (56, 379), (77, 133), (29, 399), (9, 363), (23, 36),(116, 390), (119, 368), (87, 351), (123, 411), (24, 398), (34, 202), (28, 499),(30, 83), (5, 178), (60, 343), (4, 245), (104, 280), (106, 446), (127, 403),(44, 307), (68, 454), (57, 135),(null,23),(1,null),(null,null);
 
18401
 
 
18402
# Delete by order by limit
 
18403
DELETE FROM t6  WHERE c2 > 100 ORDER BY c2 LIMIT 1;
 
18404
 
 
18405
 
 
18406
# Delete rows with NULL column
 
18407
DELETE FROM t6 WHERE c2=NULL;
 
18408
 
 
18409
 
 
18410
# Delete with range values 
 
18411
DELETE FROM t6 WHERE c1=b'101' AND c2=178;
 
18412
 
 
18413
DELETE FROM t6  WHERE c2=46 OR c2=b'1001';
 
18414
 
 
18415
DELETE FROM t6 WHERE c1 IN (30,b'101',88);
 
18416
 
 
18417
 
 
18418
#Multi table delete
 
18419
DELETE t5,t6 FROM t5,t6 WHERE t5.c1 > 100 OR t6.c2 > 100;
 
18420
--sorted_result
 
18421
SELECT hex(c1),hex(c2) FROM t5;
 
18422
 
 
18423
 
 
18424
# Delete using various access methods
 
18425
TRUNCATE t5;
 
18426
TRUNCATE t6;
 
18427
INSERT IGNORE INTO t5 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18428
INSERT INTO t6 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10);
 
18429
 
 
18430
# Update using Const
 
18431
# EXPLAIN SELECT * FROM t5 WHERE c1=6 AND c2=6;
 
18432
DELETE FROM t5  WHERE c1=6 AND c2=6;
 
18433
--sorted_result
 
18434
SELECT hex(c1),hex(c2) FROM t5;
 
18435
 
 
18436
# Update using range
 
18437
# EXPLAIN SELECT * FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18438
DELETE FROM t5 WHERE c1 BETWEEN 5 AND 9;
 
18439
--sorted_result
 
18440
SELECT hex(c1),hex(c2) FROM t5;
 
18441
# EXPLAIN SELECT * FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18442
DELETE FROM t5 WHERE c1 IN (b'001',b'101',b'111');
 
18443
--sorted_result
 
18444
SELECT hex(c1),hex(c2) FROM t5;
 
18445
 
 
18446
# Update using eq_ref
 
18447
# EXPLAIN SELECT * FROM t5,t6 WHERE t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18448
DELETE t5,t6 FROM t5,t6 WHERE  t5.c1=t6.c1 AND t5.c2=t6.c2;
 
18449
 
 
18450
# Droping the tables
 
18451
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7;
 
18452