Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大炮V587
oceanbase
提交
c95a7ac6
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,体验更适合开发者的 AI 搜索 >>
提交
c95a7ac6
编写于
3月 22, 2023
作者:
O
obdev
提交者:
ob-robot
3月 22, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: fix the core when has returning expr induced by dml processing order refactor
上级
8dd6b41e
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
105 addition
and
74 deletion
+105
-74
src/sql/das/ob_das_define.h
src/sql/das/ob_das_define.h
+2
-1
src/sql/engine/dml/ob_table_delete_op.cpp
src/sql/engine/dml/ob_table_delete_op.cpp
+12
-9
src/sql/engine/dml/ob_table_insert_all_op.cpp
src/sql/engine/dml/ob_table_insert_all_op.cpp
+18
-15
src/sql/engine/dml/ob_table_insert_op.cpp
src/sql/engine/dml/ob_table_insert_op.cpp
+8
-5
src/sql/engine/dml/ob_table_insert_up_op.cpp
src/sql/engine/dml/ob_table_insert_up_op.cpp
+13
-10
src/sql/engine/dml/ob_table_merge_op.cpp
src/sql/engine/dml/ob_table_merge_op.cpp
+18
-15
src/sql/engine/dml/ob_table_modify_op.cpp
src/sql/engine/dml/ob_table_modify_op.cpp
+13
-4
src/sql/engine/dml/ob_table_replace_op.cpp
src/sql/engine/dml/ob_table_replace_op.cpp
+13
-10
src/sql/engine/dml/ob_table_update_op.cpp
src/sql/engine/dml/ob_table_update_op.cpp
+8
-5
未找到文件。
src/sql/das/ob_das_define.h
浏览文件 @
c95a7ac6
...
...
@@ -57,7 +57,8 @@ const int64_t OB_DAS_MAX_PACKET_SIZE = 2 * 1024 * 1024l - 8 * 1024;
* it can be considered that the DAS request will send at most one RPC request to each zone.
* so OB_DAS_MAX_TOTAL_PACKET_SIZE was defined as:
*/
const
int64_t
OB_DAS_MAX_TOTAL_PACKET_SIZE
=
3
*
OB_DAS_MAX_PACKET_SIZE
;
const
int64_t
OB_DAS_MAX_TOTAL_PACKET_SIZE
=
2
*
OB_DAS_MAX_PACKET_SIZE
;
const
int64_t
OB_DAS_MAX_META_TENANT_PACKET_SIZE
=
1
*
1024
*
1024l
-
8
*
1024
;
}
// namespace das
enum
class
ObDasTaskStatus
:
uint8_t
...
...
src/sql/engine/dml/ob_table_delete_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -137,17 +137,20 @@ OB_INLINE int ObTableDeleteOp::inner_open_with_das()
int
ObTableDeleteOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
del_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableDeleteSpec
::
DelCtDefArray
&
ctdefs
=
MY_SPEC
.
del_ctdefs_
.
at
(
i
);
const
ObDelCtDef
&
del_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
del_ctdef
)
||
has_after_row_trigger
(
del_ctdef
))
{
execute_single_row_
=
true
;
}
const
ObForeignKeyArgArray
&
fk_args
=
del_ctdef
.
fk_args_
;
for
(
int
j
=
0
;
OB_SUCC
(
ret
)
&&
j
<
fk_args
.
count
()
&&
!
execute_single_row_
;
j
++
)
{
if
(
fk_args
.
at
(
j
).
is_self_ref_
&&
fk_args
.
at
(
j
).
ref_action_
==
ACTION_CASCADE
)
{
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
del_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableDeleteSpec
::
DelCtDefArray
&
ctdefs
=
MY_SPEC
.
del_ctdefs_
.
at
(
i
);
const
ObDelCtDef
&
del_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
del_ctdef
)
||
has_after_row_trigger
(
del_ctdef
))
{
execute_single_row_
=
true
;
}
const
ObForeignKeyArgArray
&
fk_args
=
del_ctdef
.
fk_args_
;
for
(
int
j
=
0
;
OB_SUCC
(
ret
)
&&
j
<
fk_args
.
count
()
&&
!
execute_single_row_
;
j
++
)
{
if
(
fk_args
.
at
(
j
).
is_self_ref_
&&
fk_args
.
at
(
j
).
ref_action_
==
ACTION_CASCADE
)
{
execute_single_row_
=
true
;
}
}
}
}
return
ret
;
...
...
src/sql/engine/dml/ob_table_insert_all_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -104,21 +104,24 @@ int ObTableInsertAllOp::switch_iterator(ObExecContext &ctx)
int
ObTableInsertAllOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableInsertSpec
::
InsCtDefArray
&
ctdefs
=
MY_SPEC
.
ins_ctdefs_
.
at
(
i
);
const
ObInsCtDef
&
ins_ctdef
=
*
(
ctdefs
.
at
(
0
));
const
uint64_t
table_id
=
ins_ctdef
.
das_base_ctdef_
.
index_tid_
;
const
ObForeignKeyArgArray
&
fk_args
=
ins_ctdef
.
fk_args_
;
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
}
for
(
int
j
=
0
;
OB_SUCC
(
ret
)
&&
j
<
fk_args
.
count
()
&&
!
execute_single_row_
;
j
++
)
{
const
ObForeignKeyArg
&
fk_arg
=
fk_args
.
at
(
j
);
const
uint64_t
parent_table_id
=
fk_arg
.
table_id_
;
for
(
int
k
=
0
;
k
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
k
)
{
const
uint64_t
tmp_table_id
=
MY_SPEC
.
ins_ctdefs_
.
at
(
k
).
at
(
0
)
->
das_base_ctdef_
.
index_tid_
;
if
(
parent_table_id
==
tmp_table_id
&&
k
!=
i
)
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableInsertSpec
::
InsCtDefArray
&
ctdefs
=
MY_SPEC
.
ins_ctdefs_
.
at
(
i
);
const
ObInsCtDef
&
ins_ctdef
=
*
(
ctdefs
.
at
(
0
));
const
uint64_t
table_id
=
ins_ctdef
.
das_base_ctdef_
.
index_tid_
;
const
ObForeignKeyArgArray
&
fk_args
=
ins_ctdef
.
fk_args_
;
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
}
for
(
int
j
=
0
;
OB_SUCC
(
ret
)
&&
j
<
fk_args
.
count
()
&&
!
execute_single_row_
;
j
++
)
{
const
ObForeignKeyArg
&
fk_arg
=
fk_args
.
at
(
j
);
const
uint64_t
parent_table_id
=
fk_arg
.
table_id_
;
for
(
int
k
=
0
;
k
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
k
)
{
const
uint64_t
tmp_table_id
=
MY_SPEC
.
ins_ctdefs_
.
at
(
k
).
at
(
0
)
->
das_base_ctdef_
.
index_tid_
;
if
(
parent_table_id
==
tmp_table_id
&&
k
!=
i
)
{
execute_single_row_
=
true
;
}
}
}
}
...
...
src/sql/engine/dml/ob_table_insert_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -111,11 +111,14 @@ OB_DEF_SERIALIZE_SIZE(ObTableInsertSpec)
int
ObTableInsertOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableInsertSpec
::
InsCtDefArray
&
ctdefs
=
MY_SPEC
.
ins_ctdefs_
.
at
(
i
);
const
ObInsCtDef
&
ins_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
ins_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableInsertSpec
::
InsCtDefArray
&
ctdefs
=
MY_SPEC
.
ins_ctdefs_
.
at
(
i
);
const
ObInsCtDef
&
ins_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
}
}
}
return
ret
;
...
...
src/sql/engine/dml/ob_table_insert_up_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -91,17 +91,20 @@ OB_DEF_SERIALIZE_SIZE(ObTableInsertUpSpec)
int
ObTableInsertUpOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
ObInsertUpCtDef
*
insert_up_ctdef
=
MY_SPEC
.
insert_up_ctdefs_
.
at
(
0
);
const
ObInsCtDef
*
ins_ctdef
=
insert_up_ctdef
->
ins_ctdef_
;
const
ObUpdCtDef
*
upd_ctdef
=
insert_up_ctdef
->
upd_ctdef_
;
if
(
OB_NOT_NULL
(
ins_ctdef
)
&&
OB_NOT_NULL
(
upd_ctdef
))
{
if
(
has_before_row_trigger
(
*
ins_ctdef
)
||
has_after_row_trigger
(
*
ins_ctdef
)
||
has_before_row_trigger
(
*
upd_ctdef
)
||
has_after_row_trigger
(
*
upd_ctdef
))
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
ObInsertUpCtDef
*
insert_up_ctdef
=
MY_SPEC
.
insert_up_ctdefs_
.
at
(
0
);
const
ObInsCtDef
*
ins_ctdef
=
insert_up_ctdef
->
ins_ctdef_
;
const
ObUpdCtDef
*
upd_ctdef
=
insert_up_ctdef
->
upd_ctdef_
;
if
(
OB_NOT_NULL
(
ins_ctdef
)
&&
OB_NOT_NULL
(
upd_ctdef
))
{
if
(
has_before_row_trigger
(
*
ins_ctdef
)
||
has_after_row_trigger
(
*
ins_ctdef
)
||
has_before_row_trigger
(
*
upd_ctdef
)
||
has_after_row_trigger
(
*
upd_ctdef
))
{
execute_single_row_
=
true
;
}
}
else
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"ins_ctdef or upd_ctdef of primary table is nullptr"
,
K
(
ret
));
}
}
else
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"ins_ctdef or upd_ctdef of primary table is nullptr"
,
K
(
ret
));
}
return
ret
;
}
...
...
src/sql/engine/dml/ob_table_merge_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -156,25 +156,28 @@ ObTableMergeOp::ObTableMergeOp(ObExecContext &ctx, const ObOpSpec &spec, ObOpInp
int
ObTableMergeOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
ObMergeCtDef
*
merge_ctdef
=
MY_SPEC
.
merge_ctdefs_
.
at
(
0
);
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
ins_ctdef_
))
{
const
ObInsCtDef
&
ins_ctdef
=
*
merge_ctdef
->
ins_ctdef_
;
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
ObMergeCtDef
*
merge_ctdef
=
MY_SPEC
.
merge_ctdefs_
.
at
(
0
);
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
ins_ctdef_
))
{
const
ObInsCtDef
&
ins_ctdef
=
*
merge_ctdef
->
ins_ctdef_
;
if
(
has_before_row_trigger
(
ins_ctdef
)
||
has_after_row_trigger
(
ins_ctdef
))
{
execute_single_row_
=
true
;
}
}
}
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
upd_ctdef_
))
{
const
ObUpdCtDef
&
upd_ctdef
=
*
merge_ctdef
->
upd_ctdef_
;
if
(
has_before_row_trigger
(
upd_ctdef
)
||
has_after_row_trigger
(
upd_ctdef
))
{
execute_single_row_
=
true
;
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
upd_ctdef_
))
{
const
ObUpdCtDef
&
upd_ctdef
=
*
merge_ctdef
->
upd_ctdef_
;
if
(
has_before_row_trigger
(
upd_ctdef
)
||
has_after_row_trigger
(
upd_ctdef
))
{
execute_single_row_
=
true
;
}
}
}
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
del_ctdef_
))
{
const
ObDelCtDef
&
del_ctdef
=
*
merge_ctdef
->
del_ctdef_
;
if
(
has_before_row_trigger
(
del_ctdef
)
||
has_after_row_trigger
(
del_ctdef
))
{
execute_single_row_
=
true
;
if
(
!
execute_single_row_
&&
OB_NOT_NULL
(
merge_ctdef
->
del_ctdef_
))
{
const
ObDelCtDef
&
del_ctdef
=
*
merge_ctdef
->
del_ctdef_
;
if
(
has_before_row_trigger
(
del_ctdef
)
||
has_after_row_trigger
(
del_ctdef
))
{
execute_single_row_
=
true
;
}
}
}
return
ret
;
...
...
src/sql/engine/dml/ob_table_modify_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -758,7 +758,9 @@ int ObTableModifyOp::inner_rescan()
int
ObTableModifyOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
execute_single_row_
=
false
;
if
(
MY_SPEC
.
is_returning_
&&
need_foreign_key_checks
())
{
execute_single_row_
=
true
;
}
return
ret
;
}
...
...
@@ -1099,9 +1101,16 @@ int ObTableModifyOp::submit_all_dml_task()
int
ObTableModifyOp
::
discharge_das_write_buffer
()
{
int
ret
=
OB_SUCCESS
;
if
(
dml_rtctx_
.
get_cached_row_size
()
>=
das
::
OB_DAS_MAX_TOTAL_PACKET_SIZE
||
execute_single_row_
)
{
LOG_INFO
(
"DASWriteBuffer full or need single row execution, now to write storage"
,
"buffer memory"
,
dml_rtctx_
.
das_ref_
.
get_das_alloc
().
used
(),
K
(
execute_single_row_
),
K
(
dml_rtctx_
.
get_cached_row_size
()));
int64_t
simulate_buffer_size
=
-
EVENT_CALL
(
EventTable
::
EN_DAS_DML_BUFFER_OVERFLOW
);
int64_t
buffer_size_limit
=
is_meta_tenant
(
tenant_id_
)
?
das
::
OB_DAS_MAX_META_TENANT_PACKET_SIZE
:
das
::
OB_DAS_MAX_TOTAL_PACKET_SIZE
;
if
(
OB_UNLIKELY
(
simulate_buffer_size
>
0
))
{
buffer_size_limit
=
simulate_buffer_size
;
}
if
(
dml_rtctx_
.
get_cached_row_size
()
>=
buffer_size_limit
)
{
LOG_INFO
(
"DASWriteBuffer full, now to write storage"
,
"buffer memory"
,
dml_rtctx_
.
das_ref_
.
get_das_alloc
().
used
(),
K
(
dml_rtctx_
.
get_cached_row_size
()));
ret
=
submit_all_dml_task
();
}
else
if
(
execute_single_row_
)
{
ret
=
submit_all_dml_task
();
}
return
ret
;
...
...
src/sql/engine/dml/ob_table_replace_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -97,17 +97,20 @@ OB_DEF_SERIALIZE_SIZE(ObTableReplaceSpec)
int
ObTableReplaceOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
ObReplaceCtDef
*
replace_ctdef
=
MY_SPEC
.
replace_ctdefs_
.
at
(
0
);
const
ObInsCtDef
*
ins_ctdef
=
replace_ctdef
->
ins_ctdef_
;
const
ObDelCtDef
*
del_ctdef
=
replace_ctdef
->
del_ctdef_
;
if
(
OB_NOT_NULL
(
ins_ctdef
)
||
OB_NOT_NULL
(
del_ctdef
))
{
if
(
has_before_row_trigger
(
*
ins_ctdef
)
||
has_after_row_trigger
(
*
ins_ctdef
)
||
has_before_row_trigger
(
*
del_ctdef
)
||
has_after_row_trigger
(
*
del_ctdef
))
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
ObReplaceCtDef
*
replace_ctdef
=
MY_SPEC
.
replace_ctdefs_
.
at
(
0
);
const
ObInsCtDef
*
ins_ctdef
=
replace_ctdef
->
ins_ctdef_
;
const
ObDelCtDef
*
del_ctdef
=
replace_ctdef
->
del_ctdef_
;
if
(
OB_NOT_NULL
(
ins_ctdef
)
||
OB_NOT_NULL
(
del_ctdef
))
{
if
(
has_before_row_trigger
(
*
ins_ctdef
)
||
has_after_row_trigger
(
*
ins_ctdef
)
||
has_before_row_trigger
(
*
del_ctdef
)
||
has_after_row_trigger
(
*
del_ctdef
))
{
execute_single_row_
=
true
;
}
}
else
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"ins_ctdef or del_ctdef of primary table is nullptr"
,
K
(
ret
));
}
}
else
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"ins_ctdef or del_ctdef of primary table is nullptr"
,
K
(
ret
));
}
return
ret
;
}
...
...
src/sql/engine/dml/ob_table_update_op.cpp
浏览文件 @
c95a7ac6
...
...
@@ -116,11 +116,14 @@ ObTableUpdateOp::ObTableUpdateOp(ObExecContext &exec_ctx, const ObOpSpec &spec,
int
ObTableUpdateOp
::
check_need_exec_single_row
()
{
int
ret
=
OB_SUCCESS
;
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
upd_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableUpdateSpec
::
UpdCtDefArray
&
ctdefs
=
MY_SPEC
.
upd_ctdefs_
.
at
(
i
);
const
ObUpdCtDef
&
upd_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
upd_ctdef
)
||
has_after_row_trigger
(
upd_ctdef
))
{
execute_single_row_
=
true
;
ret
=
ObTableModifyOp
::
check_need_exec_single_row
();
if
(
OB_SUCC
(
ret
)
&&
!
execute_single_row_
)
{
for
(
int64_t
i
=
0
;
OB_SUCC
(
ret
)
&&
i
<
MY_SPEC
.
upd_ctdefs_
.
count
()
&&
!
execute_single_row_
;
++
i
)
{
const
ObTableUpdateSpec
::
UpdCtDefArray
&
ctdefs
=
MY_SPEC
.
upd_ctdefs_
.
at
(
i
);
const
ObUpdCtDef
&
upd_ctdef
=
*
ctdefs
.
at
(
0
);
if
(
has_before_row_trigger
(
upd_ctdef
)
||
has_after_row_trigger
(
upd_ctdef
))
{
execute_single_row_
=
true
;
}
}
}
return
ret
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录