2010-03-26 04:54:33 +03:00
|
|
|
# 2010 March 25
|
|
|
|
#
|
|
|
|
# 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 tests to verify that ticket [cbd054fa6b] has been
|
|
|
|
# fixed.
|
|
|
|
#
|
|
|
|
|
|
|
|
set testdir [file dirname $argv0]
|
|
|
|
source $testdir/tester.tcl
|
|
|
|
|
2019-08-08 18:24:17 +03:00
|
|
|
ifcapable !stat4 {
|
2010-03-26 04:54:33 +03:00
|
|
|
finish_test
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2013-08-04 00:24:58 +04:00
|
|
|
proc s {blob} {
|
|
|
|
set ret ""
|
|
|
|
binary scan $blob c* bytes
|
|
|
|
foreach b $bytes {
|
|
|
|
set t [binary format c $b]
|
|
|
|
if {[string is print $t]} {
|
|
|
|
append ret $t
|
|
|
|
} else {
|
|
|
|
append ret .
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
db function s s
|
|
|
|
|
2010-03-26 04:54:33 +03:00
|
|
|
do_test tkt-cbd05-1.1 {
|
|
|
|
db eval {
|
|
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT UNIQUE NOT NULL);
|
|
|
|
CREATE INDEX t1_x ON t1(b);
|
|
|
|
INSERT INTO t1 VALUES (NULL, '');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'A');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'B');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'C');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'D');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'E');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'F');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'G');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'H');
|
|
|
|
INSERT INTO t1 VALUES (NULL, 'I');
|
|
|
|
SELECT count(*) FROM t1;
|
|
|
|
}
|
|
|
|
} {10}
|
|
|
|
do_test tkt-cbd05-1.2 {
|
2013-08-13 00:14:04 +04:00
|
|
|
db eval { ANALYZE; }
|
2019-08-08 18:24:17 +03:00
|
|
|
db eval {
|
|
|
|
PRAGMA writable_schema = 1;
|
|
|
|
CREATE VIEW vvv AS
|
|
|
|
SELECT tbl,idx,neq,nlt,ndlt,test_extract(sample,0) AS sample
|
|
|
|
FROM sqlite_stat4;
|
|
|
|
PRAGMA writable_schema = 0;
|
2010-03-26 04:54:33 +03:00
|
|
|
}
|
|
|
|
} {}
|
|
|
|
do_test tkt-cbd05-1.3 {
|
|
|
|
execsql {
|
2013-08-04 00:24:58 +04:00
|
|
|
SELECT tbl,idx,group_concat(s(sample),' ')
|
2013-08-13 00:14:04 +04:00
|
|
|
FROM vvv
|
2010-03-26 04:54:33 +03:00
|
|
|
WHERE idx = 't1_x'
|
|
|
|
GROUP BY tbl,idx
|
|
|
|
}
|
2013-08-13 00:14:04 +04:00
|
|
|
} {t1 t1_x { A B C D E F G H I}}
|
2010-03-26 04:54:33 +03:00
|
|
|
|
|
|
|
do_test tkt-cbd05-2.1 {
|
|
|
|
db eval {
|
|
|
|
DROP TABLE t1;
|
|
|
|
CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE NOT NULL);
|
|
|
|
CREATE INDEX t1_x ON t1(b);
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'41');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'42');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'43');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'44');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'45');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'46');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'47');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'48');
|
|
|
|
INSERT INTO t1 VALUES(NULL, X'49');
|
|
|
|
SELECT count(*) FROM t1;
|
|
|
|
}
|
|
|
|
} {10}
|
|
|
|
do_test tkt-cbd05-2.2 {
|
|
|
|
db eval {
|
|
|
|
ANALYZE;
|
|
|
|
}
|
|
|
|
} {}
|
|
|
|
do_test tkt-cbd05-2.3 {
|
|
|
|
execsql {
|
2013-08-04 00:24:58 +04:00
|
|
|
SELECT tbl,idx,group_concat(s(sample),' ')
|
2013-08-13 00:14:04 +04:00
|
|
|
FROM vvv
|
2010-03-26 04:54:33 +03:00
|
|
|
WHERE idx = 't1_x'
|
|
|
|
GROUP BY tbl,idx
|
|
|
|
}
|
2013-08-13 00:14:04 +04:00
|
|
|
} {t1 t1_x { A B C D E F G H I}}
|
2010-03-26 04:54:33 +03:00
|
|
|
|
|
|
|
finish_test
|