Annotation of embedaddon/sqlite3/test/vtab4.test, revision 1.1
1.1 ! misho 1: # 2006 June 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 is on testing the following virtual table methods:
! 13: #
! 14: # xBegin
! 15: # xSync
! 16: # xCommit
! 17: # xRollback
! 18: #
! 19: # $Id: vtab4.test,v 1.3 2008/07/12 14:52:21 drh Exp $
! 20:
! 21: set testdir [file dirname $argv0]
! 22: source $testdir/tester.tcl
! 23:
! 24: unset -nocomplain echo_module
! 25: unset -nocomplain echo_module_sync_fail
! 26:
! 27: ifcapable !vtab {
! 28: finish_test
! 29: return
! 30: }
! 31:
! 32: # Register the echo module
! 33: db cache size 0
! 34: register_echo_module [sqlite3_connection_pointer db]
! 35:
! 36: do_test vtab4-1.1 {
! 37: execsql {
! 38: CREATE TABLE treal(a PRIMARY KEY, b, c);
! 39: CREATE VIRTUAL TABLE techo USING echo(treal);
! 40: }
! 41: } {}
! 42:
! 43: # Test an INSERT, UPDATE and DELETE statement on the virtual table
! 44: # in an implicit transaction. Each should result in a single call
! 45: # to xBegin, xSync and xCommit.
! 46: #
! 47: do_test vtab4-1.2 {
! 48: set echo_module [list]
! 49: execsql {
! 50: INSERT INTO techo VALUES(1, 2, 3);
! 51: }
! 52: set echo_module
! 53: } {xBegin echo(treal) xSync echo(treal) xCommit echo(treal)}
! 54: do_test vtab4-1.3 {
! 55: set echo_module [list]
! 56: execsql {
! 57: UPDATE techo SET a = 2;
! 58: }
! 59: set echo_module
! 60: } [list xBestIndex {SELECT rowid, * FROM 'treal'} \
! 61: xBegin echo(treal) \
! 62: xFilter {SELECT rowid, * FROM 'treal'} \
! 63: xSync echo(treal) \
! 64: xCommit echo(treal) \
! 65: ]
! 66: do_test vtab4-1.4 {
! 67: set echo_module [list]
! 68: execsql {
! 69: DELETE FROM techo;
! 70: }
! 71: set echo_module
! 72: } [list xBestIndex {SELECT rowid, * FROM 'treal'} \
! 73: xBegin echo(treal) \
! 74: xFilter {SELECT rowid, * FROM 'treal'} \
! 75: xSync echo(treal) \
! 76: xCommit echo(treal) \
! 77: ]
! 78:
! 79: # Ensure xBegin is not called more than once in a single transaction.
! 80: #
! 81: do_test vtab4-2.1 {
! 82: set echo_module [list]
! 83: execsql {
! 84: BEGIN;
! 85: INSERT INTO techo VALUES(1, 2, 3);
! 86: INSERT INTO techo VALUES(4, 5, 6);
! 87: INSERT INTO techo VALUES(7, 8, 9);
! 88: COMMIT;
! 89: }
! 90: set echo_module
! 91: } {xBegin echo(treal) xSync echo(treal) xCommit echo(treal)}
! 92:
! 93: # Try a transaction with two virtual tables.
! 94: #
! 95: do_test vtab4-2.2 {
! 96: execsql {
! 97: CREATE TABLE sreal(a, b, c UNIQUE);
! 98: CREATE VIRTUAL TABLE secho USING echo(sreal);
! 99: }
! 100: set echo_module [list]
! 101: execsql {
! 102: BEGIN;
! 103: INSERT INTO secho SELECT * FROM techo;
! 104: DELETE FROM techo;
! 105: COMMIT;
! 106: }
! 107: set echo_module
! 108: } [list xBestIndex {SELECT rowid, * FROM 'treal'} \
! 109: xBegin echo(sreal) \
! 110: xFilter {SELECT rowid, * FROM 'treal'} \
! 111: xBestIndex {SELECT rowid, * FROM 'treal'} \
! 112: xBegin echo(treal) \
! 113: xFilter {SELECT rowid, * FROM 'treal'} \
! 114: xSync echo(sreal) \
! 115: xSync echo(treal) \
! 116: xCommit echo(sreal) \
! 117: xCommit echo(treal) \
! 118: ]
! 119: do_test vtab4-2.3 {
! 120: execsql {
! 121: SELECT * FROM secho;
! 122: }
! 123: } {1 2 3 4 5 6 7 8 9}
! 124: do_test vtab4-2.4 {
! 125: execsql {
! 126: SELECT * FROM techo;
! 127: }
! 128: } {}
! 129:
! 130: # Try an explicit ROLLBACK on a transaction with two open virtual tables.
! 131: do_test vtab4-2.5 {
! 132: set echo_module [list]
! 133: execsql {
! 134: BEGIN;
! 135: INSERT INTO techo SELECT * FROM secho;
! 136: DELETE FROM secho;
! 137: ROLLBACK;
! 138: }
! 139: set echo_module
! 140: } [list xBestIndex {SELECT rowid, * FROM 'sreal'} \
! 141: xBegin echo(treal) \
! 142: xFilter {SELECT rowid, * FROM 'sreal'} \
! 143: xBestIndex {SELECT rowid, * FROM 'sreal'} \
! 144: xBegin echo(sreal) \
! 145: xFilter {SELECT rowid, * FROM 'sreal'} \
! 146: xRollback echo(treal) \
! 147: xRollback echo(sreal) \
! 148: ]
! 149: do_test vtab4-2.6 {
! 150: execsql {
! 151: SELECT * FROM secho;
! 152: }
! 153: } {1 2 3 4 5 6 7 8 9}
! 154: do_test vtab4-2.7 {
! 155: execsql {
! 156: SELECT * FROM techo;
! 157: }
! 158: } {}
! 159:
! 160: do_test vtab4-3.1 {
! 161: set echo_module [list]
! 162: set echo_module_sync_fail treal
! 163: catchsql {
! 164: INSERT INTO techo VALUES(1, 2, 3);
! 165: }
! 166: } {1 {unknown error}}
! 167: do_test vtab4-3.2 {
! 168: set echo_module
! 169: } {xBegin echo(treal) xSync echo(treal) xRollback echo(treal)}
! 170:
! 171: do_test vtab4-3.3 {
! 172: set echo_module [list]
! 173: set echo_module_sync_fail sreal
! 174: catchsql {
! 175: BEGIN;
! 176: INSERT INTO techo SELECT * FROM secho;
! 177: DELETE FROM secho;
! 178: COMMIT;
! 179: }
! 180: set echo_module
! 181: } [list xBestIndex {SELECT rowid, * FROM 'sreal'} \
! 182: xBegin echo(treal) \
! 183: xFilter {SELECT rowid, * FROM 'sreal'} \
! 184: xBestIndex {SELECT rowid, * FROM 'sreal'} \
! 185: xBegin echo(sreal) \
! 186: xFilter {SELECT rowid, * FROM 'sreal'} \
! 187: xSync echo(treal) \
! 188: xSync echo(sreal) \
! 189: xRollback echo(treal) \
! 190: xRollback echo(sreal) \
! 191: ]
! 192:
! 193: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>