package railo.runtime.sql.exp; import railo.runtime.exp.PageException; import railo.runtime.type.Collection; import railo.runtime.type.KeyImpl; import railo.runtime.type.Query; import railo.runtime.type.QueryColumn; import railo.runtime.type.util.QueryUtil; public class ColumnExpression extends ExpressionSupport implements Column { private String table; private String column; private boolean hasBracked; private int columnIndex; private QueryColumn col; public String toString(){ return "table:"+table+";column:"+column+";hasBracked:"+hasBracked+";columnIndex:"+columnIndex; } public ColumnExpression(String value, int columnIndex) { this.column=value; this.columnIndex=columnIndex; } public void setSub(String sub) { if(table==null) { table=column; column=sub; } else column=(column+"."+sub); } public String toString(boolean noAlias) { if(hasAlias() && !noAlias) return getFullName()+" as "+getAlias(); return getFullName(); } @Override public String getFullName() { if(table==null) return column; return table+"."+column; } @Override public String getAlias() { if(!hasAlias()) return getColumn().getString(); return super.getAlias(); } public Collection.Key getColumn() { return KeyImpl.init(column); } public String getTable() { return table; } public boolean hasBracked() { return hasBracked; } public void hasBracked(boolean b) { this.hasBracked=b; } public String getColumnName() { return column; } /** * @return the columnIndex */ public int getColumnIndex() { return columnIndex; } // MUST hanle null correctly public Object getValue(Query qr, int row) throws PageException { if(col==null)col = qr.getColumn(getColumn()); return QueryUtil.getValue(col,row); } public Object getValue(Query qr, int row, Object defaultValue) { if(col==null){ col = qr.getColumn(getColumn(),null); if(col==null) return defaultValue; } return col.get(row,defaultValue); } }