CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
distinct2.test384 linesDownload Raw Back to test
1# 2016-04-152#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# This file implements regression tests for SQLite library.  The12# focus of this script is DISTINCT queries using the skip-ahead 13# optimization.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18 19set testprefix distinct220 21do_execsql_test 100 {22  CREATE TABLE t1(x INTEGER PRIMARY KEY);23  INSERT INTO t1 VALUES(0),(1),(2);24  CREATE TABLE t2 AS25     SELECT DISTINCT a.x AS aa, b.x AS bb26      FROM t1 a, t1 b;27  SELECT *, '|' FROM t2 ORDER BY aa, bb;28} {0 0 | 0 1 | 0 2 | 1 0 | 1 1 | 1 2 | 2 0 | 2 1 | 2 2 |}29do_execsql_test 110 {30  DROP TABLE t2;31  CREATE TABLE t2 AS32     SELECT DISTINCT a.x AS aa, b.x AS bb33       FROM t1 a, t1 b34      WHERE a.x IN t1 AND b.x IN t1;35  SELECT *, '|' FROM t2 ORDER BY aa, bb;36} {0 0 | 0 1 | 0 2 | 1 0 | 1 1 | 1 2 | 2 0 | 2 1 | 2 2 |}37do_execsql_test 120 {38  CREATE TABLE t102 (i0 TEXT UNIQUE NOT NULL);39  INSERT INTO t102 VALUES ('0'),('1'),('2');40  DROP TABLE t2;41  CREATE TABLE t2 AS42    SELECT DISTINCT * 43    FROM t102 AS t0 44    JOIN t102 AS t4 ON (t2.i0 IN t102)45    NATURAL JOIN t102 AS t346    JOIN t102 AS t1 ON (t0.i0 IN t102)47    JOIN t102 AS t2 ON (t2.i0=+t0.i0 OR (t0.i0<>500 AND t2.i0=t1.i0));48  SELECT *, '|' FROM t2 ORDER BY 1, 2, 3, 4, 5;49} {0 0 0 0 | 0 0 1 0 | 0 0 1 1 | 0 0 2 0 | 0 0 2 2 | 0 1 0 0 | 0 1 1 0 | 0 1 1 1 | 0 1 2 0 | 0 1 2 2 | 0 2 0 0 | 0 2 1 0 | 0 2 1 1 | 0 2 2 0 | 0 2 2 2 | 1 0 0 0 | 1 0 0 1 | 1 0 1 1 | 1 0 2 1 | 1 0 2 2 | 1 1 0 0 | 1 1 0 1 | 1 1 1 1 | 1 1 2 1 | 1 1 2 2 | 1 2 0 0 | 1 2 0 1 | 1 2 1 1 | 1 2 2 1 | 1 2 2 2 | 2 0 0 0 | 2 0 0 2 | 2 0 1 1 | 2 0 1 2 | 2 0 2 2 | 2 1 0 0 | 2 1 0 2 | 2 1 1 1 | 2 1 1 2 | 2 1 2 2 | 2 2 0 0 | 2 2 0 2 | 2 2 1 1 | 2 2 1 2 | 2 2 2 2 |}50 51do_execsql_test 400 {52  CREATE TABLE t4(a,b,c,d,e,f,g,h,i,j);53  INSERT INTO t4 VALUES(0,1,2,3,4,5,6,7,8,9);54  INSERT INTO t4 SELECT * FROM t4;55  INSERT INTO t4 SELECT * FROM t4;56  CREATE INDEX t4x ON t4(c,d,e);57  SELECT DISTINCT a,b,c FROM t4 WHERE a=0 AND b=1;58} {0 1 2}59do_execsql_test 410 {60  SELECT DISTINCT a,b,c,d FROM t4 WHERE a=0 AND b=1;61} {0 1 2 3}62do_execsql_test 411 {63  SELECT DISTINCT d,a,b,c FROM t4 WHERE a=0 AND b=1;64} {3 0 1 2}65do_execsql_test 420 {66  SELECT DISTINCT a,b,c,d,e FROM t4 WHERE a=0 AND b=1;67} {0 1 2 3 4}68do_execsql_test 430 {69  SELECT DISTINCT a,b,c,d,e,f FROM t4 WHERE a=0 AND b=1;70} {0 1 2 3 4 5}71 72do_execsql_test 500 {73  CREATE TABLE t5(a INT, b INT);74  CREATE UNIQUE INDEX t5x ON t5(a+b);75  INSERT INTO t5(a,b) VALUES(0,0),(1,0),(1,1),(0,3);76  CREATE TEMP TABLE out AS SELECT DISTINCT a+b FROM t5;77  SELECT * FROM out ORDER BY 1;78} {0 1 2 3}79 80do_execsql_test 600 {81  CREATE TABLE t6a(x INTEGER PRIMARY KEY);82  INSERT INTO t6a VALUES(1);83  CREATE TABLE t6b(y INTEGER PRIMARY KEY);84  INSERT INTO t6b VALUES(2),(3);85  SELECT DISTINCT x, x FROM t6a, t6b;86} {1 1}87 88do_execsql_test 700 {89  CREATE TABLE t7(a, b, c);90  WITH s(i) AS (91    SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<20092  )93  INSERT INTO t7 SELECT i/100, i/50, i FROM s;94}95do_execsql_test 710 {96  SELECT DISTINCT a, b FROM t7;97} {98  0 0    0 199  1 2    1 3100}101do_execsql_test 720 {102  SELECT DISTINCT a, b+1 FROM t7;103} {104  0 1    0 2105  1 3    1 4106}107do_execsql_test 730 {108  CREATE INDEX i7 ON t7(a, b+1);109  ANALYZE;110  SELECT DISTINCT a, b+1 FROM t7;111} {112  0 1    0 2113  1 3    1 4114}115 116do_execsql_test 800 {117  CREATE TABLE t8(a, b, c);118  WITH s(i) AS (119    SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<100120  )121  INSERT INTO t8 SELECT i/40, i/20, i/40 FROM s;122}123 124do_execsql_test 820 {125  SELECT DISTINCT a, b, c FROM t8;126} {127  0 0 0    0 1 0128  1 2 1    1 3 1129  2 4 2130}131 132do_execsql_test 820 {133  SELECT DISTINCT a, b, c FROM t8 WHERE b=3;134} {1 3 1}135 136do_execsql_test 830 {137  CREATE INDEX i8 ON t8(a, c);138  ANALYZE;139  SELECT DISTINCT a, b, c FROM t8 WHERE b=3;140} {1 3 1}141 142do_execsql_test 900 {143  CREATE TABLE t9(v);144  INSERT INTO t9 VALUES 145    ('abcd'), ('Abcd'), ('aBcd'), ('ABcd'), ('abCd'), ('AbCd'), ('aBCd'), 146    ('ABCd'), ('abcD'), ('AbcD'), ('aBcD'), ('ABcD'), ('abCD'), ('AbCD'), 147    ('aBCD'), ('ABCD'),148    ('wxyz'), ('Wxyz'), ('wXyz'), ('WXyz'), ('wxYz'), ('WxYz'), ('wXYz'), 149    ('WXYz'), ('wxyZ'), ('WxyZ'), ('wXyZ'), ('WXyZ'), ('wxYZ'), ('WxYZ'), 150    ('wXYZ'), ('WXYZ');151}152 153do_execsql_test 910 {154  SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v;155} {156  ABCD ABCD ABCd ABCd ABcD ABcD ABcd ABcd AbCD157  AbCD AbCd AbCd AbcD AbcD Abcd Abcd158  WXYZ WXYZ WXYz WXYz WXyZ WXyZ WXyz WXyz WxYZ159  WxYZ WxYz WxYz WxyZ WxyZ Wxyz Wxyz160  aBCD aBCD aBCd aBCd aBcD aBcD aBcd aBcd abCD161  abCD abCd abCd abcD abcD abcd abcd162  wXYZ wXYZ wXYz wXYz wXyZ wXyZ wXyz wXyz wxYZ163  wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz164}165 166do_execsql_test 920 {167  CREATE INDEX i9 ON t9(v COLLATE NOCASE, v);168  ANALYZE;169 170  SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v;171} {172  ABCD ABCD ABCd ABCd ABcD ABcD ABcd ABcd AbCD173  AbCD AbCd AbCd AbcD AbcD Abcd Abcd174  WXYZ WXYZ WXYz WXYz WXyZ WXyZ WXyz WXyz WxYZ175  WxYZ WxYz WxYz WxyZ WxyZ Wxyz Wxyz176  aBCD aBCD aBCd aBCd aBcD aBcD aBcd aBcd abCD177  abCD abCd abCd abcD abcD abcd abcd178  wXYZ wXYZ wXYz wXYz wXyZ wXyZ wXyz wXyz wxYZ179  wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz180}181 182# Ticket https://sqlite.org/src/info/ef9318757b152e3a on 2017-11-21183# Incorrect result due to a skip-ahead-distinct optimization on a184# join where no rows of the inner loop appear in the result set.185#186db close187sqlite3 db :memory:188do_execsql_test 1000 {189  CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER);190  CREATE INDEX t1b ON t1(b);191  CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER);192  CREATE INDEX t2y ON t2(y);193  WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49)194    INSERT INTO t1(b) SELECT x/10 - 1 FROM c;195  WITH RECURSIVE c(x) AS (VALUES(-1) UNION ALL SELECT x+1 FROM c WHERE x<19)196    INSERT INTO t2(x,y) SELECT x, 1 FROM c;197  SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1;198  ANALYZE;199  SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>-1;200} {1 1}201db close202sqlite3 db :memory:203do_execsql_test 1010 {204  CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER);205  CREATE INDEX t1b ON t1(b);206  CREATE TABLE t2(x INTEGER PRIMARY KEY, y INTEGER);207  CREATE INDEX t2y ON t2(y);208  WITH RECURSIVE c(x) AS (VALUES(0) UNION ALL SELECT x+1 FROM c WHERE x<49)209    INSERT INTO t1(b) SELECT -(x/10 - 1) FROM c;210  WITH RECURSIVE c(x) AS (VALUES(-1) UNION ALL SELECT x+1 FROM c WHERE x<19)211    INSERT INTO t2(x,y) SELECT -x, 1 FROM c;212  SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>1 ORDER BY y DESC;213  ANALYZE;214  SELECT DISTINCT y FROM t1, t2 WHERE b=x AND b<>1 ORDER BY y DESC;215} {1 1}216db close217sqlite3 db :memory:218do_execsql_test 1020 {219  CREATE TABLE t1(a, b);220  CREATE INDEX t1a ON t1(a, b);221  -- Lots of rows of (1, 'no'), followed by a single (1, 'yes').222  WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)223    INSERT INTO t1(a, b) SELECT 1, 'no' FROM c;224  INSERT INTO t1(a, b) VALUES(1, 'yes');225  CREATE TABLE t2(x PRIMARY KEY);226  INSERT INTO t2 VALUES('yes');227  SELECT DISTINCT a FROM t1, t2 WHERE x=b;228  ANALYZE;229  SELECT DISTINCT a FROM t1, t2 WHERE x=b;230} {1 1}231 232#-------------------------------------------------------------------------233reset_db234 235do_execsql_test 2000 {236  CREATE TABLE t0 (c0, c1, c2, PRIMARY KEY (c0, c1));237  CREATE TABLE t1 (c2);238  INSERT INTO t0(c2) VALUES (0),(1),(3),(4),(5),(6),(7),(8),(9),(10),(11);239  INSERT INTO t0(c1) VALUES ('a');240  INSERT INTO t1(c2) VALUES (0);241}242do_execsql_test 2010 {243  SELECT DISTINCT t0.c0, t1._rowid_, t0.c1 FROM t1 CROSS JOIN t0 ORDER BY t0.c0;244} {{} 1 {} {} 1 a}245do_execsql_test 1.2 {246  ANALYZE;247}248do_execsql_test 2020 {249  SELECT DISTINCT t0.c0, t1._rowid_, t0.c1 FROM t1 CROSS JOIN t0 ORDER BY t0.c0;250} {{} 1 {} {} 1 a}251 252 253do_execsql_test 2030 {254  CREATE TABLE t2(a, b, c);255  CREATE INDEX t2ab ON t2(a, b);256  257  WITH c(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM c WHERE i<64)258    INSERT INTO t2 SELECT 'one', i%2, 'one' FROM c;259 260  WITH c(i) AS (SELECT 1 UNION ALL SELECT i+1 FROM c WHERE i<64)261    INSERT INTO t2 SELECT 'two', i%2, 'two' FROM c;262 263  CREATE TABLE t3(x INTEGER PRIMARY KEY);264  INSERT INTO t3 VALUES(1);265 266  ANALYZE;267}268do_execsql_test 2040 {269  SELECT DISTINCT a, b, x FROM t3 CROSS JOIN t2 ORDER BY a, +b; 270} {271  one 0 1272  one 1 1273  two 0 1274  two 1 1275}276 277#-------------------------------------------------------------------------278#279reset_db280do_execsql_test 3000 {281  CREATE TABLE t0 (c0, c1 NOT NULL DEFAULT 1, c2, PRIMARY KEY (c0, c1));282  INSERT INTO t0(c2) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL);283  INSERT INTO t0(c2) VALUES('a');284}285 286do_execsql_test 3010 {287  SELECT DISTINCT * FROM t0 WHERE NULL IS t0.c0;288} {289  {} 1 {}290  {} 1 a291}292 293do_execsql_test 3020 {294  ANALYZE;295}296 297do_execsql_test 3030 {298  SELECT DISTINCT * FROM t0 WHERE NULL IS c0;299} {300  {} 1 {}301  {} 1 a302}303 304#-------------------------------------------------------------------------305#306reset_db307 308do_execsql_test 4010 {309  CREATE TABLE t1(a, b COLLATE RTRIM);310  INSERT INTO t1 VALUES(1, ''), (2, ' '), (3, '  ');311}312do_execsql_test 4020 {313  SELECT b FROM t1 UNION SELECT 1;314} {1 {  }}315 316#-------------------------------------------------------------------------317#318reset_db319do_execsql_test 5010 {320  CREATE TABLE cnt(a);321  WITH RECURSIVE cnt2(x) AS (322    VALUES(1) UNION ALL SELECT x+1 FROM cnt2 WHERE x<50323  )324  INSERT INTO cnt SELECT x FROM cnt2;   325}326 327do_execsql_test 5020 {328  SELECT DISTINCT abs(random())%5 AS r FROM cnt ORDER BY r; 329} {0 1 2 3 4}330 331do_execsql_test 5030 {332  SELECT abs(random())%5 AS r FROM cnt GROUP BY 1 ORDER BY 1; 333} {0 1 2 3 4}334 335do_execsql_test 5040 {336  SELECT a FROM cnt WHERE a>45 GROUP BY 1;337} {46 47 48 49 50}338 339 340# 2024-06-03 dbsqlfuzz 8a44f675401a8b1f68a43bf813c4f4f72ad8f0ea341# Use of uninitialized bytecode register due to the call-function-once342# optimization at check-in 663f5dd32d9db832343#344db null NULL345do_execsql_test 5050 {346  CREATE TABLE t0(a TEXT); INSERT INTO t0 VALUES('abcd');347  CREATE TABLE t1(b TEXT);348  CREATE TABLE t2(c TEXT);349  CREATE TABLE t3(d TEXT); INSERT INTO t3 VALUES('wxyz');350  CREATE VIEW  v4(e) AS SELECT (SELECT t2.c FROM t0, t1 GROUP BY 1) FROM t2;351  SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1;352} NULL353do_execsql_test 5060 {354  DROP VIEW v4;355  CREATE VIEW  v4(e) AS SELECT (SELECT t2.c COLLATE nocase FROM t0, t1 GROUP BY 1) FROM t2;356  SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1;357} NULL358 359do_execsql_test 5070 {360  DROP VIEW v4;361  CREATE VIEW  v4(e) AS SELECT (SELECT unlikely(t2.c COLLATE nocase) FROM t0, t1 GROUP BY 1) FROM t2;362  SELECT v4.e FROM t3 LEFT JOIN v4 ON true GROUP BY 1;363} NULL364 365# 2024-06-28 dbsqlfuzz 46343912848a603e32c6072cae792eb056bac897366# Do not call sqlite3ExprToRegister() on an expression that is already367# a register.368#369do_execsql_test 5080 {370  CREATE TABLE dual(dummy TEXT);371  INSERT INTO dual VALUES('X');372  SELECT 11 = (373                SELECT b374                  FROM (375                         SELECT a AS b376                           FROM dual377                           LEFT JOIN (SELECT 22 AS a FROM dual)378                       )379                 GROUP BY b, b380              );381} 0382 383finish_test384