/*
* ====================================================================
* 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.SVNSqlJetSelectFieldsStatement;
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
* 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 local_relpath = ?2
* ORDER BY op_depth DESC
*
* @author TMate Software Ltd.
*/
public class SVNWCDbSelectNodeInfoWithLock extends SVNWCDbSelectNodeInfo {
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 SVNWCDbSelectNodeInfoWithLock(SVNSqlJetDb sDb) throws SVNException {
super(sDb);
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;
}
public void reset() throws SVNException {
try {
lockStatement.reset();
} finally {
super.reset();
}
}
public SVNSqlJetStatement getJoinedStatement(String joinedTable) throws SVNException {
if (SVNWCDbSchema.LOCK.toString().equalsIgnoreCase(joinedTable)) {
return lockStatement;
}
return super.getJoinedStatement(joinedTable);
}
}