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.SVNSqlJetDeleteStatement;
import org.tmatesoft.svn.core.internal.wc17.db.ISVNWCDb;
import org.tmatesoft.svn.core.internal.wc17.db.SvnWcDbStatementUtil;
/*
* DELETE FROM nodes
* WHERE wc_id = ?1
* AND (local_relpath = ?2 OR IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
* AND op_depth = ?3
* AND NOT EXISTS (SELECT 1 FROM nodes n
* WHERE n.wc_id = ?1
* AND n.local_relpath = nodes.local_relpath
* AND n.op_depth = ?4
* AND n.presence IN (MAP_NORMAL, MAP_INCOMPLETE))
*
* @version 1.8
*/
public class SVNWCDbDeleteNoLowerLayer extends SVNSqlJetDeleteStatement {
private boolean storedExistenceFlag;
public SVNWCDbDeleteNoLowerLayer(SVNSqlJetDb sDb) throws SVNException {
super(sDb, SVNWCDbSchema.NODES);
storedExistenceFlag = false;
}
@Override
protected String getPathScope() {
return (String)getBind(2);
}
@Override
protected boolean isStrictiDescendant() {
return false;
}
@Override
protected boolean isFilterPassed() throws SVNException {
long columnDepth = getColumnLong(SVNWCDbSchema.NODES__Fields.op_depth);
if (columnDepth == 0 || !storedExistenceFlag) {
ISVNWCDb.SVNWCDbStatus presence = SvnWcDbStatementUtil.getColumnPresence(this, SVNWCDbSchema.NODES__Fields.presence);
storedExistenceFlag = (columnDepth == (Long)getBind(4)) &&
getBind(2).equals(getColumnString(SVNWCDbSchema.NODES__Fields.local_relpath)) &&
(presence == ISVNWCDb.SVNWCDbStatus.Normal || presence == ISVNWCDb.SVNWCDbStatus.Incomplete);
}
return columnDepth == (Long)getBind(3);
}
@Override
protected Object[] getWhere() throws SVNException {
return new Object[] {getBind(1)};
}
}