⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conflict.test

📁 sqlite数据库源码
💻 TEST
📖 第 1 页 / 共 2 页
字号:
# 2002 January 29## The author disclaims copyright to this source code.  In place of# a legal notice, here is a blessing:##    May you do good and not evil.#    May you find forgiveness for yourself and forgive others.#    May you share freely, never taking more than you give.##***********************************************************************# This file implements regression tests for SQLite library.## This file implements tests for the conflict resolution extension# to SQLite.## $Id: conflict.test,v 1.19 2003/08/05 13:13:39 drh Exp $set testdir [file dirname $argv0]source $testdir/tester.tcl# Create tables for the first group of tests.#do_test conflict-1.0 {  execsql {    CREATE TABLE t1(a, b, c, UNIQUE(a,b));    CREATE TABLE t2(x);    SELECT c FROM t1 ORDER BY c;  }} {}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf   The conflict resolution algorithm on the BEGIN statement#   cmd    An INSERT or REPLACE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "c" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t2#foreach {i conf cmd t0 t1 t2} {  1 {}       INSERT                  1 {}  1  2 {}       {INSERT OR IGNORE}      0 3   1  3 {}       {INSERT OR REPLACE}     0 4   1  4 {}       REPLACE                 0 4   1  5 {}       {INSERT OR FAIL}        1 {}  1  6 {}       {INSERT OR ABORT}       1 {}  1  7 {}       {INSERT OR ROLLBACK}    1 {}  {}  8 IGNORE   INSERT                  0 3   1  9 IGNORE   {INSERT OR IGNORE}      0 3   1 10 IGNORE   {INSERT OR REPLACE}     0 4   1 11 IGNORE   REPLACE                 0 4   1 12 IGNORE   {INSERT OR FAIL}        1 {}  1 13 IGNORE   {INSERT OR ABORT}       1 {}  1 14 IGNORE   {INSERT OR ROLLBACK}    1 {}  {} 15 REPLACE  INSERT                  0 4   1 16 FAIL     INSERT                  1 {}  1 17 ABORT    INSERT                  1 {}  1 18 ROLLBACK INSERT                  1 {}  {}} {  do_test conflict-1.$i {    if {$conf!=""} {set conf "ON CONFLICT $conf"}    set r0 [catch {execsql [subst {      DELETE FROM t1;      DELETE FROM t2;      INSERT INTO t1 VALUES(1,2,3);      BEGIN $conf;      INSERT INTO t2 VALUES(1);       $cmd INTO t1 VALUES(1,2,4);    }]} r1]    catch {execsql {COMMIT}}    if {$r0} {set r1 {}} {set r1 [execsql {SELECT c FROM t1}]}    set r2 [execsql {SELECT x FROM t2}]    list $r0 $r1 $r2  } [list $t0 $t1 $t2]}# Create tables for the first group of tests.#do_test conflict-2.0 {  execsql {    DROP TABLE t1;    DROP TABLE t2;    CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(a,b));    CREATE TABLE t2(x);    SELECT c FROM t1 ORDER BY c;  }} {}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf   The conflict resolution algorithm on the BEGIN statement#   cmd    An INSERT or REPLACE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "c" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t2#foreach {i conf cmd t0 t1 t2} {  1 {}       INSERT                  1 {}  1  2 {}       {INSERT OR IGNORE}      0 3   1  3 {}       {INSERT OR REPLACE}     0 4   1  4 {}       REPLACE                 0 4   1  5 {}       {INSERT OR FAIL}        1 {}  1  6 {}       {INSERT OR ABORT}       1 {}  1  7 {}       {INSERT OR ROLLBACK}    1 {}  {}  8 IGNORE   INSERT                  0 3   1  9 IGNORE   {INSERT OR IGNORE}      0 3   1 10 IGNORE   {INSERT OR REPLACE}     0 4   1 11 IGNORE   REPLACE                 0 4   1 12 IGNORE   {INSERT OR FAIL}        1 {}  1 13 IGNORE   {INSERT OR ABORT}       1 {}  1 14 IGNORE   {INSERT OR ROLLBACK}    1 {}  {} 15 REPLACE  INSERT                  0 4   1 16 FAIL     INSERT                  1 {}  1 17 ABORT    INSERT                  1 {}  1 18 ROLLBACK INSERT                  1 {}  {}} {  do_test conflict-2.$i {    if {$conf!=""} {set conf "ON CONFLICT $conf"}    set r0 [catch {execsql [subst {      DELETE FROM t1;      DELETE FROM t2;      INSERT INTO t1 VALUES(1,2,3);      BEGIN $conf;      INSERT INTO t2 VALUES(1);       $cmd INTO t1 VALUES(1,2,4);    }]} r1]    catch {execsql {COMMIT}}    if {$r0} {set r1 {}} {set r1 [execsql {SELECT c FROM t1}]}    set r2 [execsql {SELECT x FROM t2}]    list $r0 $r1 $r2  } [list $t0 $t1 $t2]}# Create tables for the first group of tests.#do_test conflict-3.0 {  execsql {    DROP TABLE t1;    DROP TABLE t2;    CREATE TABLE t1(a, b, c INTEGER, PRIMARY KEY(c), UNIQUE(a,b));    CREATE TABLE t2(x);    SELECT c FROM t1 ORDER BY c;  }} {}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf   The conflict resolution algorithm on the BEGIN statement#   cmd    An INSERT or REPLACE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "c" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t2#foreach {i conf cmd t0 t1 t2} {  1 {}       INSERT                  1 {}  1  2 {}       {INSERT OR IGNORE}      0 3   1  3 {}       {INSERT OR REPLACE}     0 4   1  4 {}       REPLACE                 0 4   1  5 {}       {INSERT OR FAIL}        1 {}  1  6 {}       {INSERT OR ABORT}       1 {}  1  7 {}       {INSERT OR ROLLBACK}    1 {}  {}  8 IGNORE   INSERT                  0 3   1  9 IGNORE   {INSERT OR IGNORE}      0 3   1 10 IGNORE   {INSERT OR REPLACE}     0 4   1 11 IGNORE   REPLACE                 0 4   1 12 IGNORE   {INSERT OR FAIL}        1 {}  1 13 IGNORE   {INSERT OR ABORT}       1 {}  1 14 IGNORE   {INSERT OR ROLLBACK}    1 {}  {} 15 REPLACE  INSERT                  0 4   1 16 FAIL     INSERT                  1 {}  1 17 ABORT    INSERT                  1 {}  1 18 ROLLBACK INSERT                  1 {}  {}} {  do_test conflict-3.$i {    if {$conf!=""} {set conf "ON CONFLICT $conf"}    set r0 [catch {execsql [subst {      DELETE FROM t1;      DELETE FROM t2;      INSERT INTO t1 VALUES(1,2,3);      BEGIN $conf;      INSERT INTO t2 VALUES(1);       $cmd INTO t1 VALUES(1,2,4);    }]} r1]    catch {execsql {COMMIT}}    if {$r0} {set r1 {}} {set r1 [execsql {SELECT c FROM t1}]}    set r2 [execsql {SELECT x FROM t2}]    list $r0 $r1 $r2  } [list $t0 $t1 $t2]}do_test conflict-4.0 {  execsql {    DROP TABLE t2;    CREATE TABLE t2(x);    SELECT x FROM t2;  }} {}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf1  The conflict resolution algorithm on the UNIQUE constraint#   conf2  The conflict resolution algorithm on the BEGIN statement#   cmd    An INSERT or REPLACE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "c" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t2#foreach {i conf1 conf2 cmd t0 t1 t2} {  1 {}       {}       INSERT                  1 {}  1  2 REPLACE  {}       INSERT                  0 4   1  3 IGNORE   {}       INSERT                  0 3   1  4 FAIL     {}       INSERT                  1 {}  1  5 ABORT    {}       INSERT                  1 {}  1  6 ROLLBACK {}       INSERT                  1 {}  {}  7 REPLACE  {}       {INSERT OR IGNORE}      0 3   1  8 IGNORE   {}       {INSERT OR REPLACE}     0 4   1  9 FAIL     {}       {INSERT OR IGNORE}      0 3   1 10 ABORT    {}       {INSERT OR REPLACE}     0 4   1 11 ROLLBACK {}       {INSERT OR IGNORE }     0 3   1 12 REPLACE  IGNORE   INSERT                  0 3   1 13 IGNORE   REPLACE  INSERT                  0 4   1 14 FAIL     IGNORE   INSERT                  0 3   1 15 ABORT    REPLACE  INSERT                  0 4   1 16 ROLLBACK IGNORE   INSERT                  0 3   1 12 IGNORE   REPLACE  INSERT                  0 4   1 13 IGNORE   FAIL     INSERT                  1 {}  1 14 IGNORE   ABORT    INSERT                  1 {}  1 15 IGNORE   ROLLBACK INSERT                  1 {}  {}} {  do_test conflict-4.$i {    if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"}    if {$conf2!=""} {set conf2 "ON CONFLICT $conf2"}    set r0 [catch {execsql [subst {      DROP TABLE t1;      CREATE TABLE t1(a,b,c,UNIQUE(a,b) $conf1);      DELETE FROM t2;      INSERT INTO t1 VALUES(1,2,3);      BEGIN $conf2;      INSERT INTO t2 VALUES(1);       $cmd INTO t1 VALUES(1,2,4);    }]} r1]    catch {execsql {COMMIT}}    if {$r0} {set r1 {}} {set r1 [execsql {SELECT c FROM t1}]}    set r2 [execsql {SELECT x FROM t2}]    list $r0 $r1 $r2  } [list $t0 $t1 $t2]}do_test conflict-5.0 {  execsql {    DROP TABLE t2;    CREATE TABLE t2(x);    SELECT x FROM t2;  }} {}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf1  The conflict resolution algorithm on the NOT NULL constraint#   conf2  The conflict resolution algorithm on the BEGIN statement#   cmd    An INSERT or REPLACE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "c" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t2#foreach {i conf1 conf2 cmd t0 t1 t2} {  1 {}       {}       INSERT                  1 {}  1  2 REPLACE  {}       INSERT                  0 5   1  3 IGNORE   {}       INSERT                  0 {}  1  4 FAIL     {}       INSERT                  1 {}  1  5 ABORT    {}       INSERT                  1 {}  1  6 ROLLBACK {}       INSERT                  1 {}  {}  7 REPLACE  {}       {INSERT OR IGNORE}      0 {}  1  8 IGNORE   {}       {INSERT OR REPLACE}     0 5   1  9 FAIL     {}       {INSERT OR IGNORE}      0 {}  1 10 ABORT    {}       {INSERT OR REPLACE}     0 5   1 11 ROLLBACK {}       {INSERT OR IGNORE}      0 {}  1 12 {}       {}       {INSERT OR IGNORE}      0 {}  1 13 {}       {}       {INSERT OR REPLACE}     0 5   1 14 {}       {}       {INSERT OR FAIL}        1 {}  1 15 {}       {}       {INSERT OR ABORT}       1 {}  1 16 {}       {}       {INSERT OR ROLLBACK}    1 {}  {} 17 {}       IGNORE   INSERT                  0 {}  1 18 {}       REPLACE  INSERT                  0 5   1 19 {}       FAIL     INSERT                  1 {}  1 20 {}       ABORT    INSERT                  1 {}  1 21 {}       ROLLBACK INSERT                  1 {}  {} 22 REPLACE  FAIL     INSERT                  1 {}  1 23 IGNORE   ROLLBACK INSERT                  1 {}  {}} {  if {$t0} {set t1 {t1.c may not be NULL}}  do_test conflict-5.$i {    if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"}    if {$conf2!=""} {set conf2 "ON CONFLICT $conf2"}    set r0 [catch {execsql [subst {      DROP TABLE t1;      CREATE TABLE t1(a,b,c NOT NULL $conf1 DEFAULT 5);      DELETE FROM t2;      BEGIN $conf2;      INSERT INTO t2 VALUES(1);       $cmd INTO t1 VALUES(1,2,NULL);    }]} r1]    catch {execsql {COMMIT}}    if {!$r0} {set r1 [execsql {SELECT c FROM t1}]}    set r2 [execsql {SELECT x FROM t2}]    list $r0 $r1 $r2  } [list $t0 $t1 $t2]}do_test conflict-6.0 {  execsql {    DROP TABLE t2;    CREATE TABLE t2(a,b,c);    INSERT INTO t2 VALUES(1,2,1);    INSERT INTO t2 VALUES(2,3,2);    INSERT INTO t2 VALUES(3,4,1);    INSERT INTO t2 VALUES(4,5,4);    SELECT c FROM t2 ORDER BY b;    CREATE TABLE t3(x);    INSERT INTO t3 VALUES(1);  }} {1 2 1 4}# Six columns of configuration data as follows:##   i      The reference number of the test#   conf1  The conflict resolution algorithm on the UNIQUE constraint#   conf2  The conflict resolution algorithm on the BEGIN statement#   cmd    An UPDATE command to execute against table t1#   t0     True if there is an error from $cmd#   t1     Content of "b" column of t1 assuming no error in $cmd#   t2     Content of "x" column of t3#foreach {i conf1 conf2 cmd t0 t1 t2} {  1 {}       {}       UPDATE                  1 {6 7 8 9}  1  2 REPLACE  {}       UPDATE                  0 {7 6 9}    1  3 IGNORE   {}       UPDATE                  0 {6 7 3 9}  1  4 FAIL     {}       UPDATE                  1 {6 7 3 4}  1  5 ABORT    {}       UPDATE                  1 {1 2 3 4}  1  6 ROLLBACK {}       UPDATE                  1 {1 2 3 4}  0  7 REPLACE  {}       {UPDATE OR IGNORE}      0 {6 7 3 9}  1  8 IGNORE   {}       {UPDATE OR REPLACE}     0 {7 6 9}    1  9 FAIL     {}       {UPDATE OR IGNORE}      0 {6 7 3 9}  1 10 ABORT    {}       {UPDATE OR REPLACE}     0 {7 6 9}    1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -