xref: /sqlite-3.40.0/test/vtab_err.test (revision 63e50b9e)
1a298e90dSdanielk1977# 2006 June 10
2a298e90dSdanielk1977#
3a298e90dSdanielk1977# The author disclaims copyright to this source code.  In place of
4a298e90dSdanielk1977# a legal notice, here is a blessing:
5a298e90dSdanielk1977#
6a298e90dSdanielk1977#    May you do good and not evil.
7a298e90dSdanielk1977#    May you find forgiveness for yourself and forgive others.
8a298e90dSdanielk1977#    May you share freely, never taking more than you give.
9a298e90dSdanielk1977#
10a298e90dSdanielk1977#***********************************************************************
11a298e90dSdanielk1977#
125a3032b3Sdrh# $Id: vtab_err.test,v 1.8 2007/09/03 16:12:10 drh Exp $
13a298e90dSdanielk1977
14a298e90dSdanielk1977set testdir [file dirname $argv0]
15a298e90dSdanielk1977source $testdir/tester.tcl
16a298e90dSdanielk1977
17a298e90dSdanielk1977ifcapable !vtab {
18a298e90dSdanielk1977  finish_test
19a298e90dSdanielk1977  return
20a298e90dSdanielk1977}
21a298e90dSdanielk1977
225a3032b3Sdrh
2373bdf077Sdrhunset -nocomplain echo_module_begin_fail
24a298e90dSdanielk1977do_ioerr_test vtab_err-1 -tclprep {
25a298e90dSdanielk1977  register_echo_module [sqlite3_connection_pointer db]
26a298e90dSdanielk1977} -sqlbody {
27a298e90dSdanielk1977  BEGIN;
28a298e90dSdanielk1977  CREATE TABLE r(a PRIMARY KEY, b, c);
29a298e90dSdanielk1977  CREATE VIRTUAL TABLE e USING echo(r);
30a298e90dSdanielk1977  INSERT INTO e VALUES(1, 2, 3);
31a298e90dSdanielk1977  INSERT INTO e VALUES('a', 'b', 'c');
32a298e90dSdanielk1977  UPDATE e SET c = 10;
33a298e90dSdanielk1977  DELETE FROM e WHERE a = 'a';
34a298e90dSdanielk1977  COMMIT;
35a298e90dSdanielk1977  BEGIN;
36a298e90dSdanielk1977    CREATE TABLE r2(a, b, c);
37a298e90dSdanielk1977    INSERT INTO r2 SELECT * FROM e;
38a298e90dSdanielk1977    INSERT INTO e SELECT a||'x', b, c FROM r2;
39a298e90dSdanielk1977  COMMIT;
40a298e90dSdanielk1977}
41a298e90dSdanielk1977
425a3032b3Sdrhsource $testdir/malloc_common.tcl
435a3032b3Sdrh
445a3032b3Sdrh
45be718897Sdanielk1977do_malloc_test vtab_err-2 -tclprep {
46be718897Sdanielk1977  register_echo_module [sqlite3_connection_pointer db]
47be718897Sdanielk1977} -sqlbody {
48be718897Sdanielk1977  BEGIN;
49be718897Sdanielk1977  CREATE TABLE r(a PRIMARY KEY, b, c);
50be718897Sdanielk1977  CREATE VIRTUAL TABLE e USING echo(r);
51be718897Sdanielk1977  INSERT INTO e VALUES(1, 2, 3);
52be718897Sdanielk1977  INSERT INTO e VALUES('a', 'b', 'c');
53be718897Sdanielk1977  UPDATE e SET c = 10;
54be718897Sdanielk1977  DELETE FROM e WHERE a = 'a';
55be718897Sdanielk1977  COMMIT;
56be718897Sdanielk1977  BEGIN;
57be718897Sdanielk1977    CREATE TABLE r2(a, b, c);
58be718897Sdanielk1977    INSERT INTO r2 SELECT * FROM e;
59be718897Sdanielk1977    INSERT INTO e SELECT a||'x', b, c FROM r2;
60be718897Sdanielk1977  COMMIT;
61be718897Sdanielk1977}
62be718897Sdanielk1977
63a1644fd8Sdanielk1977sqlite3_memdebug_fail -1
64222a757dSdanielk1977
65*63e50b9eSdanreset_db
66*63e50b9eSdanregister_echo_module [sqlite3_connection_pointer db]
67*63e50b9eSdando_execsql_test vtab_err-3.0 {
68*63e50b9eSdan  CREATE TABLE r(a PRIMARY KEY, b, c);
69*63e50b9eSdan  CREATE VIRTUAL TABLE e USING echo(r);
70*63e50b9eSdan}
71*63e50b9eSdanfaultsim_save_and_close
72*63e50b9eSdan
73*63e50b9eSdando_faultsim_test vtab_err-3 -faults oom-t* -prep {
74*63e50b9eSdan  faultsim_restore_and_reopen
75*63e50b9eSdan  register_echo_module [sqlite3_connection_pointer db]
76*63e50b9eSdan} -body {
77*63e50b9eSdan  execsql {
78*63e50b9eSdan    BEGIN;
79*63e50b9eSdan      CREATE TABLE xyz(x);
80*63e50b9eSdan      SELECT a FROM e;
81*63e50b9eSdan    COMMIT;
82*63e50b9eSdan  }
83*63e50b9eSdan} -test {
84*63e50b9eSdan  faultsim_test_result {0 {}}
85*63e50b9eSdan}
86*63e50b9eSdan
87a298e90dSdanielk1977finish_test
88