Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大炮V587
oceanbase
提交
b7aa3212
O
oceanbase
项目概览
大炮V587
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b7aa3212
编写于
3月 10, 2023
作者:
O
obdev
提交者:
ob-robot
3月 10, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[BUGFIX] fix lob bugs
上级
c9177f74
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
19 addition
and
8 deletion
+19
-8
src/sql/engine/expr/ob_datum_cast.cpp
src/sql/engine/expr/ob_datum_cast.cpp
+1
-1
src/storage/lob/ob_lob_manager.cpp
src/storage/lob/ob_lob_manager.cpp
+6
-4
src/storage/lob/ob_lob_meta.cpp
src/storage/lob/ob_lob_meta.cpp
+9
-2
src/storage/lob/ob_lob_meta.h
src/storage/lob/ob_lob_meta.h
+3
-1
未找到文件。
src/sql/engine/expr/ob_datum_cast.cpp
浏览文件 @
b7aa3212
...
...
@@ -1626,7 +1626,7 @@ static int common_copy_string_zf_to_text_result(const ObExpr &expr,
}
else
{
int64_t
zf_len
=
out_len
-
src
.
length
();
if
(
0
<
zf_len
)
{
if
(
OB_FAIL
(
str_result
.
fill
(
0
,
0
,
zf_len
)))
{
if
(
OB_FAIL
(
str_result
.
fill
(
0
,
'0'
,
zf_len
)))
{
}
else
if
(
OB_FAIL
(
str_result
.
lseek
(
zf_len
,
0
)))
{
}
else
{
/* do nothing */
};
}
...
...
src/storage/lob/ob_lob_manager.cpp
浏览文件 @
b7aa3212
...
...
@@ -2234,14 +2234,14 @@ int ObLobManager::write_outrow_inner(ObLobAccessParam& param, ObLobQueryIter *it
}
else
{
if
(
meta_iter
.
is_range_begin
(
result
.
meta_result_
.
info_
))
{
if
(
OB_FAIL
(
range_begin
.
deep_copy
(
*
param
.
allocator_
,
result
.
meta_result_
.
info_
)))
{
LOG_WARN
(
"deep copy meta info failed"
,
K
(
ret
));
LOG_WARN
(
"deep copy meta info failed"
,
K
(
ret
)
,
K
(
meta_iter
)
);
}
else
{
found_begin
=
true
;
}
}
if
(
OB_SUCC
(
ret
)
&&
meta_iter
.
is_range_end
(
result
.
meta_result_
.
info_
))
{
if
(
OB_FAIL
(
range_end
.
deep_copy
(
*
param
.
allocator_
,
result
.
meta_result_
.
info_
)))
{
LOG_WARN
(
"deep copy meta info failed"
,
K
(
ret
));
LOG_WARN
(
"deep copy meta info failed"
,
K
(
ret
)
,
K
(
meta_iter
)
);
}
else
{
found_end
=
true
;
}
...
...
@@ -2310,9 +2310,11 @@ int ObLobManager::write_outrow_inner(ObLobAccessParam& param, ObLobQueryIter *it
// prepare write iter
ObLobMetaWriteIter
write_iter
(
read_buf
,
param
.
allocator_
,
ObLobMetaUtil
::
LOB_OPER_PIECE_DATA_SIZE
);
if
(
OB_FAIL
(
write_iter
.
open
(
param
,
iter
,
read_buf
,
padding_size
,
post_data
,
remain_buf
,
seq_id_st
,
seq_id_ed
)))
{
LOG_WARN
(
"failed to open meta writer"
,
K
(
ret
),
K
(
write_iter
),
K
(
meta_iter
),
K
(
found_begin
),
K
(
found_end
));
LOG_WARN
(
"failed to open meta writer"
,
K
(
ret
),
K
(
write_iter
),
K
(
meta_iter
),
K
(
found_begin
),
K
(
found_end
),
K
(
range_begin
),
K
(
range_end
));
}
else
if
(
OB_FAIL
(
write_outrow_result
(
param
,
write_iter
)))
{
LOG_WARN
(
"failed to write outrow result"
,
K
(
ret
),
K
(
write_iter
),
K
(
meta_iter
),
K
(
found_begin
),
K
(
found_end
));
LOG_WARN
(
"failed to write outrow result"
,
K
(
ret
),
K
(
write_iter
),
K
(
meta_iter
),
K
(
found_begin
),
K
(
found_end
),
K
(
range_begin
),
K
(
range_end
));
}
write_iter
.
close
();
}
...
...
src/storage/lob/ob_lob_meta.cpp
浏览文件 @
b7aa3212
...
...
@@ -29,6 +29,7 @@ int ObLobMetaScanIter::open(ObLobAccessParam ¶m, ObILobApator* lob_adatper)
lob_adatper_
=
lob_adatper
;
param_
=
param
;
cur_pos_
=
0
;
cur_byte_pos_
=
0
;
if
(
OB_FAIL
(
lob_adatper
->
scan_lob_meta
(
param
,
scan_param_
,
meta_iter_
)))
{
LOG_WARN
(
"failed to open iter"
,
K
(
ret
));
}
...
...
@@ -36,7 +37,7 @@ int ObLobMetaScanIter::open(ObLobAccessParam ¶m, ObILobApator* lob_adatper)
}
ObLobMetaScanIter
::
ObLobMetaScanIter
()
:
lob_adatper_
(
nullptr
),
meta_iter_
(
nullptr
),
param_
(),
scan_param_
(),
cur_pos_
(
0
)
{}
:
lob_adatper_
(
nullptr
),
meta_iter_
(
nullptr
),
param_
(),
scan_param_
(),
cur_pos_
(
0
)
,
cur_byte_pos_
(
0
)
{}
int
ObLobMetaScanIter
::
get_next_row
(
ObLobMetaInfo
&
row
)
{
...
...
@@ -44,9 +45,13 @@ int ObLobMetaScanIter::get_next_row(ObLobMetaInfo &row)
if
(
OB_ISNULL
(
meta_iter_
))
{
ret
=
OB_ERR_NULL_VALUE
;
LOG_WARN
(
"meta_iter is null."
,
K
(
ret
));
}
else
if
(
cur_byte_pos_
>
param_
.
byte_size_
)
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"scan get lob meta byte len is bigger than byte size"
,
K
(
ret
),
K
(
*
this
),
K
(
param_
));
}
else
if
(
cur_byte_pos_
==
param_
.
byte_size_
)
{
ret
=
OB_ITER_END
;
}
else
{
bool
has_found
=
false
;
uint64_t
old_cur_pos
=
cur_pos_
;
bool
is_char
=
param_
.
coll_type_
!=
common
::
ObCollationType
::
CS_TYPE_BINARY
;
while
(
OB_SUCC
(
ret
)
&&
!
has_found
)
{
common
::
ObNewRow
*
new_row
=
NULL
;
...
...
@@ -77,6 +82,7 @@ int ObLobMetaScanIter::get_next_row(ObLobMetaInfo &row)
}
// update sum(len)
cur_pos_
+=
(
is_char
)
?
row
.
char_len_
:
row
.
byte_len_
;
cur_byte_pos_
+=
row
.
byte_len_
;
}
}
}
...
...
@@ -230,6 +236,7 @@ void ObLobMetaScanIter::reset()
lob_adatper_
=
nullptr
;
meta_iter_
=
nullptr
;
cur_pos_
=
0
;
cur_byte_pos_
=
0
;
}
// called after
...
...
src/storage/lob/ob_lob_meta.h
浏览文件 @
b7aa3212
...
...
@@ -63,12 +63,13 @@ public:
int
get_next_row
(
ObLobMetaInfo
&
row
);
int
get_next_row
(
ObLobMetaScanResult
&
result
);
uint64_t
get_cur_pos
()
{
return
cur_pos_
;
}
uint64_t
get_cur_byte_pos
()
{
return
cur_byte_pos_
;
}
ObLobMetaInfo
get_cur_info
()
{
return
cur_info_
;
}
void
reset
();
bool
is_range_begin
(
const
ObLobMetaInfo
&
info
);
bool
is_range_end
(
const
ObLobMetaInfo
&
info
);
bool
is_range_over
(
const
ObLobMetaInfo
&
info
);
TO_STRING_KV
(
K_
(
cur_pos
),
K_
(
cur_info
));
TO_STRING_KV
(
K_
(
cur_pos
),
K_
(
cur_
byte_pos
),
K_
(
cur_
info
));
private:
bool
is_in_range
(
const
ObLobMetaInfo
&
info
);
private:
...
...
@@ -77,6 +78,7 @@ private:
ObLobAccessParam
param_
;
ObTableScanParam
scan_param_
;
uint64_t
cur_pos_
;
uint64_t
cur_byte_pos_
;
ObLobMetaInfo
cur_info_
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录