github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/dbpage.test (about)

     1  # 2017-10-11
     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  # This file implements regression tests for SQLite library.  The
    12  # focus of this file is testing the sqlite_dbpage virtual table.
    13  #
    14  
    15  set testdir [file dirname $argv0]
    16  source $testdir/tester.tcl
    17  set testprefix dbpage
    18  
    19  ifcapable !vtab||!compound {
    20    finish_test
    21    return
    22  }
    23  
    24  sqlite3_db_config db DEFENSIVE 0
    25  do_test 100 {
    26    execsql {
    27      PRAGMA auto_vacuum=0;
    28      PRAGMA page_size=4096;
    29      PRAGMA journal_mode=WAL;
    30    }
    31    execsql { 
    32      CREATE TABLE t1(a,b);
    33      WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)
    34        INSERT INTO t1(a,b) SELECT x, printf('%d-x%.*c',x,x,'x') FROM c;
    35      PRAGMA integrity_check;
    36    }
    37  } {ok}
    38  do_execsql_test 110 {
    39    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('main') ORDER BY pgno;
    40  } {1 X'53514C6974' 2 X'0500000001' 3 X'0D0000004E' 4 X'0D00000016'}
    41  do_execsql_test 120 {
    42    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=2;
    43  } {2 X'0500000001'}
    44  do_execsql_test 130 {
    45    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=4;
    46  } {4 X'0D00000016'}
    47  do_execsql_test 140 {
    48    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=5;
    49  } {}
    50  do_execsql_test 150 {
    51    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage WHERE pgno=0;
    52  } {}
    53  do_execsql_test 160 {
    54    ATTACH ':memory:' AS aux1;
    55    PRAGMA aux1.page_size=4096;
    56    CREATE TABLE aux1.t2(a,b,c);
    57    INSERT INTO t2 VALUES(11,12,13);
    58    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('aux1');
    59  } {1 X'53514C6974' 2 X'0D00000001'}
    60  do_execsql_test 170 {
    61    CREATE TABLE aux1.x3(x,y,z);
    62    INSERT INTO x3(x,y,z) VALUES(1,'main',1),(2,'aux1',1);
    63    SELECT pgno, schema, substr(data,1,6)
    64      FROM sqlite_dbpage, x3
    65     WHERE sqlite_dbpage.schema=x3.y AND sqlite_dbpage.pgno=x3.z
    66     ORDER BY x3.x;
    67  } {1 main SQLite 1 aux1 SQLite}
    68  
    69  do_execsql_test 200 {
    70    CREATE TEMP TABLE saved_content(x);
    71    INSERT INTO saved_content(x) SELECT data FROM sqlite_dbpage WHERE pgno=4;
    72    UPDATE sqlite_dbpage SET data=zeroblob(4096) WHERE pgno=4;
    73  } {}
    74  do_catchsql_test 210 {
    75    PRAGMA integrity_check;
    76  } {1 {database disk image is malformed}}
    77  do_execsql_test 220 {
    78    SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('main') ORDER BY pgno;
    79  } {1 X'53514C6974' 2 X'0500000001' 3 X'0D0000004E' 4 X'0000000000'}
    80  do_execsql_test 230 {
    81    UPDATE sqlite_dbpage SET data=(SELECT x FROM saved_content) WHERE pgno=4;
    82  } {}
    83  do_catchsql_test 230 {
    84    PRAGMA integrity_check;
    85  } {0 ok}
    86  do_execsql_test 240 {
    87    DELETE FROM saved_content;
    88    INSERT INTO saved_content(x) 
    89       SELECT data FROM sqlite_dbpage WHERE schema='aux1' AND pgno=2;
    90  } {}
    91  do_execsql_test 241 {
    92    UPDATE sqlite_dbpage SET data=zeroblob(4096) WHERE pgno=2 AND schema='aux1';
    93  } {}
    94  do_catchsql_test 250 {
    95    PRAGMA aux1.integrity_check;
    96  } {1 {database disk image is malformed}}
    97  do_execsql_test 260 {
    98    UPDATE sqlite_dbpage SET data=(SELECT x FROM saved_content)
    99     WHERE pgno=2 AND schema='aux1';
   100  } {}
   101  do_catchsql_test 270 {
   102    PRAGMA aux1.integrity_check;
   103  } {0 ok}
   104  
   105  finish_test