package org.tmatesoft.svn.core.internal.wc17.db.statement; import java.util.Arrays; import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb; import org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectStatement; import org.tmatesoft.svn.core.internal.wc17.db.SvnWcDbShared; import org.tmatesoft.svn.core.internal.wc17.db.statement.SVNWCDbSchema.NODES__Fields; /** * SELECT local_relpath, repos_path FROM nodes * WHERE wc_id = ?1 * AND local_relpath = ?2 * AND op_depth = 0 * AND (inherited_props not null) * */ public class SVNWCDbSelectIPropsNode extends SVNSqlJetSelectStatement { private SVNDepth depth; public SVNWCDbSelectIPropsNode(SVNSqlJetDb sDb) throws SVNException { super(sDb, SVNWCDbSchema.NODES); setDepth(SVNDepth.EMPTY); } public void setDepth(SVNDepth depth) { if (depth == SVNDepth.UNKNOWN) { depth = SVNDepth.INFINITY; } this.depth = depth; } @Override protected String getIndexName() { if (depth == SVNDepth.IMMEDIATES || depth == SVNDepth.FILES) { return SVNWCDbSchema.NODES__Indices.I_NODES_PARENT.toString(); } return super.getIndexName(); } @Override protected Object[] getWhere() throws SVNException { if (depth == SVNDepth.EMPTY || depth == SVNDepth.IMMEDIATES || depth == SVNDepth.FILES) { return new Object[] {getBind(1), getBind(2)}; } return new Object[] {getBind(1)}; } @Override protected boolean isFilterPassed() throws SVNException { if (getColumnLong(NODES__Fields.op_depth) != 0) { return false; } final byte[] blob = getColumnBlob(SVNWCDbSchema.NODES__Fields.inherited_props); return blob != null;// && !Arrays.equals(SvnWcDbShared.EMPTY_PROPS_BLOB, blob); } @Override protected String getPathScope() { if (depth == SVNDepth.INFINITY) { return (String) getBind(2); } return null; } @Override protected boolean isStrictiDescendant() { return true; } }