Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
8c69a427
提交
8c69a427
authored
7 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Try to check sizes of BLOBs
上级
0416d329
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
29 行增加
和
6 行删除
+29
-6
Value.java
h2/src/main/org/h2/value/Value.java
+1
-1
ValueLob.java
h2/src/main/org/h2/value/ValueLob.java
+11
-3
ValueLobDb.java
h2/src/main/org/h2/value/ValueLobDb.java
+16
-1
TestResultSet.java
h2/src/test/org/h2/test/jdbc/TestResultSet.java
+1
-1
没有找到文件。
h2/src/main/org/h2/value/Value.java
浏览文件 @
8c69a427
...
...
@@ -188,7 +188,7 @@ public abstract class Value {
private
static
final
BigDecimal
MIN_LONG_DECIMAL
=
BigDecimal
.
valueOf
(
Long
.
MIN_VALUE
);
private
static
void
rangeCheck
(
long
zeroBasedOffset
,
long
length
,
long
dataSize
)
{
static
void
rangeCheck
(
long
zeroBasedOffset
,
long
length
,
long
dataSize
)
{
if
((
zeroBasedOffset
|
length
)
<
0
||
length
>
dataSize
-
zeroBasedOffset
)
{
if
(
zeroBasedOffset
<
0
||
zeroBasedOffset
>
dataSize
)
{
throw
DbException
.
getInvalidValueException
(
"offset"
,
zeroBasedOffset
+
1
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueLob.java
浏览文件 @
8c69a427
...
...
@@ -59,8 +59,11 @@ public class ValueLob extends Value {
}
}
static
InputStream
rangeInputStream
(
InputStream
inputStream
,
long
oneBasedOffset
,
long
length
)
{
rangeCheckUnknown
(
oneBasedOffset
,
length
);
static
InputStream
rangeInputStream
(
InputStream
inputStream
,
long
oneBasedOffset
,
long
length
,
long
dataSize
)
{
if
(
dataSize
>=
0
)
rangeCheck
(
oneBasedOffset
-
1
,
length
,
dataSize
);
else
rangeCheckUnknown
(
oneBasedOffset
-
1
,
length
);
try
{
return
new
RangeInputStream
(
inputStream
,
oneBasedOffset
-
1
,
length
);
}
catch
(
IOException
e
)
{
...
...
@@ -683,7 +686,12 @@ public class ValueLob extends Value {
if
(
fileName
==
null
)
{
return
super
.
getInputStream
(
oneBasedOffset
,
length
);
}
return
rangeInputStream
(
getInputStream
(),
oneBasedOffset
,
length
);
FileStore
store
=
handler
.
openFile
(
fileName
,
"r"
,
true
);
boolean
alwaysClose
=
SysProperties
.
lobCloseBetweenReads
;
InputStream
inputStream
=
new
BufferedInputStream
(
new
FileStoreInputStream
(
store
,
handler
,
compressed
,
alwaysClose
),
Constants
.
IO_BUFFER_SIZE
);
return
rangeInputStream
(
inputStream
,
oneBasedOffset
,
length
,
store
.
length
());
}
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/main/org/h2/value/ValueLobDb.java
浏览文件 @
8c69a427
...
...
@@ -399,10 +399,25 @@ public class ValueLobDb extends Value implements Value.ValueClob,
@Override
public
InputStream
getInputStream
(
long
oneBasedOffset
,
long
length
)
{
long
byteCount
;
InputStream
inputStream
;
if
(
small
!=
null
)
{
return
super
.
getInputStream
(
oneBasedOffset
,
length
);
}
else
if
(
fileName
!=
null
)
{
FileStore
store
=
handler
.
openFile
(
fileName
,
"r"
,
true
);
boolean
alwaysClose
=
SysProperties
.
lobCloseBetweenReads
;
byteCount
=
store
.
length
();
inputStream
=
new
BufferedInputStream
(
new
FileStoreInputStream
(
store
,
handler
,
false
,
alwaysClose
),
Constants
.
IO_BUFFER_SIZE
);
}
else
{
byteCount
=
(
type
==
Value
.
BLOB
)
?
precision
:
-
1
;
try
{
inputStream
=
handler
.
getLobStorage
().
getInputStream
(
this
,
hmac
,
byteCount
);
}
catch
(
IOException
e
)
{
throw
DbException
.
convertIOException
(
e
,
toString
());
}
}
return
ValueLob
.
rangeInputStream
(
getInputStream
(),
oneBasedOffset
,
length
);
return
ValueLob
.
rangeInputStream
(
inputStream
,
oneBasedOffset
,
length
,
byteCount
);
}
@Override
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/jdbc/TestResultSet.java
浏览文件 @
8c69a427
...
...
@@ -1633,7 +1633,7 @@ public class TestResultSet extends TestBase {
byte
[]
got
=
readAllBytes
(
blob
.
getBinaryStream
(
101
,
50002
));
assertEqualsWithNull
(
expected
,
got
);
assertTrue
(!
rs
.
wasNull
());
// TODO
assertThrows(ErrorCode.INVALID_VALUE_2, blob).getBinaryStream(0x10001, 1);
assertThrows
(
ErrorCode
.
INVALID_VALUE_2
,
blob
).
getBinaryStream
(
0x10001
,
1
);
assertThrows
(
ErrorCode
.
INVALID_VALUE_2
,
blob
).
getBinaryStream
(
0x10002
,
0
);
}
finally
{
blob
.
free
();
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论