Annotation of embedaddon/sqlite3/test/vtab4.test, revision 1.1.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>