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.SVNSqlJetSelectStatement;
import org.tmatesoft.svn.core.internal.db.SVNSqlJetStatement;
/**
* SELECT op_depth, nodes.repos_id, nodes.repos_path, presence, kind, revision,
* checksum, translated_size, changed_revision, changed_date, changed_author,
* depth, symlink_target, last_mod_time, properties, lock_token, lock_owner,
* lock_comment, lock_date, local_relpath
* FROM nodes
* LEFT OUTER JOIN lock ON nodes.repos_id = lock.repos_id
* AND nodes.repos_path = lock.repos_relpath
* WHERE wc_id = ?1 AND parent_relpath = ?2
*
*/
public class SVNWCDbSelectNodeChildrenInfo extends SVNSqlJetSelectStatement {
private static class LockStatement extends SVNSqlJetSelectFieldsStatement<SVNWCDbSchema.LOCK__Fields> {
public LockStatement(SVNSqlJetDb sDb) throws SVNException {
super(sDb, SVNWCDbSchema.LOCK);
}
protected void defineFields() {
fields.add(SVNWCDbSchema.LOCK__Fields.lock_token);
fields.add(SVNWCDbSchema.LOCK__Fields.lock_owner);
fields.add(SVNWCDbSchema.LOCK__Fields.lock_comment);
fields.add(SVNWCDbSchema.LOCK__Fields.lock_date);
}
}
private LockStatement lockStatement;
public SVNWCDbSelectNodeChildrenInfo(SVNSqlJetDb sDb) throws SVNException {
super(sDb, SVNWCDbSchema.NODES);
setIndexName(SVNWCDbSchema.NODES__Indices.I_NODES_PARENT.toString());
lockStatement = new LockStatement(sDb);
}
public boolean next() throws SVNException {
lockStatement.reset();
final boolean next = super.next();
if (next) {
lockStatement.bindLong(1, getColumnLong(SVNWCDbSchema.NODES__Fields.repos_id.toString()));
lockStatement.bindString(2, getColumnString(SVNWCDbSchema.NODES__Fields.repos_path.toString()));
lockStatement.next();
}
return next;
}
@Override
public SVNSqlJetStatement getJoinedStatement(String joinedTable) throws SVNException {
if (SVNWCDbSchema.LOCK.toString().equalsIgnoreCase(joinedTable)) {
return lockStatement;
}
return super.getJoinedStatement(joinedTable);
}
@Override
protected Object[] getWhere() throws SVNException {
return new Object[] {getBind(1), getBind(2)};
}
}