mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / suite / engines / iuds / t / insert_decimal.test
blob04ea80bc39bc7f72946af9ae0ea543644a9e914d
1 --disable_warnings
2 DROP TABLE IF EXISTS t1,t2;
3 --enable_warnings
5 ######## Running INSERT tests for DECIMAL ########
7 # Create tables
8 CREATE TABLE t1(c1 DECIMAL(10,5) UNSIGNED NOT NULL, c2 DECIMAL(10,5) SIGNED NULL, c3 DECIMAL, c4 INT, UNIQUE INDEX idx(c1,c2));
9 CREATE TABLE t2(c1 DECIMAL(10,0) SIGNED NOT NULL, c2 DECIMAL(10) UNSIGNED NULL, c3 DECIMAL, c4 INT);
11 # Test insert values, trailing zeroes are not stripped
12 INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
13 INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
15 # Test no approximation
16 INSERT INTO t1(c1) VALUES('12345.000009');
18 # Test insert max values
19 INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
20 INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
22 # Test insert outside max value, would be clipped to closest endpoint
23 --sorted_result
24 SELECT * FROM t1;
25 --error ER_DUP_ENTRY
26 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
27 DELETE FROM t1 WHERE c1='99999.99999' AND c2='-99999.99999';
28 --sorted_result
29 SELECT * FROM t1;
30 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
31 INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
33 # Test insert leading zero, +/- signs, overflow handling
34 insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
35 insert into t1 values ("-.1","-.1","-.1",13);
36 insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
37 insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
38 insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
39 insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
40 insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
41 insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
42 insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
43 insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
44 insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
46 # Now Select
47 --sorted_result
48 SELECT * FROM t1;
49 --sorted_result
50 SELECT * FROM t2;
51 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
52 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
53 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
54 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
55 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
56 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
58 # Select using various access methods
59 ## Full table scan ##
60 --sorted_result
61 SELECT * FROM t1;
62 --sorted_result
63 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
64 --sorted_result
65 SELECT * FROM t1 WHERE c3 = '0.0';
67 ## Forward index scan, covering ##
68 --sorted_result
69 SELECT c1,c2 FROM t1;
71 ## Backward index scan, covering ##
72 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
74 ## Forward index scan, non-covering ##
75 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
77 ## Backward index scan, non-covering ##
78 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
80 ## ref type access
81 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
82 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
83 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
84 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
86 ## Range access, ordered ##
87 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
88 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
89 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
90 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
91 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
92 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
93 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
94 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
95 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
96 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
97 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
98 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
99 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
100 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
101 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
102 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
103 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
104 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
105 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
106 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
107 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
108 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
110 ## Range access, backwards scan ##
111 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
112 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
113 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
114 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
115 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
116 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
117 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
118 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
119 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
120 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
121 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
122 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
123 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
124 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
125 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
126 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
127 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
128 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
129 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
130 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
131 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
132 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
133 ## Full table scan ##
134 --sorted_result
135 SELECT * FROM t1;
136 --sorted_result
137 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
138 --sorted_result
139 SELECT * FROM t1 WHERE c3 = '-0.0';
141 ## Forward index scan, covering ##
142 --sorted_result
143 SELECT c1,c2 FROM t1;
145 ## Backward index scan, covering ##
146 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
148 ## Forward index scan, non-covering ##
149 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
151 ## Backward index scan, non-covering ##
152 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
154 ## ref type access
155 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
156 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
157 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
158 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
160 ## Range access, ordered ##
161 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
162 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
163 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
164 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
165 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
166 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
167 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
168 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
169 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
170 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
171 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
172 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
173 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
174 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
175 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
176 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
177 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
178 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
179 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
180 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
181 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
182 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
184 ## Range access, backwards scan ##
185 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
186 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
187 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
188 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
189 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
190 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
191 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
192 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
193 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
194 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
195 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
196 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
197 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
198 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
199 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
200 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
201 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
202 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
203 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
204 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
205 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
206 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
207 ## Full table scan ##
208 --sorted_result
209 SELECT * FROM t1;
210 --sorted_result
211 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
212 --sorted_result
213 SELECT * FROM t1 WHERE c3 = '-0.0';
215 ## Forward index scan, covering ##
216 --sorted_result
217 SELECT c1,c2 FROM t1;
219 ## Backward index scan, covering ##
220 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
222 ## Forward index scan, non-covering ##
223 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
225 ## Backward index scan, non-covering ##
226 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
228 ## ref type access
229 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
230 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
231 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
232 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
234 ## Range access, ordered ##
235 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
236 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
237 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
238 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
239 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
240 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
241 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
242 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
243 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
244 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
245 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
246 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
247 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
248 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
249 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
250 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
251 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
252 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
253 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
254 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
255 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
256 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
258 ## Range access, backwards scan ##
259 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
260 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
261 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
262 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
263 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
264 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
265 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
266 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
267 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
268 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
269 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
270 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
271 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
272 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
273 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
274 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
275 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
276 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
277 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
278 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
279 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
280 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
282 # Using index for group-by
283 --sorted_result
284 SELECT c1 FROM t1 GROUP BY c1;
285 --sorted_result
286 SELECT DISTINCT c1 FROM t1;
287 --sorted_result
288 SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
290 # Test extremes
291 CREATE TABLE t5(c1 DECIMAL(65,0) UNSIGNED NOT NULL, c2 DECIMAL(65,0) SIGNED NULL, c3 DECIMAL, c4 INT, INDEX idx(c1,c2));
292 INSERT INTO t5 VALUES('1e+64','-1e+64','1e+64',1),('1e-64','-1e-64','1e-64',2);
293 INSERT INTO t5 VALUES('1.2e+65','-1.2e+65','1.2e+65',3),('1.2e-65','-1.2e-65','1.2e-65',4);
294 --sorted_result
295 SELECT * FROM t5;
296 DROP TABLE t5;
298 # Test encoding to various bytes
299 CREATE TABLE t5(c1 DECIMAL(18,9) UNSIGNED, c2 DECIMAL(18,9) SIGNED) /* requires 8 bytes */;
300 INSERT INTO t5 VALUES(123456789.123456789,-123456789.123456789);
301 --sorted_result
302 SELECT c1,c2 FROM t5;
303 ALTER TABLE t5 CHANGE c1 c1 DECIMAL(19,9) UNSIGNED, CHANGE c2 c2 DECIMAL(19,9) SIGNED /* requires 9 bytes */;
304 INSERT INTO t5 VALUES(1234567891.123456789,-1234567891.123456789);
305 --sorted_result
306 SELECT c1,c2 FROM t5;
307 ALTER TABLE t5 CHANGE c1 c1 DECIMAL(21,10) UNSIGNED, CHANGE c2 c2 DECIMAL(21,10) SIGNED /* requires 10 bytes */;
308 INSERT INTO t5 VALUES(12345678912.1234567891,-12345678912.1234567891);
309 --sorted_result
310 SELECT c1,c2 FROM t5;
311 ALTER TABLE t5 CHANGE c1 c1 DECIMAL(23,11) UNSIGNED, CHANGE c2 c2 DECIMAL(23,11) SIGNED /* requires 11 bytes */;
312 INSERT INTO t5 VALUES(123456789123.12345678912,-123456789123.12345678912);
313 --sorted_result
314 SELECT c1,c2 FROM t5;
315 ALTER TABLE t5 CHANGE c1 c1 DECIMAL(25,12) UNSIGNED, CHANGE c2 c2 DECIMAL(25,12) SIGNED /* requires 12 bytes */;
316 INSERT INTO t5 VALUES(1234567891234.123456789123,-1234567891234.123456789123);
317 --sorted_result
318 SELECT c1,c2 FROM t5;
319 SELECT SUM(c1),SUM(c2) FROM t5;
320 DROP TABLE t5;
322 # Test ROUND() and TRUNCATE()
323 CREATE TABLE t5(c1 DECIMAL(16,6), c2 tinyint);
324 INSERT INTO t5 VALUES(1.1325,3);
325 SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
326 DROP TABLE t5;
328 # Test wrong decimal types
329 --error ER_TOO_BIG_PRECISION
330 CREATE TABLE t7(c1 DECIMAL(66,0));
331 --error ER_M_BIGGER_THAN_D
332 CREATE TABLE t7(c1 DECIMAL(5,10));
333 DROP TABLE t1,t2;
335 ######## Running INSERT tests for FLOAT ########
337 # Create tables
338 CREATE TABLE t1(c1 FLOAT(10,5) UNSIGNED NOT NULL, c2 FLOAT(10,5) SIGNED NULL, c3 FLOAT, c4 INT, UNIQUE INDEX idx(c1,c2));
339 CREATE TABLE t2(c1 FLOAT(10,0) SIGNED NOT NULL, c2 FLOAT(10,0) UNSIGNED NULL, c3 FLOAT, c4 INT);
341 # Test insert values, trailing zeroes are not stripped
342 INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
343 INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
345 # Test approximation
346 INSERT INTO t1(c1) VALUES('12345.000009');
348 # Test insert max values
349 INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
350 INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
352 # Test insert outside max value, would be clipped to closest endpoint
353 SELECT * FROM t1;
354 --error ER_DUP_ENTRY
355 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
356 DELETE FROM t1 WHERE c1='100000.00000' AND c2='-100000.00000';
357 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
358 INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
360 # Test insert leading zero, +/- signs, overflow handling
361 insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
362 insert into t1 values ("-.1","-.1","-.1",13);
363 insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
364 insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
365 insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
366 insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
367 insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
368 insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
369 insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
370 insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
371 insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
373 # Now Select
374 --sorted_result
375 SELECT * FROM t1;
376 --sorted_result
377 SELECT * FROM t2;
378 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
379 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
380 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
381 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
382 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
383 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
385 # Select using various access methods
386 ## Full table scan ##
387 --sorted_result
388 SELECT * FROM t1;
389 --sorted_result
390 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
391 --sorted_result
392 SELECT * FROM t1 WHERE c3 = '0.0';
394 ## Forward index scan, covering ##
395 --sorted_result
396 SELECT c1,c2 FROM t1;
398 ## Backward index scan, covering ##
399 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
401 ## Forward index scan, non-covering ##
402 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
404 ## Backward index scan, non-covering ##
405 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
407 ## ref type access
408 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
409 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
410 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
411 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
413 ## Range access, ordered ##
414 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
415 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
416 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
417 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
418 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
419 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
420 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
421 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
422 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
423 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
424 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
425 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
426 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
427 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
428 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
429 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
430 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
431 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
432 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
433 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
434 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
435 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
437 ## Range access, backwards scan ##
438 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
439 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
440 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
441 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
442 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
443 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
444 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
445 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
446 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
447 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
448 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
449 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
450 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
451 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
452 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
453 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
454 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
455 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
456 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
457 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
458 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
459 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
460 ## Full table scan ##
461 --sorted_result
462 SELECT * FROM t1;
463 --sorted_result
464 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
465 --sorted_result
466 SELECT * FROM t1 WHERE c3 = '-0.0';
468 ## Forward index scan, covering ##
469 --sorted_result
470 SELECT c1,c2 FROM t1;
472 ## Backward index scan, covering ##
473 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
475 ## Forward index scan, non-covering ##
476 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
478 ## Backward index scan, non-covering ##
479 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
481 ## ref type access
482 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
483 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
484 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
485 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
487 ## Range access, ordered ##
488 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
489 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
490 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
491 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
492 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
493 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
494 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
495 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
496 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
497 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
498 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
499 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
500 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
501 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
502 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
503 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
504 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
505 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
506 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
507 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
508 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
509 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
511 ## Range access, backwards scan ##
512 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
513 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
514 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
515 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
516 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
517 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
518 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
519 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
520 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
521 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
522 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
523 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
524 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
525 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
526 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
527 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
528 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
529 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
530 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
531 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
532 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
533 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
534 ## Full table scan ##
535 --sorted_result
536 SELECT * FROM t1;
537 --sorted_result
538 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
539 --sorted_result
540 SELECT * FROM t1 WHERE c3 = '-0.0';
542 ## Forward index scan, covering ##
543 --sorted_result
544 SELECT c1,c2 FROM t1;
546 ## Backward index scan, covering ##
547 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
549 ## Forward index scan, non-covering ##
550 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
552 ## Backward index scan, non-covering ##
553 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
555 ## ref type access
556 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
557 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
558 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
559 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
561 ## Range access, ordered ##
562 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
563 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
564 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
565 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
566 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
567 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
568 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
569 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
570 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
571 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
572 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
573 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
574 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
575 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
576 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
577 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
578 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
579 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
580 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
581 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
582 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
583 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
585 ## Range access, backwards scan ##
586 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
587 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
588 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
589 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
590 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
591 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
592 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
593 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
594 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
595 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
596 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
597 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
598 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
599 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
600 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
601 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
602 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
603 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
604 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
605 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
606 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
607 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
609 # Using index for group-by
610 --sorted_result
611 SELECT c1 FROM t1 GROUP BY c1;
612 --sorted_result
613 SELECT DISTINCT c1 FROM t1;
614 --sorted_result
615 SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
617 # Test encoding to 4 or 8 bytes
618 CREATE TABLE t5(c1 FLOAT(23,0) UNSIGNED NOT NULL, c2 FLOAT(23,0) SIGNED NULL, c3 FLOAT, c4 INT, INDEX idx(c1,c2));
619 INSERT INTO t5 VALUES('1e+22','-1e+22','1e+22',1),('1e-22','-1e-22','1e-22',2);
620 #Output is platform dependent
621 --disable_result_log 
622 --sorted_result
623 SELECT * FROM t5;
624 --enable_result_log
625 ALTER TABLE t5 CHANGE c1 c1 FLOAT(24,0) SIGNED NOT NULL, CHANGE c2 c2 FLOAT(24,0) UNSIGNED NULL;
626 INSERT INTO t5 VALUES('-1e+23','1e+23','1e+23',3),('-1e-23','1e-23','1e-23',4);
627 #Output is platform dependent
628 --disable_result_log
629 --sorted_result
630 SELECT * FROM t5;
631 --enable_result_log
632 ALTER TABLE t5 CHANGE c1 c1 FLOAT(53,0) UNSIGNED, CHANGE c2 c2 FLOAT(53,0) SIGNED;
633 INSERT INTO t5 VALUES('1e+52','-1e+52','1e+52',5),('1e-52','-1e-52','1e-52',6);
634 INSERT INTO t5 VALUES('1e+53','-1e+53','1e+53',7),('1e-53','-1e-53','1e-53',8);
636 #Output is platform dependent
637 --replace_column 1 # 2 #
638 --sorted_result
639 SELECT * FROM t5;
640 DROP TABLE t5;
642 # Test ROUND() and TRUNCATE()
643 CREATE TABLE t5(c1 FLOAT(16,6), c2 tinyint);
644 INSERT INTO t5 VALUES(1.1325,3);
645 SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
646 DROP TABLE t5;
648 # Test wrong decimal types
649 --error ER_M_BIGGER_THAN_D
650 CREATE TABLE t7(c1 FLOAT(5,10));
651 DROP TABLE t1,t2;
653 ######## Running INSERT tests for DOUBLE ########
655 # Create tables
656 CREATE TABLE t1(c1 DOUBLE(10,5) UNSIGNED NOT NULL, c2 DOUBLE(10,5) SIGNED NULL, c3 DOUBLE, c4 INT, UNIQUE INDEX idx(c1,c2));
657 CREATE TABLE t2(c1 DOUBLE(10,0) SIGNED NOT NULL, c2 DOUBLE(10,0) UNSIGNED NULL, c3 DOUBLE, c4 INT);
659 # Test insert values, trailing zeroes are not stripped
660 INSERT INTO t1 VALUES('00100.05000','-00100.05000','00100.05000',1);
661 INSERT INTO t2 VALUES('-1000000000','1000000000','1000000000',2);
663 # Test approximation
664 INSERT INTO t1(c1) VALUES('12345.000009');
666 # Test insert max values
667 INSERT INTO t1 VALUES('99999.99999','-99999.99999','99999.99999',3);
668 INSERT INTO t2 VALUES('-9999999999','-9999999999','9999999999',4);
670 # Test insert outside max value, would be clipped to closest endpoint
671 SELECT * FROM t1;
672 --error ER_DUP_ENTRY
673 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
674 DELETE FROM t1 WHERE c1='99999.99999' AND c2='-99999.99999';
675 INSERT INTO t1 VALUES('100000.000002','-100000.000002','100000.000002',5);
676 INSERT INTO t2 VALUES('10000000000','-10000000000','10000000000',6);
678 # Test insert leading zero, +/- signs, overflow handling
679 insert into t1 values ("0.0","0.0","0.0",7),("01.0","01.0","01.0",10);
680 insert into t1 values ("-.1","-.1","-.1",13);
681 insert into t1 values ("+111111111.11","+111111111.11","+111111111.11",19);
682 insert into t2 values ("0.0","0.0","0.0",7),("-0.0","-0.0","-0.0",8),("+0.0","+0.0","+0.0",9),("01.0","01.0","01.0",10),("+01.0","+01.0","+01.0",11),("-01.0","-01.0","-01.0",12);
683 insert into t2 values ("-.1","-.1","-.1",13),("+.1","+.1","+.1",14),(".1",".1",".1",15);
684 insert into t2 values ("00000000000001","00000000000001","00000000000001",16),("+0000000000001","+0000000000001","+0000000000001",17),("-0000000000001","-0000000000001","-0000000000001",18);
685 insert into t2 values ("+111111111.11","+111111111.11","+111111111.11",19),("111111111.11","111111111.11","111111111.11",20),("-11111111.11","-11111111.11","-11111111.11",21);
686 insert into t2 values ("-111111111.11","-111111111.11","-111111111.11",22),("+1111111111.11","+1111111111.11","+1111111111.11",23),("1111111111.11","1111111111.11","1111111111.11",24);
687 insert into t2 values ("1e+1000","1e+1000","1e+1000",25),("1e-1000","1e-1000","1e-1000",26),("-1e+1000","-1e+1000","-1e+1000",27);
688 insert into t2 values ("1e+4294967296","1e+4294967296","1e+4294967296",28),("1e-4294967296","1e-4294967296","1e-4294967296",29);
689 insert into t2 values ("1e+18446744073709551615","1e+18446744073709551615","1e+18446744073709551615",30),("1e+18446744073709551616","1e+18446744073709551616","1e+18446744073709551616",31),("1e-9223372036854775807","1e-9223372036854775807","1e-9223372036854775807",32),("1e-9223372036854775809","1e-9223372036854775809","1e-9223372036854775809",33);
691 # Now Select
692 --sorted_result
693 SELECT * FROM t1;
694 --sorted_result
695 SELECT * FROM t2;
696 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t1;
697 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t1;
698 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t1;
699 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) as max_value, sum(c1) as sum, avg(c1) as avg FROM t2;
700 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) as max_value, sum(c2) as sum, avg(c2) as avg FROM t2;
701 #SELECT below outputs 'inf' and 'infinity' for Linux/SunOS respectively
702 --replace_column 4 inf 5 inf
703 SELECT count(*) as total_rows, min(c3) as min_value, max(c3) as max_value, sum(c3) as sum, avg(c3) as avg FROM t2;
705 # Select using various access methods
706 ## Full table scan ##
707 --sorted_result
708 SELECT * FROM t1;
709 --sorted_result
710 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
711 --sorted_result
712 SELECT * FROM t1 WHERE c3 = '0.0';
714 ## Forward index scan, covering ##
715 --sorted_result
716 SELECT c1,c2 FROM t1;
718 ## Backward index scan, covering ##
719 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
721 ## Forward index scan, non-covering ##
722 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
724 ## Backward index scan, non-covering ##
725 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
727 ## ref type access
728 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2;
729 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 LIMIT 2;
730 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC;
731 SELECT * FROM t1 WHERE c1 = '0.0' ORDER BY c1,c2 DESC LIMIT 2;
733 ## Range access, ordered ##
734 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2;
735 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 LIMIT 2;
736 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2;
737 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 LIMIT 2;
738 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2;
739 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 LIMIT 2;
740 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2;
741 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 LIMIT 2;
742 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2;
743 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 LIMIT 2;
744 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2;
745 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 LIMIT 2;
746 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2;
747 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
748 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2;
749 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 LIMIT 2;
750 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2;
751 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 LIMIT 2;
752 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
753 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
754 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
755 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
757 ## Range access, backwards scan ##
758 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC;
759 SELECT * FROM t1 WHERE c1 <> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
760 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC;
761 SELECT * FROM t1 WHERE c1 > '0.0' ORDER BY c1,c2 DESC LIMIT 2;
762 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC;
763 SELECT * FROM t1 WHERE c1 >= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
764 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC;
765 SELECT * FROM t1 WHERE c1 < '0.0' ORDER BY c1,c2 DESC LIMIT 2;
766 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC;
767 SELECT * FROM t1 WHERE c1 <= '0.0' ORDER BY c1,c2 DESC LIMIT 2;
768 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC;
769 SELECT * FROM t1 WHERE c1 <=> '0.0' ORDER BY c1,c2 DESC LIMIT 2;
770 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC;
771 SELECT * FROM t1 WHERE c1 BETWEEN '0.0' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
772 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC;
773 SELECT * FROM t1 WHERE c1 IN ('0.0','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
774 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC;
775 SELECT * FROM t1 WHERE c1 >= '0.0' AND c1 < '99999.99999' AND c2 = '1.0' ORDER BY c1,c2 DESC LIMIT 2;
776 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
777 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
778 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
779 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
780 ## Full table scan ##
781 --sorted_result
782 SELECT * FROM t1;
783 --sorted_result
784 SELECT count(*) as total_rows, min(c1) as min_value, max(c1) FROM t1;
785 --sorted_result
786 SELECT * FROM t1 WHERE c3 = '-0.0';
788 ## Forward index scan, covering ##
789 --sorted_result
790 SELECT c1,c2 FROM t1;
792 ## Backward index scan, covering ##
793 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
795 ## Forward index scan, non-covering ##
796 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
798 ## Backward index scan, non-covering ##
799 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
801 ## ref type access
802 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2;
803 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
804 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC;
805 SELECT * FROM t1 WHERE c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
807 ## Range access, ordered ##
808 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2;
809 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 LIMIT 2;
810 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2;
811 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 LIMIT 2;
812 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2;
813 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 LIMIT 2;
814 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2;
815 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 LIMIT 2;
816 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2;
817 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 LIMIT 2;
818 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2;
819 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 LIMIT 2;
820 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2;
821 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 LIMIT 2;
822 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2;
823 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 LIMIT 2;
824 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2;
825 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
826 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2;
827 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 LIMIT 2;
828 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2;
829 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
831 ## Range access, backwards scan ##
832 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC;
833 SELECT * FROM t1 WHERE c1 <> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
834 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC;
835 SELECT * FROM t1 WHERE c1 > '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
836 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC;
837 SELECT * FROM t1 WHERE c1 >= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
838 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC;
839 SELECT * FROM t1 WHERE c1 < '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
840 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC;
841 SELECT * FROM t1 WHERE c1 <= '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
842 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC;
843 SELECT * FROM t1 WHERE c1 <=> '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
844 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC;
845 SELECT * FROM t1 WHERE c1 BETWEEN '100.05' AND '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
846 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC;
847 SELECT * FROM t1 WHERE c1 IN ('100.05','99999.99999') ORDER BY c1,c2 DESC LIMIT 2;
848 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC;
849 SELECT * FROM t1 WHERE c1 >= '100.05' AND c1 < '99999.99999' AND c2 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
850 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC;
851 SELECT * FROM t1 WHERE c1 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
852 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC;
853 SELECT * FROM t1 WHERE c1 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
854 ## Full table scan ##
855 --sorted_result
856 SELECT * FROM t1;
857 --sorted_result
858 SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t1;
859 --sorted_result
860 SELECT * FROM t1 WHERE c3 = '-0.0';
862 ## Forward index scan, covering ##
863 --sorted_result
864 SELECT c1,c2 FROM t1;
866 ## Backward index scan, covering ##
867 SELECT c1,c2 FROM t1 ORDER BY c1,c2 DESC;
869 ## Forward index scan, non-covering ##
870 SELECT * FROM t1 ORDER BY c1,c2 LIMIT 2;
872 ## Backward index scan, non-covering ##
873 SELECT * FROM t1 ORDER BY c1,c2 DESC LIMIT 2;
875 ## ref type access
876 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2;
877 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 LIMIT 2;
878 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC;
879 SELECT * FROM t1 WHERE c2 = '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
881 ## Range access, ordered ##
882 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2;
883 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
884 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2;
885 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 LIMIT 2;
886 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2;
887 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
888 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2;
889 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 LIMIT 2;
890 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2;
891 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 LIMIT 2;
892 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2;
893 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 LIMIT 2;
894 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2;
895 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 LIMIT 2;
896 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2;
897 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 LIMIT 2;
898 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2;
899 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 LIMIT 2;
900 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2;
901 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 LIMIT 2;
902 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2;
903 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 LIMIT 2;
905 ## Range access, backwards scan ##
906 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC;
907 SELECT * FROM t1 WHERE c2 <> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
908 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC;
909 SELECT * FROM t1 WHERE c2 > '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
910 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC;
911 SELECT * FROM t1 WHERE c2 >= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
912 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC;
913 SELECT * FROM t1 WHERE c2 < '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
914 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC;
915 SELECT * FROM t1 WHERE c2 <= '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
916 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC;
917 SELECT * FROM t1 WHERE c2 <=> '-99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
918 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC;
919 SELECT * FROM t1 WHERE c2 BETWEEN '-99999.99999' AND '0.0' ORDER BY c1,c2 DESC LIMIT 2;
920 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC;
921 SELECT * FROM t1 WHERE c2 IN ('-99999.99999','0.0') ORDER BY c1,c2 DESC LIMIT 2;
922 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC;
923 SELECT * FROM t1 WHERE c2 >= '-99999.99999' AND c2 < '0.0' AND c1 = '99999.99999' ORDER BY c1,c2 DESC LIMIT 2;
924 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC;
925 SELECT * FROM t1 WHERE c2 IS NULL ORDER BY c1,c2 DESC LIMIT 2;
926 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC;
927 SELECT * FROM t1 WHERE c2 IS NOT NULL ORDER BY c1,c2 DESC LIMIT 2;
929 # Using index for group-by
930 --sorted_result
931 SELECT c1 FROM t1 GROUP BY c1;
932 --sorted_result
933 SELECT DISTINCT c1 FROM t1;
934 --sorted_result
935 SELECT c1,MIN(c2) FROM t1 GROUP BY c1;
937 # Test encoding to 4 or 8 bytes
938 CREATE TABLE t5(c1 DOUBLE(23,0) UNSIGNED NOT NULL, c2 DOUBLE(23,0) SIGNED NULL, c3 DOUBLE, c4 INT, INDEX idx(c1,c2));
939 INSERT INTO t5 VALUES('1e+22','-1e+22','1e+22',1),('1e-22','-1e-22','1e-22',2);
940 --sorted_result
941 SELECT * FROM t5;
942 ALTER TABLE t5 CHANGE c1 c1 DOUBLE(24,0) SIGNED NOT NULL, CHANGE c2 c2 DOUBLE(24,0) UNSIGNED NULL;
943 INSERT INTO t5 VALUES('-1e+23','1e+23','1e+23',3),('-1e-23','1e-23','1e-23',4);
944 #Output is platform dependent
945 --disable_result_log
946 --sorted_result
947 SELECT * FROM t5;
948 --enable_result_log
949 ALTER TABLE t5 CHANGE c1 c1 DOUBLE(53,0) UNSIGNED, CHANGE c2 c2 DOUBLE(53,0) SIGNED;
950 INSERT INTO t5 VALUES('1e+52','-1e+52','1e+52',5),('1e-52','-1e-52','1e-52',6);
951 INSERT INTO t5 VALUES('1e+53','-1e+53','1e+53',7),('1e-53','-1e-53','1e-53',8);
952 #Output is platform dependent
953 --disable_result_log
954 --sorted_result
955 SELECT * FROM t5;
956 --enable_result_log
957 DROP TABLE t5;
959 # Test ROUND() and TRUNCATE()
960 CREATE TABLE t5(c1 DOUBLE(16,6), c2 tinyint);
961 INSERT INTO t5 VALUES(1.1325,3);
962 SELECT ROUND(c1,c2),TRUNCATE(c1,c2) FROM t5;
963 DROP TABLE t5;
965 # Test wrong decimal types
966 --error ER_M_BIGGER_THAN_D
967 CREATE TABLE t7(c1 DOUBLE(5,10));
968 DROP TABLE t1,t2;