Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
oceanbase
oceanbase
提交
a5334347
O
oceanbase
项目概览
oceanbase
/
oceanbase
2 年多 前同步成功
通知
262
Star
6084
Fork
1301
代码
文件
提交
分支
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看板
提交
a5334347
编写于
11月 11, 2025
作者:
O
obdev
提交者:
ob-robot
11月 11, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[vector index] fix replace into with sixth table part key issue
上级
fec30716
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
40 addition
and
1 deletion
+40
-1
src/sql/das/iter/ob_das_domain_id_merge_iter.cpp
src/sql/das/iter/ob_das_domain_id_merge_iter.cpp
+39
-1
src/sql/das/iter/ob_das_domain_id_merge_iter.h
src/sql/das/iter/ob_das_domain_id_merge_iter.h
+1
-0
未找到文件。
src/sql/das/iter/ob_das_domain_id_merge_iter.cpp
浏览文件 @
a5334347
...
...
@@ -939,10 +939,20 @@ int ObDASDomainIdMergeIter::get_domain_id(
}
if
(
OB_SUCC
(
ret
))
{
const
int64_t
rowkey_cnt
=
ctdef
->
table_param_
.
get_read_info
().
get_schema_rowkey_count
();
int64_t
part_key_num
=
0
;
ObExpr
*
expr
=
nullptr
;
int64_t
expect_result_output_cnt
=
rowkey_cnt
+
1
;
expect_result_output_cnt
=
OB_NOT_NULL
(
ctdef
->
trans_info_expr_
)
?
(
expect_result_output_cnt
+
1
)
:
expect_result_output_cnt
;
expect_result_output_cnt
=
(
domain_type
==
ObDomainIdUtils
::
IVFPQ_CID
)
?
(
expect_result_output_cnt
+
1
)
:
expect_result_output_cnt
;
// when partition and heap organization table, use hybrid vector index; the dml return all_columns as output, but tsc only use
// rowkey and embeded_vec; the dml has more columns that is partition key.
if
(
domain_type
!=
ObDomainIdUtils
::
EMB_VEC
)
{
// skip, do nothing
}
else
if
(
OB_FAIL
(
check_table_need_add_part_key
(
data_table_iter_
->
get_scan_param
().
index_id_
,
part_key_num
,
ctdef
)))
{
LOG_WARN
(
"fail to check embedded table add part key "
,
K
(
ret
),
K
(
data_table_iter_
->
get_scan_param
().
index_id_
),
K
(
ctdef
->
ref_table_id_
));
}
else
{
expect_result_output_cnt
=
expect_result_output_cnt
+
part_key_num
;
}
// When the defensive check level is set to 2 (strict defensive check), the transaction information of the current
// row is recorded for 4377 diagnosis. Then, it will add pseudo_trans_info_expr into result output of das scan.
//
...
...
@@ -954,7 +964,7 @@ int ObDASDomainIdMergeIter::get_domain_id(
int
domain_id_num
=
(
domain_type
==
ObDomainIdUtils
::
IVFPQ_CID
)
?
2
:
1
;
for
(
int
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
domain_id_num
;
++
i
)
{
if
(
OB_ISNULL
(
expr
=
ctdef
->
result_output_
.
at
(
rowkey_cnt
+
i
)))
{
if
(
OB_ISNULL
(
expr
=
ctdef
->
result_output_
.
at
(
rowkey_cnt
+
part_key_num
+
i
)))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"unexpected error, domain id expr is nullptr"
,
K
(
ret
),
K
(
rowkey_cnt
),
K
(
ctdef
->
result_output_
));
}
else
{
...
...
@@ -1454,6 +1464,34 @@ int ObDASDomainIdMergeIter::check_use_rowkey_vid_tbl_by_table_id(int64_t table_i
return
ret
;
}
int
ObDASDomainIdMergeIter
::
check_table_need_add_part_key
(
int64_t
table_id
,
int64_t
&
part_key_num
,
const
ObDASScanCtDef
*
ctdef
)
{
int
ret
=
OB_SUCCESS
;
part_key_num
=
0
;
share
::
schema
::
ObSchemaGetterGuard
schema_guard
;
ObIArray
<
uint64_t
>
*
column_ids
;
const
ObTableSchema
*
table_schema
=
nullptr
;
const
ObTableSchema
*
domain_table_schema
=
nullptr
;
if
(
OB_FAIL
(
GCTX
.
schema_service_
->
get_tenant_schema_guard
(
MTL_ID
(),
schema_guard
)))
{
LOG_WARN
(
"fail to get schema guard"
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
schema_guard
.
get_table_schema
(
MTL_ID
(),
table_id
,
table_schema
)))
{
LOG_WARN
(
"fail to get table schema"
,
K
(
ret
),
K
(
table_id
));
}
else
if
(
OB_ISNULL
(
table_schema
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"table schema is null"
,
K
(
ret
),
K
(
table_id
));
}
else
if
(
OB_FAIL
(
schema_guard
.
get_table_schema
(
MTL_ID
(),
ctdef
->
ref_table_id_
,
domain_table_schema
)))
{
LOG_WARN
(
"fail to get table schema"
,
K
(
ret
),
K
(
ctdef
->
ref_table_id_
));
}
else
if
(
OB_ISNULL
(
domain_table_schema
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"table schema is null"
,
K
(
ret
),
K
(
table_id
));
}
else
if
(
table_schema
->
is_table_with_hidden_pk_column
()
&&
table_schema
->
is_partitioned_table
())
{
if
(
ctdef
->
result_output_
.
count
()
==
domain_table_schema
->
get_column_count
())
{
part_key_num
+=
table_schema
->
get_part_level
();
}
}
return
ret
;
}
int
ObDASDomainIdMergeIter
::
fill_null_domain_id_in_data_table
(
const
ObDASScanCtDef
*
ctdef
,
ObDASScanRtDef
*
rtdef
,
...
...
src/sql/das/iter/ob_das_domain_id_merge_iter.h
浏览文件 @
a5334347
...
...
@@ -159,6 +159,7 @@ protected:
int
check_is_emb_vec_domain
(
int64_t
iter_idx
,
bool
&
is_emb_vec
);
int
check_is_emb_vec_domain_by_table_id
(
int64_t
table_id
,
bool
&
is_emb_vec
);
int
check_use_rowkey_vid_tbl_by_table_id
(
int64_t
table_id
,
bool
&
use_rowkey_vid_tbl
);
int
check_table_need_add_part_key
(
int64_t
table_id
,
int64_t
&
part_key_num
,
const
ObDASScanCtDef
*
ctdef
);
int
reset_rowkey_domain_iter_scan_range
(
int64_t
iter_idx
,
const
common
::
ObRowkey
&
data_table_rowkey
);
int
fill_null_domain_id_in_data_table
(
const
ObDASScanCtDef
*
ctdef
,
ObDASScanRtDef
*
rtdef
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录