Fix some bugs and other code issues in the session module.

FossilOrigin-Name: f2930840e4af3d7d9cb199d316502932fcbbb867
This commit is contained in:
dan 2011-03-15 16:37:27 +00:00
parent 0c698471d1
commit 296c76589f
5 changed files with 570 additions and 252 deletions

File diff suppressed because it is too large Load Diff

View File

@ -69,7 +69,6 @@ int sqlite3session_changeset(
*/
void sqlite3session_delete(sqlite3_session *pSession);
/*
** Create an iterator used to iterate through the contents of a changeset.
*/
@ -95,23 +94,22 @@ int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
** has returned SQLITE_ROW.
*/
int sqlite3changeset_op(
sqlite3_changeset_iter *pIter, /* Iterator object */
const char **pzTab, /* OUT: Pointer to table name */
int *pnCol, /* OUT: Number of columns in table */
int *pOp /* OUT: SQLITE_INSERT, DELETE or UPDATE */
sqlite3_changeset_iter *pIter, /* Iterator object */
const char **pzTab, /* OUT: Pointer to table name */
int *pnCol, /* OUT: Number of columns in table */
int *pOp /* OUT: SQLITE_INSERT, DELETE or UPDATE */
);
int sqlite3changeset_old(
sqlite3_changeset_iter *pIter,
int iVal,
sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */
sqlite3_changeset_iter *pIter, /* Changeset iterator */
int iVal, /* Column number */
sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */
);
int sqlite3changeset_new(
sqlite3_changeset_iter *pIter, /* Changeset iterator */
int iVal, /* Column number */
sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */
);
int sqlite3changeset_new(
sqlite3_changeset_iter *pIter,
int iVal,
sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */
);
/*
** This function is only usable with sqlite3_changeset_iter objects passed
** to the xConflict callback by sqlite3changeset_apply(). It cannot be used
@ -122,8 +120,8 @@ int sqlite3changeset_new(
** or SQLITE_CHANGESET_CONFLICT.
*/
int sqlite3changeset_conflict(
sqlite3_changeset_iter *pIter,
int iVal,
sqlite3_changeset_iter *pIter, /* Changeset iterator */
int iVal, /* Column number */
sqlite3_value **ppValue /* OUT: Value from conflicting row */
);
@ -153,15 +151,15 @@ int sqlite3changeset_invert(
** resolution strategy.
*/
int sqlite3changeset_apply(
sqlite3 *db,
int nChangeset,
void *pChangeset,
sqlite3 *db, /* Apply change to "main" db of this handle */
int nChangeset, /* Size of changeset in bytes */
void *pChangeset, /* Changeset blob */
int(*xConflict)(
void *pCtx, /* Copy of fifth arg to _apply() */
int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
sqlite3_changeset_iter *p /* Handle describing change and conflict */
),
void *pCtx
void *pCtx /* First argument passed to xConflict */
);
/*

View File

@ -1,5 +1,5 @@
C Fix\shandling\sof\sreturn\svalues\sfrom\sthe\sconflict\shandler.\sDocument\sthe\sconflict\shandler\sarguments\sand\sreturn\scodes\sin\ssqlite3session.h.
D 2011-03-14T19:49:23
C Fix\ssome\sbugs\sand\sother\scode\sissues\sin\sthe\ssession\smodule.
D 2011-03-15T16:37:28
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -98,8 +98,8 @@ F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea
F ext/rtree/sqlite3rtree.h 1af0899c63a688e272d69d8e746f24e76f10a3f0
F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
F ext/session/sqlite3session.c 111a988b4734b7419f23bb07e45bf5e991510270
F ext/session/sqlite3session.h 55ca208bddbc1284c83427f423748eb720f5c68f
F ext/session/sqlite3session.c 9b8d123418c024f6851163375fca99042757772f
F ext/session/sqlite3session.h 01aac9a1185b7db6716217f3aa3f7a835ab864b9
F ext/session/test_session.c 2559ef68e421c7fb83e2c19ef08a17343b70d535
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
@ -639,7 +639,7 @@ F test/selectA.test 06d1032fa9009314c95394f2ca2e60d9f7ae8532
F test/selectB.test f305cc6660804cb239aab4e2f26b0e288b59958b
F test/selectC.test f9bf1bc4581b5b8158caa6e4e4f682acb379fb25
F test/server1.test f5b790d4c0498179151ca8a7715a65a7802c859c
F test/session1.test edbd6078b86b3f6337d779552671125fbd885e19
F test/session1.test 1e85c2eedb14587dff41901faa5a66c117fe0405
F test/shared.test b9114eaea7e748a3a4c8ff7b9ca806c8f95cef3e
F test/shared2.test 7f6ad2d857d0f4e5d6a0b9a897b5e56a6b6ea18c
F test/shared3.test d69bdd5f156580876c5345652d21dc2092e85962
@ -913,7 +913,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P 57862efe718fdc93401998f9058511292a0e1a50
R 17f2f6e54c1cfa1876ed6a58e92b5c4b
P cbbb274e500237dbf7155a51d4f9c17583d704ea
R c267abdc5c97771dbd3d62995c13d672
U dan
Z e9add8546b195a8b303123ffee5a5609
Z 5fed91a90fa4060d0a5ac8127dba8c51

View File

@ -1 +1 @@
cbbb274e500237dbf7155a51d4f9c17583d704ea
f2930840e4af3d7d9cb199d316502932fcbbb867

View File

@ -291,11 +291,7 @@ do_execsql_test 3.3.5 { SELECT * FROM t4 } {-1 2 3 -1 5 6 {} 8 9 x 11 12}
#-------------------------------------------------------------------------
# This next block of tests verifies that values returned by the conflict
# handler are intepreted correctly. The following cases are tested:
#
# Test case Operation Conflict Return Code
# UPDATE DATA OMIT
# UPDATE DATA REPLACE
# handler are intepreted correctly.
#
proc test_reset {} {
@ -407,6 +403,35 @@ foreach {tn conflict_return} {
do_db2_test 5.$tn.3 "SELECT * FROM d1" $res($conflict_return)
}
#-------------------------------------------------------------------------
# Test that two tables can be monitored by a single session object.
#
test_reset
set schema {
CREATE TABLE t1(a COLLATE nocase PRIMARY KEY, b);
CREATE TABLE t2(a, b PRIMARY KEY);
}
do_test 6.0 {
execsql $schema db
execsql $schema db2
execsql {
INSERT INTO t1 VALUES('a', 'b');
INSERT INTO t2 VALUES('a', 'b');
} db2
} {}
set conflict_return ""
do_conflict_test 6.1 -tables {t1 t2} -sql {
INSERT INTO t1 VALUES('1', '2');
INSERT INTO t1 VALUES('A', 'B');
INSERT INTO t2 VALUES('A', 'B');
} -conflicts {
{INSERT t1 CONFLICT {t A t B} {t a t b}}
}
do_db2_test 6.2 "SELECT * FROM t1" {a b 1 2}
do_db2_test 6.3 "SELECT * FROM t2" {a b A B}
catch { db2 close }
finish_test