172806e489
have repeated columns with different collating sequences. FossilOrigin-Name: ce1e2b88777e00a82c04abe5ba35eec81b5f324e462f099cd00b21054f369688
184 lines
5.3 KiB
Plaintext
184 lines
5.3 KiB
Plaintext
# 2016-04-15
|
|
#
|
|
# The author disclaims copyright to this source code. In place of
|
|
# a legal notice, here is a blessing:
|
|
#
|
|
# May you do good and not evil.
|
|
# May you find forgiveness for yourself and forgive others.
|
|
# May you share freely, never taking more than you give.
|
|
#
|
|
#***********************************************************************
|
|
# This file implements regression tests for SQLite library. The
|
|
# focus of this script is DISTINCT queries using the skip-ahead
|
|
# optimization.
|
|
#
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
|
|
set testprefix distinct2
|
|
|
|
do_execsql_test 100 {
|
|
CREATE TABLE t1(x INTEGER PRIMARY KEY);
|
|
INSERT INTO t1 VALUES(0),(1),(2);
|
|
CREATE TABLE t2 AS
|
|
SELECT DISTINCT a.x AS aa, b.x AS bb
|
|
FROM t1 a, t1 b;
|
|
SELECT *, '|' FROM t2 ORDER BY aa, bb;
|
|
} {0 0 | 0 1 | 0 2 | 1 0 | 1 1 | 1 2 | 2 0 | 2 1 | 2 2 |}
|
|
do_execsql_test 110 {
|
|
DROP TABLE t2;
|
|
CREATE TABLE t2 AS
|
|
SELECT DISTINCT a.x AS aa, b.x AS bb
|
|
FROM t1 a, t1 b
|
|
WHERE a.x IN t1 AND b.x IN t1;
|
|
SELECT *, '|' FROM t2 ORDER BY aa, bb;
|
|
} {0 0 | 0 1 | 0 2 | 1 0 | 1 1 | 1 2 | 2 0 | 2 1 | 2 2 |}
|
|
do_execsql_test 120 {
|
|
CREATE TABLE t102 (i0 TEXT UNIQUE NOT NULL);
|
|
INSERT INTO t102 VALUES ('0'),('1'),('2');
|
|
DROP TABLE t2;
|
|
CREATE TABLE t2 AS
|
|
SELECT DISTINCT *
|
|
FROM t102 AS t0
|
|
JOIN t102 AS t4 ON (t2.i0 IN t102)
|
|
NATURAL JOIN t102 AS t3
|
|
JOIN t102 AS t1 ON (t0.i0 IN t102)
|
|
JOIN t102 AS t2 ON (t2.i0=+t0.i0 OR (t0.i0<>500 AND t2.i0=t1.i0));
|
|
SELECT *, '|' FROM t2 ORDER BY 1, 2, 3, 4, 5;
|
|
} {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 |}
|
|
|
|
do_execsql_test 400 {
|
|
CREATE TABLE t4(a,b,c,d,e,f,g,h,i,j);
|
|
INSERT INTO t4 VALUES(0,1,2,3,4,5,6,7,8,9);
|
|
INSERT INTO t4 SELECT * FROM t4;
|
|
INSERT INTO t4 SELECT * FROM t4;
|
|
CREATE INDEX t4x ON t4(c,d,e);
|
|
SELECT DISTINCT a,b,c FROM t4 WHERE a=0 AND b=1;
|
|
} {0 1 2}
|
|
do_execsql_test 410 {
|
|
SELECT DISTINCT a,b,c,d FROM t4 WHERE a=0 AND b=1;
|
|
} {0 1 2 3}
|
|
do_execsql_test 411 {
|
|
SELECT DISTINCT d,a,b,c FROM t4 WHERE a=0 AND b=1;
|
|
} {3 0 1 2}
|
|
do_execsql_test 420 {
|
|
SELECT DISTINCT a,b,c,d,e FROM t4 WHERE a=0 AND b=1;
|
|
} {0 1 2 3 4}
|
|
do_execsql_test 430 {
|
|
SELECT DISTINCT a,b,c,d,e,f FROM t4 WHERE a=0 AND b=1;
|
|
} {0 1 2 3 4 5}
|
|
|
|
do_execsql_test 500 {
|
|
CREATE TABLE t5(a INT, b INT);
|
|
CREATE UNIQUE INDEX t5x ON t5(a+b);
|
|
INSERT INTO t5(a,b) VALUES(0,0),(1,0),(1,1),(0,3);
|
|
CREATE TEMP TABLE out AS SELECT DISTINCT a+b FROM t5;
|
|
SELECT * FROM out ORDER BY 1;
|
|
} {0 1 2 3}
|
|
|
|
do_execsql_test 600 {
|
|
CREATE TABLE t6a(x INTEGER PRIMARY KEY);
|
|
INSERT INTO t6a VALUES(1);
|
|
CREATE TABLE t6b(y INTEGER PRIMARY KEY);
|
|
INSERT INTO t6b VALUES(2),(3);
|
|
SELECT DISTINCT x, x FROM t6a, t6b;
|
|
} {1 1}
|
|
|
|
do_execsql_test 700 {
|
|
CREATE TABLE t7(a, b, c);
|
|
WITH s(i) AS (
|
|
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<200
|
|
)
|
|
INSERT INTO t7 SELECT i/100, i/50, i FROM s;
|
|
}
|
|
do_execsql_test 710 {
|
|
SELECT DISTINCT a, b FROM t7;
|
|
} {
|
|
0 0 0 1
|
|
1 2 1 3
|
|
}
|
|
do_execsql_test 720 {
|
|
SELECT DISTINCT a, b+1 FROM t7;
|
|
} {
|
|
0 1 0 2
|
|
1 3 1 4
|
|
}
|
|
do_execsql_test 730 {
|
|
CREATE INDEX i7 ON t7(a, b+1);
|
|
ANALYZE;
|
|
SELECT DISTINCT a, b+1 FROM t7;
|
|
} {
|
|
0 1 0 2
|
|
1 3 1 4
|
|
}
|
|
|
|
do_execsql_test 800 {
|
|
CREATE TABLE t8(a, b, c);
|
|
WITH s(i) AS (
|
|
SELECT 1 UNION ALL SELECT i+1 FROM s WHERE (i+1)<100
|
|
)
|
|
INSERT INTO t8 SELECT i/40, i/20, i/40 FROM s;
|
|
}
|
|
|
|
do_execsql_test 820 {
|
|
SELECT DISTINCT a, b, c FROM t8;
|
|
} {
|
|
0 0 0 0 1 0
|
|
1 2 1 1 3 1
|
|
2 4 2
|
|
}
|
|
|
|
do_execsql_test 820 {
|
|
SELECT DISTINCT a, b, c FROM t8 WHERE b=3;
|
|
} {1 3 1}
|
|
|
|
do_execsql_test 830 {
|
|
CREATE INDEX i8 ON t8(a, c);
|
|
ANALYZE;
|
|
SELECT DISTINCT a, b, c FROM t8 WHERE b=3;
|
|
} {1 3 1}
|
|
|
|
do_execsql_test 900 {
|
|
CREATE TABLE t9(v);
|
|
INSERT INTO t9 VALUES
|
|
('abcd'), ('Abcd'), ('aBcd'), ('ABcd'), ('abCd'), ('AbCd'), ('aBCd'),
|
|
('ABCd'), ('abcD'), ('AbcD'), ('aBcD'), ('ABcD'), ('abCD'), ('AbCD'),
|
|
('aBCD'), ('ABCD'),
|
|
('wxyz'), ('Wxyz'), ('wXyz'), ('WXyz'), ('wxYz'), ('WxYz'), ('wXYz'),
|
|
('WXYz'), ('wxyZ'), ('WxyZ'), ('wXyZ'), ('WXyZ'), ('wxYZ'), ('WxYZ'),
|
|
('wXYZ'), ('WXYZ');
|
|
}
|
|
|
|
do_execsql_test 910 {
|
|
SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v;
|
|
} {
|
|
ABCD ABCD ABCd ABCd ABcD ABcD ABcd ABcd AbCD
|
|
AbCD AbCd AbCd AbcD AbcD Abcd Abcd
|
|
WXYZ WXYZ WXYz WXYz WXyZ WXyZ WXyz WXyz WxYZ
|
|
WxYZ WxYz WxYz WxyZ WxyZ Wxyz Wxyz
|
|
aBCD aBCD aBCd aBCd aBcD aBcD aBcd aBcd abCD
|
|
abCD abCd abCd abcD abcD abcd abcd
|
|
wXYZ wXYZ wXYz wXYz wXyZ wXyZ wXyz wXyz wxYZ
|
|
wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz
|
|
}
|
|
|
|
do_execsql_test 920 {
|
|
CREATE INDEX i9 ON t9(v COLLATE NOCASE, v);
|
|
ANALYZE;
|
|
|
|
SELECT DISTINCT v COLLATE NOCASE, v FROM t9 ORDER BY +v;
|
|
} {
|
|
ABCD ABCD ABCd ABCd ABcD ABcD ABcd ABcd AbCD
|
|
AbCD AbCd AbCd AbcD AbcD Abcd Abcd
|
|
WXYZ WXYZ WXYz WXYz WXyZ WXyZ WXyz WXyz WxYZ
|
|
WxYZ WxYz WxYz WxyZ WxyZ Wxyz Wxyz
|
|
aBCD aBCD aBCd aBCd aBcD aBcD aBcd aBcd abCD
|
|
abCD abCd abCd abcD abcD abcd abcd
|
|
wXYZ wXYZ wXYz wXYz wXyZ wXyZ wXyz wXyz wxYZ
|
|
wxYZ wxYz wxYz wxyZ wxyZ wxyz wxyz
|
|
}
|
|
|
|
|
|
finish_test
|