📄 storeimpl.java
字号:
case SQLTokenizer.TIMESTAMP:
writeTimestamp( expr.getLong() );
break;
case SQLTokenizer.TIME:
writeTime( expr.getLong() );
break;
case SQLTokenizer.DATE:
writeDate( expr.getLong() );
break;
case SQLTokenizer.SMALLDATETIME:
writeSmallDateTime( expr.getLong() );
break;
case SQLTokenizer.UNIQUEIDENTIFIER:
switch(expr.getDataType()){
case SQLTokenizer.UNIQUEIDENTIFIER:
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
byte[] bytes = expr.getBytes();
if(bytes.length != 16) throw SmallSQLException.create(Language.BYTEARR_INVALID_SIZE, String.valueOf(bytes.length));
writeBytes( bytes );
default:
writeBytes( Utils.unique2bytes(expr.getString()) );
}
break;
default: throw new Error(String.valueOf(column.getDataType()));
}
}
boolean isNull(int offset){
return page[ offset ] != 0;
}
/**
* It used for ResultSet.getBoolean()
*/
boolean getBoolean(int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return false;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean();
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return Utils.bytes2int( readBinary() ) != 0;
case SQLTokenizer.TINYINT:
return readUnsignedByte() != 0;
case SQLTokenizer.SMALLINT:
return readShort() != 0;
case SQLTokenizer.INT:
return readInt() != 0;
case SQLTokenizer.BIGINT:
return readLong() != 0;
case SQLTokenizer.REAL:
return readFloat() != 0;
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return readDouble() != 0;
case SQLTokenizer.MONEY:
return readLong() != 0;
case SQLTokenizer.SMALLMONEY:
return readInt() != 0;
case SQLTokenizer.NUMERIC:
case SQLTokenizer.DECIMAL:
return readNumeric().getSignum() != 0;
case SQLTokenizer.CHAR:
case SQLTokenizer.NCHAR:
case SQLTokenizer.VARCHAR:
case SQLTokenizer.NVARCHAR:
return Utils.string2boolean( readString() );
case SQLTokenizer.CLOB:
case SQLTokenizer.NCLOB:
case SQLTokenizer.LONGNVARCHAR:
case SQLTokenizer.LONGVARCHAR:
return Utils.string2boolean( readLongString() );
case SQLTokenizer.JAVA_OBJECT:
ByteArrayInputStream bais = new ByteArrayInputStream(readLongBinary());
ObjectInputStream ois = new ObjectInputStream(bais);
return Utils.string2boolean( ois.readObject().toString() );
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
return Utils.bytes2int( readLongBinary() ) != 0;
case SQLTokenizer.TIMESTAMP:
return readTimestamp() != 0;
case SQLTokenizer.TIME:
return readTime() != 0;
case SQLTokenizer.DATE:
return readDate() != 0;
case SQLTokenizer.SMALLDATETIME:
return readSmallDateTime() != 0;
case SQLTokenizer.UNIQUEIDENTIFIER:
return false;
default:
throw SmallSQLException.create(Language.VALUE_CANT_CONVERT, new Object[] { SQLTokenizer.getKeyWord(dataType), "BOOLEAN" });
}
}
/**
* It used for ResultSet.getInt()
*/
int getInt(int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean() ? 1 : 0;
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return Utils.bytes2int( readBinary() );
case SQLTokenizer.TINYINT:
return readUnsignedByte();
case SQLTokenizer.SMALLINT:
return readShort();
case SQLTokenizer.INT:
return readInt();
case SQLTokenizer.BIGINT:
return (int)readLong();
case SQLTokenizer.REAL:
return (int)readFloat();
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return (int)readDouble();
case SQLTokenizer.MONEY:
long longValue = readLong() / 10000;
return Utils.money2int(longValue);
case SQLTokenizer.SMALLMONEY:
return readInt() / 10000;
case SQLTokenizer.NUMERIC:
case SQLTokenizer.DECIMAL:
return readNumeric().intValue();
case SQLTokenizer.CHAR:
case SQLTokenizer.NCHAR:
case SQLTokenizer.VARCHAR:
case SQLTokenizer.NVARCHAR:
return Integer.parseInt( readString() );
case SQLTokenizer.CLOB:
case SQLTokenizer.NCLOB:
case SQLTokenizer.LONGNVARCHAR:
case SQLTokenizer.LONGVARCHAR:
return Integer.parseInt( readLongString() );
case SQLTokenizer.JAVA_OBJECT:
ByteArrayInputStream bais = new ByteArrayInputStream(readLongBinary());
ObjectInputStream ois = new ObjectInputStream(bais);
return ExpressionValue.getInt(ois.readObject().toString(), SQLTokenizer.VARCHAR);
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
return Utils.bytes2int( readLongBinary() );
case SQLTokenizer.TIMESTAMP:
return (int)readTimestamp();
case SQLTokenizer.TIME:
return (int)readTime();
case SQLTokenizer.DATE:
return (int)readDate();
case SQLTokenizer.SMALLDATETIME:
return (int)readSmallDateTime();
default:
throw SmallSQLException.create(Language.VALUE_CANT_CONVERT, new Object[] { SQLTokenizer.getKeyWord(dataType), "INT" });
}
}
/**
* It used for ResultSet.getLong()
*/
long getLong(int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean() ? 1 : 0;
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return Utils.bytes2long( readBinary() );
case SQLTokenizer.TINYINT:
return readUnsignedByte();
case SQLTokenizer.SMALLINT:
return readShort();
case SQLTokenizer.INT:
return readInt();
case SQLTokenizer.BIGINT:
return readLong();
case SQLTokenizer.REAL:
return (long)readFloat();
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return (long)readDouble();
case SQLTokenizer.MONEY:
return readLong() / 10000;
case SQLTokenizer.SMALLMONEY:
return readInt() / 10000;
case SQLTokenizer.NUMERIC:
case SQLTokenizer.DECIMAL:
return readNumeric().longValue();
case SQLTokenizer.CHAR:
case SQLTokenizer.NCHAR:
case SQLTokenizer.VARCHAR:
case SQLTokenizer.NVARCHAR:
return Long.parseLong( readString() );
case SQLTokenizer.CLOB:
case SQLTokenizer.NCLOB:
case SQLTokenizer.LONGNVARCHAR:
case SQLTokenizer.LONGVARCHAR:
return Long.parseLong( readLongString() );
case SQLTokenizer.JAVA_OBJECT:
ByteArrayInputStream bais = new ByteArrayInputStream(readLongBinary());
ObjectInputStream ois = new ObjectInputStream(bais);
return ExpressionValue.getLong( ois.readObject().toString(), SQLTokenizer.VARCHAR );
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
return Utils.bytes2long( readLongBinary() );
case SQLTokenizer.TIMESTAMP:
return readTimestamp();
case SQLTokenizer.TIME:
return readTime();
case SQLTokenizer.DATE:
return readDate();
case SQLTokenizer.SMALLDATETIME:
return readSmallDateTime();
default:
throw SmallSQLException.create(Language.VALUE_CANT_CONVERT, new Object[] { SQLTokenizer.getKeyWord(dataType), "BIGINT" });
}
}
/**
* It used for ResultSet.getFloat()
*/
float getFloat(int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean() ? 1 : 0;
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return Utils.bytes2float( readBinary() );
case SQLTokenizer.TINYINT:
return readUnsignedByte();
case SQLTokenizer.SMALLINT:
return readShort();
case SQLTokenizer.INT:
return readInt();
case SQLTokenizer.BIGINT:
return readLong();
case SQLTokenizer.REAL:
return readFloat();
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return (float)readDouble();
case SQLTokenizer.MONEY:
return readLong() / (float)10000.0;
case SQLTokenizer.SMALLMONEY:
return readInt() / (float)10000.0;
case SQLTokenizer.NUMERIC:
case SQLTokenizer.DECIMAL:
return readNumeric().floatValue();
case SQLTokenizer.CHAR:
case SQLTokenizer.NCHAR:
case SQLTokenizer.VARCHAR:
case SQLTokenizer.NVARCHAR:
return Float.parseFloat( readString() );
case SQLTokenizer.CLOB:
case SQLTokenizer.NCLOB:
case SQLTokenizer.LONGNVARCHAR:
case SQLTokenizer.LONGVARCHAR:
return Float.parseFloat( readLongString() );
case SQLTokenizer.JAVA_OBJECT:
ByteArrayInputStream bais = new ByteArrayInputStream(readLongBinary());
ObjectInputStream ois = new ObjectInputStream(bais);
return Float.parseFloat( ois.readObject().toString() );
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
return Utils.bytes2float( readLongBinary() );
case SQLTokenizer.TIMESTAMP:
return readTimestamp();
case SQLTokenizer.TIME:
return readTime();
case SQLTokenizer.DATE:
return readDate();
case SQLTokenizer.SMALLDATETIME:
return readSmallDateTime();
default:
throw SmallSQLException.create(Language.VALUE_CANT_CONVERT, new Object[] { SQLTokenizer.getKeyWord(dataType), "REAL" });
}
}
/**
* It used for ResultSet.getDouble()
*/
double getDouble(int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean() ? 1 : 0;
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return Utils.bytes2double( readBinary() );
case SQLTokenizer.TINYINT:
return readUnsignedByte();
case SQLTokenizer.SMALLINT:
return readShort();
case SQLTokenizer.INT:
return readInt();
case SQLTokenizer.BIGINT:
return readLong();
case SQLTokenizer.REAL:
return readFloat();
case SQLTokenizer.FLOAT:
case SQLTokenizer.DOUBLE:
return readDouble();
case SQLTokenizer.MONEY:
return readLong() / 10000.0;
case SQLTokenizer.SMALLMONEY:
return readInt() / 10000.0;
case SQLTokenizer.NUMERIC:
case SQLTokenizer.DECIMAL:
return readNumeric().doubleValue();
case SQLTokenizer.CHAR:
case SQLTokenizer.NCHAR:
case SQLTokenizer.VARCHAR:
case SQLTokenizer.NVARCHAR:
return Double.parseDouble( readString() );
case SQLTokenizer.CLOB:
case SQLTokenizer.NCLOB:
case SQLTokenizer.LONGNVARCHAR:
case SQLTokenizer.LONGVARCHAR:
return Double.parseDouble( readLongString() );
case SQLTokenizer.JAVA_OBJECT:
ByteArrayInputStream bais = new ByteArrayInputStream(readLongBinary());
ObjectInputStream ois = new ObjectInputStream(bais);
return Double.parseDouble( ois.readObject().toString() );
case SQLTokenizer.LONGVARBINARY:
case SQLTokenizer.BLOB:
return Utils.bytes2double( readLongBinary() );
case SQLTokenizer.TIMESTAMP:
return readTimestamp();
case SQLTokenizer.TIME:
return readTime();
case SQLTokenizer.DATE:
return readDate();
case SQLTokenizer.SMALLDATETIME:
return readSmallDateTime();
default:
throw SmallSQLException.create(Language.VALUE_CANT_CONVERT, new Object[] { SQLTokenizer.getKeyWord(dataType), "NUMERIC" });
}
}
// wird zum schnelleren Rechnen verwendet
long getMoney( int offset, int dataType) throws Exception{
this.offset = offset;
if(readBoolean()) return 0;
switch(dataType){
case SQLTokenizer.BIT:
case SQLTokenizer.BOOLEAN:
return readBoolean() ? 10000 : 0;
case SQLTokenizer.BINARY:
case SQLTokenizer.VARBINARY:
return (long)(Utils.bytes2double( readBinary() ) * 10000L);
case SQLTokenizer.TINYINT:
return readUnsignedByte() * 10000L;
case SQLTokenizer.SMALLINT:
return readShort() * 10000L;
case SQLTokenizer.INT:
return readInt() * 10000L;
case SQLTokenizer.BIGINT:
return readLong() * 10000L;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -