AryaWu/sqlite
0
1# 2015-08-192#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6# May you do good and not evil.7# May you find forgiveness for yourself and forgive others.8# May you share freely, never taking more than you give.9#10#***********************************************************************11# 12# This file implements tests for table-valued-functions implemented using13# eponymous virtual tables.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18set testprefix tabfunc0119 20ifcapable !vtab {21 finish_test22 return23}24load_static_extension db series25load_static_extension db remember26 27do_execsql_test tabfunc01-1.1 {28 SELECT *, '|' FROM generate_series WHERE start=1 AND stop=9 AND step=2;29} {1 | 3 | 5 | 7 | 9 |}30do_execsql_test tabfunc01-1.1b {31 PRAGMA table_xinfo(generate_series);32} {0 value {} 0 {} 0 0 1 start {} 0 {} 0 1 2 stop {} 0 {} 0 1 3 step {} 0 {} 0 1}33do_execsql_test tabfunc01-1.2 {34 SELECT *, '|' FROM generate_series(0) LIMIT 5;35} {0 | 1 | 2 | 3 | 4 |}36do_catchsql_test tabfunc01-1.2b {37 SELECT *, '|' FROM generate_series LIMIT 5;38} {1 {first argument to "generate_series()" missing or unusable}}39do_catchsql_test tabfunc01-1.2c {40 SELECT *, '|' FROM generate_series(value) LIMIT 5;41} {1 {first argument to "generate_series()" missing or unusable}}42do_catchsql_test tabfunc01-1.3 {43 CREATE VIRTUAL TABLE t1 USING generate_series;44} {1 {no such module: generate_series}}45do_execsql_test tabfunc01-1.4 {46 SELECT * FROM generate_series(1,9,2);47} {1 3 5 7 9}48do_execsql_test tabfunc01-1.5 {49 SELECT * FROM generate_series(1,9);50} {1 2 3 4 5 6 7 8 9}51do_execsql_test tabfunc01-1.6 {52 SELECT * FROM generate_series(1,10) WHERE step=3;53} {1 4 7 10}54do_catchsql_test tabfunc01-1.7 {55 SELECT * FROM generate_series(1,9,2,11);56} {1 {too many arguments on generate_series() - max 3}}57 58do_execsql_test tabfunc01-1.8 {59 SELECT * FROM generate_series(0,32,5) ORDER BY rowid DESC;60} {30 25 20 15 10 5 0}61do_execsql_test tabfunc01-1.9 {62 SELECT rowid, * FROM generate_series(0,32,5) ORDER BY value DESC;63} {30 30 25 25 20 20 15 15 10 10 5 5 0 0}64do_execsql_test tabfunc01-1.10 {65 SELECT rowid, * FROM generate_series(0,32,5) ORDER BY +value DESC;66} {30 30 25 25 20 20 15 15 10 10 5 5 0 0}67 68do_execsql_test tabfunc01-1.20 {69 CREATE VIEW v1(a,b) AS VALUES(1,2),(3,4);70 SELECT * FROM v1;71} {1 2 3 4}72do_catchsql_test tabfunc01-1.21.1 {73 SELECT * FROM v1(55);74} {1 {'v1' is not a function}}75do_catchsql_test tabfunc01-1.21.2 {76 SELECT * FROM v1();77} {1 {'v1' is not a function}}78do_execsql_test tabfunc01-1.22 {79 CREATE VIEW v2(x) AS SELECT value FROM generate_series(1,5);80 SELECT * FROM v2;81} {1 2 3 4 5}82do_catchsql_test tabfunc01-1.23.1 {83 SELECT * FROM v2(55);84} {1 {'v2' is not a function}}85do_catchsql_test tabfunc01-1.23.2 {86 SELECT * FROM v2();87} {1 {'v2' is not a function}}88do_execsql_test tabfunc01-1.24 {89 CREATE TABLE t0(x);90 INSERT INTO t0(x) VALUES(123),(456),(789);91 SELECT * FROM t0 ORDER BY x;92} {123 456 789}93do_catchsql_test tabfunc01-1.25 {94 SELECT * FROM t0(55) ORDER BY x;95} {1 {'t0' is not a function}}96do_catchsql_test tabfunc01-1.26 {97 WITH w0 AS (SELECT * FROM t0)98 INSERT INTO t0(x) SELECT * FROM w0()99} {1 {'w0' is not a function}}100 101do_execsql_test tabfunc01-2.1 {102 CREATE TABLE t1(x);103 INSERT INTO t1(x) VALUES(2),(3);104 SELECT *, '|' FROM t1, generate_series(1,x) ORDER BY 1, 2105} {2 1 | 2 2 | 3 1 | 3 2 | 3 3 |}106do_execsql_test tabfunc01-2.2 {107 SELECT *, '|' FROM (SELECT x FROM t1) AS y, generate_series(1,y.x)108 ORDER BY 1, 2;109} {2 1 | 2 2 | 3 1 | 3 2 | 3 3 |}110 111do_execsql_test tabfunc01-2.50 {112 SELECT * FROM generate_series(0) LIMIT 5;113} {0 1 2 3 4}114 115do_execsql_test tabfunc01-3.1 {116 SELECT DISTINCT value FROM generate_series(1,x), t1 ORDER BY 1;117} {1 2 3}118 119do_eqp_test tabfunc01-3.10 {120 SELECT value FROM generate_series(1,10) ORDER BY value;121} {122 QUERY PLAN123 `--SCAN generate_series VIRTUAL TABLE INDEX 0x13:124}125do_eqp_test tabfunc01-3.11 {126 SELECT value FROM generate_series(1,10) ORDER BY +value;127} {128 QUERY PLAN129 |--SCAN generate_series VIRTUAL TABLE INDEX 0x3:130 `--USE TEMP B-TREE FOR ORDER BY131}132do_eqp_test tabfunc01-3.12 {133 SELECT value FROM generate_series(1,10) ORDER BY value, stop;134} {135 QUERY PLAN136 `--SCAN generate_series VIRTUAL TABLE INDEX 0x13:137}138do_eqp_test tabfunc01-3.13 {139 SELECT value FROM generate_series(1,10) ORDER BY stop, value;140} {141 QUERY PLAN142 |--SCAN generate_series VIRTUAL TABLE INDEX 0x3:143 `--USE TEMP B-TREE FOR ORDER BY144}145 146 147do_eqp_test tabfunc01-3.20 {148 WITH t1(a) AS (149 SELECT value FROM generate_series(0,10,2)150 UNION ALL151 SELECT value FROM generate_series(9,18,3)152 )153 SELECT * FROM t1 ORDER BY a;154} {155 QUERY PLAN156 `--MERGE (UNION ALL)157 |--LEFT158 | `--SCAN generate_series VIRTUAL TABLE INDEX 0x17:159 `--RIGHT160 `--SCAN generate_series VIRTUAL TABLE INDEX 0x17:161}162 163 164# Eponymous virtual table exists in all schemas.165#166do_execsql_test tabfunc01-4.1 {167 SELECT * FROM main.generate_series(1,4)168} {1 2 3 4}169do_execsql_test tabfunc01-4.2 {170 SELECT * FROM temp.generate_series(1,4)171} {1 2 3 4}172do_execsql_test tabfunc01-4.3 {173 ATTACH ':memory:' AS aux1;174 CREATE TABLE aux1.t1(a,b,c);175 SELECT * FROM aux1.generate_series(1,4)176} {1 2 3 4}177 178# 2018-12-03: Fix bug reported by by private email.179do_execsql_test tabfunc01-4.4 {180 SELECT * FROM (generate_series(1,5,2)) AS x LIMIT 10;181} {1 3 5}182 183# 2025-03-13 forum post bf2dc8e909983511184#185do_execsql_test tabfunc01-5.1 {186 SELECT value187 FROM generate_series(60,73,6)188 WHERE value=66;189} 66190do_execsql_test tabfunc01-5.2 {191 SELECT value192 FROM generate_series(73,60,-6)193 WHERE value=67;194} 67195 196# 2025-03-22 forum post 0d5d63257e3ff4f6197#198do_execsql_test tabfunc01-6.1 {199 SELECT value FROM generate_series(1,10) WHERE value<5.5;200} {1 2 3 4 5}201do_execsql_test tabfunc01-6.2 {202 SELECT value FROM generate_series(1,10) WHERE value<5.0;203} {1 2 3 4}204do_execsql_test tabfunc01-6.3 {205 SELECT value FROM generate_series(1,10) WHERE value<=5.5;206} {1 2 3 4 5}207do_execsql_test tabfunc01-6.4 {208 SELECT value FROM generate_series(1,10) WHERE value<=5.0;209} {1 2 3 4 5}210do_execsql_test tabfunc01-6.5 {211 SELECT value FROM generate_series(1,10) WHERE value>5.5;212} {6 7 8 9 10}213do_execsql_test tabfunc01-6.6 {214 SELECT value FROM generate_series(1,10) WHERE value>5.0;215} {6 7 8 9 10}216do_execsql_test tabfunc01-6.7 {217 SELECT value FROM generate_series(1,10) WHERE value>=5.5;218} {6 7 8 9 10}219do_execsql_test tabfunc01-6.8 {220 SELECT value FROM generate_series(1,10) WHERE value>=5.0;221} {5 6 7 8 9 10}222do_execsql_test tabfunc01-6.9 {223 SELECT value FROM generate_series(10,1,-1) WHERE value<5.5;224} {5 4 3 2 1}225do_execsql_test tabfunc01-6.10 {226 SELECT value FROM generate_series(10,1,-1) WHERE value<5.0;227} {4 3 2 1}228do_execsql_test tabfunc01-6.11 {229 SELECT value FROM generate_series(10,1,-1) WHERE value<=5.5;230} {5 4 3 2 1}231do_execsql_test tabfunc01-6.12 {232 SELECT value FROM generate_series(10,1,-1) WHERE value<=5.0;233} {5 4 3 2 1}234do_execsql_test tabfunc01-6.13 {235 SELECT value FROM generate_series(10,1,-1) WHERE value>5.5;236} {10 9 8 7 6}237do_execsql_test tabfunc01-6.14 {238 SELECT value FROM generate_series(10,1,-1) WHERE value>5.0;239} {10 9 8 7 6}240do_execsql_test tabfunc01-6.15 {241 SELECT value FROM generate_series(10,1,-1) WHERE value>=5.5;242} {10 9 8 7 6}243do_execsql_test tabfunc01-6.16 {244 SELECT value FROM generate_series(10,1,-1) WHERE value>=5.0;245} {10 9 8 7 6 5}246do_execsql_test tabfunc01-6.17 {247 SELECT value FROM generate_series(1,10) WHERE value==5.5;248} {}249do_execsql_test tabfunc01-6.18 {250 SELECT value FROM generate_series(1,10) WHERE value==5.0;251} {5}252 253# The next series of tests is verifying that virtual table are able254# to optimize the IN operator, even on terms that are not marked "omit".255# When the generate_series virtual table is compiled for the testfixture,256# the special -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 option is used, which257# causes the xBestIndex method of generate_series to leave the258# sqlite3_index_constraint_usage.omit flag set to 0, which should cause259# the SQLite core to verify the start=, stop=, and step= constraints on260# each step of output. At one point, the IN operator could not be used261# by virtual tables unless omit was set.262#263do_execsql_test tabfunc01-500 {264 SELECT * FROM generate_series WHERE start IN (1,7) AND stop=20 AND step=10265 ORDER BY +1;266} {1 7 11 17}267 268# Table-valued functions on the RHS of an IN operator269#270do_execsql_test tabfunc01-600 {271 CREATE TABLE t600(a INTEGER PRIMARY KEY, b TEXT);272 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)273 INSERT INTO t600(a,b) SELECT x, printf('(%03d)',x) FROM c;274 SELECT b FROM t600 WHERE a IN generate_series(2,52,10);275} {(002) (012) (022) (032) (042) (052)}276 277 278do_test tabfunc01-700 {279 set PTR1 [intarray_addr 5 7 13 17 23]280 sqlite3_create_function db281 db eval {282 SELECT b FROM t600, carray(inttoptr($PTR1),5) WHERE a=value;283 }284} {(005) (007) (013) (017) (023)}285do_test tabfunc01-701 {286 db eval {287 SELECT b FROM t600 WHERE a IN carray(inttoptr($PTR1),5,'int32');288 }289} {(005) (007) (013) (017) (023)}290do_test tabfunc01-702 {291 db eval {292 SELECT b FROM t600 WHERE a IN carray(inttoptr($PTR1),4,'int32');293 }294} {(005) (007) (013) (017)}295do_catchsql_test tabfunc01-710 {296 SELECT b FROM t600 WHERE a IN carray(inttoptr($PTR1),5,'int33');297} {1 {unknown datatype: 'int33'}}298 299do_test tabfunc01-720 {300 set PTR2 [int64array_addr 5 7 13 17 23]301 db eval {302 SELECT b FROM t600, carray(inttoptr($PTR2),5,'int64') WHERE a=value;303 }304} {(005) (007) (013) (017) (023)}305do_test tabfunc01-721 {306 db eval {307 SELECT remember(123,inttoptr($PTR2));308 SELECT value FROM carray(inttoptr($PTR2),5,'int64');309 }310} {123 123 7 13 17 23}311do_test tabfunc01-722 {312 set PTR3 [expr {$PTR2+16}]313 db eval {314 SELECT remember(987,inttoptr($PTR3));315 SELECT value FROM carray(inttoptr($PTR2),5,'int64');316 }317} {987 123 7 987 17 23}318 319do_test tabfunc01-730 {320 set PTR4 [doublearray_addr 5.0 7.0 13.0 17.0 23.0]321 db eval {322 SELECT b FROM t600, carray(inttoptr($PTR4),5,'double') WHERE a=value;323 }324} {(005) (007) (013) (017) (023)}325 326do_test tabfunc01-740 {327 set PTR5 [textarray_addr x5 x7 x13 x17 x23]328 db eval {329 SELECT b FROM t600, carray(inttoptr($PTR5),5,'char*')330 WHERE a=trim(value,'x');331 }332} {(005) (007) (013) (017) (023)}333 334do_test tabfunc01-750 {335 db eval {336 SELECT aa.value, bb.value, '|'337 FROM carray(inttoptr($PTR4),5,'double') AS aa338 JOIN carray(inttoptr($PTR5),5,'char*') AS bb ON aa.rowid=bb.rowid;339 }340} {5.0 x5 | 7.0 x7 | 13.0 x13 | 17.0 x17 | 23.0 x23 |}341 342# ticket https://sqlite.org/src/info/2ae0c599b735d59e343# Verification of testtag-20230227a344do_test tabfunc01-751 {345 db eval {346 SELECT aa.value, bb.value, '|'347 FROM carray(inttoptr($PTR4),5,'double') AS aa348 LEFT JOIN carray(inttoptr($PTR5),5,'char*') AS bb ON aa.rowid=bb.rowid;349 }350} {5.0 x5 | 7.0 x7 | 13.0 x13 | 17.0 x17 | 23.0 x23 |}351 352ifcapable altertable {353 do_test tabfunc01-800 {354 catchsql {355 ALTER TABLE generate_series ADD COLUMN col2;356 }357 } {1 {virtual tables may not be altered}}358 do_test tabfunc01-810 {359 catchsql {360 ALTER TABLE generate_series RENAME TO flubber;361 }362 } {1 {table generate_series may not be altered}}363 do_test tabfunc01-820 {364 catchsql {365 ALTER TABLE generate_series RENAME start TO flubber;366 }367 } {1 {table generate_series may not be altered}}368 do_test tabfunc01-830 {369 catchsql {370 ALTER TABLE generate_series DROP COLUMN start;371 }372 } {1 {table generate_series may not be altered}}373 do_test tabfunc01-900 {374 catchsql {375 ALTER TABLE pragma_compile_options ADD COLUMN col2;376 }377 } {1 {virtual tables may not be altered}}378 do_test tabfunc01-910 {379 catchsql {380 ALTER TABLE pragma_compile_options RENAME TO flubber;381 }382 } {1 {table pragma_compile_options may not be altered}}383 do_test tabfunc01-920 {384 catchsql {385 ALTER TABLE pragma_compile_options RENAME start TO flubber;386 }387 } {1 {table pragma_compile_options may not be altered}}388 do_test tabfunc01-930 {389 catchsql {390 ALTER TABLE pragma_compile_options DROP COLUMN start;391 }392 } {1 {table pragma_compile_options may not be altered}}393}394 395#-----------------------------------------------------------------------------396# 2024-04-26 LIMIT and OFFSET passed into virtual tables397# https://sqlite.org/forum/forumpost/c243b8f856398#399do_execsql_test tabfunc01-900 {400 SELECT * FROM (401 SELECT * FROM generate_series(1,10)402 UNION ALL403 SELECT * FROM generate_series(101,104)404 ) LIMIT 10 OFFSET 5;405} {6 7 8 9 10 101 102 103 104}406do_execsql_test tabfunc01-910 {407 SELECT * FROM (408 SELECT * FROM generate_series(1,10)409 UNION ALL410 SELECT * FROM generate_series(101,104)411 ) LIMIT -1 OFFSET 5;412} {6 7 8 9 10 101 102 103 104}413do_execsql_test tabfunc01-920 {414 SELECT * FROM (415 SELECT * FROM generate_series(1,10)416 UNION ALL417 SELECT * FROM generate_series(101,104)418 ) LIMIT -1 OFFSET 0;419} {1 2 3 4 5 6 7 8 9 10 101 102 103 104}420 421# Also: https://sqlite.org/forum/forumpost/ce1a06c2c8422#423do_execsql_test tabfunc01-930 {424 SELECT * FROM generate_series(9223372036854775807,425 -9223372036854775808,426 -9223372036854775808);427} {9223372036854775807 -1}428do_execsql_test tabfunc01-931 {429 SELECT * FROM generate_series(9223372036854775807,430 -9223372036854775808,431 -9223372036854775808)432 LIMIT 100 OFFSET 1;433} {-1}434do_execsql_test tabfunc01-932 {435 SELECT * FROM generate_series(9223372036854775807,436 -9223372036854775808,437 -9223372036854775808)438 LIMIT 100 OFFSET 2;439} {}440do_execsql_test tabfunc01-933 {441 SELECT * FROM generate_series(9223372036854775807,442 -9223372036854775808,443 -9223372036854775808)444 LIMIT 100 OFFSET 9223372036854775807;445} {}446do_execsql_test tabfunc01-940 {447 SELECT * FROM generate_series(1,11,2);448} {1 3 5 7 9 11}449do_execsql_test tabfunc01-941 {450 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 4;451} {9 11}452do_execsql_test tabfunc01-942 {453 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 5;454} {11}455do_execsql_test tabfunc01-943 {456 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 6;457} {}458do_execsql_test tabfunc01-944 {459 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 7;460} {}461do_execsql_test tabfunc01-945 {462 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 9223372036854775807;463} {}464do_execsql_test tabfunc01-950 {465 SELECT * FROM generate_series(1,11,1) LIMIT 100 OFFSET 10;466} {11}467do_execsql_test tabfunc01-951 {468 SELECT * FROM generate_series(1,11,2) LIMIT 100 OFFSET 9223372036854775807;469} {}470do_execsql_test tabfunc01-952 {471 SELECT * FROM generate_series(11,1,-1) LIMIT 100 OFFSET 10;472} {1}473do_execsql_test tabfunc01-953 {474 SELECT * FROM generate_series(11,1,-1) LIMIT 100 OFFSET 9223372036854775807;475} {}476do_execsql_test tabfunc01-954 {477 SELECT * FROM generate_series(1,11,1) LIMIT 3 OFFSET 3;478} {4 5 6}479 480 481#-------------------------------------------------------------------------482# Forum post https://sqlite.org/forum/forumpost/e7c3ae1215483#484foreach {tn where res} {485 1000 "where value = 2" 2486 1010 "where value in (2)" 2487 1020 "where value in (select 2)" 2488 1030 "where value = 2 OR value = 4" {2 4}489 1040 "where value in (2, 4)" {2 4}490} {491 do_execsql_test $tn "492 SELECT value FROM generate_series(1, 5) $where493 " $res494}495 496do_execsql_test 1100 {497 select 1 as c_0498 from 499 generate_series(1, 1) as ref_3500 where (ref_3.value) in (select 1);501} {1}502 503# 2025-03-18 /forumpost/1e17219c88504# The generate_series() table-valued function is modified so that its505# rowid is always its value. That way it can be used on the RHS of a506# RIGHT JOIN.507#508do_execsql_test 1200 {509 DROP TABLE IF EXISTS t1;510 CREATE TABLE t1(value INT);511 INSERT INTO t1 VALUES (1),(2),(3);512 SELECT t1.value, t2.value513 FROM t1 RIGHT JOIN generate_series(1,3,1) AS t2 USING(value);514} {1 1 2 2 3 3}515 516#--------------------------------------------------------------------------517# New test cases for generate_series associated with the refactor on branch518# serices-refactor circa 2025-09-27.519#520do_execsql_test 1300 {521 SELECT value522 FROM generate_series(-9223372036854775808, 9223372036854775807, 2)523 WHERE value BETWEEN 1 AND 5;524} {2 4}525do_execsql_test 1301 {526 SELECT value527 FROM generate_series(-9223372036854775808, 9223372036854775807, 2)528 WHERE value BETWEEN 0 AND 6;529} {0 2 4 6}530do_execsql_test 1302 {531 SELECT value532 FROM generate_series(-9223372036854775808, 9223372036854775807, 2)533 WHERE value BETWEEN 0.5 AND 6.25;534} {2 4 6}535do_execsql_test 1303 {536 SELECT value537 FROM generate_series(-9223372036854775808, 9223372036854775807, 2)538 WHERE value BETWEEN 9223372036854775803 AND 9223372036854775807539} {9223372036854775804 9223372036854775806}540do_execsql_test 1304 {541 SELECT value542 FROM generate_series(-9223372036854775808, 9223372036854775807, 2)543 WHERE value BETWEEN 9223372036854775803 AND 9223372036854775807544 ORDER BY value DESC;545} {9223372036854775806 9223372036854775804}546 547do_execsql_test 1310 {548 SELECT value FROM generate_series(0) LIMIT 5;549} {0 1 2 3 4}550do_execsql_test 1311 {551 SELECT value FROM generate_series(5) LIMIT 5;552} {5 6 7 8 9}553do_execsql_test 1312 {554 SELECT value FROM generate_series(0) WHERE stop=6;555} {0 1 2 3 4 5 6}556do_execsql_test 1313 {557 SELECT value FROM generate_series(1,10) WHERE step IS NULL;558} {}559do_execsql_test 1314 {560 SELECT value FROM generate_series(0xfffffffd);561} {4294967293 4294967294 4294967295}562do_execsql_test 1315 {563 SELECT value FROM generate_series(4,3,1);564} {}565do_execsql_test 1316 {566 SELECT value FROM generate_series(3,4,-1);567} {}568 569do_execsql_test 1320 {570 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)571 WHERE value=9.2234e18;572} {}573do_execsql_test 1321 {574 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)575 WHERE value=-9.2234e18;576} {}577do_execsql_test 1322 {578 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)579 WHERE value>9223372036854775807;580} {}581do_execsql_test 1323 {582 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)583 WHERE value>9223372036854775806;584} {9223372036854775807}585do_execsql_test 1324 {586 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)587 WHERE value>=9223372036854775807;588} {9223372036854775807}589 590do_execsql_test 1330 {591 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)592 WHERE value<-9223372036854775808;593} {}594do_execsql_test 1331 {595 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)596 WHERE value<=-9223372036854775808;597} {-9223372036854775808}598do_execsql_test 1332 {599 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)600 WHERE value<-9223372036854775807;601} {-9223372036854775808}602do_execsql_test 1333 {603 SELECT value FROM generate_series(-9223372036854775808,+9223372036854775807)604 WHERE value BETWEEN 4 AND 1;605} {}606 607do_execsql_test 1340 {608 SELECT value FROM generate_series(100,0,-10)609 WHERE value BETWEEN 33 AND 66;610} {60 50 40}611do_execsql_test 1341 {612 SELECT value FROM generate_series(100,0,-10)613 WHERE value BETWEEN 33 AND 60;614} {60 50 40}615do_execsql_test 1342 {616 SELECT value FROM generate_series(100,0,-10)617 WHERE value BETWEEN 33 AND 59;618} {50 40}619do_execsql_test 1343 {620 SELECT value621 FROM generate_series(-9223372036854760000,-9223372036854775808,-10000);622} {-9223372036854760000 -9223372036854770000}623do_execsql_test 1344 {624 SELECT value625 FROM generate_series(-9223372036854760000,-9223372036854775808,-10000)626 WHERE value < -9223372036854770001;627} {}628do_execsql_test 1345 {629 SELECT value630 FROM generate_series(9223372036854760000,9223372036854775807,10000);631} {9223372036854760000 9223372036854770000}632do_execsql_test 1346 {633 SELECT value634 FROM generate_series(9223372036854760000,9223372036854775807,10000)635 WHERE value > 9223372036854770001;636} {}637 638do_execsql_test 1350 {639 SELECT value FROM generate_series(100,0,-10)640 WHERE value BETWEEN 33 AND 38;641} {}642do_execsql_test 1351 {643 SELECT value FROM generate_series(0,100,+10)644 WHERE value BETWEEN 33 AND 38;645} {}646 647do_execsql_test 1360 {648 SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808);649} {0 -9223372036854775808}650do_execsql_test 1361 {651 SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808)652 LIMIT 1 OFFSET 0;653} {0}654do_execsql_test 1362 {655 SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808)656 ORDER BY value ASC;657} {-9223372036854775808 0}658do_execsql_test 1363 {659 SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808)660 ORDER BY value ASC LIMIT 10 OFFSET 1;661} {0}662do_execsql_test 1364 {663 SELECT * FROM generate_series(0,-9223372036854775808,-9223372036854775808)664 ORDER BY value ASC LIMIT 10 OFFSET 40000000;665} {}666 667do_execsql_test 1370 {668 SELECT * FROM generate_series(0,0,0);669} {}670 671 672 673# Free up memory allocations674intarray_addr675int64array_addr676doublearray_addr677textarray_addr678 679finish_test680 