-C Add\smiscellaneous\stest\scases\sfor\sconcurrent\stransactions.
-D 2015-08-25T19:10:29.114
+C Fix\sa\sproblem\sallowing\ssome\sconflicting\stransactions\sto\sbe\scommitted.
+D 2015-08-26T18:02:20.162
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in e2218eb228374422969de7b1680eda6864affcef
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0
F src/vtab.c d31174e4c8f592febab3fa7f69e18320b4fd657a
F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
-F src/wal.c a21412a803f0eafecf48e707fb97c64368a0d267
+F src/wal.c 44ec009f7742a660d3558845e47e870af4542689
F src/wal.h 903ef67e17f8b466dc7cfc4186fc23e80be10ff8
F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
F src/where.c 66518a14a1238611aa0744d6980b6b7f544f4816
F test/concfault.test 500f17c3fcfe7705114422bcc6ddd3c740001a43
F test/concurrent.test ecf97fdcfb11dda1db52b2714d7d52d0922789f1
F test/concurrent2.test de43cd6703360dc6268907f1617f0d353d8a43c1
-F test/concurrent3.test 7dcf81372c06cbac58e7e630aebf7292945947bb
+F test/concurrent3.test 8474b7ac80bc977bab4fe014c0b036c16779d8cb
F test/conflict.test 841bcf7cabbfca39c577eb8411ea8601843b46a8
F test/conflict2.test 0d3af4fb534fa1bd020c79960bb56e4d52655f09
F test/conflict3.test dec0634c0f31dec9a4b01c63063e939f0cd21b6b
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P f32b57b49311693eb0c0c9f6f14859e7b1fa93d8
-R cbe24c6dda59af48460d1125c5ffff88
+P 779b1d0e17bc54062b2b09cdbf94e9e2f4bae4f7
+R 522c73a54721e2428308711f9566b92e
U dan
-Z 967a64b7790792e3ecfbe18cee7c81a2
+Z 5afacf522fa16d68d46082708ed9d148
-779b1d0e17bc54062b2b09cdbf94e9e2f4bae4f7
\ No newline at end of file
+a0566382d564ca17fd13475a44fed8f714742d97
\ No newline at end of file
int iMax = (iHash==0) ? HASHTABLE_NPAGE_ONE : HASHTABLE_NPAGE;
if( iMin<1 ) iMin = 1;
if( iMax>head.mxFrame ) iMax = head.mxFrame;
- for(i=iMin; i<=iMax; i++){
+ for(i=iMin; rc==SQLITE_OK && i<=iMax; i++){
PgHdr *pPg;
if( aPgno[i]==1 ){
/* Check that the schema cookie has not been modified. If
return
}
+db close
+sqlite3_shutdown
+#test_sqlite3_log xLog
+#proc xLog {error_code msg} { puts "$error_code: $msg" }
+reset_db
+
proc create_schema {} {
db eval {
PRAGMA journal_mode = wal;
}
}
+#-------------------------------------------------------------------------
+#
+proc create_schema2 {} {
+ db eval {
+ PRAGMA journal_mode = wal;
+ CREATE TABLE t1(x INTEGER PRIMARY KEY, y);
+ CREATE INDEX i1 ON t1(y);
+ }
+}
+
+proc randint {nMax} {
+ db eval {SELECT abs(random() % $nMax)}
+}
+
+proc do_sql_op2 {db iOp} {
+ switch -- $iOp {
+ i {
+ # Insert 1 rows.
+ set r [randint 1000000000]
+ set ::rows($r) 1
+ #puts "insert row $r"
+ $db eval { INSERT OR IGNORE INTO t1 VALUES($r, randomblob(50)); }
+ }
+
+ d {
+ # Insert 1 row
+ set keys [array names ::rows]
+ set r [randint [llength $keys]]
+ set rowid [lindex $keys $r]
+ $db eval { DELETE FROM t1 WHERE x=$rowid }
+ unset ::rows($rowid)
+ }
+ }
+}
+
+foreach {tn nRepeat oplist} {
+ - - ----------------------------
+ 1 100 { 1iiiiiiiiii }
+ 2 100 { 1i 2d }
+ 3 100 { 1d 2i }
+ 4 50 { 1d 2i 3d }
+ 5 500 { 1i 2i 3i 4i }
+} {
+ if {[string range $oplist 0 0]=="-"} {
+ array unset rows
+ reset_db
+ create_schema2
+ continue
+ }
+
+ foreach db $DBLIST {
+ sqlite3 $db test.db
+ set stats($db,0) 0
+ set stats($db,1) 0
+ }
+ array unset used
+
+ do_test 2.$tn {
+
+ for {set i 0} {$i < $nRepeat} {incr i} {
+ foreach db $DBLIST { $db eval "BEGIN CONCURRENT" }
+
+ foreach op $oplist {
+ set iDb [string range $op 0 0]
+ set used(db$iDb) 1
+ foreach char [split [string range $op 1 end] {}] {
+ do_sql_op2 "db$iDb" $char
+ }
+ }
+
+ foreach db $DBLIST {
+ if {$i==272 && $db=="db4"} breakpoint
+ set rc [catch { $db eval COMMIT } msg]
+ if {$rc} { $db eval ROLLBACK }
+ incr stats($db,$rc)
+ }
+ set res [db eval {PRAGMA integrity_check}]
+ if {$res != "ok"} { puts "after $db $rc: $res" ; after 1000000 }
+ }
+ } {}
+
+ foreach db $DBLIST {
+ $db close
+ }
+ foreach k [lsort [array names used]] {
+ puts "$k: $stats($k,0) committed, $stats($k,1) rolled back"
+ }
+}
+
+
+
finish_test