package railo.runtime.query;
import java.util.Iterator;
import java.util.Map.Entry;
import railo.runtime.PageContext;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.exp.DatabaseException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.QueryColumn;
import railo.runtime.type.Sizeable;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.util.QueryUtil;
public class QueryCacheQueryColumn implements QueryColumn,Sizeable {
private QueryCacheQuery qcq;
private QueryColumn column;
private Collection.Key key;
/**
* return a queryCacheQuery
* @param qcq
* @param key
* @return
* @throws DatabaseException
*/
public static QueryColumn getColumn(QueryCacheQuery qcq, Key key) throws DatabaseException {
QueryColumn _column = qcq.getQuery().getColumn(key);
return new QueryCacheQueryColumn(qcq,_column,key);
}
/**
* return a queryCacheQuery
* @param qcq
* @param key
* @param defaultValue
* @return
*/
public static QueryColumn getColumn(QueryCacheQuery qcq, Key key, QueryColumn defaultValue) {
QueryColumn _column = qcq.getQuery().getColumn(key,null);
if(_column==null) return defaultValue;
return new QueryCacheQueryColumn(qcq,_column,key);
}
/**
* Constructor of the class
* @param qcq
* @param column
* @param key
*/
private QueryCacheQueryColumn(QueryCacheQuery qcq, QueryColumn column, Key key) {
this.qcq=qcq;
this.column=column;
this.key=key;
}
private void disconnectCache() {
qcq.disconnectCache();
try {
column=qcq.getQuery().getColumn(key);
} catch (DatabaseException e) {
throw new PageRuntimeException(e);
}
}
@Override
public void add(Object value) {
disconnectCache();
column.add(value);
}
@Override
public void addRow(int count) {
disconnectCache();
column.addRow(count);
}
@Override
public void cutRowsTo(int maxrows) {
disconnectCache();
column.cutRowsTo(maxrows);
}
@Override
public Object get(int row) throws PageException {
return column.get(row);
}
@Override
public Object get(int row, Object defaultValue) {
return column.get(row, defaultValue);
}
@Override
public int getType() {
return column.getType();
}
@Override
public String getTypeAsString() {
return column.getTypeAsString();
}
@Override
public Object remove(int row) throws PageException {
disconnectCache();
return column.remove(row);
}
@Override
public Object removeEL(int row) {
disconnectCache();
return column.removeEL(row);
}
@Override
public Object removeRow(int row) throws PageException {
disconnectCache();
return column.removeRow(row);
}
@Override
public Object set(int row, Object value) throws PageException {
disconnectCache();
return column.set(row, value);
}
@Override
public Object setEL(int row, Object value) {
disconnectCache();
return column.setEL(row, value);
}
@Override
public void clear() {
disconnectCache();
column.clear();
}
@Override
public boolean containsKey(String key) {
return column.containsKey(key);
}
@Override
public boolean containsKey(Key key) {
return column.containsKey(key);
}
@Override
public Collection duplicate(boolean deepCopy) {
return column.duplicate(deepCopy);
}
@Override
public Object get(String key) throws PageException {
return get(KeyImpl.init(key));
}
@Override
public Object get(Key key) throws PageException {
return column.get(key);
}
@Override
public Object get(String key, Object defaultValue) {
return column.get(key, defaultValue);
}
@Override
public Object get(Key key, Object defaultValue) {
return column.get(key, defaultValue);
}
@Override
public Key[] keys() {
return column.keys();
}
@Override
public Object remove(Key key) throws PageException {
disconnectCache();
return column.remove(key);
}
@Override
public Object removeEL(Key key) {
disconnectCache();
return column.removeEL(key);
}
@Override
public Object set(String key, Object value) throws PageException {
disconnectCache();
return column.set(key, value);
}
@Override
public Object set(Key key, Object value) throws PageException {
disconnectCache();
return column.set(key, value);
}
@Override
public Object setEL(String key, Object value) {
disconnectCache();
return column.setEL(key, value);
}
@Override
public Object setEL(Key key, Object value) {
disconnectCache();
return column.setEL(key, value);
}
@Override
public int size() {
return column.size();
}
@Override
public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
return column.toDumpData(pageContext, maxlevel,dp);
}
@Override
public Iterator<Collection.Key> keyIterator() {
return column.keyIterator();
}
@Override
public Iterator<String> keysAsStringIterator() {
return column.keysAsStringIterator();
}
@Override
public Iterator<Entry<Key, Object>> entryIterator() {
return column.entryIterator();
}
@Override
public boolean castToBooleanValue() throws PageException {
return column.castToBooleanValue();
}
@Override
public Boolean castToBoolean(Boolean defaultValue) {
return column.castToBoolean(defaultValue);
}
@Override
public DateTime castToDateTime() throws PageException {
return column.castToDateTime();
}
@Override
public DateTime castToDateTime(DateTime defaultValue) {
return column.castToDateTime(defaultValue);
}
@Override
public double castToDoubleValue() throws PageException {
return column.castToDoubleValue();
}
@Override
public double castToDoubleValue(double defaultValue) {
return column.castToDoubleValue(defaultValue);
}
@Override
public String castToString() throws PageException {
return column.castToString();
}
@Override
public String castToString(String defaultValue) {
return column.castToString(defaultValue);
}
@Override
public int compareTo(String str) throws PageException {
return column.compareTo(str);
}
@Override
public int compareTo(boolean b) throws PageException {
return column.compareTo(b);
}
@Override
public int compareTo(double d) throws PageException {
return column.compareTo(d);
}
@Override
public int compareTo(DateTime dt) throws PageException {
return column.compareTo(dt);
}
@Override
public Object get(PageContext pc) throws PageException {
return column.get(pc);
}
@Override
public Object get(PageContext pc, Object defaultValue) {
return column.get(pc, defaultValue);
}
@Override
public Key getKey() throws PageException {
return column.getKey();
}
@Override
public String getKeyAsString() throws PageException {
return column.getKeyAsString();
}
@Override
public Object getParent() {
return qcq;
}
@Override
public Object remove(PageContext pc) throws PageException {
disconnectCache();
return column.remove(pc);
}
@Override
public Object removeEL(PageContext pc) {
disconnectCache();
return column.removeEL(pc);
}
@Override
public Object set(PageContext pc, Object value) throws PageException {
disconnectCache();
return column.set(pc, value);
}
@Override
public Object setEL(PageContext pc, Object value) {
disconnectCache();
return column.setEL(pc, value);
}
@Override
public Object touch(PageContext pc) throws PageException {
disconnectCache();
return column.touch(pc);
}
@Override
public Object touchEL(PageContext pc) {
disconnectCache();
return column.touchEL(pc);
}
@Override
public Object clone() {
return column.clone();
}
@Override
public Iterator<Object> valueIterator() {
return column.valueIterator();
}
@Override
public long sizeOf() {
return QueryUtil.sizeOf(column);
}
@Override
public java.util.Iterator<String> getIterator() {
return keysAsStringIterator();
}
}