Author: gstein Date: Mon May 9 21:21:25 2011 New Revision: 1101224 URL: http://svn.apache.org/viewvc?rev=1101224&view=rev Log: Simplify the changelist change-notifications. We never need to filter the notifications (unlike revert), so if it is in the table: we notify.
* subversion/libsvn_wc/wc-queries.sql: (STMT_CREATE_CHANGELIST_LIST): update docco for one UPDATE case (STMT_DELETE_CHANGELIST_LIST_RECURSIVE): removed (STMT_SELECT_CHANGELIST_LIST_RECURSIVE): removed (STMT_DROP_CHANGELIST_LIST): new statement (STMT_SELECT_CHANGELIST_LIST): select all changelist notifications (STMT_CREATE_DELETE_LIST): leave note that we should record wc_id * subversion/libsvn_wc/wc_db.c: (svn_wc__db_op_set_changelist): remove LIKE_ARG and simplify the loop selecting rows for the database. remove the no-row optimization since we want the exiting-statement to drop the table. adjust column indices to account for selecting wc_id (unused for now). on exit, drop the table rather than the special row deletion code. 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=1101224&r1=1101223&r2=1101224&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc-queries.sql (original) +++ subversion/trunk/subversion/libsvn_wc/wc-queries.sql Mon May 9 21:21:25 2011 @@ -386,7 +386,7 @@ CREATE INDEX changelist_list_index ON ch Action Old CL New CL Notification ------ ------ ------ ------------ UPDATE ACTUAL NULL NOT NULL cl-set - UPDATE ACTUAL NOT NULL NOT NULL cl-clear / cl-set + UPDATE ACTUAL NOT NULL NOT NULL cl-set UPDATE ACTUAL NOT NULL NULL cl-clear Of the following triggers, the first address the first case, and the second @@ -430,15 +430,13 @@ DROP TRIGGER IF EXISTS trigger_changelis INSERT INTO changelist_list(wc_id, local_relpath, notify, changelist) VALUES (?1, ?2, ?3, ?4) --- STMT_DELETE_CHANGELIST_LIST_RECURSIVE -DELETE FROM changelist_list -WHERE wc_id = ?1 AND local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#' +-- STMT_DROP_CHANGELIST_LIST +DROP TABLE IF EXISTS changelist_list --- STMT_SELECT_CHANGELIST_LIST_RECURSIVE -SELECT local_relpath, notify, changelist +-- STMT_SELECT_CHANGELIST_LIST +SELECT wc_id, local_relpath, notify, changelist FROM changelist_list -WHERE wc_id = ?1 AND local_relpath = ?2 or local_relpath LIKE ?3 ESCAPE '#' -ORDER BY local_relpath +ORDER BY wc_id, local_relpath -- STMT_DELETE_ACTUAL_EMPTY DELETE FROM actual_node @@ -1079,6 +1077,8 @@ WHERE local_relpath = ?1 OR local_relpat -- STMT_CREATE_DELETE_LIST DROP TABLE IF EXISTS delete_list; CREATE TEMPORARY TABLE delete_list ( +/* ### we should put the wc_id in here in case a delete spans multiple + ### working copies. queries, etc will need to be adjusted. */ local_relpath TEXT PRIMARY KEY ) Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1101224&r1=1101223&r2=1101224&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/wc_db.c (original) +++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon May 9 21:21:25 2011 @@ -4858,7 +4858,6 @@ svn_wc__db_op_set_changelist(svn_wc__db_ struct with_triggers_baton_t wtb = { STMT_CREATE_CHANGELIST_LIST, STMT_DROP_CHANGELIST_LIST_TRIGGERS, NULL, NULL }; - const char *like_arg; svn_sqlite__stmt_t *stmt; svn_boolean_t have_row; apr_pool_t *iterpool = svn_pool_create(scratch_pool); @@ -4906,20 +4905,15 @@ svn_wc__db_op_set_changelist(svn_wc__db_ return SVN_NO_ERROR; } - like_arg = construct_like_arg(local_relpath, scratch_pool); - SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, - STMT_SELECT_CHANGELIST_LIST_RECURSIVE)); - SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath, - like_arg)); + STMT_SELECT_CHANGELIST_LIST)); SVN_ERR(svn_sqlite__step(&have_row, stmt)); - if (!have_row) - return svn_error_return(svn_sqlite__reset(stmt)); /* optimise for no row */ while (have_row) { - const char *notify_relpath = svn_sqlite__column_text(stmt, 0, NULL); - svn_wc_notify_action_t action = svn_sqlite__column_int(stmt, 1); + /* ### wc_id is column 0. use it one day... */ + const char *notify_relpath = svn_sqlite__column_text(stmt, 1, NULL); + svn_wc_notify_action_t action = svn_sqlite__column_int(stmt, 2); svn_wc_notify_t *notify; const char *notify_abspath; @@ -4931,18 +4925,14 @@ svn_wc__db_op_set_changelist(svn_wc__db_ notify_abspath = svn_dirent_join(wcroot->abspath, notify_relpath, iterpool); notify = svn_wc_create_notify(notify_abspath, action, iterpool); - notify->changelist_name = svn_sqlite__column_text(stmt, 2, NULL); + notify->changelist_name = svn_sqlite__column_text(stmt, 3, NULL); notify_func(notify_baton, notify, iterpool); SVN_ERR(svn_sqlite__step(&have_row, stmt)); } SVN_ERR(svn_sqlite__reset(stmt)); - SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, - STMT_DELETE_CHANGELIST_LIST_RECURSIVE)); - SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath, - like_arg)); - SVN_ERR(svn_sqlite__step_done(stmt)); + SVN_ERR(svn_sqlite__exec_statements(wcroot->sdb, STMT_DROP_CHANGELIST_LIST)); svn_pool_destroy(iterpool);