Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
oceanbase
oceanbase
提交
814f062a
O
oceanbase
项目概览
oceanbase
/
oceanbase
8 个月 前同步成功
通知
260
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看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
814f062a
编写于
1月 04, 2022
作者:
H
Hongqin-Li
提交者:
LINGuanRen
1月 04, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix unexpected null value in index on generated column
上级
70016c6a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
25 deletion
+42
-25
src/storage/ob_partition_storage.cpp
src/storage/ob_partition_storage.cpp
+42
-25
未找到文件。
src/storage/ob_partition_storage.cpp
浏览文件 @
814f062a
...
...
@@ -5723,25 +5723,6 @@ int ObPartitionStorage::local_sort_index_by_range(
*
table_schema
,
*
index_schema
,
col_ids
,
org_col_ids
,
projector
,
unique_key_cnt
)))
{
STORAGE_LOG
(
WARN
,
"Fail to get column ids, "
,
K
(
ret
));
}
else
{
ObObj
*
cells_buf
=
NULL
;
ObStoreRow
default_row
;
ObStoreRow
tmp_row
;
ObStoreRow
new_row
;
if
(
NULL
==
(
cells_buf
=
reinterpret_cast
<
ObObj
*>
(
allocator
.
alloc
(
sizeof
(
ObObj
)
*
org_col_ids
.
count
()
*
2
))))
{
ret
=
OB_ALLOCATE_MEMORY_FAILED
;
STORAGE_LOG
(
ERROR
,
"failed to alloc cells buf"
,
K
(
ret
),
K
(
org_col_ids
.
count
()));
}
else
{
cells_buf
=
new
(
cells_buf
)
ObObj
[
org_col_ids
.
count
()
*
2
];
default_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
default_row
.
row_val_
.
cells_
=
cells_buf
;
default_row
.
row_val_
.
count_
=
org_col_ids
.
count
();
tmp_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
tmp_row
.
row_val_
.
cells_
=
cells_buf
+
org_col_ids
.
count
();
tmp_row
.
row_val_
.
count_
=
org_col_ids
.
count
();
new_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
}
// extend col_ids for generated column
ObArray
<
ObColDesc
>
extended_col_ids
;
ObArray
<
ObColDesc
>
org_extended_col_ids
;
...
...
@@ -5750,9 +5731,7 @@ int ObPartitionStorage::local_sort_index_by_range(
ObExprCtx
expr_ctx
;
if
(
OB_SUCC
(
ret
))
{
ObArray
<
ObColDesc
>
index_table_columns
;
if
(
OB_FAIL
(
index_schema
->
get_orig_default_row
(
org_col_ids
,
default_row
.
row_val_
)))
{
STORAGE_LOG
(
WARN
,
"Fail to get default row from table schema, "
,
K
(
ret
));
}
else
if
(
OB_FAIL
(
append
(
extended_col_ids
,
col_ids
)))
{
if
(
OB_FAIL
(
append
(
extended_col_ids
,
col_ids
)))
{
STORAGE_LOG
(
ERROR
,
"failed to clone col_ids"
,
K
(
ret
),
K
(
col_ids
),
K
(
extended_col_ids
));
}
else
if
(
OB_FAIL
(
append
(
org_extended_col_ids
,
org_col_ids
)))
{
STORAGE_LOG
(
WARN
,
"fail to append col array"
,
K
(
ret
));
...
...
@@ -5831,7 +5810,7 @@ int ObPartitionStorage::local_sort_index_by_range(
expr
)))
{
STORAGE_LOG
(
WARN
,
"failed to make sql expression"
,
K
(
default_row
.
row_val_
.
cells_
[
i
]
.
get_string
()),
K
(
column_schema
->
get_orig_default_value
()
.
get_string
()),
K
(
*
data_table_schema
),
K
(
*
column_schema
),
K
(
extended_col_ids
),
...
...
@@ -5853,7 +5832,44 @@ int ObPartitionStorage::local_sort_index_by_range(
}
}
}
STORAGE_LOG
(
INFO
,
"output projector"
,
K
(
extended_col_ids
),
K
(
output_projector
));
LOG_INFO
(
"output projector"
,
K
(
extended_col_ids
),
K
(
org_extended_col_ids
),
K
(
output_projector
));
int64_t
buf_cells_cnt
=
org_extended_col_ids
.
count
()
+
org_col_ids
.
count
();
ObObj
*
cells_buf
=
NULL
;
ObStoreRow
default_row
;
ObStoreRow
tmp_row
;
ObStoreRow
new_row
;
if
(
OB_FAIL
(
ret
))
{
}
else
if
(
OB_ISNULL
(
cells_buf
=
reinterpret_cast
<
ObObj
*>
(
allocator
.
alloc
(
sizeof
(
ObObj
)
*
buf_cells_cnt
))))
{
ret
=
OB_ALLOCATE_MEMORY_FAILED
;
LOG_ERROR
(
"failed to alloc cells buf"
,
K
(
ret
),
K
(
org_extended_col_ids
.
count
()),
K
(
org_col_ids
.
count
()));
}
else
{
cells_buf
=
new
(
cells_buf
)
ObObj
[
buf_cells_cnt
];
default_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
default_row
.
row_val_
.
cells_
=
cells_buf
;
default_row
.
row_val_
.
count_
=
org_extended_col_ids
.
count
();
tmp_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
tmp_row
.
row_val_
.
cells_
=
cells_buf
+
org_extended_col_ids
.
count
();
tmp_row
.
row_val_
.
count_
=
org_col_ids
.
count
();
new_row
.
flag_
=
ObActionFlag
::
OP_ROW_EXIST
;
}
// fill default row
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
org_extended_col_ids
.
count
();
i
++
)
{
const
uint64_t
col_id
=
org_extended_col_ids
.
at
(
i
).
col_id_
;
const
ObColumnSchemaV2
*
col
=
index_schema
->
get_column_schema
(
col_id
);
if
(
NULL
==
col
)
{
// generated column's depend column, get column schema from data table
col
=
table_schema
->
get_column_schema
(
col_id
);
}
if
(
OB_ISNULL
(
col
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"failed to get column schema"
,
K
(
ret
),
K
(
col_id
));
}
else
{
default_row
.
row_val_
.
cells_
[
i
]
=
col
->
get_orig_default_value
();
}
}
ObArray
<
ObColumnParam
*>
col_params
;
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
extended_col_ids
.
count
();
i
++
)
{
...
...
@@ -6046,7 +6062,8 @@ int ObPartitionStorage::local_sort_index_by_range(
for
(
int64_t
k
=
0
;
OB_SUCC
(
ret
)
&&
k
<
row
->
row_val_
.
count_
;
++
k
)
{
if
(
row
->
row_val_
.
cells_
[
k
].
is_nop_value
())
{
if
(
k
>=
org_col_ids
.
count
())
{
// do nothing
// e.g. columns that some generated columns in org_col_ids depend on
result_row
.
row_val_
.
cells_
[
k
]
=
default_row
.
row_val_
.
cells_
[
k
];
}
else
if
(
nullptr
==
dependent_exprs
.
at
(
k
))
{
result_row
.
row_val_
.
cells_
[
k
]
=
default_row
.
row_val_
.
cells_
[
k
];
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录