modernc.org/cc@v1.0.1/v2/testdata/_sqlite/test/delete_db.test (about)

     1  # 2016 September 10
     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 code in test_delete.c (the
    13  # sqlite3_delete_database() API).
    14  #
    15  
    16  set testdir [file dirname $argv0]
    17  source $testdir/tester.tcl
    18  set testprefix delete_db
    19  
    20  proc delete_all {} {
    21    foreach f [glob -nocomplain test2*] { file delete $f }
    22    foreach f [glob -nocomplain test3*] { file delete $f }
    23  }
    24  
    25  proc copydb {} {
    26    foreach f [glob -nocomplain test3*] { file delete $f }
    27    foreach f [glob -nocomplain test2*] { 
    28      set p [string range $f 5 end]
    29      file copy "test2$p" "test3$p"
    30    }
    31  }
    32  
    33  proc files {} {
    34    lsort [glob -nocomplain test3*]
    35  }
    36  
    37  db close
    38  delete_all
    39  sqlite3 db test2.database
    40  
    41  #-------------------------------------------------------------------------
    42  #
    43  # 1.1: Journal files.
    44  # 1.2: Wal files.
    45  # 1.3: Multiplexor with journal file.
    46  # 1.4: Multiplexor with wal file.
    47  #
    48  # 2.* are a copy of 1.* with the multiplexor enabled.
    49  #
    50  # 3.* tests errors.
    51  #
    52  
    53  do_test 1.1.0 {
    54    execsql {
    55      CREATE TABLE t1(x, y);
    56      BEGIN;
    57        INSERT INTO t1 VALUES(1, 2);
    58    }
    59    copydb
    60    files
    61  } {test3.database test3.database-journal}
    62  
    63  do_test 1.1.1 {
    64    sqlite3_delete_database test3.database
    65    files
    66  } {}
    67  
    68  do_test 1.2.0 {
    69    execsql {
    70      COMMIT;
    71      PRAGMA journal_mode = wal;
    72      INSERT INTO t1 VALUES(3, 4);
    73    }
    74    copydb
    75    files
    76  } {test3.database test3.database-shm test3.database-wal}
    77  do_test 1.2.1 {
    78    sqlite3_delete_database test3.database
    79    files
    80  } {}
    81  
    82  db close
    83  delete_all
    84  sqlite3_multiplex_initialize "" 0
    85  sqlite3 db test2.database -vfs multiplex
    86  sqlite3_multiplex_control db "main" chunk_size 32768
    87  
    88  do_test 1.3.0 {
    89    execsql { PRAGMA auto_vacuum = 0; }
    90    execsql {
    91      CREATE TABLE x1(a, b);
    92      WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
    93      INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
    94      BEGIN;
    95        UPDATE x1 SET a=randomblob(101)
    96    }
    97    copydb
    98    files
    99  } [list {*}{
   100    test3.database test3.database-journal test3.database001 
   101    test3.database002 test3.database003
   102  }]
   103  do_test 1.3.1 {
   104    sqlite3_delete_database test3.database
   105    files
   106  } {}
   107  
   108  
   109  do_test 1.4.0 {
   110    execsql {
   111      COMMIT;
   112      PRAGMA journal_mode = wal;
   113      UPDATE x1 SET a=randomblob(102)
   114    }
   115    copydb
   116    files
   117  } [list {*}{
   118    test3.database test3.database-shm test3.database-wal test3.database001 
   119    test3.database002 test3.database003
   120  }]
   121  do_test 1.4.1 {
   122    sqlite3_delete_database test3.database
   123    files
   124  } {}
   125  
   126  
   127  ifcapable 8_3_names {
   128    db close
   129    delete_all
   130    sqlite3 db file:test2.db?8_3_names=1 -uri 1
   131  
   132    do_test 2.1.0 {
   133      execsql {
   134        CREATE TABLE t1(x, y);
   135        BEGIN;
   136          INSERT INTO t1 VALUES(1, 2);
   137      }
   138      copydb
   139      files
   140    } {test3.db test3.nal}
   141    
   142    do_test 2.1.1 {
   143      sqlite3_delete_database test3.db
   144      files
   145    } {}
   146    
   147    do_test 2.2.0 {
   148      execsql {
   149        COMMIT;
   150        PRAGMA journal_mode = wal;
   151        INSERT INTO t1 VALUES(3, 4);
   152      }
   153      copydb
   154      files
   155    } {test3.db test3.shm test3.wal}
   156    do_test 2.2.1 {
   157      sqlite3_delete_database test3.db
   158      files
   159    } {}
   160  
   161  
   162    db close
   163    delete_all
   164    sqlite3_multiplex_initialize "" 0
   165    sqlite3 db file:test2.db?8_3_names=1 -uri 1 -vfs multiplex
   166    sqlite3_multiplex_control db "main" chunk_size 32768
   167    
   168    do_test 2.3.0 {
   169      execsql { PRAGMA auto_vacuum = 0; }
   170      execsql {
   171        CREATE TABLE x1(a, b);
   172        WITH s(i) AS ( VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<1000 )
   173        INSERT INTO x1 SELECT randomblob(100), randomblob(100) FROM s;
   174        BEGIN;
   175          UPDATE x1 SET a=randomblob(101)
   176      }
   177      copydb
   178      files
   179    } [list {*}{
   180      test3.001 test3.002 test3.003 test3.db test3.nal 
   181    }]
   182    do_test 2.3.1 {
   183      sqlite3_delete_database test3.db
   184      files
   185    } {}
   186    
   187    
   188    do_test 2.4.0 {
   189      execsql {
   190        COMMIT;
   191        PRAGMA journal_mode = wal;
   192        UPDATE x1 SET a=randomblob(102)
   193      }
   194      copydb
   195      files
   196    } [list {*}{
   197      test3.001 test3.002 test3.003 test3.db test3.db-shm test3.wal 
   198    }]
   199    do_test 2.4.1 {
   200      sqlite3_delete_database test3.db
   201      files
   202    } {}
   203  }
   204  
   205  db close
   206  delete_all
   207  sqlite3_multiplex_shutdown 
   208  
   209  do_test 3.0 {
   210    file mkdir dir2.db
   211    sqlite3_delete_database dir2.db
   212  } {SQLITE_ERROR}
   213  do_test 3.1 {
   214    sqlite3_delete_database dir2.db/test.db
   215  } {SQLITE_OK}
   216  
   217  finish_test