Skip to content

Commit

Permalink
[fix] the issue of being unable to delete special tables
Browse files Browse the repository at this point in the history
  • Loading branch information
noorall committed Nov 30, 2023
1 parent 0ba1555 commit 688bee7
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions pkg/sql/plan/build_dml_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,17 @@ func buildDeletePlans(ctx CompilerContext, builder *QueryBuilder, bindCtx *BindC
// both UK and SK. To handle SK case, we will have flags to indicate if it's UK or SK.
hasUniqueKey := haveUniqueKey(delCtx.tableDef)
hasSecondaryKey := haveSecondaryKey(delCtx.tableDef)
if (hasUniqueKey || hasSecondaryKey) && !delCtx.isDeleteWithoutFilters {
uniqueDeleteIdx := len(delCtx.tableDef.Cols) + delCtx.updateColLength

canTruncate := delCtx.isDeleteWithoutFilters

if len(delCtx.tableDef.RefChildTbls) > 0 ||
delCtx.tableDef.ViewSql != nil ||
(util.TableIsClusterTable(delCtx.tableDef.GetTableType()) && ctx.GetAccountId() != catalog.System_Account) ||
delCtx.objRef.PubInfo != nil {
canTruncate = false
}

if (hasUniqueKey || hasSecondaryKey) && !canTruncate {
typMap := make(map[string]*plan.Type)
posMap := make(map[string]int)
for idx, col := range delCtx.tableDef.Cols {
Expand Down Expand Up @@ -303,17 +312,26 @@ func buildDeletePlans(ctx CompilerContext, builder *QueryBuilder, bindCtx *BindC
if uniqueTableDef == nil {
return moerr.NewNoSuchTable(builder.GetContext(), delCtx.objRef.SchemaName, indexdef.IndexTableName)
}
lastNodeId := appendSinkScanNode(builder, bindCtx, delCtx.sourceStep)

lastNodeId, err := appendDeleteUniqueTablePlan(builder, bindCtx, uniqueObjRef, uniqueTableDef, indexdef, typMap, posMap, lastNodeId, isUk)

var lastNodeId int32
var err error
var uniqueDeleteIdx int
var uniqueTblPkPos int
var uniqueTblPkTyp *Type

if delCtx.isDeleteWithoutFilters {
lastNodeId, err = appendDeleteUniqueTablePlanWithoutFilters(builder, bindCtx, uniqueObjRef, uniqueTableDef)
uniqueDeleteIdx = getRowIdPos(uniqueTableDef)
uniqueTblPkPos, uniqueTblPkTyp = getPkPos(uniqueTableDef, false)
} else {
lastNodeId = appendSinkScanNode(builder, bindCtx, delCtx.sourceStep)
lastNodeId, err = appendDeleteUniqueTablePlan(builder, bindCtx, uniqueObjRef, uniqueTableDef, indexdef, typMap, posMap, lastNodeId, isUk)
uniqueDeleteIdx = len(delCtx.tableDef.Cols) + delCtx.updateColLength
uniqueTblPkPos = uniqueDeleteIdx + 1
uniqueTblPkTyp = uniqueTableDef.Cols[0].Typ
}
if err != nil {
return err
}

uniqueTblPkPos := uniqueDeleteIdx + 1
uniqueTblPkTyp := uniqueTableDef.Cols[0].Typ

if isUpdate {
// do it like simple update
lastNodeId = appendSinkNode(builder, bindCtx, lastNodeId)
Expand Down Expand Up @@ -373,7 +391,7 @@ func buildDeletePlans(ctx CompilerContext, builder *QueryBuilder, bindCtx *BindC
} else {
// it's more simple for delete hidden unique table .so we append nodes after the plan. not recursive call buildDeletePlans
delNodeInfo := makeDeleteNodeInfo(builder.compCtx, uniqueObjRef, uniqueTableDef, uniqueDeleteIdx, -1, false, uniqueTblPkPos, uniqueTblPkTyp, delCtx.lockTable, delCtx.partitionInfos)
lastNodeId, err = makeOneDeletePlan(builder, bindCtx, lastNodeId, delNodeInfo, isUk, isSK, delCtx.isDeleteWithoutFilters)
lastNodeId, err = makeOneDeletePlan(builder, bindCtx, lastNodeId, delNodeInfo, isUk, isSK, false)
putDeleteNodeInfo(delNodeInfo)
if err != nil {
return err
Expand All @@ -393,7 +411,7 @@ func buildDeletePlans(ctx CompilerContext, builder *QueryBuilder, bindCtx *BindC
}
pkPos, pkTyp := getPkPos(delCtx.tableDef, false)
delNodeInfo := makeDeleteNodeInfo(ctx, delCtx.objRef, delCtx.tableDef, delCtx.rowIdPos, partExprIdx, true, pkPos, pkTyp, delCtx.lockTable, delCtx.partitionInfos)
lastNodeId, err := makeOneDeletePlan(builder, bindCtx, lastNodeId, delNodeInfo, false, false, delCtx.isDeleteWithoutFilters)
lastNodeId, err := makeOneDeletePlan(builder, bindCtx, lastNodeId, delNodeInfo, false, false, canTruncate)
putDeleteNodeInfo(delNodeInfo)
if err != nil {
return err
Expand Down

0 comments on commit 688bee7

Please sign in to comment.