You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ko...@apache.org on 2021/02/13 14:25:35 UTC
svn commit: r1886488 - in /subversion/trunk/subversion:
include/private/svn_sqlite.h libsvn_wc/wc_db_private.h
Author: kotkov
Date: Sat Feb 13 14:25:35 2021
New Revision: 1886488
URL: http://svn.apache.org/viewvc?rev=1886488&view=rev
Log:
Provide a couple of helper macros that allow executing 2 or 3 expressions
within an SQLite savepoint. We already have versions of these macros for
1 and 4 expressions, so add their missing counterparts, as those could be
useful in the future.
* subversion/include/private/svn_sqlite.h
(SVN_SQLITE__WITH_LOCK2, SVN_SQLITE__WITH_LOCK3): New.
* subversion/libsvn_wc/wc_db_private.h
(SVN_WC__DB_WITH_TXN2, SVN_WC__DB_WITH_TXN3): New.
Modified:
subversion/trunk/subversion/include/private/svn_sqlite.h
subversion/trunk/subversion/libsvn_wc/wc_db_private.h
Modified: subversion/trunk/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_sqlite.h?rev=1886488&r1=1886487&r2=1886488&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_sqlite.h (original)
+++ subversion/trunk/subversion/include/private/svn_sqlite.h Sat Feb 13 14:25:35 2021
@@ -501,6 +501,49 @@ svn_sqlite__with_immediate_transaction(s
SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
} while (0)
+/* Evaluate the expression EXPR1..EXPR2 within a 'savepoint'. Savepoints can
+ * be nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR1, which would
+ * typically be a function call that does some work in DB; if no error occurred,
+ * run EXPR2 and release the savepoint if all expressions evaluated to
+ * SVN_NO_ERROR, otherwise roll back to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK2(expr1, expr2, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db)); \
+ svn_sqlite__err = (expr1); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr2); \
+ SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
+/* Evaluate the expression EXPR1..EXPR3 within a 'savepoint'. Savepoints can
+ * be nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR1, which would
+ * typically be a function call that does some work in DB; if no error occurred,
+ * run EXPR2; if no error occurred EXPR3; ... and finally release
+ * the savepoint if all expressions evaluated to SVN_NO_ERROR, otherwise
+ * roll back to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK3(expr1, expr2, expr3, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db)); \
+ svn_sqlite__err = (expr1); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr2); \
+ if (!svn_sqlite__err) \
+ svn_sqlite__err = (expr3); \
+ SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Evaluate the expression EXPR1..EXPR4 within a 'savepoint'. Savepoints can
* be nested.
*
Modified: subversion/trunk/subversion/libsvn_wc/wc_db_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_private.h?rev=1886488&r1=1886487&r2=1886488&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_private.h (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_private.h Sat Feb 13 14:25:35 2021
@@ -382,6 +382,27 @@ svn_wc__db_mark_conflict_internal(svn_wc
#define SVN_WC__DB_WITH_TXN(expr, wcroot) \
SVN_SQLITE__WITH_LOCK(expr, (wcroot)->sdb)
+/* Evaluate the expressions EXPR1..EXPR2 within a transaction, returning the
+ * first error if an error occurs.
+ *
+ * Begin a transaction in WCROOT's DB; evaluate the expressions, which would
+ * typically be function calls that do some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_WC__DB_WITH_TXN2(expr1, expr2, wcroot) \
+ SVN_SQLITE__WITH_LOCK2(expr1, expr2, (wcroot)->sdb)
+
+/* Evaluate the expressions EXPR1..EXPR3 within a transaction, returning the
+ * first error if an error occurs.
+ *
+ * Begin a transaction in WCROOT's DB; evaluate the expressions, which would
+ * typically be function calls that do some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_WC__DB_WITH_TXN3(expr1, expr2, expr3, wcroot) \
+ SVN_SQLITE__WITH_LOCK3(expr1, expr2, expr3, (wcroot)->sdb)
/* Evaluate the expressions EXPR1..EXPR4 within a transaction, returning the
* first error if an error occurs.