This patch is what I intend to commit just as soon as I get the WC tests
sorted out to install these triggers too. Just posting this now because
I can't commit it till after the weekend.
- Julian
Install the WC DB validation triggers as temporary triggers on opening the
DB, instead of installing them in the DB.
* subversion/libsvn_wc/upgrade.c
(bump_to_29): Don't install them here.
* subversion/libsvn_wc/wc-checks.sql
Mark all these triggers as temporary.
* subversion/libsvn_wc/wc_db.c
(create_db): Don't install them here.
* subversion/libsvn_wc/wc_db_util.c
(svn_wc__db_util_open_db): Install the triggers here, after opening the DB.
--This line, and those below, will be ignored--
Index: subversion/libsvn_wc/upgrade.c
===================================================================
--- subversion/libsvn_wc/upgrade.c (revision 1128387)
+++ subversion/libsvn_wc/upgrade.c (working copy)
@@ -1261,7 +1261,6 @@ bump_to_29(void *baton, svn_sqlite__db_t
/* Externals */
SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_CREATE_EXTERNALS));
- SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_VERIFICATION_TRIGGERS));
SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_29));
return SVN_NO_ERROR;
}
Index: subversion/libsvn_wc/wc-checks.sql
===================================================================
--- subversion/libsvn_wc/wc-checks.sql (revision 1128387)
+++ subversion/libsvn_wc/wc-checks.sql (working copy)
@@ -26,7 +26,7 @@
/* ------------------------------------------------------------------------- */
-CREATE TRIGGER no_repository_updates BEFORE UPDATE ON REPOSITORY
+CREATE TEMP TRIGGER no_repository_updates BEFORE UPDATE ON REPOSITORY
BEGIN
SELECT RAISE(FAIL, 'Updates to REPOSITORY are not allowed.');
END;
@@ -34,7 +34,7 @@ END;
/* ------------------------------------------------------------------------- */
/* Verify: on every NODES row: parent_relpath is parent of local_relpath */
-CREATE TRIGGER validation_01 BEFORE INSERT ON NODES
+CREATE TEMP TRIGGER validation_01 BEFORE INSERT ON NODES
WHEN NOT ((new.local_relpath = '' AND new.parent_relpath IS NULL)
OR (relpath_depth(new.local_relpath)
= relpath_depth(new.parent_relpath) + 1))
@@ -43,14 +43,14 @@ BEGIN
END;
/* Verify: on every NODES row: its op-depth <= its own depth */
-CREATE TRIGGER validation_02 BEFORE INSERT ON NODES
+CREATE TEMP TRIGGER validation_02 BEFORE INSERT ON NODES
WHEN NOT new.op_depth <= relpath_depth(new.local_relpath)
BEGIN
SELECT RAISE(FAIL, 'WC DB validity check 02 failed');
END;
/* Verify: on every NODES row: it is an op-root or its op-root row exists. */
-CREATE TRIGGER validation_03 BEFORE INSERT ON NODES
+CREATE TEMP TRIGGER validation_03 BEFORE INSERT ON NODES
WHEN NOT (
(new.op_depth = relpath_depth(new.local_relpath))
OR
Index: subversion/libsvn_wc/wc_db.c
===================================================================
--- subversion/libsvn_wc/wc_db.c (revision 1128387)
+++ subversion/libsvn_wc/wc_db.c (working copy)
@@ -1381,7 +1381,6 @@ create_db(svn_sqlite__db_t **sdb,
SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_NODES_TRIGGERS));
#if SVN_WC__VERSION >= SVN_WC__HAS_EXTERNALS_STORE
SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_CREATE_EXTERNALS));
- SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_VERIFICATION_TRIGGERS));
#endif
/* Insert the repository. */
Index: subversion/libsvn_wc/wc_db_util.c
===================================================================
--- subversion/libsvn_wc/wc_db_util.c (revision 1128387)
+++ subversion/libsvn_wc/wc_db_util.c (working copy)
@@ -128,6 +128,11 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
SVN_ERR(svn_sqlite__create_scalar_function(*sdb, "relpath_depth", 1,
relpath_depth, NULL));
+#ifdef SVN_DEBUG
+ /* Install self-verification trigger statements. */
+ SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_VERIFICATION_TRIGGERS));
+#endif
+
return SVN_NO_ERROR;
}