Skip to content

Commit

Permalink
sql: refactor validation with collectionFactory.WithTxn() and planner…
Browse files Browse the repository at this point in the history
….WithTxn()

This commit is to provides example to refactor the usages of internal executor
with the new interfaces. Idealy, if a planner is involved, use the query
functions for `sql.planner`. Otherwise, if the query is to run with a not-nil
txn, we should use collectionFactory.WithTxn().

Release note: None
  • Loading branch information
ZhouXing19 committed Aug 9, 2022
1 parent bb8d658 commit 068f90b
Show file tree
Hide file tree
Showing 6 changed files with 170 additions and 96 deletions.
37 changes: 18 additions & 19 deletions pkg/sql/alter_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (

"github.com/cockroachdb/cockroach/pkg/jobs"
"github.com/cockroachdb/cockroach/pkg/keys"
"github.com/cockroachdb/cockroach/pkg/kv"
"github.com/cockroachdb/cockroach/pkg/security/username"
"github.com/cockroachdb/cockroach/pkg/server/telemetry"
"github.com/cockroachdb/cockroach/pkg/sql/catalog"
Expand All @@ -40,6 +41,7 @@ import (
"github.com/cockroachdb/cockroach/pkg/sql/sessiondata"
"github.com/cockroachdb/cockroach/pkg/sql/sqlerrors"
"github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry"
"github.com/cockroachdb/cockroach/pkg/sql/sqlutil"
"github.com/cockroachdb/cockroach/pkg/sql/stats"
"github.com/cockroachdb/cockroach/pkg/sql/storageparam"
"github.com/cockroachdb/cockroach/pkg/sql/storageparam/tablestorageparam"
Expand Down Expand Up @@ -554,10 +556,9 @@ func (n *alterTableNode) startExec(params runParams) error {
return pgerror.Newf(pgcode.ObjectNotInPrerequisiteState,
"constraint %q in the middle of being added, try again later", t.Constraint)
}
if err := validateCheckInTxn(
params.ctx, &params.p.semaCtx, params.ExecCfg().InternalExecutorFactory,
params.SessionData(), n.tableDesc, params.p.Txn(), ck.Expr,
); err != nil {
if err := params.p.WithInternalExecutor(params.ctx, func(ctx context.Context, txn *kv.Txn, ie sqlutil.InternalExecutor) error {
return validateCheckInTxn(ctx, &params.p.semaCtx, params.p.SessionData(), n.tableDesc, txn, ie, ck.Expr)
}); err != nil {
return err
}
ck.Validity = descpb.ConstraintValidity_Validated
Expand All @@ -577,19 +578,12 @@ func (n *alterTableNode) startExec(params runParams) error {
return pgerror.Newf(pgcode.ObjectNotInPrerequisiteState,
"constraint %q in the middle of being added, try again later", t.Constraint)
}
if err := validateFkInTxn(
params.ctx,
params.ExecCfg().InternalExecutorFactory,
params.p.SessionData(),
n.tableDesc,
params.p.Txn(),
params.p.Descriptors(),
name,
); err != nil {
if err := params.p.WithInternalExecutor(params.ctx, func(ctx context.Context, txn *kv.Txn, ie sqlutil.InternalExecutor) error {
return validateFkInTxn(ctx, n.tableDesc, txn, ie, params.p.descCollection, name)
}); err != nil {
return err
}
foundFk.Validity = descpb.ConstraintValidity_Validated

case descpb.ConstraintTypeUnique:
if constraint.Index == nil {
var foundUnique *descpb.UniqueWithoutIndexConstraint
Expand All @@ -606,11 +600,16 @@ func (n *alterTableNode) startExec(params runParams) error {
return pgerror.Newf(pgcode.ObjectNotInPrerequisiteState,
"constraint %q in the middle of being added, try again later", t.Constraint)
}
if err := validateUniqueWithoutIndexConstraintInTxn(
params.ctx, params.ExecCfg().InternalExecutorFactory.NewInternalExecutor(
params.SessionData(),
), n.tableDesc, params.p.Txn(), params.p.User(), name,
); err != nil {
if err := params.p.WithInternalExecutor(params.ctx, func(ctx context.Context, txn *kv.Txn, ie sqlutil.InternalExecutor) error {
return validateUniqueWithoutIndexConstraintInTxn(
params.ctx,
n.tableDesc,
txn,
ie,
params.p.User(),
name,
)
}); err != nil {
return err
}
foundUnique.Validity = descpb.ConstraintValidity_Validated
Expand Down
Loading

0 comments on commit 068f90b

Please sign in to comment.