From 4e202a4ff0f4717ed7aad64d605aa02b862f70aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 19 Feb 2024 19:04:56 +0800 Subject: [PATCH] *: make sessionctx.Context depend on contexts in planner and expression (#51150) close pingcap/tidb#51149 --- br/pkg/lightning/backend/kv/BUILD.bazel | 1 + br/pkg/lightning/backend/kv/session.go | 3 +- pkg/expression/BUILD.bazel | 2 +- pkg/expression/context.go | 43 +++--------------- pkg/expression/context/BUILD.bazel | 13 ++++++ pkg/expression/context/context.go | 59 +++++++++++++++++++++++++ pkg/infoschema/BUILD.bazel | 1 + pkg/infoschema/context/BUILD.bazel | 8 ++++ pkg/infoschema/context/infoschema.go | 23 ++++++++++ pkg/infoschema/infoschema.go | 4 +- pkg/planner/context/BUILD.bazel | 2 +- pkg/planner/context/context.go | 4 +- pkg/session/BUILD.bazel | 1 + pkg/session/session.go | 5 ++- pkg/sessionctx/BUILD.bazel | 3 ++ pkg/sessionctx/context.go | 18 ++++---- pkg/table/BUILD.bazel | 1 + pkg/table/table.go | 3 +- pkg/ttl/ttlworker/BUILD.bazel | 1 + pkg/ttl/ttlworker/session_test.go | 3 +- pkg/util/mock/BUILD.bazel | 1 + pkg/util/mock/context.go | 15 ++++--- 22 files changed, 148 insertions(+), 66 deletions(-) create mode 100644 pkg/expression/context/BUILD.bazel create mode 100644 pkg/expression/context/context.go create mode 100644 pkg/infoschema/context/BUILD.bazel create mode 100644 pkg/infoschema/context/infoschema.go diff --git a/br/pkg/lightning/backend/kv/BUILD.bazel b/br/pkg/lightning/backend/kv/BUILD.bazel index daeff5fd6ac3e..e2100dca2a20c 100644 --- a/br/pkg/lightning/backend/kv/BUILD.bazel +++ b/br/pkg/lightning/backend/kv/BUILD.bazel @@ -24,6 +24,7 @@ go_library( "//br/pkg/utils", "//pkg/errctx", "//pkg/expression", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/meta/autoid", "//pkg/parser/model", diff --git a/br/pkg/lightning/backend/kv/session.go b/br/pkg/lightning/backend/kv/session.go index 36dec6ed84181..f17307469aad6 100644 --- a/br/pkg/lightning/backend/kv/session.go +++ b/br/pkg/lightning/backend/kv/session.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/br/pkg/lightning/manual" "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/pkg/errctx" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" @@ -367,7 +368,7 @@ func (se *Session) Value(key fmt.Stringer) any { func (*Session) StmtAddDirtyTableOP(_ int, _ int64, _ kv.Handle) {} // GetInfoSchema implements the sessionctx.Context interface. -func (*Session) GetInfoSchema() sessionctx.InfoschemaMetaVersion { +func (*Session) GetInfoSchema() infoschema.InfoSchemaMetaVersion { return nil } diff --git a/pkg/expression/BUILD.bazel b/pkg/expression/BUILD.bazel index 9aa27966af16a..0b124f71dbb4d 100644 --- a/pkg/expression/BUILD.bazel +++ b/pkg/expression/BUILD.bazel @@ -74,6 +74,7 @@ go_library( "//pkg/config", "//pkg/errctx", "//pkg/errno", + "//pkg/expression/context", "//pkg/extension", "//pkg/kv", "//pkg/parser", @@ -86,7 +87,6 @@ go_library( "//pkg/parser/terror", "//pkg/parser/types", "//pkg/privilege", - "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", "//pkg/sessionctx/variable", "//pkg/types", diff --git a/pkg/expression/context.go b/pkg/expression/context.go index 5db4d65d8be2e..d5605bcfed907 100644 --- a/pkg/expression/context.go +++ b/pkg/expression/context.go @@ -15,42 +15,21 @@ package expression import ( - "fmt" "time" "github.com/pingcap/tidb/pkg/errctx" - "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" - "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/intest" ) // EvalContext is used to evaluate an expression -type EvalContext interface { - // GetSessionVars gets the session variables. - GetSessionVars() *variable.SessionVars - // Value returns the value associated with this context for key. - Value(key fmt.Stringer) any - // IsDDLOwner checks whether this session is DDL owner. - IsDDLOwner() bool - // GetAdvisoryLock acquires an advisory lock (aka GET_LOCK()). - GetAdvisoryLock(string, int64) error - // IsUsedAdvisoryLock checks for existing locks (aka IS_USED_LOCK()). - IsUsedAdvisoryLock(string) uint64 - // ReleaseAdvisoryLock releases an advisory lock (aka RELEASE_LOCK()). - ReleaseAdvisoryLock(string) bool - // ReleaseAllAdvisoryLocks releases all advisory locks that this session holds. - ReleaseAllAdvisoryLocks() int - // GetStore returns the store of session. - GetStore() kv.Storage - // GetInfoSchema returns the current infoschema - GetInfoSchema() sessionctx.InfoschemaMetaVersion - // GetDomainInfoSchema returns the latest information schema in domain - GetDomainInfoSchema() sessionctx.InfoschemaMetaVersion -} +type EvalContext = context.EvalContext + +// BuildContext is used to build an expression +type BuildContext = context.BuildContext func sqlMode(ctx EvalContext) mysql.SQLMode { return ctx.GetSessionVars().SQLMode @@ -80,15 +59,3 @@ func warningCount(ctx EvalContext) int { func truncateWarnings(ctx EvalContext, start int) []stmtctx.SQLWarn { return ctx.GetSessionVars().StmtCtx.TruncateWarnings(start) } - -// BuildContext is used to build an expression -type BuildContext interface { - EvalContext - // GetSessionVars gets the session variables. - GetSessionVars() *variable.SessionVars - // SetValue saves a value associated with this context for key. - SetValue(key fmt.Stringer, value any) - // BuiltinFunctionUsageInc increase the counting of each builtin function usage - // Notice that this is a thread safe function - BuiltinFunctionUsageInc(scalarFuncSigName string) -} diff --git a/pkg/expression/context/BUILD.bazel b/pkg/expression/context/BUILD.bazel new file mode 100644 index 0000000000000..408555e638ba1 --- /dev/null +++ b/pkg/expression/context/BUILD.bazel @@ -0,0 +1,13 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "context", + srcs = ["context.go"], + importpath = "github.com/pingcap/tidb/pkg/expression/context", + visibility = ["//visibility:public"], + deps = [ + "//pkg/infoschema/context", + "//pkg/kv", + "//pkg/sessionctx/variable", + ], +) diff --git a/pkg/expression/context/context.go b/pkg/expression/context/context.go new file mode 100644 index 0000000000000..7bf0062e7d581 --- /dev/null +++ b/pkg/expression/context/context.go @@ -0,0 +1,59 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package context + +import ( + "fmt" + + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" + "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/sessionctx/variable" +) + +// EvalContext is used to evaluate an expression +type EvalContext interface { + // GetSessionVars gets the session variables. + GetSessionVars() *variable.SessionVars + // Value returns the value associated with this context for key. + Value(key fmt.Stringer) any + // IsDDLOwner checks whether this session is DDL owner. + IsDDLOwner() bool + // GetAdvisoryLock acquires an advisory lock (aka GET_LOCK()). + GetAdvisoryLock(string, int64) error + // IsUsedAdvisoryLock checks for existing locks (aka IS_USED_LOCK()). + IsUsedAdvisoryLock(string) uint64 + // ReleaseAdvisoryLock releases an advisory lock (aka RELEASE_LOCK()). + ReleaseAdvisoryLock(string) bool + // ReleaseAllAdvisoryLocks releases all advisory locks that this session holds. + ReleaseAllAdvisoryLocks() int + // GetStore returns the store of session. + GetStore() kv.Storage + // GetInfoSchema returns the current infoschema + GetInfoSchema() infoschema.InfoSchemaMetaVersion + // GetDomainInfoSchema returns the latest information schema in domain + GetDomainInfoSchema() infoschema.InfoSchemaMetaVersion +} + +// BuildContext is used to build an expression +type BuildContext interface { + EvalContext + // GetSessionVars gets the session variables. + GetSessionVars() *variable.SessionVars + // SetValue saves a value associated with this context for key. + SetValue(key fmt.Stringer, value any) + // BuiltinFunctionUsageInc increase the counting of each builtin function usage + // Notice that this is a thread safe function + BuiltinFunctionUsageInc(scalarFuncSigName string) +} diff --git a/pkg/infoschema/BUILD.bazel b/pkg/infoschema/BUILD.bazel index d42caa569fb26..6a15dc3806b7d 100644 --- a/pkg/infoschema/BUILD.bazel +++ b/pkg/infoschema/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//pkg/ddl/resourcegroup", "//pkg/domain/infosync", "//pkg/errno", + "//pkg/infoschema/context", "//pkg/infoschema/metrics", "//pkg/kv", "//pkg/meta", diff --git a/pkg/infoschema/context/BUILD.bazel b/pkg/infoschema/context/BUILD.bazel new file mode 100644 index 0000000000000..1c388d2183029 --- /dev/null +++ b/pkg/infoschema/context/BUILD.bazel @@ -0,0 +1,8 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "context", + srcs = ["infoschema.go"], + importpath = "github.com/pingcap/tidb/pkg/infoschema/context", + visibility = ["//visibility:public"], +) diff --git a/pkg/infoschema/context/infoschema.go b/pkg/infoschema/context/infoschema.go new file mode 100644 index 0000000000000..b6987013e77b8 --- /dev/null +++ b/pkg/infoschema/context/infoschema.go @@ -0,0 +1,23 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package context + +// InfoSchemaMetaVersion is a workaround. Due to circular dependency, +// can not return the complete interface. But SchemaMetaVersion is widely used for logging. +// So we give a convenience for that. +// FIXME: remove this interface +type InfoSchemaMetaVersion interface { + SchemaMetaVersion() int64 +} diff --git a/pkg/infoschema/infoschema.go b/pkg/infoschema/infoschema.go index 4eb6002b7772c..5c9a2faa848be 100644 --- a/pkg/infoschema/infoschema.go +++ b/pkg/infoschema/infoschema.go @@ -22,10 +22,10 @@ import ( "sync" "github.com/pingcap/tidb/pkg/ddl/placement" + "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/intest" @@ -388,7 +388,7 @@ func init() { util.GetSequenceByName = func(is any, schema, sequence model.CIStr) (util.SequenceTable, error) { return GetSequenceByName(is.(InfoSchema), schema, sequence) } - mock.MockInfoschema = func(tbList []*model.TableInfo) sessionctx.InfoschemaMetaVersion { + mock.MockInfoschema = func(tbList []*model.TableInfo) context.InfoSchemaMetaVersion { return MockInfoSchema(tbList) } } diff --git a/pkg/planner/context/BUILD.bazel b/pkg/planner/context/BUILD.bazel index 097786e3b6bf9..77ce920dab3fd 100644 --- a/pkg/planner/context/BUILD.bazel +++ b/pkg/planner/context/BUILD.bazel @@ -6,7 +6,7 @@ go_library( importpath = "github.com/pingcap/tidb/pkg/planner/context", visibility = ["//visibility:public"], deps = [ - "//pkg/expression", + "//pkg/expression/context", "//pkg/kv", "//pkg/parser/model", "//pkg/sessionctx/variable", diff --git a/pkg/planner/context/context.go b/pkg/planner/context/context.go index 0298fb554e7fa..a66f82223768e 100644 --- a/pkg/planner/context/context.go +++ b/pkg/planner/context/context.go @@ -15,7 +15,7 @@ package context import ( - "github.com/pingcap/tidb/pkg/expression" + exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -24,7 +24,7 @@ import ( // PlanContext is the context for building plan. type PlanContext interface { - expression.BuildContext + exprctx.BuildContext contextutil.ValueStoreContext // GetSessionVars gets the session variables. GetSessionVars() *variable.SessionVars diff --git a/pkg/session/BUILD.bazel b/pkg/session/BUILD.bazel index c379afdfff92c..b465da698e190 100644 --- a/pkg/session/BUILD.bazel +++ b/pkg/session/BUILD.bazel @@ -32,6 +32,7 @@ go_library( "//pkg/extension", "//pkg/extension/extensionimpl", "//pkg/infoschema", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/meta", "//pkg/metrics", diff --git a/pkg/session/session.go b/pkg/session/session.go index 31e85ec1bba8a..72b30d237e9d1 100644 --- a/pkg/session/session.go +++ b/pkg/session/session.go @@ -51,6 +51,7 @@ import ( "github.com/pingcap/tidb/pkg/extension" "github.com/pingcap/tidb/pkg/extension/extensionimpl" "github.com/pingcap/tidb/pkg/infoschema" + infoschemactx "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/metrics" @@ -4050,7 +4051,7 @@ func (s *session) GetTxnWriteThroughputSLI() *sli.TxnWriteThroughputSLI { // GetInfoSchema returns snapshotInfoSchema if snapshot schema is set. // Transaction infoschema is returned if inside an explicit txn. // Otherwise the latest infoschema is returned. -func (s *session) GetInfoSchema() sessionctx.InfoschemaMetaVersion { +func (s *session) GetInfoSchema() infoschemactx.InfoSchemaMetaVersion { vars := s.GetSessionVars() var is infoschema.InfoSchema if snap, ok := vars.SnapshotInfoschema.(infoschema.InfoSchema); ok { @@ -4074,7 +4075,7 @@ func (s *session) GetInfoSchema() sessionctx.InfoschemaMetaVersion { return temptable.AttachLocalTemporaryTableInfoSchema(s, is) } -func (s *session) GetDomainInfoSchema() sessionctx.InfoschemaMetaVersion { +func (s *session) GetDomainInfoSchema() infoschemactx.InfoSchemaMetaVersion { is := domain.GetDomain(s).InfoSchema() extIs := &infoschema.SessionExtendedInfoSchema{InfoSchema: is} return temptable.AttachLocalTemporaryTableInfoSchema(s, extIs) diff --git a/pkg/sessionctx/BUILD.bazel b/pkg/sessionctx/BUILD.bazel index 06bb54efd5603..628caa9868df2 100644 --- a/pkg/sessionctx/BUILD.bazel +++ b/pkg/sessionctx/BUILD.bazel @@ -6,10 +6,13 @@ go_library( importpath = "github.com/pingcap/tidb/pkg/sessionctx", visibility = ["//visibility:public"], deps = [ + "//pkg/expression/context", "//pkg/extension", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/metrics", "//pkg/parser/model", + "//pkg/planner/context", "//pkg/sessionctx/sessionstates", "//pkg/sessionctx/variable", "//pkg/statistics/handle/usage/indexusage", diff --git a/pkg/sessionctx/context.go b/pkg/sessionctx/context.go index d6304e000da05..5af0a3ab1335a 100644 --- a/pkg/sessionctx/context.go +++ b/pkg/sessionctx/context.go @@ -20,10 +20,13 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" + exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/extension" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser/model" + planctx "github.com/pingcap/tidb/pkg/planner/context" "github.com/pingcap/tidb/pkg/sessionctx/sessionstates" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics/handle/usage/indexusage" @@ -37,14 +40,6 @@ import ( "github.com/tikv/client-go/v2/oracle" ) -// InfoschemaMetaVersion is a workaround. Due to circular dependency, -// can not return the complete interface. But SchemaMetaVersion is widely used for logging. -// So we give a convenience for that. -// FIXME: remove this interface -type InfoschemaMetaVersion interface { - SchemaMetaVersion() int64 -} - // SessionStatesHandler is an interface for encoding and decoding session states. type SessionStatesHandler interface { // EncodeSessionStates encodes session states into a JSON. @@ -68,6 +63,9 @@ type PlanCache interface { type Context interface { SessionStatesHandler contextutil.ValueStoreContext + exprctx.EvalContext + exprctx.BuildContext + planctx.PlanContext // SetDiskFullOpt set the disk full opt when tikv disk full happened. SetDiskFullOpt(level kvrpcpb.DiskFullOpt) // RollbackTxn rolls back the current transaction. @@ -89,12 +87,12 @@ type Context interface { // Deprecated: the semantics of session.GetInfoSchema() is ambiguous // If you want to get the infoschema of the current transaction in SQL layer, use sessiontxn.GetTxnManager(ctx).GetTxnInfoSchema() // If you want to get the latest infoschema use `GetDomainInfoSchema` - GetInfoSchema() InfoschemaMetaVersion + GetInfoSchema() infoschema.InfoSchemaMetaVersion // GetDomainInfoSchema returns the latest information schema in domain // Different with `domain.InfoSchema()`, the information schema returned by this method // includes the temporary table definitions stored in session - GetDomainInfoSchema() InfoschemaMetaVersion + GetDomainInfoSchema() infoschema.InfoSchemaMetaVersion GetSessionVars() *variable.SessionVars diff --git a/pkg/table/BUILD.bazel b/pkg/table/BUILD.bazel index a040739231b16..62801395332ce 100644 --- a/pkg/table/BUILD.bazel +++ b/pkg/table/BUILD.bazel @@ -14,6 +14,7 @@ go_library( "//pkg/errctx", "//pkg/errno", "//pkg/expression", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/meta/autoid", "//pkg/parser", diff --git a/pkg/table/table.go b/pkg/table/table.go index 2c9c656d67880..04f0024c3d346 100644 --- a/pkg/table/table.go +++ b/pkg/table/table.go @@ -24,6 +24,7 @@ import ( mysql "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/expression" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/model" @@ -188,7 +189,7 @@ type MutateContext interface { // StmtGetMutation gets the binlog mutation for current statement. StmtGetMutation(int64) *binlog.TableMutation // GetDomainInfoSchema returns the latest information schema in domain - GetDomainInfoSchema() sessionctx.InfoschemaMetaVersion + GetDomainInfoSchema() infoschema.InfoSchemaMetaVersion } // AllocatorContext is used to provide context for method `table.Allocators`. diff --git a/pkg/ttl/ttlworker/BUILD.bazel b/pkg/ttl/ttlworker/BUILD.bazel index 008710c69d727..19c1d0636af7c 100644 --- a/pkg/ttl/ttlworker/BUILD.bazel +++ b/pkg/ttl/ttlworker/BUILD.bazel @@ -73,6 +73,7 @@ go_test( deps = [ "//pkg/domain", "//pkg/infoschema", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/metrics", "//pkg/parser/ast", diff --git a/pkg/ttl/ttlworker/session_test.go b/pkg/ttl/ttlworker/session_test.go index ca666ba4803c7..d777efc7bb9c0 100644 --- a/pkg/ttl/ttlworker/session_test.go +++ b/pkg/ttl/ttlworker/session_test.go @@ -23,6 +23,7 @@ import ( "github.com/ngaut/pools" "github.com/pingcap/tidb/pkg/infoschema" + infoschemactx "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" @@ -161,7 +162,7 @@ func newMockSession(t *testing.T, tbl ...*cache.PhysicalTable) *mockSession { } } -func (s *mockSession) GetDomainInfoSchema() sessionctx.InfoschemaMetaVersion { +func (s *mockSession) GetDomainInfoSchema() infoschemactx.InfoSchemaMetaVersion { return s.sessionInfoSchema } diff --git a/pkg/util/mock/BUILD.bazel b/pkg/util/mock/BUILD.bazel index a2c5d14378b0c..b79cc760d64c3 100644 --- a/pkg/util/mock/BUILD.bazel +++ b/pkg/util/mock/BUILD.bazel @@ -13,6 +13,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/extension", + "//pkg/infoschema/context", "//pkg/kv", "//pkg/parser/ast", "//pkg/parser/model", diff --git a/pkg/util/mock/context.go b/pkg/util/mock/context.go index 994891278764e..ed7f80803a56b 100644 --- a/pkg/util/mock/context.go +++ b/pkg/util/mock/context.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/extension" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" @@ -53,7 +54,7 @@ type Context struct { Store kv.Storage // mock global variable ctx context.Context sm util.SessionManager - is sessionctx.InfoschemaMetaVersion + is infoschema.InfoSchemaMetaVersion values map[fmt.Stringer]any sessionVars *variable.SessionVars cancel context.CancelFunc @@ -212,13 +213,13 @@ func (c *Context) GetMPPClient() kv.MPPClient { } // GetInfoSchema implements sessionctx.Context GetInfoSchema interface. -func (c *Context) GetInfoSchema() sessionctx.InfoschemaMetaVersion { +func (c *Context) GetInfoSchema() infoschema.InfoSchemaMetaVersion { vars := c.GetSessionVars() - if snap, ok := vars.SnapshotInfoschema.(sessionctx.InfoschemaMetaVersion); ok { + if snap, ok := vars.SnapshotInfoschema.(infoschema.InfoSchemaMetaVersion); ok { return snap } if vars.TxnCtx != nil && vars.InTxn() { - if is, ok := vars.TxnCtx.InfoSchema.(sessionctx.InfoschemaMetaVersion); ok { + if is, ok := vars.TxnCtx.InfoSchema.(infoschema.InfoSchemaMetaVersion); ok { return is } } @@ -229,10 +230,10 @@ func (c *Context) GetInfoSchema() sessionctx.InfoschemaMetaVersion { } // MockInfoschema only serves for test. -var MockInfoschema func(tbList []*model.TableInfo) sessionctx.InfoschemaMetaVersion +var MockInfoschema func(tbList []*model.TableInfo) infoschema.InfoSchemaMetaVersion // GetDomainInfoSchema returns the latest information schema in domain -func (c *Context) GetDomainInfoSchema() sessionctx.InfoschemaMetaVersion { +func (c *Context) GetDomainInfoSchema() infoschema.InfoSchemaMetaVersion { if c.is == nil { c.is = MockInfoschema(nil) } @@ -469,7 +470,7 @@ func (c *Context) InSandBoxMode() bool { } // SetInfoSchema is to set info shema for the test. -func (c *Context) SetInfoSchema(is sessionctx.InfoschemaMetaVersion) { +func (c *Context) SetInfoSchema(is infoschema.InfoSchemaMetaVersion) { c.is = is }