package org.tmatesoft.svn.core.internal.wc17.db.statement; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.db.SVNSqlJetDb; import org.tmatesoft.svn.core.internal.db.SVNSqlJetSelectFieldsStatement; import org.tmatesoft.svn.core.internal.db.SVNSqlJetStatement; /* * SELECT (SELECT b.presence FROM nodes AS b * WHERE b.wc_id = ?1 AND b.local_relpath = ?2 AND b.op_depth = 0), * work.presence, work.op_depth, moved.moved_to * FROM nodes_current AS work * LEFT OUTER JOIN nodes AS moved * ON moved.wc_id = work.wc_id * AND moved.local_relpath = work.local_relpath * AND moved.moved_to IS NOT NULL * WHERE work.wc_id = ?1 AND work.local_relpath = ?2 AND work.op_depth > 0 * LIMIT 1 * * @version 1.8 */ public class SVNWCDbSelectDeletionInfoScan extends SVNWCDbSelectDeletionInfo { private JoinedStatement joinedStatement; public SVNWCDbSelectDeletionInfoScan(SVNSqlJetDb sDb) throws SVNException { super(sDb); } @Override public SVNSqlJetStatement getJoinedStatement(Enum<?> joinedTable) throws SVNException { if (joinedStatement == null) { joinedStatement = new JoinedStatement(sDb); joinedStatement.bindf("is", getBind(1), getBind(2)); joinedStatement.next(); } return joinedStatement; } @Override public void reset() throws SVNException { if (joinedStatement != null) { joinedStatement.reset(); } super.reset(); } private static class JoinedStatement extends SVNSqlJetSelectFieldsStatement<SVNWCDbSchema.NODES__Fields> { public JoinedStatement(SVNSqlJetDb sDb) throws SVNException { super(sDb, SVNWCDbSchema.NODES); } @Override protected void defineFields() { fields.add(SVNWCDbSchema.NODES__Fields.moved_to); } @Override protected boolean isFilterPassed() throws SVNException { return !isColumnNull(SVNWCDbSchema.NODES__Fields.moved_to); } @Override protected Object[] getWhere() throws SVNException { return new Object[] {getBind(1), getBind(2)}; } } }