You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/04/11 23:48:13 UTC

svn commit: r1091225 - in /subversion/trunk/subversion/libsvn_wc: wc-queries.sql wc_db.c

Author: hwright
Date: Mon Apr 11 21:48:12 2011
New Revision: 1091225

URL: http://svn.apache.org/viewvc?rev=1091225&view=rev
Log:
Remove the need to pull the existing changelist from the actual node before
setting it, but making the triggers slightly more intelligent.

* subversion/libsvn_wc/wc-queries.sql
  (trigger_changelist_list_actual_cl_clear,
   trigger_changelist_list_actual_cl_set): Only fire when the new content is
     different than the old content.

* subversion/libsvn_wc/wc_db.c
  (set_changelist_txn): Don't fetch or use the existing changelist.

Modified:
    subversion/trunk/subversion/libsvn_wc/wc-queries.sql
    subversion/trunk/subversion/libsvn_wc/wc_db.c

Modified: subversion/trunk/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc-queries.sql?rev=1091225&r1=1091224&r2=1091225&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Mon Apr 11 21:48:12 2011
@@ -376,7 +376,8 @@ END;
 DROP TRIGGER IF EXISTS   trigger_changelist_list_actual_cl_clear;
 CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_clear
 BEFORE UPDATE ON actual_node
-WHEN OLD.changelist IS NOT NULL
+WHEN OLD.changelist IS NOT NULL AND
+        (OLD.changelist != NEW.changelist OR NEW.changelist IS NULL)
 BEGIN
     /* 27 corresponds to svn_wc_notify_changelist_clear */
     INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)
@@ -385,7 +386,8 @@ END;
 DROP TRIGGER IF EXISTS   trigger_changelist_list_actual_cl_set;
 CREATE TEMPORARY TRIGGER trigger_changelist_list_actual_cl_set
 BEFORE UPDATE ON actual_node
-WHEN NEW.CHANGELIST IS NOT NULL
+WHEN NEW.CHANGELIST IS NOT NULL AND
+        (OLD.changelist != NEW.changelist OR OLD.changelist IS NULL)
 BEGIN
     /* 26 corresponds to svn_wc_notify_changelist_set */
     INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist)

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1091225&r1=1091224&r2=1091225&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon Apr 11 21:48:12 2011
@@ -3393,7 +3393,6 @@ set_changelist_txn(void *baton,
                    apr_pool_t *scratch_pool)
 {
   const char *new_changelist = baton;
-  const char *existing_changelist = NULL;
   svn_sqlite__stmt_t *stmt;
   svn_boolean_t have_row;
 
@@ -3401,8 +3400,6 @@ set_changelist_txn(void *baton,
                                     STMT_SELECT_ACTUAL_NODE));
   SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
-  if (have_row)
-    existing_changelist = svn_sqlite__column_text(stmt, 1, scratch_pool);
   SVN_ERR(svn_sqlite__reset(stmt));
 
   if (!have_row)
@@ -3424,13 +3421,6 @@ set_changelist_txn(void *baton,
     }
   else
     {
-      /* We have an existing row, and it simply needs to be updated, if
-         it's different. */
-      if (existing_changelist
-            && new_changelist
-            && strcmp(existing_changelist, new_changelist) == 0)
-        return SVN_NO_ERROR;
-
       SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                         STMT_UPDATE_ACTUAL_CHANGELIST));
     }