[to #43194241]fix bug nested sql
This commit is contained in:
@ -201,18 +201,20 @@ OB_INLINE int ObTableDeleteOp::open_table_for_each()
|
||||
OB_INLINE int ObTableDeleteOp::close_table_for_each()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < del_rtdefs_.count(); ++i) {
|
||||
if (!del_rtdefs_.at(i).empty()) {
|
||||
const ObDelCtDef &primary_del_ctdef = *MY_SPEC.del_ctdefs_.at(i).at(0);
|
||||
ObDelRtDef &primary_del_rtdef = del_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_del_rtdef.das_rtdef_.table_loc_)) {
|
||||
primary_del_rtdef.das_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_del_ctdef,
|
||||
primary_del_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_DELETING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
if (OB_SUCCESS == ctx_.get_errcode()) {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < del_rtdefs_.count(); ++i) {
|
||||
if (!del_rtdefs_.at(i).empty()) {
|
||||
const ObDelCtDef &primary_del_ctdef = *MY_SPEC.del_ctdefs_.at(i).at(0);
|
||||
ObDelRtDef &primary_del_rtdef = del_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_del_rtdef.das_rtdef_.table_loc_)) {
|
||||
primary_del_rtdef.das_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_del_ctdef,
|
||||
primary_del_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_DELETING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -431,18 +431,20 @@ int ObTableInsertOp::inner_close()
|
||||
OB_INLINE int ObTableInsertOp::close_table_for_each()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < ins_rtdefs_.count(); ++i) {
|
||||
if (!ins_rtdefs_.at(i).empty()) {
|
||||
const ObInsCtDef &primary_ins_ctdef = *MY_SPEC.ins_ctdefs_.at(i).at(0);
|
||||
ObInsRtDef &primary_ins_rtdef = ins_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_ins_rtdef.das_rtdef_.table_loc_)) {
|
||||
primary_ins_rtdef.das_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_ins_ctdef,
|
||||
primary_ins_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_INSERTING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
if (OB_SUCCESS == ctx_.get_errcode()) {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < ins_rtdefs_.count(); ++i) {
|
||||
if (!ins_rtdefs_.at(i).empty()) {
|
||||
const ObInsCtDef &primary_ins_ctdef = *MY_SPEC.ins_ctdefs_.at(i).at(0);
|
||||
ObInsRtDef &primary_ins_rtdef = ins_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_ins_rtdef.das_rtdef_.table_loc_)) {
|
||||
primary_ins_rtdef.das_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_ins_ctdef,
|
||||
primary_ins_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_INSERTING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -271,7 +271,7 @@ int ObTableMergeOp::open_table_for_each()
|
||||
OB_INLINE int ObTableMergeOp::close_table_for_each()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (!merge_rtdefs_.empty()) {
|
||||
if (!merge_rtdefs_.empty() && (OB_SUCCESS == ctx_.get_errcode())) {
|
||||
//only primary index table need to execute triggered
|
||||
const ObMergeCtDef &merge_ctdef = *MY_SPEC.merge_ctdefs_.at(0);
|
||||
ObMergeRtDef &merge_rtdef = merge_rtdefs_.at(0);
|
||||
|
@ -251,18 +251,20 @@ OB_INLINE int ObTableUpdateOp::open_table_for_each()
|
||||
OB_INLINE int ObTableUpdateOp::close_table_for_each()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < upd_rtdefs_.count(); ++i) {
|
||||
if (!upd_rtdefs_.at(i).empty()) {
|
||||
const ObUpdCtDef &primary_upd_ctdef = *MY_SPEC.upd_ctdefs_.at(i).at(0);
|
||||
ObUpdRtDef &primary_upd_rtdef = upd_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_upd_rtdef.dupd_rtdef_.table_loc_)) {
|
||||
primary_upd_rtdef.dupd_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_upd_ctdef,
|
||||
primary_upd_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_UPDATING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
if (OB_SUCCESS == ctx_.get_errcode()) {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < upd_rtdefs_.count(); ++i) {
|
||||
if (!upd_rtdefs_.at(i).empty()) {
|
||||
const ObUpdCtDef &primary_upd_ctdef = *MY_SPEC.upd_ctdefs_.at(i).at(0);
|
||||
ObUpdRtDef &primary_upd_rtdef = upd_rtdefs_.at(i).at(0);
|
||||
if (OB_NOT_NULL(primary_upd_rtdef.dupd_rtdef_.table_loc_)) {
|
||||
primary_upd_rtdef.dupd_rtdef_.table_loc_->is_writing_ = false;
|
||||
}
|
||||
if (OB_FAIL(ObDMLService::process_after_stmt_trigger(primary_upd_ctdef,
|
||||
primary_upd_rtdef,
|
||||
dml_rtctx_,
|
||||
ObDmlEventType::DE_UPDATING))) {
|
||||
LOG_WARN("process after stmt trigger failed", K(ret));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -703,12 +703,20 @@ OB_INLINE int ObResultSet::do_close_plan(int errcode, ObExecContext &ctx)
|
||||
// 但是由于目前调度线程给主线程push完最后一个task结果之后, 调度线程不会用到exec_result_.close中释放的变量,
|
||||
// 因此目前这样写暂时是没有问题的。
|
||||
// 以后要修正这里的逻辑。
|
||||
|
||||
int old_errcode = ctx.get_errcode();
|
||||
if (OB_SUCCESS == old_errcode) {
|
||||
// record error code generated in open-phase for after stmt trigger
|
||||
ctx.set_errcode(errcode);
|
||||
}
|
||||
if (OB_ISNULL(exec_result_)) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("exec result is null", K(ret));
|
||||
} else if (OB_FAIL(exec_result_->close(ctx))) {
|
||||
SQL_LOG(WARN, "fail close main query", K(ret));
|
||||
}
|
||||
// whether `close` is successful or not, restore ctx.errcode_
|
||||
ctx.set_errcode(old_errcode);
|
||||
// 通知该plan的所有task删掉对应的中间结果
|
||||
int close_ret = OB_SUCCESS;
|
||||
ObPhysicalPlanCtx *plan_ctx = NULL;
|
||||
|
Reference in New Issue
Block a user