From 61ecb599ada9e6bebae39807252def9936ad8f61 Mon Sep 17 00:00:00 2001 From: Weizhen Wang Date: Mon, 14 Aug 2023 11:52:58 +0800 Subject: [PATCH] *: use std slices to replace exp/slices (#46020) ref pingcap/tidb#45933 --- br/pkg/lightning/backend/local/engine.go | 10 +++++----- dumpling/export/BUILD.bazel | 1 - dumpling/export/dump.go | 2 +- dumpling/export/util.go | 2 +- expression/BUILD.bazel | 1 - expression/builtin.go | 2 +- expression/builtin_info.go | 2 +- expression/builtin_info_vec.go | 2 +- expression/column.go | 7 ++++--- expression/explain.go | 2 +- planner/core/BUILD.bazel | 1 - planner/core/exhaust_physical_plans.go | 2 +- planner/core/find_best_task.go | 2 +- planner/core/fragment.go | 7 ++++--- planner/core/hashcode.go | 4 ++-- planner/core/memtable_predicate_extractor.go | 2 +- planner/core/memtable_predicate_extractor_test.go | 2 +- planner/core/plan_cache_utils.go | 7 ++++--- planner/core/rule_join_reorder.go | 2 +- planner/core/rule_partition_processor.go | 7 ++++--- planner/core/rule_predicate_simplification.go | 2 +- planner/core/stats.go | 2 +- .../core/tiflash_selection_late_materialization.go | 11 ++++++++--- 23 files changed, 44 insertions(+), 38 deletions(-) diff --git a/br/pkg/lightning/backend/local/engine.go b/br/pkg/lightning/backend/local/engine.go index ca463c66af52d..267ab9106a5b0 100644 --- a/br/pkg/lightning/backend/local/engine.go +++ b/br/pkg/lightning/backend/local/engine.go @@ -24,6 +24,7 @@ import ( "io" "os" "path/filepath" + "slices" "sync" "time" @@ -46,7 +47,6 @@ import ( "github.com/tikv/client-go/v2/tikv" "go.uber.org/atomic" "go.uber.org/zap" - "golang.org/x/exp/slices" "golang.org/x/sync/errgroup" ) @@ -774,8 +774,8 @@ func (e *Engine) batchIngestSSTs(metas []*sstMeta) error { if len(metas) == 0 { return nil } - slices.SortFunc(metas, func(i, j *sstMeta) bool { - return bytes.Compare(i.minKey, j.minKey) < 0 + slices.SortFunc(metas, func(i, j *sstMeta) int { + return bytes.Compare(i.minKey, j.minKey) }) // non overlapping sst is grouped, and ingested in that order @@ -1218,8 +1218,8 @@ func (w *Writer) flushKVs(ctx context.Context) error { return errors.Trace(err) } if !w.isWriteBatchSorted { - slices.SortFunc(w.writeBatch[:w.batchCount], func(i, j common.KvPair) bool { - return bytes.Compare(i.Key, j.Key) < 0 + slices.SortFunc(w.writeBatch[:w.batchCount], func(i, j common.KvPair) int { + return bytes.Compare(i.Key, j.Key) }) w.isWriteBatchSorted = true } diff --git a/dumpling/export/BUILD.bazel b/dumpling/export/BUILD.bazel index 4d0e51a1252d9..9c25f0f480ac0 100644 --- a/dumpling/export/BUILD.bazel +++ b/dumpling/export/BUILD.bazel @@ -60,7 +60,6 @@ go_library( "@com_github_spf13_pflag//:pflag", "@com_github_tikv_pd_client//:client", "@io_etcd_go_etcd_client_v3//:client", - "@org_golang_x_exp//slices", "@org_golang_x_sync//errgroup", "@org_uber_go_atomic//:atomic", "@org_uber_go_multierr//:multierr", diff --git a/dumpling/export/dump.go b/dumpling/export/dump.go index 915fc38c7614f..3cf5a50be19eb 100644 --- a/dumpling/export/dump.go +++ b/dumpling/export/dump.go @@ -11,6 +11,7 @@ import ( "fmt" "math/big" "net" + "slices" "strconv" "strings" "sync/atomic" @@ -39,7 +40,6 @@ import ( pd "github.com/tikv/pd/client" gatomic "go.uber.org/atomic" "go.uber.org/zap" - "golang.org/x/exp/slices" "golang.org/x/sync/errgroup" ) diff --git a/dumpling/export/util.go b/dumpling/export/util.go index 9f75d487254e6..f082b2b84636a 100644 --- a/dumpling/export/util.go +++ b/dumpling/export/util.go @@ -5,6 +5,7 @@ package export import ( "context" "database/sql" + "slices" "strings" "time" @@ -12,7 +13,6 @@ import ( "github.com/pingcap/tidb/br/pkg/version" tcontext "github.com/pingcap/tidb/dumpling/context" clientv3 "go.etcd.io/etcd/client/v3" - "golang.org/x/exp/slices" ) const tidbServerInformationPath = "/tidb/server/info" diff --git a/expression/BUILD.bazel b/expression/BUILD.bazel index ae5903194b3a6..11da852e21c9b 100644 --- a/expression/BUILD.bazel +++ b/expression/BUILD.bazel @@ -119,7 +119,6 @@ go_library( "@com_github_pingcap_tipb//go-tipb", "@com_github_pkg_errors//:errors", "@com_github_tikv_client_go_v2//oracle", - "@org_golang_x_exp//slices", "@org_golang_x_tools//container/intsets", "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", diff --git a/expression/builtin.go b/expression/builtin.go index 851e252681b6c..0090c101137ea 100644 --- a/expression/builtin.go +++ b/expression/builtin.go @@ -25,6 +25,7 @@ package expression import ( + "slices" "strings" "sync" "unsafe" @@ -42,7 +43,6 @@ import ( "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/set" "github.com/pingcap/tipb/go-tipb" - "golang.org/x/exp/slices" ) // baseBuiltinFunc will be contained in every struct that implement builtinFunc interface. diff --git a/expression/builtin_info.go b/expression/builtin_info.go index 81f0769b7ccbf..6cede43e519c6 100644 --- a/expression/builtin_info.go +++ b/expression/builtin_info.go @@ -21,6 +21,7 @@ package expression import ( "context" "encoding/json" + "slices" "strings" "time" @@ -37,7 +38,6 @@ import ( "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tidb/util/printer" "github.com/pingcap/tipb/go-tipb" - "golang.org/x/exp/slices" ) var ( diff --git a/expression/builtin_info_vec.go b/expression/builtin_info_vec.go index f99d4d93cf4ff..8df3ca2513eeb 100644 --- a/expression/builtin_info_vec.go +++ b/expression/builtin_info_vec.go @@ -15,6 +15,7 @@ package expression import ( + "slices" "strings" "github.com/pingcap/errors" @@ -23,7 +24,6 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/printer" - "golang.org/x/exp/slices" ) func (b *builtinDatabaseSig) vectorized() bool { diff --git a/expression/column.go b/expression/column.go index 094c250855946..25e3cb333c78f 100644 --- a/expression/column.go +++ b/expression/column.go @@ -15,7 +15,9 @@ package expression import ( + "cmp" "fmt" + "slices" "strings" "unsafe" @@ -30,7 +32,6 @@ import ( "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/size" - "golang.org/x/exp/slices" ) // CorrelatedColumn stands for a column in a correlated sub query. @@ -735,8 +736,8 @@ func (col *Column) Repertoire() Repertoire { func SortColumns(cols []*Column) []*Column { sorted := make([]*Column, len(cols)) copy(sorted, cols) - slices.SortFunc(sorted, func(i, j *Column) bool { - return i.UniqueID < j.UniqueID + slices.SortFunc(sorted, func(i, j *Column) int { + return cmp.Compare(i.UniqueID, j.UniqueID) }) return sorted } diff --git a/expression/explain.go b/expression/explain.go index 704c6a4e4d3ac..5a6fc6c4ac031 100644 --- a/expression/explain.go +++ b/expression/explain.go @@ -17,12 +17,12 @@ package expression import ( "bytes" "fmt" + "slices" "strings" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" - "golang.org/x/exp/slices" ) // ExplainInfo implements the Expression interface. diff --git a/planner/core/BUILD.bazel b/planner/core/BUILD.bazel index 89fa4d4357c2a..7833bead1485a 100644 --- a/planner/core/BUILD.bazel +++ b/planner/core/BUILD.bazel @@ -293,7 +293,6 @@ go_test( "@com_github_pingcap_tipb//go-tipb", "@com_github_prometheus_client_model//go", "@com_github_stretchr_testify//require", - "@org_golang_x_exp//slices", "@org_uber_go_goleak//:goleak", ], ) diff --git a/planner/core/exhaust_physical_plans.go b/planner/core/exhaust_physical_plans.go index 5e1e89e2b0405..ab48af2635d67 100644 --- a/planner/core/exhaust_physical_plans.go +++ b/planner/core/exhaust_physical_plans.go @@ -18,6 +18,7 @@ import ( "bytes" "fmt" "math" + "slices" "strings" "unsafe" @@ -46,7 +47,6 @@ import ( "github.com/pingcap/tipb/go-tipb" "go.uber.org/atomic" "go.uber.org/zap" - "golang.org/x/exp/slices" ) func (p *LogicalUnionScan) exhaustPhysicalPlans(prop *property.PhysicalProperty) ([]PhysicalPlan, bool, error) { diff --git a/planner/core/find_best_task.go b/planner/core/find_best_task.go index dd715fdac6350..57e3871361c35 100644 --- a/planner/core/find_best_task.go +++ b/planner/core/find_best_task.go @@ -17,6 +17,7 @@ package core import ( "fmt" "math" + "slices" "strings" "github.com/pingcap/errors" @@ -41,7 +42,6 @@ import ( "github.com/pingcap/tidb/util/set" "github.com/pingcap/tidb/util/tracing" "go.uber.org/zap" - "golang.org/x/exp/slices" ) const ( diff --git a/planner/core/fragment.go b/planner/core/fragment.go index 4171eb592ae22..5ee4acdcc728a 100644 --- a/planner/core/fragment.go +++ b/planner/core/fragment.go @@ -15,7 +15,9 @@ package core import ( + "cmp" "context" + "slices" "sync/atomic" "time" "unsafe" @@ -37,7 +39,6 @@ import ( "github.com/pingcap/tidb/util/tiflashcompute" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" - "golang.org/x/exp/slices" ) // Fragment is cut from the whole pushed-down plan by network communication. @@ -598,8 +599,8 @@ func (e *mppTaskGenerator) constructMPPTasksImpl(ctx context.Context, ts *Physic } func (e *mppTaskGenerator) constructMPPBuildTaskReqForPartitionedTable(ts *PhysicalTableScan, splitedRanges []*ranger.Range, partitions []table.PhysicalTable) (*kv.MPPBuildTasksRequest, []int64, error) { - slices.SortFunc(partitions, func(i, j table.PhysicalTable) bool { - return i.GetPhysicalID() < j.GetPhysicalID() + slices.SortFunc(partitions, func(i, j table.PhysicalTable) int { + return cmp.Compare(i.GetPhysicalID(), j.GetPhysicalID()) }) partitionIDAndRanges := make([]kv.PartitionIDAndRanges, len(partitions)) allPartitionsIDs := make([]int64, len(partitions)) diff --git a/planner/core/hashcode.go b/planner/core/hashcode.go index d9f49086eb8b0..fe8980fa82405 100644 --- a/planner/core/hashcode.go +++ b/planner/core/hashcode.go @@ -17,9 +17,9 @@ package core import ( "bytes" "encoding/binary" + "slices" "github.com/pingcap/tidb/util/plancodec" - "golang.org/x/exp/slices" ) func encodeIntAsUint32(result []byte, value int) []byte { @@ -79,7 +79,7 @@ func (p *LogicalSelection) HashCode() []byte { condHashCodes[i] = expr.HashCode(p.SCtx().GetSessionVars().StmtCtx) } // Sort the conditions, so `a > 1 and a < 100` can equal to `a < 100 and a > 1`. - slices.SortFunc(condHashCodes, func(i, j []byte) bool { return bytes.Compare(i, j) < 0 }) + slices.SortFunc(condHashCodes, func(i, j []byte) int { return bytes.Compare(i, j) }) for _, condHashCode := range condHashCodes { result = encodeIntAsUint32(result, len(condHashCode)) diff --git a/planner/core/memtable_predicate_extractor.go b/planner/core/memtable_predicate_extractor.go index 49c82f991e53d..16de60bb67792 100644 --- a/planner/core/memtable_predicate_extractor.go +++ b/planner/core/memtable_predicate_extractor.go @@ -19,6 +19,7 @@ import ( "fmt" "math" "regexp" + "slices" "strconv" "strings" "time" @@ -41,7 +42,6 @@ import ( "github.com/pingcap/tidb/util/stringutil" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" - "golang.org/x/exp/slices" ) // MemTablePredicateExtractor is used to extract some predicates from `WHERE` clause diff --git a/planner/core/memtable_predicate_extractor_test.go b/planner/core/memtable_predicate_extractor_test.go index ecf7c47218ab9..14a1b0c3ae7dc 100644 --- a/planner/core/memtable_predicate_extractor_test.go +++ b/planner/core/memtable_predicate_extractor_test.go @@ -18,6 +18,7 @@ import ( "context" "fmt" "regexp" + "slices" "sort" "strconv" "testing" @@ -36,7 +37,6 @@ import ( "github.com/pingcap/tidb/util/hint" "github.com/pingcap/tidb/util/set" "github.com/stretchr/testify/require" - "golang.org/x/exp/slices" ) func getLogicalMemTable(t *testing.T, dom *domain.Domain, se session.Session, parser *parser.Parser, sql string) *plannercore.LogicalMemTable { diff --git a/planner/core/plan_cache_utils.go b/planner/core/plan_cache_utils.go index 2bb3ac62a4316..26e0400d3b373 100644 --- a/planner/core/plan_cache_utils.go +++ b/planner/core/plan_cache_utils.go @@ -15,8 +15,10 @@ package core import ( + "cmp" "context" "math" + "slices" "strconv" "time" "unsafe" @@ -44,7 +46,6 @@ import ( utilpc "github.com/pingcap/tidb/util/plancache" "github.com/pingcap/tidb/util/size" atomic2 "go.uber.org/atomic" - "golang.org/x/exp/slices" ) const ( @@ -109,8 +110,8 @@ func GeneratePlanCacheStmtWithAST(ctx context.Context, sctx sessionctx.Context, // The parameter markers are appended in visiting order, which may not // be the same as the position order in the query string. We need to // sort it by position. - slices.SortFunc(extractor.markers, func(i, j ast.ParamMarkerExpr) bool { - return i.(*driver.ParamMarkerExpr).Offset < j.(*driver.ParamMarkerExpr).Offset + slices.SortFunc(extractor.markers, func(i, j ast.ParamMarkerExpr) int { + return cmp.Compare(i.(*driver.ParamMarkerExpr).Offset, j.(*driver.ParamMarkerExpr).Offset) }) paramCount := len(extractor.markers) for i := 0; i < paramCount; i++ { diff --git a/planner/core/rule_join_reorder.go b/planner/core/rule_join_reorder.go index c330f1b296653..9005424f06570 100644 --- a/planner/core/rule_join_reorder.go +++ b/planner/core/rule_join_reorder.go @@ -18,13 +18,13 @@ import ( "bytes" "context" "fmt" + "slices" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tidb/util/tracing" - "golang.org/x/exp/slices" ) // extractJoinGroup extracts all the join nodes connected with continuous diff --git a/planner/core/rule_partition_processor.go b/planner/core/rule_partition_processor.go index 87f0357baa276..ad2e6ea5db8da 100644 --- a/planner/core/rule_partition_processor.go +++ b/planner/core/rule_partition_processor.go @@ -16,9 +16,11 @@ package core import ( "bytes" + "cmp" "context" "fmt" gomath "math" + "slices" "sort" "strings" @@ -37,7 +39,6 @@ import ( "github.com/pingcap/tidb/util/plancodec" "github.com/pingcap/tidb/util/ranger" "github.com/pingcap/tidb/util/set" - "golang.org/x/exp/slices" ) // FullRange represent used all partitions. @@ -1973,8 +1974,8 @@ func appendMakeUnionAllChildrenTranceStep(origin *DataSource, usedMap map[int64] for _, def := range usedMap { used = append(used, def) } - slices.SortFunc(used, func(i, j model.PartitionDefinition) bool { - return i.ID < j.ID + slices.SortFunc(used, func(i, j model.PartitionDefinition) int { + return cmp.Compare(i.ID, j.ID) }) if len(children) == 1 { newDS := plan.(*DataSource) diff --git a/planner/core/rule_predicate_simplification.go b/planner/core/rule_predicate_simplification.go index 230800ea754f0..f1342419a1b92 100644 --- a/planner/core/rule_predicate_simplification.go +++ b/planner/core/rule_predicate_simplification.go @@ -17,11 +17,11 @@ package core import ( "context" "errors" + "slices" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/sessionctx" - "golang.org/x/exp/slices" ) // predicateSimplification consolidates different predcicates on a column and its equivalence classes. Initial out is for diff --git a/planner/core/stats.go b/planner/core/stats.go index 14ab62502bd51..04e99339d1928 100644 --- a/planner/core/stats.go +++ b/planner/core/stats.go @@ -18,6 +18,7 @@ import ( "context" "fmt" "math" + "slices" "strconv" "strings" @@ -38,7 +39,6 @@ import ( "github.com/pingcap/tidb/util/mathutil" "github.com/pingcap/tidb/util/ranger" "go.uber.org/zap" - "golang.org/x/exp/slices" ) func (p *basePhysicalPlan) StatsCount() float64 { diff --git a/planner/core/tiflash_selection_late_materialization.go b/planner/core/tiflash_selection_late_materialization.go index 738e2ff486594..a4b7ee49d51f2 100644 --- a/planner/core/tiflash_selection_late_materialization.go +++ b/planner/core/tiflash_selection_late_materialization.go @@ -15,13 +15,15 @@ package core import ( + "cmp" + "slices" + "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/sessionctx" "github.com/pingcap/tidb/util/logutil" "go.uber.org/zap" - "golang.org/x/exp/slices" ) // selectivity = (row count after filter) / (row count before filter), smaller is better @@ -144,8 +146,11 @@ func groupByColumnsSortBySelectivity(sctx sessionctx.Context, conds []expression } // Sort exprGroups by selectivity in ascending order - slices.SortStableFunc(exprGroups, func(x, y expressionGroup) bool { - return x.selectivity < y.selectivity || (x.selectivity == y.selectivity && len(x.exprs) < len(y.exprs)) + slices.SortStableFunc(exprGroups, func(x, y expressionGroup) int { + if x.selectivity == y.selectivity && len(x.exprs) < len(y.exprs) { + return -1 + } + return cmp.Compare(x.selectivity, y.selectivity) }) return exprGroups