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