blob: 0d3de8ef49673cdd046692dac3e275ac74e414e9 [file] [log] [blame]
drh2fc865c2017-12-16 20:20:37 +00001# 2017-12-16
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#
drh092457b2017-12-29 15:04:49 +000012# Test cases for the sqlite_unsupported_offset() function.
drh2fc865c2017-12-16 20:20:37 +000013#
drh9af41ff2017-12-29 16:37:33 +000014# Some of the tests in this file depend on the exact placement of content
15# within b-tree pages. Such placement is at the implementations discretion,
16# and so it is possible for results to change from one release to the next.
17#
drh2fc865c2017-12-16 20:20:37 +000018set testdir [file dirname $argv0]
19source $testdir/tester.tcl
drh092457b2017-12-29 15:04:49 +000020ifcapable !offset_sql_func {
21 finish_test
22 return
23}
drh2fc865c2017-12-16 20:20:37 +000024
25do_execsql_test func6-100 {
drh9af41ff2017-12-29 16:37:33 +000026 PRAGMA page_size=4096;
27 PRAGMA auto_vacuum=NONE;
drh2fc865c2017-12-16 20:20:37 +000028 CREATE TABLE t1(a,b,c,d);
29 WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)
30 INSERT INTO t1(a,b,c,d) SELECT printf('abc%03x',x), x, 1000-x, NULL FROM c;
drh9af41ff2017-12-29 16:37:33 +000031 CREATE INDEX t1a ON t1(a);
32 CREATE INDEX t1bc ON t1(b,c);
33 CREATE TABLE t2(x TEXT PRIMARY KEY, y) WITHOUT ROWID;
34 INSERT INTO t2(x,y) SELECT a, b FROM t1;
drh2fc865c2017-12-16 20:20:37 +000035}
36do_execsql_test func6-110 {
drh9af41ff2017-12-29 16:37:33 +000037 SELECT a, sqlite_unsupported_offset(d)/4096 + 1,
38 sqlite_unsupported_offset(d)%4096 FROM t1
drh092457b2017-12-29 15:04:49 +000039 ORDER BY rowid LIMIT 2;
drh9af41ff2017-12-29 16:37:33 +000040} {abc001 2 4084 abc002 2 4069}
drh2fc865c2017-12-16 20:20:37 +000041do_execsql_test func6-120 {
drh092457b2017-12-29 15:04:49 +000042 SELECT a, typeof(sqlite_unsupported_offset(+a)) FROM t1
43 ORDER BY rowid LIMIT 2;
drh2fc865c2017-12-16 20:20:37 +000044} {abc001 null abc002 null}
45do_execsql_test func6-130 {
drh9af41ff2017-12-29 16:37:33 +000046 SELECT a, sqlite_unsupported_offset(a)/4096+1,
47 sqlite_unsupported_offset(a)%4096
48 FROM t1
drh092457b2017-12-29 15:04:49 +000049 ORDER BY a LIMIT 2;
drh9af41ff2017-12-29 16:37:33 +000050} {abc001 3 4087 abc002 3 4076}
drh2fc865c2017-12-16 20:20:37 +000051do_execsql_test func6-140 {
drh9af41ff2017-12-29 16:37:33 +000052 SELECT a, sqlite_unsupported_offset(d)/4096+1,
53 sqlite_unsupported_offset(d)%4096
54 FROM t1
drh092457b2017-12-29 15:04:49 +000055 ORDER BY a LIMIT 2;
drh9af41ff2017-12-29 16:37:33 +000056} {abc001 2 4084 abc002 2 4069}
57do_execsql_test func6-150 {
58 SELECT a,
59 sqlite_unsupported_offset(a)/4096+1,
60 sqlite_unsupported_offset(a)%4096,
61 sqlite_unsupported_offset(d)/4096+1,
62 sqlite_unsupported_offset(d)%4096
63 FROM t1
64 ORDER BY a LIMIT 2;
65} {abc001 3 4087 2 4084 abc002 3 4076 2 4069}
66do_execsql_test func6-160 {
67 SELECT b,
68 sqlite_unsupported_offset(b)/4096+1,
69 sqlite_unsupported_offset(b)%4096,
70 sqlite_unsupported_offset(c)/4096+1,
71 sqlite_unsupported_offset(c)%4096,
72 sqlite_unsupported_offset(d)/4096+1,
73 sqlite_unsupported_offset(d)%4096
74 FROM t1
75 ORDER BY b LIMIT 2;
76} {1 4 4090 4 4090 2 4084 2 4 4081 4 4081 2 4069}
77
78
79do_execsql_test func6-200 {
80 SELECT y, sqlite_unsupported_offset(y)/4096+1,
81 sqlite_unsupported_offset(y)%4096
82 FROM t2
83 ORDER BY x LIMIT 2;
84} {1 5 4087 2 5 4076}
drh2fc865c2017-12-16 20:20:37 +000085
86finish_test