package railo.runtime.db;
import java.io.Serializable;
import java.sql.Types;
import railo.commons.lang.SizeOf;
import railo.runtime.exp.PageException;
import railo.runtime.op.Caster;
import railo.runtime.type.Sizeable;
/**
*
*/
public class SQLItemImpl implements SQLItem,Serializable,Sizeable {
/** Yes or No. Indicates whether the parameter is passed as a null. If Yes, the tag ignores the
** value attribute. The default is No. */
private boolean nulls;
/** Specifies the actual value that Railo passes to the right of the comparison operator in a
** where clause. */
private Object value;
private Object cfValue;
/** Number of decimal places of the parameter. The default value is zero. */
private int scale=0;
/** The SQL type that the parameter (any type) will be bound to. */
private int type=Types.CHAR;
private boolean isValueSet;
/**
* constructor of the class
*/
public SQLItemImpl() {}
/**
* constructor of the class
* @param value
*/
public SQLItemImpl(Object value) {
this.value=value;
}
/**
* constructor of the class
* @param value
*/
public SQLItemImpl(Object value, int type) {
this.value=value;
this.type=type;
}
@Override
public boolean isNulls() {
return nulls;
}
@Override
public void setNulls(boolean nulls) {
this.nulls = nulls;
}
@Override
public int getScale() {
return scale;
}
@Override
public void setScale(int scale) {
this.scale = scale;
}
@Override
public Object getValue() {
return value;
}
@Override
public void setValue(Object value) {
isValueSet=true;
this.value = value;
}
@Override
public int getType() {
return type;
}
@Override
public void setType(int type) {
this.type = type;
}
@Override
public SQLItem clone(Object object) {
SQLItemImpl item = new SQLItemImpl();
item.nulls=nulls;
item.scale=scale;
item.type=type;
item.value=object;
return item;
}
@Override
public Object getValueForCF() throws PageException {
if(cfValue==null) {
cfValue=SQLCaster.toCFTypex(this);
}
return cfValue;
}
@Override
public boolean isValueSet() {
return isValueSet;
}
public String toString() {
try {
return Caster.toString(getValueForCF(),"");
} catch (PageException e) {
return Caster.toString(getValue(),"");
}
}
public long sizeOf() {
return SizeOf.size(this.cfValue)+
SizeOf.size(this.isValueSet)+
SizeOf.size(this.nulls)+
SizeOf.size(this.value);
}
public static SQLItem duplicate(SQLItem item) {
if(!(item instanceof SQLItemImpl)) return item;
return ((SQLItemImpl) item).duplicate();
}
public SQLItem duplicate() {
SQLItemImpl rtn = new SQLItemImpl(value,type);
rtn.nulls=nulls;
rtn.cfValue=cfValue;
rtn.isValueSet=isValueSet;
rtn.scale=scale;
return rtn;
}
}