> -----Original Message-----
> From: Philip Martin [mailto:philip.martin_at_wandisco.com]
> Sent: vrijdag 11 juni 2010 11:36
> To: dev_at_subversion.apache.org
> Subject: Re: svn commit: r953617 - in
> /subversion/trunk/subversion/libsvn_wc: merge.c props.c wc-queries.sql
> wc_db.c wc_db.h workqueue.c workqueue.h
>
> rhuijben_at_apache.org writes:
>
> > Author: rhuijben
> > Date: Fri Jun 11 09:11:14 2010
> > New Revision: 953617
>
> > +svn_error_t *
> > +svn_wc__db_temp_op_set_text_conflict_marker_files(svn_wc__db_t
> *db,
> > + const char
*local_abspath,
> > + const char
*old_basename,
> > + const char
*new_basename,
> > + const char
*wrk_basename,
> > + apr_pool_t
> > +*scratch_pool) {
> > + svn_wc__db_pdh_t *pdh;
> > + const char *local_relpath;
> > + svn_sqlite__stmt_t *stmt;
> > + svn_boolean_t got_row;
> > +
> > + SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
> > +
> > + SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath,
> db,
> > + local_abspath,
> > +
svn_sqlite__mode_readwrite,
> > + scratch_pool,
> > + scratch_pool)); VERIFY_USABLE_PDH(pdh);
> > +
> > + SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
> > + STMT_SELECT_ACTUAL_NODE));
> > + SVN_ERR(svn_sqlite__bindf(stmt, "is", pdh->wcroot->wc_id,
> > + local_relpath));
> > +
> > + SVN_ERR(svn_sqlite__step(&got_row, stmt));
> > + SVN_ERR(svn_sqlite__reset(stmt));
> > +
> > + if (got_row)
> > + {
> > + SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
> > +
STMT_UPDATE_ACTUAL_TEXT_CONFLICTS));
> > + }
> > + else
> > + {
> > + SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
> > +
STMT_INSERT_ACTUAL_TEXT_CONFLICTS));
> > + }
>
> This SQL stuff is all a bit new to me. Why do you choose to have distinct
> insert and update queries rather than an insert or replace query? Should
> there be a transaction to combine the SELECT query with the UPDATE/INSERT
> query? Or are you relying on the working copy lock?
> I realise this is a _temp_ function.
There are more fields in ACTUAL_NODE then there are touched by this
function. If I would use an INSERT OR REPLACE, I would remove changelists,
properties and other data stored in actual node. (Sqlite documents that it
removes the old record, before it inserts the new one if it has a collision
on the insert).
(See also Greg's reply that I should have added a note on using a
transaction for this)
Bert
Received on 2010-06-11 11:50:36 CEST