Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
da7053ec
提交
da7053ec
authored
7 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix handling of UUID in Datatype.readValue()
上级
7dd4829b
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
47 行增加
和
3 行删除
+47
-3
TableFunction.java
h2/src/main/org/h2/expression/TableFunction.java
+4
-0
DataType.java
h2/src/main/org/h2/value/DataType.java
+12
-3
TestValue.java
h2/src/test/org/h2/test/unit/TestValue.java
+31
-0
没有找到文件。
h2/src/main/org/h2/expression/TableFunction.java
浏览文件 @
da7053ec
...
...
@@ -136,6 +136,10 @@ public class TableFunction extends Function {
simple
.
setAutoClose
(
false
);
for
(
int
i
=
0
;
i
<
columnCount
;
i
++)
{
String
name
=
rs
.
getColumnName
(
i
);
/*
* TODO Some types, such as Value.BYTES and Value.UUID are mapped to the same
* SQL type and we can lose real type here.
*/
int
sqlType
=
DataType
.
convertTypeToSQLType
(
rs
.
getColumnType
(
i
));
int
precision
=
MathUtils
.
convertLongToInt
(
rs
.
getColumnPrecision
(
i
));
int
scale
=
rs
.
getColumnScale
(
i
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/DataType.java
浏览文件 @
da7053ec
...
...
@@ -514,9 +514,18 @@ public class DataType {
return
ValueNull
.
INSTANCE
;
}
case
Value
.
BYTES
:
{
byte
[]
buff
=
rs
.
getBytes
(
columnIndex
);
v
=
buff
==
null
?
(
Value
)
ValueNull
.
INSTANCE
:
ValueBytes
.
getNoCopy
(
buff
);
/*
* Both BINARY and UUID may be mapped to Value.BYTES. getObject() returns byte[]
* for SQL BINARY, UUID for SQL UUID and null for SQL NULL.
*/
Object
o
=
rs
.
getObject
(
columnIndex
);
if
(
o
instanceof
byte
[])
{
v
=
ValueBytes
.
getNoCopy
((
byte
[])
o
);
}
else
if
(
o
!=
null
)
{
UUID
u
=
(
UUID
)
o
;
v
=
ValueUuid
.
get
(
u
.
getMostSignificantBits
(),
u
.
getLeastSignificantBits
());
}
else
v
=
ValueNull
.
INSTANCE
;
break
;
}
case
Value
.
UUID
:
{
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/unit/TestValue.java
浏览文件 @
da7053ec
...
...
@@ -8,12 +8,15 @@ package org.h2.test.unit;
import
java.math.BigDecimal
;
import
java.sql.Connection
;
import
java.sql.Date
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Time
;
import
java.sql.Timestamp
;
import
java.sql.Types
;
import
java.util.Arrays
;
import
java.util.UUID
;
import
org.h2.api.ErrorCode
;
import
org.h2.message.DbException
;
import
org.h2.test.TestBase
;
...
...
@@ -50,6 +53,7 @@ public class TestValue extends TestBase {
@Override
public
void
test
()
throws
SQLException
{
testResultSetOperations
();
testBinaryAndUuid
();
testCastTrim
();
testValueResultSet
();
testDataType
();
...
...
@@ -87,6 +91,7 @@ public class TestValue extends TestBase {
testResultSetOperation
(
new
Time
(
7
));
testResultSetOperation
(
new
Timestamp
(
8
));
testResultSetOperation
(
new
BigDecimal
(
"9"
));
testResultSetOperation
(
UUID
.
randomUUID
());
SimpleResultSet
rs2
=
new
SimpleResultSet
();
rs2
.
setAutoClose
(
false
);
...
...
@@ -114,6 +119,32 @@ public class TestValue extends TestBase {
}
}
private
void
testBinaryAndUuid
()
throws
SQLException
{
Connection
conn
=
getConnection
(
"binaryAndUuid"
);
try
{
UUID
uuid
=
UUID
.
randomUUID
();
PreparedStatement
prep
;
ResultSet
rs
;
// Check conversion to byte[]
prep
=
conn
.
prepareStatement
(
"SELECT * FROM TABLE(X BINARY=?)"
);
prep
.
setObject
(
1
,
new
Object
[]
{
uuid
});
rs
=
prep
.
executeQuery
();
rs
.
next
();
assertTrue
(
Arrays
.
equals
(
ValueUuid
.
get
(
uuid
.
getMostSignificantBits
(),
uuid
.
getLeastSignificantBits
()).
getBytes
(),
(
byte
[])
rs
.
getObject
(
1
)));
// Check that type is not changed
prep
=
conn
.
prepareStatement
(
"SELECT * FROM TABLE(X UUID=?)"
);
prep
.
setObject
(
1
,
new
Object
[]
{
uuid
});
rs
=
prep
.
executeQuery
();
rs
.
next
();
assertEquals
(
uuid
,
rs
.
getObject
(
1
));
}
finally
{
conn
.
close
();
deleteDb
(
"binaryAndUuid"
);
}
}
private
void
testCastTrim
()
{
Value
v
;
String
spaces
=
new
String
(
new
char
[
100
]).
replace
((
char
)
0
,
' '
);
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论