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

     1  # 2017-07-15
     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 percentile.c extension
    13  #
    14  
    15  set testdir [file dirname $argv0]
    16  source $testdir/tester.tcl
    17  set testprefix unionvtabfault
    18  
    19  ifcapable !vtab {
    20    finish_test
    21    return
    22  }
    23  
    24  forcedelete test.db2
    25  do_execsql_test 1.0 {
    26    ATTACH 'test.db2' AS aux;
    27    CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT);
    28    CREATE TABLE t2(a INTEGER PRIMARY KEY, b TEXT);
    29    CREATE TABLE aux.t3(a INTEGER PRIMARY KEY, b TEXT);
    30  
    31    INSERT INTO t1 VALUES(1, 'one'), (2, 'two'), (3, 'three');
    32    INSERT INTO t2 VALUES(10, 'ten'), (11, 'eleven'), (12, 'twelve');
    33    INSERT INTO t3 VALUES(20, 'twenty'), (21, 'twenty-one'), (22, 'twenty-two');
    34  }
    35  faultsim_save_and_close
    36  
    37  do_faultsim_test 1.1 -faults * -prep {
    38    faultsim_restore_and_reopen
    39    load_static_extension db unionvtab
    40    execsql { ATTACH 'test.db2' AS aux; }
    41    execsql { CREATE TEMP TABLE xyz(x); }
    42  } -body {
    43    execsql {
    44      CREATE VIRTUAL TABLE temp.uuu USING unionvtab(
    45      "VALUES(NULL, 't1', 1, 9),  ('main', 't2', 10, 19), ('aux', 't3', 20, 29)"
    46      );
    47    }
    48  } -test {
    49    faultsim_test_result {0 {}}             \
    50       {1 {vtable constructor failed: uuu}} \
    51       {1 {sql error: interrupted}}
    52  }
    53  
    54  faultsim_restore_and_reopen
    55  load_static_extension db unionvtab
    56  execsql { ATTACH 'test.db2' AS aux; }
    57  execsql { CREATE TEMP TABLE xyz(x); }
    58  execsql {
    59    CREATE VIRTUAL TABLE temp.uuu USING unionvtab(
    60        "VALUES(NULL, 't1', 1, 9),  ('main', 't2', 10, 19), ('aux', 't3', 20, 29)"
    61    );
    62  }
    63  do_faultsim_test 1.2 -faults oom* -prep {
    64  } -body {
    65    execsql { SELECT * FROM uuu }
    66  } -test {
    67    faultsim_test_result {0 {1 one 2 two 3 three 10 ten 11 eleven 12 twelve 20 twenty 21 twenty-one 22 twenty-two}} 
    68  }
    69  
    70  #-------------------------------------------------------------------------
    71  # Error while registering the two vtab modules.
    72  do_faultsim_test 2.0 -faults * -prep {
    73    catch { db close }
    74    sqlite3 db :memory:
    75  } -body {
    76    load_static_extension db unionvtab
    77  } -test {
    78    faultsim_test_result {0 {}} {1 {initialization of unionvtab failed: }}
    79  }
    80  
    81  
    82  
    83  finish_test