-C Experimental\s"PRAGMA\sonconflict=FAIL"\sstatement\sto\schange\sthe\sdefault\nON\sCONFLICT\salgorithm\sto\ssomething\sother\sthan\sABORT.
-D 2016-02-27T17:16:34.701
+C More\scompact\simplementation\sof\sPRAGMA\sonconflict,\sand\ssome\stest\scases.
+D 2016-02-27T19:03:22.754
F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 4f319afb7c049d40aff7af6e8c4e7cc2ba18e079
F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df
F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545
F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051
-F src/pragma.c f8f9bf11e2cb362d3a81264b7795ca89a8f695d9
+F src/pragma.c b9d960d385968789ea79e28dd44a62ed57ad9208
F src/pragma.h 0639ea9901f8a22433a94ca8b0f35921d6ac2306
F src/prepare.c 22df6171aec1d86904ed2ad30c2348a5748aa04e
F src/printf.c 63e6fb12bbe702dd664dc3703776c090383a5a26
F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1
F test/numindex1.test 20a5450d4b056e48cd5db30e659f13347a099823
F test/offset1.test f06b83657bcf26f9ce805e67450e189e282143b2
+F test/onconflict1.test c03c755a2efda1c8d6e74e15f04e16ac14f0acba
F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
F test/orderby1.test 4d22a7c75f6a83fc1f188cc7bb5192285fdf2552
F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3c36948f16b58fe8042c37d0df634308b4e48217
-R 60015793d5c7a8b9994caa990b084503
-T *branch * pragma-onconflict
-T *sym-pragma-onconflict *
-T -sym-trunk *
+P 3a0c347cca58fdaefd1b3644ba1649a5b4ebe91f
+R 58122bd2911f76c0eb3005cd77e413fa
U drh
-Z 2a9189a9e71cee0c4156061d04e62711
+Z eb55459b1b74d5d83abb570469162143
** Set the default conflict handling algorithm.
*/
case PragTyp_ONCONFLICT: {
- const char *zRes = "ABORT";
- if( zRight ){
- if( sqlite3StrICmp(zRight,"FAIL")==0 ) db->dfltOnError = OE_Fail;
- if( sqlite3StrICmp(zRight,"ABORT")==0 ) db->dfltOnError = OE_Abort;
- if( sqlite3StrICmp(zRight,"ROLLBACK")==0 ) db->dfltOnError = OE_Rollback;
- }
- switch( db->dfltOnError ){
- case OE_Fail: zRes = "FAIL"; break;
- case OE_Rollback: zRes = "ROLLBACK"; break;
+ static const char *azMode[] = { "ABORT", "FAIL", "ROLLBACK" };
+ static const u8 aeMode[] = { OE_Abort, OE_Fail, OE_Rollback };
+ const char *zRes = 0;
+ int i;
+ for(i=0; i<ArraySize(azMode); i++){
+ if( sqlite3_stricmp(azMode[i], zRight)==0 ) db->dfltOnError = aeMode[i];
+ if( db->dfltOnError==aeMode[i] ) zRes = azMode[i];
}
returnSingleText(v, "onconflict", zRes);
break;
--- /dev/null
+# 2016-02-27
+#
+# 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 focuses on the PRAGMA onconflict statement.
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix onconflict1
+
+do_execsql_test 100 {
+ PRAGMA onconflict;
+} {ABORT}
+do_execsql_test 110 {
+ PRAGMA onconflict=Rollback;
+} {ROLLBACK}
+do_execsql_test 120 {
+ PRAGMA onconflict=fail;
+} {FAIL}
+do_execsql_test 130 {
+ PRAGMA onconflict=whatever;
+} {FAIL}
+do_execsql_test 140 {
+ PRAGMA onconflict=abort;
+} {ABORT}
+
+do_catchsql_test 200 {
+ CREATE TABLE t1(a, b UNIQUE);
+ INSERT INTO t1(a,b) VALUES(1,1),(2,2),(3,3),(98,98),(99,99);
+ BEGIN;
+ UPDATE t1 SET a=100 WHERE a=101;
+ UPDATE t1 SET b=10;
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 201 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 1 2 2 3 3 98 98 99 99}
+
+do_catchsql_test 210 {
+ PRAGMA onconflict=FAIL;
+ UPDATE t1 SET b=10;
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 211 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 10 2 2 3 3 98 98 99 99}
+
+do_catchsql_test 220 {
+ ROLLBACK;
+ BEGIN;
+ PRAGMA onconflict=ROLLBACK;
+ UPDATE t1 SET b=10;
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 221 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 1 2 2 3 3 98 98 99 99}
+do_catchsql_test 222 {
+ ROLLBACK
+} {1 {cannot rollback - no transaction is active}}
+
+do_catchsql_test 300 {
+ PRAGMA onconflict=ABORT;
+ BEGIN;
+ INSERT INTO t1(a,b) VALUES(4,4),(5,1),(6,6);
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 301 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 1 2 2 3 3 98 98 99 99}
+
+do_catchsql_test 310 {
+ PRAGMA onconflict=ROLLBACK;
+ INSERT INTO t1(a,b) VALUES(4,4),(5,1),(6,6);
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 311 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 1 2 2 3 3 98 98 99 99}
+do_catchsql_test 312 {
+ ROLLBACK
+} {1 {cannot rollback - no transaction is active}}
+
+do_catchsql_test 320 {
+ PRAGMA onconflict=FAIL;
+ BEGIN;
+ INSERT INTO t1(a,b) VALUES(4,4),(5,1),(6,6);
+} {1 {UNIQUE constraint failed: t1.b}}
+do_execsql_test 321 {
+ SELECT a, b FROM t1 ORDER BY a;
+} {1 1 2 2 3 3 4 4 98 98 99 99}
+do_catchsql_test 322 {
+ ROLLBACK
+} {0 {}}
+
+finish_test