/*
* ====================================================================
* Copyright (c) 2004-2010 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
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.SVNSqlJetSelectStatement;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetStatement;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetUnionStatement;
/**
* SELECT 1 FROM nodes WHERE checksum = ?1 OR checksum = ?2 UNION ALL SELECT 1
* FROM actual_node WHERE older_checksum = ?1 OR older_checksum = ?2 OR
* left_checksum = ?1 OR left_checksum = ?2 OR right_checksum = ?1 OR
* right_checksum = ?2 LIMIT 1
*
*
* @version 1.4
* @author TMate Software Ltd.
*/
public class SVNWCDbSelectAnyPristineReference extends SVNSqlJetUnionStatement {
public SVNWCDbSelectAnyPristineReference(SVNSqlJetDb sDb) throws SVNException {
super(sDb, selectNodes(sDb), selectActual(sDb));
}
private static SVNSqlJetStatement selectActual(SVNSqlJetDb sDb) throws SVNException {
return new SVNSqlJetSelectStatement(sDb, SVNWCDbSchema.NODES) {
protected boolean isFilterPassed() throws SVNException {
if (!isColumnNull(SVNWCDbSchema.NODES__Fields.checksum)) {
String checksum = getColumnString(SVNWCDbSchema.NODES__Fields.checksum);
return checksum.equals(getBind(1)) || checksum.equals(getBind(2));
}
return false;
}
};
}
private static SVNSqlJetStatement selectNodes(SVNSqlJetDb sDb) throws SVNException {
return new SVNSqlJetSelectStatement(sDb, SVNWCDbSchema.ACTUAL_NODE) {
protected boolean isFilterPassed() throws SVNException {
if (!isColumnNull(SVNWCDbSchema.ACTUAL_NODE__Fields.older_checksum)) {
String older_checksum = getColumnString(SVNWCDbSchema.ACTUAL_NODE__Fields.older_checksum);
if (older_checksum.equals(getBind(1)) || older_checksum.equals(getBind(2))) {
return true;
}
}
if (!isColumnNull(SVNWCDbSchema.ACTUAL_NODE__Fields.left_checksum)) {
String left_checksum = getColumnString(SVNWCDbSchema.ACTUAL_NODE__Fields.left_checksum);
if (left_checksum.equals(getBind(1)) || left_checksum.equals(getBind(2))) {
return true;
}
}
if (!isColumnNull(SVNWCDbSchema.ACTUAL_NODE__Fields.right_checksum)) {
String right_checksum = getColumnString(SVNWCDbSchema.ACTUAL_NODE__Fields.right_checksum);
if (right_checksum.equals(getBind(1)) || right_checksum.equals(getBind(2))) {
return true;
}
}
return false;
}
};
}
}