File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / vtab4.test
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    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.1.1.1 2012/02/21 17:04:16 misho 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>