/*
* ====================================================================
* 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.db;
import java.util.ArrayList;
import java.util.List;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.util.SVNLogType;
/**
* @version 1.4
* @author TMate Software Ltd.
*/
public abstract class SVNSqlJetSelectFieldsStatement<E extends Enum<E>> extends SVNSqlJetSelectStatement {
protected final List<E> fields;
public SVNSqlJetSelectFieldsStatement(SVNSqlJetDb sDb, Enum<?> fromTable) throws SVNException {
this(sDb, fromTable.toString());
}
public SVNSqlJetSelectFieldsStatement(SVNSqlJetDb sDb, String fromTable) throws SVNException {
super(sDb, fromTable);
fields = new ArrayList<E>();
defineFields();
}
public SVNSqlJetSelectFieldsStatement(SVNSqlJetDb sDb, Enum<?> fromTable, Enum<?> indexName) throws SVNException {
super(sDb, fromTable, indexName);
fields = new ArrayList<E>();
defineFields();
}
protected abstract void defineFields();
public long getColumnLong(int f) throws SVNException {
return getColumnLong(getFieldName(f));
}
public String getColumnString(int f) throws SVNException {
return getColumnString(getFieldName(f));
}
public boolean isColumnNull(int f) throws SVNException {
return isColumnNull(getFieldName(f));
}
public byte[] getColumnBlob(int f) throws SVNException {
return getColumnBlob(getFieldName(f));
}
protected void checkField(int f) throws SVNException {
SVNErrorManager.assertionFailure(fields.size() > 0, "fields not defined", SVNLogType.WC);
SVNErrorManager.assertionFailure(f >= 0 && f < fields.size(), String.format("%d is not valid field index", f), SVNLogType.WC);
SVNErrorManager.assertionFailure(fields.get(f) != null, String.format("field #%d is not defined", f), SVNLogType.WC);
}
protected String getFieldName(int f) throws SVNException {
checkField(f);
return fields.get(f).toString();
}
}