sqlite/test/prefixes.test

89 lines
2.1 KiB
Plaintext
Raw Normal View History

# 2018-01-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 file is prefixes.c extension
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix unionvtab
ifcapable !vtab {
finish_test
return
}
load_static_extension db prefixes
foreach {tn zLeft zRight expected} {
1 abcdxxx abcyy 3
2 abcdxxx bcyyy 0
3 abcdxxx ab 2
4 ab abcd 2
5 "xyz\u1234xz" "xyz\u1234xy" 5
6 "xyz\u1234" "xyz\u1234xy" 4
7 "xyz\u1234" "xyz\u1234" 4
8 "xyz\u1234xy" "xyz\u1234" 4
9 "xyz\u1234xy" "xyz\u1233" 3
10 "xyz\u1234xy" "xyz\u1235" 3
} {
do_execsql_test 1.$tn { SELECT prefix_length($zLeft, $zRight) } $expected
}
do_execsql_test 2.0 {
CREATE TABLE t1(k TEXT UNIQUE, v INTEGER);
INSERT INTO t1 VALUES
('aback', 1),
('abaft', 2),
('abandon', 3),
('abandoned', 4),
('abandoning', 5),
('abandonment', 6),
('abandons', 7),
('abase', 8),
('abased', 9),
('abasement', 10),
('abasements', 11),
('abases', 12),
('abash', 13),
('abashed', 14),
('abashes', 15),
('abashing', 16),
('abasing', 17),
('abate', 18),
('abated', 19),
('abatement', 20),
('abatements', 21);
}
foreach {tn INPUT expected} {
1 abatementt abatement
2 abashet abash
3 abandonio abandon
4 abasemenu abase
} {
do_execsql_test 2.$tn {
WITH finder(str) AS (
SELECT (SELECT max(k) FROM t1 WHERE k<=$INPUT)
UNION ALL
SELECT (
SELECT max(k) FROM t1
WHERE k<=substr($INPUT, 1, prefix_length(finder.str, $INPUT))
) FROM finder WHERE length(finder.str)>0
)
SELECT str FROM finder WHERE length(str)==prefix_length(str, $INPUT) LIMIT 1
} $expected
}
finish_test