#-------------------------------------------------------------------------
# Test OOM error handling when collecting and applying a simple changeset.
#
-do_faultsim_test pagerfault-1 -faults oom-* -prep {
+# Test 1.1 attaches tables individually by name to the session object.
+# Whereas test 1.2 passes NULL to sqlite3session_attach() to attach all
+# tables.
+#
+do_faultsim_test pagerfault-1.1 -faults oom-* -prep {
catch {db2 close}
catch {db close}
faultsim_restore_and_reopen
if {$testrc==0} { compare_db db db2 }
}
+do_faultsim_test pagerfault-1.2 -faults oom-* -prep {
+ catch {db2 close}
+ catch {db close}
+ faultsim_restore_and_reopen
+} -body {
+ sqlite3session S db main
+ S attach *
+ execsql {
+ INSERT INTO t1 VALUES(7, 8, 9);
+ UPDATE t1 SET c = 10 WHERE a = 1;
+ DELETE FROM t1 WHERE a = 4;
+ }
+ set ::changeset [S changeset]
+ set {} {}
+} -test {
+ catch { S delete }
+ faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
+ faultsim_integrity_check
+ if {$testrc==0} {
+ proc xConflict {args} { return "OMIT" }
+ sqlite3 db2 test.db2
+ sqlite3changeset_apply db2 $::changeset xConflict
+ compare_db db db2
+ }
+}
+
#-------------------------------------------------------------------------
# The following block of tests - pagerfault-2.* - are designed to check
# the handling of faults in the sqlite3changeset_apply() function.
/* This branch is taken if table zName has not yet been attached to
** this session and the auto-attach flag is set. */
pSession->rc = sqlite3session_attach(pSession,zName);
- if( pSession->rc ) continue;
+ if( pSession->rc ) break;
pTab = pSession->pTable;
assert( 0==sqlite3_strnicmp(pTab->zName, zName, nName+1) );
}
-C If\sa\sNULL\spointer\sis\spassed\sto\ssqlite3session_attach()\sin\splace\sof\sa\stable\sname,\sattach\sall\sdatabase\stables\sto\sthe\ssession\sobject.
-D 2011-03-22T15:21:04
+C Fix\sa\scrash\sthat\scan\sfollow\san\sOOM\swhen\s"all\stables"\sare\sregistered\swith\sa\ssession\smodule.
+D 2011-03-22T16:54:12
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/session/session1.test 1e8cda2cc8a60171dabc0fbec4124f9f7c943f23
F ext/session/session2.test f993ee243db15025a7d9b1dae903fe3f82f04229
F ext/session/session_common.tcl fb91560b6dbd086010df8b3a137a452f1ac21a28
-F ext/session/sessionfault.test 2dcf303379d0c01d8320f3c7d0452e6a0dcebd48
-F ext/session/sqlite3session.c c2cc2149e682af9d2ddaab09152ef578c8f97864
+F ext/session/sessionfault.test 495f87fb9bd764ae90d4b40d0c33a76d86d9063e
+F ext/session/sqlite3session.c ec0f440ae73229ae8ae307a31e631b9d71991cd4
F ext/session/sqlite3session.h 5055e21ca0cb6ddacd46b773a15d90bc0298b0a2
F ext/session/test_session.c d31fbf5902d0cff5e5495a5ce62efda77b596f2b
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 06048a68b351e3eb15a890cb54db8a1d4b345fbc
-R aba670c08b10d639853d25c358b85571
+P e9037e4e4ccaa5c633759c4d041b60b631b92c6c
+R 93198cfc6613c93be1aa416f0de3d035
U dan
-Z 48e2e8d1a1883a86d400f9c1e1c32110
+Z ee6ba5845d31702e943c5fa7b7c9db34
-e9037e4e4ccaa5c633759c4d041b60b631b92c6c
\ No newline at end of file
+183c236e991faaabdc768e52e926c52cf4a7abc9
\ No newline at end of file