> -----Original Message----- > From: Bert Huijben [mailto:b...@qqmail.nl] > Sent: donderdag 25 april 2013 00:10 > To: 'Paul Burba'; 'Subversion Development' > Subject: RE: svn commit: r1470904 - > /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql > > > > > -----Original Message----- > > From: Paul Burba [mailto:ptbu...@gmail.com] > > Sent: woensdag 24 april 2013 23:50 > > To: Subversion Development > > Cc: Bert Huijben > > Subject: Re: svn commit: r1470904 - > > /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql > > > > On Tue, Apr 23, 2013 at 7:42 AM, <rhuij...@apache.org> wrote: > > > Author: rhuijben > > > Date: Tue Apr 23 11:42:04 2013 > > > New Revision: 1470904 > > > > > > URL: http://svn.apache.org/r1470904 > > > Log: > > > * subversion/libsvn_wc/wc-metadata.sql > > > (STMT_UPGRADE_31_SELECT_WCROOT_NODES): Replace some ugly > SQL > > with some > > > slightly less ugly sql that more accurately describes what we do here. > > > > > > Modified: > > > subversion/trunk/subversion/libsvn_wc/wc-metadata.sql > > > > > > Modified: subversion/trunk/subversion/libsvn_wc/wc-metadata.sql > > > URL: > > > http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc- > > metadata.sql?rev=1470904&r1=1470903&r2=1470904&view=diff > > > > > > ========================================================== > > ==================== > > > --- subversion/trunk/subversion/libsvn_wc/wc-metadata.sql (original) > > > +++ subversion/trunk/subversion/libsvn_wc/wc-metadata.sql Tue Apr 23 > > 11:42:04 2013 > > > @@ -840,17 +840,15 @@ PRAGMA user_version = 31; > > > SELECT l.wc_id, l.local_relpath FROM nodes as l > > > LEFT OUTER JOIN nodes as r > > > ON l.wc_id = r.wc_id > > > - AND l.repos_id = r.repos_id > > > AND r.local_relpath = l.parent_relpath > > > -WHERE (l.local_relpath = '' AND l.repos_path != '') > > > - OR (l.op_depth = 0 > > > - AND l.local_relpath != '' > > > - AND l.repos_path != ltrim(r.repos_path > > > - || '/' > > > - || ltrim(substr(l.local_relpath, > > > - > > > length(l.parent_relpath) + 1), > > > - '/'), > > > - '/')) > > > + AND r.op_depth = 0 AND l.op_depth = 0 > > > + AND l.repos_path != '' > > > +WHERE (l.local_relpath = '') > > > > Hi Bert, > > > > I believe this needs to be: > > > > +WHERE (l.local_relpath = '' AND l.repos_path != '') > > > > Otherwise we select the root of the working copy even when that root > > points to the root of the repository (and obviously has no parent to > > inherit from). This is not what > > STMT_UPGRADE_31_SELECT_WCROOT_NODES > > promises: > > > > -- STMT_UPGRADE_31_SELECT_WCROOT_NODES > > /* Select all base nodes which are the root of a WC, including > > switched subtrees, but excluding those which map to the root > > of the repos. > > > > Here's a quick example: > > > > Check out a WC with a 1.7 client: > > > > 1.7.9-dev>svn co > > file:///C:/SVN/src-branch-1.7.x/Debug/subversion/tests/cmdline/svn-test- > > work/repositories/merge_tests-101 > > wc-root > > A wc-root\iota > > A wc-root\branch > > A wc-root\branch\J > > <snip> > > A wc-root\A\D\H\chi > > A wc-root\A\D\H\omega > > A wc-root\A\D\H\psi > > Checked out revision 7. > > > > 1.7.9-dev> > > > > 1.9.0-dev>cd wc-root > > ... > > > > Now assume we are going to run upgrade. The current query: > > > > SELECT l.wc_id, l.local_relpath FROM nodes as l > > LEFT OUTER JOIN nodes as r > > ON l.wc_id = r.wc_id > > AND r.local_relpath = l.parent_relpath > > AND r.op_depth = 0 AND l.op_depth = 0 > > AND l.repos_path != '' > > WHERE (l.local_relpath = '') > > OR (l.local_relpath != '' AND l.repos_id != r.repos_id) > > OR (l.local_relpath != '' > > AND l.repos_path > > != (CASE WHEN (r.local_relpath) = '' THEN (CASE WHEN > > (r.repos_path) = '' THEN (l.local_relpath) WHEN (l.local_relpath) = '' > > THEN (r.repos_path) ELSE (r.repos_path) || '/' || (l.local_relpath) > > END) WHEN (r.repos_path) = '' THEN (CASE WHEN (r.local_relpath) = '' > > THEN (l.local_relpath) WHEN SUBSTR((l.local_relpath), 1, > > LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN > > LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN '' WHEN > > SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN > > SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+2) END END) WHEN > > SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) = > > (r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) = > > LENGTH(l.local_relpath) THEN (r.repos_path) WHEN > > SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/' THEN > > (r.repos_path) || SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1) > > END END)) > > > > Returns the root: > > > > #|wc_id|local_relpath > > -+-----+------------- > > 1|1 | > > > > 1 row(s) affected in 0.00142 second(s). > > > > Which ultimately causes libsvn_wc/upgrade:bump_to_31() to create an > > INHERITED_PROPS cache for the WC root, albeit and empty one. > > > > The tweak I suggest above avoids the root from being selected: > > > > SELECT l.wc_id, l.local_relpath FROM nodes as l > > LEFT OUTER JOIN nodes as r > > ON l.wc_id = r.wc_id > > AND r.local_relpath = l.parent_relpath > > AND r.op_depth = 0 AND l.op_depth = 0 > > AND l.repos_path != '' > > ^^^ > This line should have that same effect? > (Moved from the where to the join to have it apply to all the or clauses > without having to duplicate it 3 times) > > Are you sure that you have that line in your testcase.
Tested this query and indeed it shows this problem. The op-depth checks on the line above it should also be moved to the where part for all three cases. Bert