xref: /sqlite-3.40.0/test/dbdata.test (revision f78408c7)
1f1173b69Sdan# 2019-04-11
2f1173b69Sdan#
3f1173b69Sdan# The author disclaims copyright to this source code.  In place of
4f1173b69Sdan# a legal notice, here is a blessing:
5f1173b69Sdan#
6f1173b69Sdan#    May you do good and not evil.
7f1173b69Sdan#    May you find forgiveness for yourself and forgive others.
8f1173b69Sdan#    May you share freely, never taking more than you give.
9f1173b69Sdan#
10f1173b69Sdan#***********************************************************************
11f1173b69Sdan# This file implements regression tests for SQLite library.  The
12f1173b69Sdan# focus of this file is testing the sqlite_dbpage virtual table.
13f1173b69Sdan#
14f1173b69Sdan
15f1173b69Sdanset testdir [file dirname $argv0]
16f1173b69Sdansource $testdir/tester.tcl
17f1173b69Sdanset testprefix dbdata
18f1173b69Sdan
19f1173b69Sdanifcapable !vtab||!compound {
20f1173b69Sdan  finish_test
21f1173b69Sdan  return
22f1173b69Sdan}
23*f78408c7Sdanif { [catch { db enable_load_extension 1 }]
24*f78408c7Sdan  || [catch { db eval { SELECT load_extension('../dbdata') } }]
25*f78408c7Sdan} {
26f1173b69Sdan  finish_test
27f1173b69Sdan  return
28f1173b69Sdan}
29f1173b69Sdan
30f1173b69Sdando_execsql_test 1.0 {
31f1173b69Sdan  CREATE TABLE T1(a, b);
32f1173b69Sdan  INSERT INTO t1(rowid, a ,b) VALUES(5, 'v', 'five');
33f1173b69Sdan  INSERT INTO t1(rowid, a, b) VALUES(10, 'x', 'ten');
34f1173b69Sdan}
35f1173b69Sdan
36f1173b69Sdando_execsql_test 1.1 {
37f1173b69Sdan  SELECT pgno, cell, field, quote(value) FROM sqlite_dbdata WHERE pgno=2;
38f1173b69Sdan} {
39f1173b69Sdan  2 0 -1 5
40f1173b69Sdan  2 0  0 'v'
41f1173b69Sdan  2 0  1 'five'
42f1173b69Sdan  2 1 -1 10
43f1173b69Sdan  2 1  0 'x'
44f1173b69Sdan  2 1  1 'ten'
45f1173b69Sdan}
46f1173b69Sdan
473b412ac2Sdanbreakpoint
48f1173b69Sdando_execsql_test 1.2 {
493b412ac2Sdan  SELECT pgno, cell, field, quote(value) FROM sqlite_dbdata;
503b412ac2Sdan} {
513b412ac2Sdan  1 0 -1 1
523b412ac2Sdan  1 0 0 'table'
533b412ac2Sdan  1 0 1 'T1'
543b412ac2Sdan  1 0 2 'T1'
553b412ac2Sdan  1 0 3 2
563b412ac2Sdan  1 0 4 {'CREATE TABLE T1(a, b)'}
573b412ac2Sdan  2 0 -1 5
583b412ac2Sdan  2 0  0 'v'
593b412ac2Sdan  2 0  1 'five'
603b412ac2Sdan  2 1 -1 10
613b412ac2Sdan  2 1  0 'x'
623b412ac2Sdan  2 1  1 'ten'
633b412ac2Sdan}
643b412ac2Sdan
653b412ac2Sdanset big [string repeat big 2000]
663b412ac2Sdando_execsql_test 1.3 {
67f1173b69Sdan  INSERT INTO t1 VALUES(NULL, $big);
68f1173b69Sdan  SELECT value FROM sqlite_dbdata WHERE pgno=2 AND cell=2 AND field=1;
69f1173b69Sdan} $big
70f1173b69Sdan
71b40af49dSdando_execsql_test 1.4 {
72b40af49dSdan  DELETE FROM t1;
73b40af49dSdan  INSERT INTO t1 VALUES(NULL, randomblob(5050));
74b40af49dSdan}
75b40af49dSdando_test 1.5 {
76b40af49dSdan  execsql {
77b40af49dSdan    SELECT quote(value) FROM sqlite_dbdata WHERE pgno=2 AND cell=0 AND field=1;
78b40af49dSdan  }
79b40af49dSdan} [db one {SELECT quote(b) FROM t1}]
80b40af49dSdan
813b412ac2Sdan#-------------------------------------------------------------------------
823b412ac2Sdanreset_db
833b412ac2Sdandb enable_load_extension 1
843b412ac2Sdandb eval { SELECT load_extension('../dbdata') }
853b412ac2Sdan
863b412ac2Sdando_execsql_test 2.0 {
873b412ac2Sdan  CREATE TABLE t1(a);
883b412ac2Sdan  CREATE INDEX i1 ON t1(a);
893b412ac2Sdan  WITH s(i) AS (
903b412ac2Sdan    SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<10
913b412ac2Sdan  )
923b412ac2Sdan  INSERT INTO t1 SELECT randomblob(900) FROM s;
933b412ac2Sdan}
943b412ac2Sdan
953b412ac2Sdando_execsql_test 2.1 {
963b412ac2Sdan  SELECT * FROM sqlite_dbptr WHERE pgno=2;
973b412ac2Sdan} {
983b412ac2Sdan  2 25   2 6   2 7   2 9   2 11   2 13   2 15   2 17   2 19   2 21
993b412ac2Sdan}
1003b412ac2Sdan
1013b412ac2Sdando_execsql_test 2.2 {
1023b412ac2Sdan  SELECT * FROM sqlite_dbptr WHERE pgno=3;
1033b412ac2Sdan} {
1043b412ac2Sdan  3 24   3 23
1053b412ac2Sdan}
1063b412ac2Sdan
1073b412ac2Sdando_execsql_test 2.3 {
1083b412ac2Sdan  SELECT * FROM sqlite_dbptr
1093b412ac2Sdan} {
1103b412ac2Sdan  2 25   2 6   2 7   2 9   2 11   2 13   2 15   2 17   2 19   2 21
1113b412ac2Sdan  3 24   3 23
1123b412ac2Sdan}
113f1173b69Sdan
114f1173b69Sdan
115f1173b69Sdanfinish_test
116