xref: /sqlite-3.40.0/test/tkt-cbd054fa6b.test (revision 175b8f06)
1# 2010 March 25
2#
3# The author disclaims copyright to this source code.  In place of
4# 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 to verify that ticket [cbd054fa6b] has been
13# fixed.
14#
15
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18
19ifcapable !stat4 {
20  finish_test
21  return
22}
23
24proc s {blob} {
25  set ret ""
26  binary scan $blob c* bytes
27  foreach b $bytes {
28    set t [binary format c $b]
29    if {[string is print $t]} {
30      append ret $t
31    } else {
32      append ret .
33    }
34  }
35  return $ret
36}
37db function s s
38
39do_test tkt-cbd05-1.1 {
40  db eval {
41    CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT UNIQUE NOT NULL);
42    CREATE INDEX t1_x ON t1(b);
43    INSERT INTO t1 VALUES (NULL, '');
44    INSERT INTO t1 VALUES (NULL, 'A');
45    INSERT INTO t1 VALUES (NULL, 'B');
46    INSERT INTO t1 VALUES (NULL, 'C');
47    INSERT INTO t1 VALUES (NULL, 'D');
48    INSERT INTO t1 VALUES (NULL, 'E');
49    INSERT INTO t1 VALUES (NULL, 'F');
50    INSERT INTO t1 VALUES (NULL, 'G');
51    INSERT INTO t1 VALUES (NULL, 'H');
52    INSERT INTO t1 VALUES (NULL, 'I');
53    SELECT count(*) FROM t1;
54  }
55} {10}
56do_test tkt-cbd05-1.2 {
57  db eval { ANALYZE; }
58  db eval {
59    PRAGMA writable_schema = 1;
60    CREATE VIEW vvv AS
61    SELECT tbl,idx,neq,nlt,ndlt,test_extract(sample,0) AS sample
62    FROM sqlite_stat4;
63    PRAGMA writable_schema = 0;
64  }
65} {}
66do_test tkt-cbd05-1.3 {
67  execsql {
68    SELECT tbl,idx,group_concat(s(sample),' ')
69    FROM vvv
70    WHERE idx = 't1_x'
71    GROUP BY tbl,idx
72  }
73} {t1 t1_x { A B C D E F G H I}}
74
75do_test tkt-cbd05-2.1 {
76  db eval {
77    DROP TABLE t1;
78    CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE NOT NULL);
79    CREATE INDEX t1_x ON t1(b);
80    INSERT INTO t1 VALUES(NULL, X'');
81    INSERT INTO t1 VALUES(NULL, X'41');
82    INSERT INTO t1 VALUES(NULL, X'42');
83    INSERT INTO t1 VALUES(NULL, X'43');
84    INSERT INTO t1 VALUES(NULL, X'44');
85    INSERT INTO t1 VALUES(NULL, X'45');
86    INSERT INTO t1 VALUES(NULL, X'46');
87    INSERT INTO t1 VALUES(NULL, X'47');
88    INSERT INTO t1 VALUES(NULL, X'48');
89    INSERT INTO t1 VALUES(NULL, X'49');
90    SELECT count(*) FROM t1;
91  }
92} {10}
93do_test tkt-cbd05-2.2 {
94  db eval {
95    ANALYZE;
96  }
97} {}
98do_test tkt-cbd05-2.3 {
99  execsql {
100    SELECT tbl,idx,group_concat(s(sample),' ')
101    FROM vvv
102    WHERE idx = 't1_x'
103    GROUP BY tbl,idx
104  }
105} {t1 t1_x { A B C D E F G H I}}
106
107finish_test
108