Merge sqlite-release(3.43.1) into prerelease-integration
[sqlcipher.git] / test / prefixes.test
blob2080905805c8b118ec768745a1001d9d9701033f
1 # 2018-01-15
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
11 # This file implements regression tests for SQLite library.  The
12 # focus of this file is prefixes.c extension
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
17 set testprefix unionvtab
19 ifcapable !vtab {
20   finish_test
21   return
24 load_static_extension db prefixes
26 foreach {tn zLeft zRight expected} {
27   1 abcdxxx abcyy    3
28   2 abcdxxx bcyyy    0
29   3 abcdxxx ab       2
30   4 ab      abcd     2
32   5 "xyz\u1234xz" "xyz\u1234xy" 5
33   6 "xyz\u1234"   "xyz\u1234xy" 4
34   7 "xyz\u1234"   "xyz\u1234"   4
35   8 "xyz\u1234xy" "xyz\u1234"   4
36   9 "xyz\u1234xy" "xyz\u1233"   3
37  10 "xyz\u1234xy" "xyz\u1235"   3
38 } {
39   do_execsql_test 1.$tn { SELECT prefix_length($zLeft, $zRight) } $expected
43 do_execsql_test 2.0 {
44   CREATE TABLE t1(k TEXT UNIQUE, v INTEGER);
45   INSERT INTO t1 VALUES
46     ('aback', 1),
47     ('abaft', 2),
48     ('abandon', 3),
49     ('abandoned', 4),
50     ('abandoning', 5),
51     ('abandonment', 6),
52     ('abandons', 7),
53     ('abase', 8),
54     ('abased', 9),
55     ('abasement', 10),
56     ('abasements', 11),
57     ('abases', 12),
58     ('abash', 13),
59     ('abashed', 14),
60     ('abashes', 15),
61     ('abashing', 16),
62     ('abasing', 17),
63     ('abate', 18),
64     ('abated', 19),
65     ('abatement', 20),
66     ('abatements', 21);
69 foreach {tn INPUT expected} {
70   1 abatementt   abatement
71   2 abashet      abash
72   3 abandonio    abandon
73   4 abasemenu    abase
74 } {
75   do_execsql_test 2.$tn {
76     WITH finder(str) AS (
77       SELECT (SELECT max(k) FROM t1 WHERE k<=$INPUT)
78         UNION ALL
79         SELECT (
80           SELECT max(k) FROM t1 
81           WHERE k<=substr($INPUT, 1, prefix_length(finder.str, $INPUT))
82         ) FROM finder WHERE length(finder.str)>0
83       )
84     SELECT str FROM finder WHERE length(str)==prefix_length(str, $INPUT) LIMIT 1
85   } $expected
88 finish_test