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