📄 expressionvalue.java
字号:
if(newValue instanceof Long)
this.dataType = SQLTokenizer.BIGINT;
else
if(newValue instanceof Float)
this.dataType = SQLTokenizer.REAL;
else
if(newValue instanceof Double)
this.dataType = SQLTokenizer.DOUBLE;
else
if(newValue instanceof Number)
this.dataType = SQLTokenizer.DECIMAL;
else
if(newValue instanceof java.util.Date){
DateTime dateTime;
this.value = dateTime = DateTime.valueOf((java.util.Date)newValue);
this.dataType = dateTime.getDataType();
}else
if(newValue instanceof byte[])
this.dataType = SQLTokenizer.VARBINARY;
else
if(newValue instanceof Boolean)
this.dataType = SQLTokenizer.BOOLEAN;
else
if(newValue instanceof Money)
this.dataType = SQLTokenizer.MONEY;
else
throw Utils.createSQLException("Unknown parameter class:" + newValue.getClass().getName());
}
}
final void set(ExpressionValue val){
this.value = val.value;
this.dataType = val.dataType;
this.length = val.length;
}
/*==============================================================================
overriden abstact methods extends from expression
==============================================================================*/
boolean isNull(){
return value == null;
}
boolean getBoolean() throws Exception{
return getBoolean( value, dataType );
}
static boolean getBoolean(Object obj, int dataType) throws Exception{
if(obj == null) return false;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return (obj.equals(Boolean.TRUE));
case SQLTokenizer.TINYINT:
case SQLTokenizer.SMALLINT:
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
return ((Number)obj).intValue() != 0;
case SQLTokenizer.REAL:
case SQLTokenizer.DOUBLE:
case SQLTokenizer.MONEY:
return ((Number)obj).doubleValue() != 0;
default: return Utils.string2boolean( obj.toString() );
}
}
int getInt() throws Exception{
return getInt( value, dataType );
}
static int getInt(Object obj, int dataType) throws Exception{
if(obj == null) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return (obj == Boolean.TRUE) ? 1 : 0;
case SQLTokenizer.TINYINT:
case SQLTokenizer.SMALLINT:
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
case SQLTokenizer.REAL:
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
case SQLTokenizer.MONEY:
return ((Number)obj).intValue();
case SQLTokenizer.TIMESTAMP:
case SQLTokenizer.TIME:
case SQLTokenizer.DATE:
case SQLTokenizer.SMALLDATETIME:
return (int)((DateTime)obj).getTimeMillis();
default:
String str = obj.toString().trim();
try{
return Integer.parseInt( str );
}catch(Throwable th){/* A NumberFormatException can occur if it a floating point number */}
return (int)Double.parseDouble( str );
}
}
long getLong() throws Exception{
return getLong(value, dataType);
}
static long getLong(Object obj, int dataType) throws Exception{
if(obj == null) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return (obj == Boolean.TRUE) ? 1 : 0;
case SQLTokenizer.TINYINT:
case SQLTokenizer.SMALLINT:
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
case SQLTokenizer.DOUBLE:
case SQLTokenizer.MONEY:
return ((Number)obj).longValue();
case SQLTokenizer.TIMESTAMP:
case SQLTokenizer.TIME:
case SQLTokenizer.DATE:
case SQLTokenizer.SMALLDATETIME:
return ((DateTime)obj).getTimeMillis();
default:
String str = obj.toString();
if(str.indexOf('-') > 0 || str.indexOf(':') > 0)
return DateTime.parse(str);
try{
return Long.parseLong( str );
}catch(NumberFormatException e){
return (long)Double.parseDouble( str );
}
}
}
float getFloat() throws Exception{
return getFloat( value, dataType);
}
static float getFloat(Object obj, int dataType) throws Exception{
if(obj == null) return 0;
switch(dataType){
case SQLTokenizer.BIT:
return (obj.equals(Boolean.TRUE)) ? 1 : 0;
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
case SQLTokenizer.DOUBLE:
case SQLTokenizer.FLOAT:
case SQLTokenizer.REAL:
case SQLTokenizer.MONEY:
return ((Number)obj).floatValue();
case SQLTokenizer.TIMESTAMP:
case SQLTokenizer.TIME:
case SQLTokenizer.DATE:
case SQLTokenizer.SMALLDATETIME:
return ((DateTime)obj).getTimeMillis();
default: return Float.parseFloat( obj.toString() );
}
}
double getDouble() throws Exception{
return getDouble( value, dataType);
}
static double getDouble(Object obj, int dataType) throws Exception{
if(obj == null) return 0;
switch(dataType){
case SQLTokenizer.BIT:
return (obj.equals(Boolean.TRUE)) ? 1 : 0;
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
case SQLTokenizer.DOUBLE:
case SQLTokenizer.MONEY:
return ((Number)obj).doubleValue();
case SQLTokenizer.TIMESTAMP:
case SQLTokenizer.TIME:
case SQLTokenizer.DATE:
case SQLTokenizer.SMALLDATETIME:
return ((DateTime)obj).getTimeMillis();
default: return Double.parseDouble( obj.toString() );
}
}
long getMoney() throws Exception{
return getMoney( value, dataType );
}
static long getMoney(Object obj, int dataType) throws Exception{
if(obj == null) return 0;
switch(dataType){
case SQLTokenizer.BIT:
return (obj == Boolean.TRUE) ? 10000 : 0;
case SQLTokenizer.TINYINT:
case SQLTokenizer.SMALLINT:
case SQLTokenizer.INT:
case SQLTokenizer.BIGINT:
return ((Number)obj).longValue() * 10000;
case SQLTokenizer.REAL:
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return Utils.doubleToMoney(((Number)obj).doubleValue());
case SQLTokenizer.MONEY:
case SQLTokenizer.SMALLMONEY:
return ((Money)obj).value;
default: return Money.parseMoney( obj.toString() );
}
}
MutableNumeric getNumeric(){
return getNumeric(value, dataType );
}
static MutableNumeric getNumeric(Object obj, int dataType){
if(obj == null) return null;
switch(dataType){
case SQLTokenizer.BIT:
return new MutableNumeric( (obj == Boolean.TRUE) ? 1 : 0);
case SQLTokenizer.INT:
return new MutableNumeric( ((Number)obj).intValue() );
case SQLTokenizer.BIGINT:
return new MutableNumeric( ((Number)obj).longValue() );
case SQLTokenizer.REAL:
float fValue = ((Number)obj).floatValue();
if(Float.isInfinite(fValue) || Float.isNaN(fValue))
return null;
return new MutableNumeric( fValue );
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
double dValue = ((Number)obj).doubleValue();
if(Double.isInfinite(dValue) || Double.isNaN(dValue))
return null;
return new MutableNumeric( dValue );
case SQLTokenizer.MONEY:
case SQLTokenizer.SMALLMONEY:
return new MutableNumeric( ((Money)obj).value, 4 );
case SQLTokenizer.DECIMAL:
case SQLTokenizer.NUMERIC:
if(obj instanceof MutableNumeric)
return (MutableNumeric)obj;
return new MutableNumeric( (BigDecimal)obj );
default: return new MutableNumeric( obj.toString() );
}
}
Object getObject(){
return value;
}
String getString(){
if(value == null) return null;
if(dataType == SQLTokenizer.BIT){
return (value == Boolean.TRUE) ? "1" : "0";
}
return value.toString();
}
byte[] getBytes() throws Exception{
return getBytes( value, dataType);
}
static byte[] getBytes(Object obj, int dataType) throws Exception{
if(obj == null) return null;
switch(dataType){
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return (byte[])obj;
case SQLTokenizer.VARCHAR:
case SQLTokenizer.CHAR:
case SQLTokenizer.NVARCHAR:
case SQLTokenizer.NCHAR:
return ((String)obj).getBytes();
case SQLTokenizer.UNIQUEIDENTIFIER:
return Utils.unique2bytes((String)obj);
case SQLTokenizer.INT:
return Utils.int2bytes( ((Number)obj).intValue() );
case SQLTokenizer.DOUBLE:
return Utils.double2bytes( ((Number)obj).doubleValue() );
case SQLTokenizer.REAL:
return Utils.float2bytes( ((Number)obj).floatValue() );
default: throw createUnspportedConversion(dataType, obj, SQLTokenizer.VARBINARY);
}
}
final int getDataType(){
return dataType;
}
/*=======================================================================
Methods for ResultSetMetaData
=======================================================================*/
String getTableName(){
return null;
}
final int getPrecision(){
switch(dataType){
case SQLTokenizer.VARCHAR:
case SQLTokenizer.CHAR:
return ((String)value).length();
case SQLTokenizer.VARBINARY:
case SQLTokenizer.BINARY:
return ((byte[])value).length;
default:
return super.getPrecision();
}
}
int getScale(){
switch(dataType){
case SQLTokenizer.DECIMAL:
case SQLTokenizer.NUMERIC:
MutableNumeric obj = getNumeric();
return (obj == null) ? 0: obj.getScale();
default:
return getScale(dataType);
}
}
static SQLException createUnspportedConversion( int fromDataType, Object obj, int toDataType ){
return Utils.createSQLException("Can't convert '" +
SQLTokenizer.getKeyWord(fromDataType) +
"' [" + obj + ']' +
"' to '" +
SQLTokenizer.getKeyWord(toDataType) + '\'');
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -