On 25.04.2013 00:34, Bert Huijben wrote: > >> -----Original Message----- >> From: Bert Huijben [mailto:b...@qqmail.nl] >> Sent: donderdag 25 april 2013 00:14 >> To: 'Paul Burba'; 'Subversion Development' >> Subject: RE: svn commit: r1470904 - >> /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql >>>> 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. > I tweaked the query further in r1471744. > > The 'IS NOT' expression in the new query is similar to '!=' but returns TRUE > when one side is NULL, while '!=' would return NULL if either or both sides > are NULL which evaluated to false in this query.
"IS" and "IS NOT" are object-identity equality checks, just like in Python; and they should only be used when explicitly testing for NULL, never when comparing to a typed value. NULL behaves very specially; NULL != NULL is NULL, for example, not TRUE, as is NULL = NULL. -- Brane -- Branko Čibej Director of Subversion | WANdisco | www.wandisco.com