From 63009ad6ef9561e74372d33e3d85a53afac1ba45 Mon Sep 17 00:00:00 2001 From: Andrew Kimball Date: Thu, 23 Jan 2025 14:33:04 -0800 Subject: [PATCH] idxtype: add idxtype package Add new sql/sem/idxtype package that defines an index type enum with values like forward, inverted, and vector. Code across SQL needs to check the index type and previously it used multiple different enums and bools. This commit continues the process of unifying these mechanisms (future commits will do even more). Epic: CRDB-42943 Release note: None --- pkg/BUILD.bazel | 2 ++ pkg/crosscluster/logical/BUILD.bazel | 1 + .../logical/logical_replication_job_test.go | 4 +-- pkg/gen/protobuf.bzl | 1 + pkg/internal/sqlsmith/BUILD.bazel | 1 + pkg/internal/sqlsmith/alter.go | 9 ++--- pkg/internal/sqlsmith/schema.go | 7 ++-- pkg/protos.bzl | 2 ++ pkg/sql/BUILD.bazel | 2 ++ pkg/sql/alter_primary_key.go | 7 ++-- pkg/sql/backfill.go | 5 +-- pkg/sql/backfill/BUILD.bazel | 1 + pkg/sql/backfill/backfill.go | 3 +- pkg/sql/catalog/BUILD.bazel | 1 + pkg/sql/catalog/catformat/BUILD.bazel | 2 ++ pkg/sql/catalog/catformat/index.go | 9 ++--- pkg/sql/catalog/catformat/index_test.go | 3 +- pkg/sql/catalog/descpb/BUILD.bazel | 3 ++ pkg/sql/catalog/descpb/index.go | 7 ++-- pkg/sql/catalog/descpb/structured.proto | 11 ++---- pkg/sql/catalog/systemschema/BUILD.bazel | 1 + pkg/sql/catalog/systemschema/system.go | 11 +++--- pkg/sql/catalog/table_elements.go | 3 +- pkg/sql/catalog/tabledesc/BUILD.bazel | 2 ++ pkg/sql/catalog/tabledesc/column.go | 3 +- pkg/sql/catalog/tabledesc/index.go | 5 +-- pkg/sql/catalog/tabledesc/index_test.go | 3 +- pkg/sql/catalog/tabledesc/structured.go | 11 +++--- .../catalog/tabledesc/table_desc_builder.go | 3 +- pkg/sql/colenc/BUILD.bazel | 1 + pkg/sql/colenc/encode.go | 3 +- pkg/sql/crdb_internal.go | 3 +- pkg/sql/create_index.go | 7 ++-- pkg/sql/create_stats.go | 5 +-- pkg/sql/create_table.go | 16 +++------ pkg/sql/distsql_plan_stats.go | 5 +-- pkg/sql/indexbackfiller_test.go | 5 +-- pkg/sql/opt_catalog.go | 7 ++-- pkg/sql/pg_catalog.go | 3 +- pkg/sql/randgen/BUILD.bazel | 1 + pkg/sql/randgen/schema.go | 9 ++--- pkg/sql/row/BUILD.bazel | 1 + pkg/sql/row/helper.go | 3 +- pkg/sql/row/updater.go | 5 +-- pkg/sql/rowenc/BUILD.bazel | 2 ++ pkg/sql/rowenc/index_encoding.go | 7 ++-- pkg/sql/rowenc/index_encoding_test.go | 7 ++-- pkg/sql/rowenc/index_fetch.go | 3 +- pkg/sql/scan.go | 3 +- .../scbuild/internal/scbuildstmt/BUILD.bazel | 1 + .../scbuildstmt/alter_table_add_column.go | 3 +- pkg/sql/schemachanger/scdecomp/BUILD.bazel | 1 + pkg/sql/schemachanger/scdecomp/decomp.go | 3 +- pkg/sql/schemachanger/scexec/BUILD.bazel | 2 ++ .../scexec/exec_backfill_test.go | 3 +- .../schemachanger/scexec/exec_validation.go | 4 +-- .../scexec/scmutationexec/BUILD.bazel | 1 + .../scexec/scmutationexec/index.go | 9 ++--- pkg/sql/sem/idxtype/BUILD.bazel | 34 +++++++++++++++++++ pkg/sql/sem/idxtype/idxtype.proto | 27 +++++++++++++++ pkg/sql/sem/tree/BUILD.bazel | 1 + pkg/sql/sem/tree/create.go | 9 ++--- pkg/sql/span/BUILD.bazel | 1 + pkg/sql/span/span_splitter.go | 3 +- 64 files changed, 218 insertions(+), 103 deletions(-) create mode 100644 pkg/sql/sem/idxtype/BUILD.bazel create mode 100644 pkg/sql/sem/idxtype/idxtype.proto diff --git a/pkg/BUILD.bazel b/pkg/BUILD.bazel index 9f95e75787c2..4897be0fa1df 100644 --- a/pkg/BUILD.bazel +++ b/pkg/BUILD.bazel @@ -2211,6 +2211,8 @@ GO_TARGETS = [ "//pkg/sql/sem/eval/eval_test:eval_test_test", "//pkg/sql/sem/eval:eval", "//pkg/sql/sem/eval:eval_test", + "//pkg/sql/sem/idxtype:idxtype", + "//pkg/sql/sem/idxtype:idxtypepb", "//pkg/sql/sem/normalize:normalize", "//pkg/sql/sem/normalize:normalize_test", "//pkg/sql/sem/plpgsqltree/utils:utils", diff --git a/pkg/crosscluster/logical/BUILD.bazel b/pkg/crosscluster/logical/BUILD.bazel index d42fd7152436..02550167bee6 100644 --- a/pkg/crosscluster/logical/BUILD.bazel +++ b/pkg/crosscluster/logical/BUILD.bazel @@ -156,6 +156,7 @@ go_test( "//pkg/sql/randgen", "//pkg/sql/rowenc", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/stats", "//pkg/testutils", diff --git a/pkg/crosscluster/logical/logical_replication_job_test.go b/pkg/crosscluster/logical/logical_replication_job_test.go index a1e68110a179..9fb5ef74ee3a 100644 --- a/pkg/crosscluster/logical/logical_replication_job_test.go +++ b/pkg/crosscluster/logical/logical_replication_job_test.go @@ -34,7 +34,6 @@ import ( "github.com/cockroachdb/cockroach/pkg/security/username" "github.com/cockroachdb/cockroach/pkg/sql" "github.com/cockroachdb/cockroach/pkg/sql/catalog" - "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" "github.com/cockroachdb/cockroach/pkg/sql/execinfra" "github.com/cockroachdb/cockroach/pkg/sql/isql" @@ -42,6 +41,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/randgen" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/stats" "github.com/cockroachdb/cockroach/pkg/testutils" @@ -1491,7 +1491,7 @@ func compareReplicatedTables( descB := desctestutils.TestingGetPublicTableDescriptor(s.DB(), s.Codec(), dbB, tableName) for _, indexA := range descA.AllIndexes() { - if indexA.GetType() == descpb.IndexDescriptor_INVERTED { + if indexA.GetType() == idxtype.INVERTED { t.Logf("skipping fingerprinting of inverted index %s", indexA.GetName()) continue } diff --git a/pkg/gen/protobuf.bzl b/pkg/gen/protobuf.bzl index 6caeea0af082..db191681e922 100644 --- a/pkg/gen/protobuf.bzl +++ b/pkg/gen/protobuf.bzl @@ -70,6 +70,7 @@ PROTOBUF_SRCS = [ "//pkg/sql/protoreflect/test:protoreflecttest_go_proto", "//pkg/sql/rowenc/rowencpb:rowencpb_go_proto", "//pkg/sql/schemachanger/scpb:scpb_go_proto", + "//pkg/sql/sem/idxtype:idxtype_go_proto", "//pkg/sql/sem/semenumpb:semenumpb_go_proto", "//pkg/sql/sessiondatapb:sessiondatapb_go_proto", "//pkg/sql/sqlstats/insights:insights_go_proto", diff --git a/pkg/internal/sqlsmith/BUILD.bazel b/pkg/internal/sqlsmith/BUILD.bazel index b73a4cc0199a..a990f0941eef 100644 --- a/pkg/internal/sqlsmith/BUILD.bazel +++ b/pkg/internal/sqlsmith/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//pkg/sql/sem/cast", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/plpgsqltree", "//pkg/sql/sem/tree", "//pkg/sql/sem/tree/treebin", diff --git a/pkg/internal/sqlsmith/alter.go b/pkg/internal/sqlsmith/alter.go index 0629574dbae4..07121c82c70e 100644 --- a/pkg/internal/sqlsmith/alter.go +++ b/pkg/internal/sqlsmith/alter.go @@ -13,6 +13,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/colinfo" "github.com/cockroachdb/cockroach/pkg/sql/randgen" "github.com/cockroachdb/cockroach/pkg/sql/sem/cast" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treebin" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -340,7 +341,7 @@ func makeCreateIndex(s *Smither) (tree.Statement, bool) { } var cols tree.IndexElemList seen := map[tree.Name]bool{} - indexType := tree.IndexTypeForward + indexType := idxtype.FORWARD unique := s.coin() for len(cols) < 1 || s.coin() { col := tableRef.Columns[s.rnd.Intn(len(tableRef.Columns))] @@ -351,7 +352,7 @@ func makeCreateIndex(s *Smither) (tree.Statement, bool) { // If this is the first column and it's invertible (i.e., JSONB), make an inverted index. if len(cols) == 0 && colinfo.ColumnTypeIsOnlyInvertedIndexable(tree.MustBeStaticallyKnownType(col.Type)) { - indexType = tree.IndexTypeInverted + indexType = idxtype.INVERTED unique = false cols = append(cols, tree.IndexElem{ Column: col.Name, @@ -366,7 +367,7 @@ func makeCreateIndex(s *Smither) (tree.Statement, bool) { } } var storing tree.NameList - for indexType == tree.IndexTypeForward && s.coin() { + for idxtype.SupportsStoring(indexType) && s.coin() { col := tableRef.Columns[s.rnd.Intn(len(tableRef.Columns))] if seen[col.Name] { continue @@ -390,7 +391,7 @@ func makeCreateIndex(s *Smither) (tree.Statement, bool) { Unique: unique, Columns: cols, Storing: storing, - Type: indexType, + Type: tree.IndexType(indexType), Concurrently: s.coin(), Invisibility: invisibility, }, true diff --git a/pkg/internal/sqlsmith/schema.go b/pkg/internal/sqlsmith/schema.go index 6f5a124d03e3..e15aa9e05d5a 100644 --- a/pkg/internal/sqlsmith/schema.go +++ b/pkg/internal/sqlsmith/schema.go @@ -18,6 +18,7 @@ import ( _ "github.com/cockroachdb/cockroach/pkg/sql/sem/builtins" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treebin" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -499,14 +500,14 @@ func (s *Smither) extractIndexes( return nil, err } if _, ok := indexes[idx]; !ok { - indexType := tree.IndexTypeForward + indexType := idxtype.FORWARD if inverted { - indexType = tree.IndexTypeInverted + indexType = idxtype.INVERTED } indexes[idx] = &tree.CreateIndex{ Name: idx, Table: *t.TableName, - Type: indexType, + Type: tree.IndexType(indexType), } } create := indexes[idx] diff --git a/pkg/protos.bzl b/pkg/protos.bzl index 08e7cb1f951d..6248b7b2dcde 100644 --- a/pkg/protos.bzl +++ b/pkg/protos.bzl @@ -35,6 +35,7 @@ SERVER_PROTOS = [ "//pkg/sql/contentionpb:contentionpb_proto", "//pkg/sql/lex:lex_proto", "//pkg/sql/schemachanger/scpb:scpb_proto", + "//pkg/sql/sem/idxtype:idxtype_proto", "//pkg/sql/sem/semenumpb:semenumpb_proto", "//pkg/sql/sessiondatapb:sessiondatapb_proto", "//pkg/sql/sqlstats/insights:insights_proto", @@ -123,6 +124,7 @@ PROTO_FILES = [ "//pkg/sql/lex:encode.proto", "//pkg/sql/schemachanger/scpb:elements.proto", "//pkg/sql/schemachanger/scpb:scpb.proto", + "//pkg/sql/sem/idxtype:idxtype.proto", "//pkg/sql/sem/semenumpb:constraint.proto", "//pkg/sql/sem/semenumpb:trigger.proto", "//pkg/sql/sessiondatapb:local_only_session_data.proto", diff --git a/pkg/sql/BUILD.bazel b/pkg/sql/BUILD.bazel index 5b7f7b68fb6a..b44d5f7f1440 100644 --- a/pkg/sql/BUILD.bazel +++ b/pkg/sql/BUILD.bazel @@ -497,6 +497,7 @@ go_library( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/plpgsqltree", "//pkg/sql/sem/semenumpb", "//pkg/sql/sem/transform", @@ -878,6 +879,7 @@ go_test( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sessiondata", "//pkg/sql/sessiondatapb", diff --git a/pkg/sql/alter_primary_key.go b/pkg/sql/alter_primary_key.go index 071bc53aaa93..0959521c5842 100644 --- a/pkg/sql/alter_primary_key.go +++ b/pkg/sql/alter_primary_key.go @@ -23,6 +23,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgnotice" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" "github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry" @@ -178,7 +179,7 @@ func (p *planner) AlterPrimaryKey( Unique: true, CreatedExplicitly: true, EncodingType: catenumpb.PrimaryIndexEncoding, - Type: descpb.IndexDescriptor_FORWARD, + Type: idxtype.FORWARD, // TODO(postamar): bump version to LatestIndexDescriptorVersion in 22.2 // This is not possible until then because of a limitation in 21.2 which // affects mixed-21.2-22.1-version clusters (issue #78426). @@ -433,7 +434,7 @@ func (p *planner) AlterPrimaryKey( return true, nil } - return !idx.IsUnique() || idx.GetType() == descpb.IndexDescriptor_INVERTED, nil + return !idx.IsUnique() || idx.GetType() == idxtype.INVERTED, nil } var indexesToRewrite []catalog.Index for _, idx := range tableDesc.PublicNonPrimaryIndexes() { @@ -809,7 +810,7 @@ func setKeySuffixAndStoredColumnIDsFromPrimary( // Second, determine the key suffix columns: add all primary key columns // which have not already been in the key columns in the secondary index. toAdd.KeySuffixColumnIDs = nil - invIdx := toAdd.Type == descpb.IndexDescriptor_INVERTED + invIdx := toAdd.Type == idxtype.INVERTED for _, colID := range primary.KeyColumnIDs { if !idxColIDs.Contains(colID) { toAdd.KeySuffixColumnIDs = append(toAdd.KeySuffixColumnIDs, colID) diff --git a/pkg/sql/backfill.go b/pkg/sql/backfill.go index d31b27dc600a..eae47f70fd13 100644 --- a/pkg/sql/backfill.go +++ b/pkg/sql/backfill.go @@ -39,6 +39,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scexec" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" @@ -1466,9 +1467,9 @@ func (sc *SchemaChanger) validateIndexes(ctx context.Context) error { continue } switch idx.GetType() { - case descpb.IndexDescriptor_FORWARD: + case idxtype.FORWARD: forwardIndexes = append(forwardIndexes, idx) - case descpb.IndexDescriptor_INVERTED: + case idxtype.INVERTED: invertedIndexes = append(invertedIndexes, idx) } } diff --git a/pkg/sql/backfill/BUILD.bazel b/pkg/sql/backfill/BUILD.bazel index ca6955fa06c6..4de03dd1624b 100644 --- a/pkg/sql/backfill/BUILD.bazel +++ b/pkg/sql/backfill/BUILD.bazel @@ -33,6 +33,7 @@ go_library( "//pkg/sql/rowinfra", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/transform", "//pkg/sql/sem/tree", "//pkg/sql/sqlerrors", diff --git a/pkg/sql/backfill/backfill.go b/pkg/sql/backfill/backfill.go index f0fa56a05a13..6172001376c5 100644 --- a/pkg/sql/backfill/backfill.go +++ b/pkg/sql/backfill/backfill.go @@ -29,6 +29,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/rowinfra" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/transform" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" @@ -486,7 +487,7 @@ type IndexBackfiller struct { // ContainsInvertedIndex returns true if backfilling an inverted index. func (ib *IndexBackfiller) ContainsInvertedIndex() bool { for _, idx := range ib.added { - if idx.GetType() == descpb.IndexDescriptor_INVERTED { + if idx.GetType() == idxtype.INVERTED { return true } } diff --git a/pkg/sql/catalog/BUILD.bazel b/pkg/sql/catalog/BUILD.bazel index 100ba702ef71..023e720a54c5 100644 --- a/pkg/sql/catalog/BUILD.bazel +++ b/pkg/sql/catalog/BUILD.bazel @@ -40,6 +40,7 @@ go_library( "//pkg/sql/privilege", "//pkg/sql/schemachanger/scpb", "//pkg/sql/sem/catconstants", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/semenumpb", "//pkg/sql/sem/tree", "//pkg/sql/sessiondatapb", diff --git a/pkg/sql/catalog/catformat/BUILD.bazel b/pkg/sql/catalog/catformat/BUILD.bazel index a675832a3ce7..fe10da4768ad 100644 --- a/pkg/sql/catalog/catformat/BUILD.bazel +++ b/pkg/sql/catalog/catformat/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//pkg/sql/catalog/descpb", "//pkg/sql/catalog/schemaexpr", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sessiondata", "@com_github_cockroachdb_errors//:errors", @@ -31,6 +32,7 @@ go_test( "//pkg/sql/catalog/tabledesc", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sessiondata", "//pkg/sql/types", diff --git a/pkg/sql/catalog/catformat/index.go b/pkg/sql/catalog/catformat/index.go index e81d3f602e74..b47c2d9c5d61 100644 --- a/pkg/sql/catalog/catformat/index.go +++ b/pkg/sql/catalog/catformat/index.go @@ -17,6 +17,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/schemaexpr" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/errors" @@ -101,7 +102,7 @@ func indexForDisplay( if index.Unique { f.WriteString("UNIQUE ") } - if !f.HasFlags(tree.FmtPGCatalog) && index.Type == descpb.IndexDescriptor_INVERTED { + if !f.HasFlags(tree.FmtPGCatalog) && index.Type == idxtype.INVERTED { f.WriteString("INVERTED ") } f.WriteString("INDEX ") @@ -113,7 +114,7 @@ func indexForDisplay( if f.HasFlags(tree.FmtPGCatalog) { f.WriteString(" USING") - if index.Type == descpb.IndexDescriptor_INVERTED { + if index.Type == idxtype.INVERTED { f.WriteString(" gin") } else { f.WriteString(" btree") @@ -239,7 +240,7 @@ func FormatIndexElements( } else { f.FormatNameP(&index.KeyColumnNames[i]) } - if index.Type == descpb.IndexDescriptor_INVERTED && + if index.Type == idxtype.INVERTED && col.GetID() == index.InvertedColumnID() && len(index.InvertedColumnKinds) > 0 { switch index.InvertedColumnKinds[0] { case catpb.InvertedIndexColumnKind_TRIGRAM: @@ -249,7 +250,7 @@ func FormatIndexElements( // The last column of an inverted index cannot have a DESC direction. // Since the default direction is ASC, we omit the direction entirely // for inverted index columns. - if i < n-1 || index.Type != descpb.IndexDescriptor_INVERTED { + if i < n-1 || index.Type != idxtype.INVERTED { f.WriteByte(' ') f.WriteString(index.KeyColumnDirections[i].String()) } diff --git a/pkg/sql/catalog/catformat/index_test.go b/pkg/sql/catalog/catformat/index_test.go index 91e78bcfa25d..22b67c65b5b4 100644 --- a/pkg/sql/catalog/catformat/index_test.go +++ b/pkg/sql/catalog/catformat/index_test.go @@ -16,6 +16,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -81,7 +82,7 @@ func TestIndexForDisplay(t *testing.T) { // JSONB INVERTED INDEX baz (a) jsonbInvertedIndex := baseIndex - jsonbInvertedIndex.Type = descpb.IndexDescriptor_INVERTED + jsonbInvertedIndex.Type = idxtype.INVERTED jsonbInvertedIndex.KeyColumnNames = []string{"a"} jsonbInvertedIndex.KeyColumnIDs = descpb.ColumnIDs{1} diff --git a/pkg/sql/catalog/descpb/BUILD.bazel b/pkg/sql/catalog/descpb/BUILD.bazel index 0ff4092f54d7..b920732ade1c 100644 --- a/pkg/sql/catalog/descpb/BUILD.bazel +++ b/pkg/sql/catalog/descpb/BUILD.bazel @@ -26,6 +26,7 @@ go_library( "//pkg/sql/protoreflect", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/util/errorutil/unimplemented", @@ -60,6 +61,7 @@ proto_library( "//pkg/sql/catalog/catenumpb:catenumpb_proto", "//pkg/sql/catalog/catpb:catpb_proto", "//pkg/sql/schemachanger/scpb:scpb_proto", + "//pkg/sql/sem/idxtype:idxtype_proto", "//pkg/sql/sem/semenumpb:semenumpb_proto", "//pkg/sql/types:types_proto", "//pkg/util/hlc:hlc_proto", @@ -80,6 +82,7 @@ go_proto_library( "//pkg/sql/catalog/catenumpb", "//pkg/sql/catalog/catpb", "//pkg/sql/schemachanger/scpb", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/semenumpb", "//pkg/sql/types", "//pkg/util/hlc", diff --git a/pkg/sql/catalog/descpb/index.go b/pkg/sql/catalog/descpb/index.go index 43cfcb5a9fd6..49c01f8f21ed 100644 --- a/pkg/sql/catalog/descpb/index.go +++ b/pkg/sql/catalog/descpb/index.go @@ -9,6 +9,7 @@ import ( "fmt" "github.com/cockroachdb/cockroach/pkg/sql/catalog/catenumpb" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/errors" @@ -99,7 +100,7 @@ func (desc *IndexDescriptor) GetName() string { // index. This is always the last column in ColumnIDs. Panics if the index is // not inverted. func (desc *IndexDescriptor) InvertedColumnID() ColumnID { - if desc.Type != IndexDescriptor_INVERTED { + if desc.Type != idxtype.INVERTED { panic(errors.AssertionFailedf("index is not inverted")) } return desc.KeyColumnIDs[len(desc.KeyColumnIDs)-1] @@ -109,7 +110,7 @@ func (desc *IndexDescriptor) InvertedColumnID() ColumnID { // index. This is always the last column in KeyColumnNames. Panics if the index is // not inverted. func (desc *IndexDescriptor) InvertedColumnName() string { - if desc.Type != IndexDescriptor_INVERTED { + if desc.Type != idxtype.INVERTED { panic(errors.AssertionFailedf("index is not inverted")) } return desc.KeyColumnNames[len(desc.KeyColumnNames)-1] @@ -120,7 +121,7 @@ func (desc *IndexDescriptor) InvertedColumnName() string { // // Panics if the index is not inverted. func (desc *IndexDescriptor) InvertedColumnKeyType() *types.T { - if desc.Type != IndexDescriptor_INVERTED { + if desc.Type != idxtype.INVERTED { panic(errors.AssertionFailedf("index is not inverted")) } return types.EncodedKey diff --git a/pkg/sql/catalog/descpb/structured.proto b/pkg/sql/catalog/descpb/structured.proto index 2e0a5b53c3cf..1414bfd55e03 100644 --- a/pkg/sql/catalog/descpb/structured.proto +++ b/pkg/sql/catalog/descpb/structured.proto @@ -13,6 +13,7 @@ import "util/hlc/timestamp.proto"; import "sql/catalog/catenumpb/index.proto"; import "sql/catalog/catpb/catalog.proto"; import "sql/catalog/catpb/enum.proto"; +import "sql/sem/idxtype/idxtype.proto"; import "sql/sem/semenumpb/constraint.proto"; import "sql/sem/semenumpb/trigger.proto"; import "sql/catalog/catpb/privilege.proto"; @@ -322,12 +323,6 @@ message InterleaveDescriptor { message IndexDescriptor { option (gogoproto.equal) = true; - // The type of the index. - enum Type { - FORWARD = 0; - INVERTED = 1; - } - optional string name = 1 [(gogoproto.nullable) = false]; optional uint32 id = 2 [(gogoproto.nullable) = false, (gogoproto.customname) = "ID", (gogoproto.casttype) = "IndexID"]; @@ -421,8 +416,8 @@ message IndexDescriptor { // is partitioned into spans of keys each addressable by zone configs. optional cockroach.sql.catalog.catpb.PartitioningDescriptor partitioning = 15 [(gogoproto.nullable) = false]; - // Type is the type of index, inverted or forward. - optional Type type = 16 [(gogoproto.nullable)=false]; + // Type is the type of index, forward, inverted, vector, etc. + optional cockroach.sql.sem.idxtype.T type = 16 [(gogoproto.nullable)=false]; // CreatedExplicitly specifies whether this index was created explicitly // (i.e. via 'CREATE INDEX' statement). diff --git a/pkg/sql/catalog/systemschema/BUILD.bazel b/pkg/sql/catalog/systemschema/BUILD.bazel index 719196afc07b..3511cffc0991 100644 --- a/pkg/sql/catalog/systemschema/BUILD.bazel +++ b/pkg/sql/catalog/systemschema/BUILD.bazel @@ -18,6 +18,7 @@ go_library( "//pkg/sql/catalog/tabledesc", "//pkg/sql/privilege", "//pkg/sql/sem/catconstants", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/util/log", diff --git a/pkg/sql/catalog/systemschema/system.go b/pkg/sql/catalog/systemschema/system.go index c2ff278c62f5..960045ac4ce0 100644 --- a/pkg/sql/catalog/systemschema/system.go +++ b/pkg/sql/catalog/systemschema/system.go @@ -23,6 +23,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc" "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/log" @@ -3168,7 +3169,7 @@ var ( KeyColumnIDs: []descpb.ColumnID{13}, KeySuffixColumnIDs: []descpb.ColumnID{11, 1, 2, 3, 4, 5, 6}, Version: descpb.StrictIndexColumnIDGuaranteesVersion, - Type: descpb.IndexDescriptor_INVERTED, + Type: idxtype.INVERTED, InvertedColumnKinds: []catpb.InvertedIndexColumnKind{catpb.InvertedIndexColumnKind_DEFAULT}, }, descpb.IndexDescriptor{ @@ -5189,7 +5190,7 @@ var ( }, descpb.IndexDescriptor{ Name: "db_name_gin", - Type: descpb.IndexDescriptor_INVERTED, + Type: idxtype.INVERTED, ID: 8, Unique: false, Version: descpb.StrictIndexColumnIDGuaranteesVersion, @@ -5201,7 +5202,7 @@ var ( }, descpb.IndexDescriptor{ Name: "table_name_gin", - Type: descpb.IndexDescriptor_INVERTED, + Type: idxtype.INVERTED, ID: 9, Unique: false, Version: descpb.StrictIndexColumnIDGuaranteesVersion, @@ -5213,7 +5214,7 @@ var ( }, descpb.IndexDescriptor{ Name: "schema_name_gin", - Type: descpb.IndexDescriptor_INVERTED, + Type: idxtype.INVERTED, ID: 10, Unique: false, Version: descpb.StrictIndexColumnIDGuaranteesVersion, @@ -5225,7 +5226,7 @@ var ( }, descpb.IndexDescriptor{ Name: "store_ids_gin", - Type: descpb.IndexDescriptor_INVERTED, + Type: idxtype.INVERTED, ID: 11, Unique: false, Version: descpb.StrictIndexColumnIDGuaranteesVersion, diff --git a/pkg/sql/catalog/table_elements.go b/pkg/sql/catalog/table_elements.go index f445cb683d2c..b0fcd25f73e9 100644 --- a/pkg/sql/catalog/table_elements.go +++ b/pkg/sql/catalog/table_elements.go @@ -17,6 +17,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/semenumpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -171,7 +172,7 @@ type Index interface { IsCreatedExplicitly() bool GetInvisibility() float64 GetPredicate() string - GetType() descpb.IndexDescriptor_Type + GetType() idxtype.T GetGeoConfig() geopb.Config GetVersion() descpb.IndexDescriptorVersion GetEncodingType() catenumpb.IndexDescriptorEncodingType diff --git a/pkg/sql/catalog/tabledesc/BUILD.bazel b/pkg/sql/catalog/tabledesc/BUILD.bazel index 29415885c6e7..3e09efc8f559 100644 --- a/pkg/sql/catalog/tabledesc/BUILD.bazel +++ b/pkg/sql/catalog/tabledesc/BUILD.bazel @@ -53,6 +53,7 @@ go_library( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/semenumpb", "//pkg/sql/sem/tree", "//pkg/sql/sem/volatility", @@ -118,6 +119,7 @@ go_test( "//pkg/sql/schemachanger/scpb", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/semenumpb", "//pkg/sql/types", "//pkg/testutils", diff --git a/pkg/sql/catalog/tabledesc/column.go b/pkg/sql/catalog/tabledesc/column.go index bc2f645cd3ed..e29e9e2a07e0 100644 --- a/pkg/sql/catalog/tabledesc/column.go +++ b/pkg/sql/catalog/tabledesc/column.go @@ -16,6 +16,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/fetchpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/schemaexpr" "github.com/cockroachdb/cockroach/pkg/sql/parser" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/protoutil" @@ -436,7 +437,7 @@ func makeIndexColumnCache(idx *descpb.IndexDescriptor, all []catalog.Column) (ic // code needs to tolerate any descriptor state (like having no key columns, or // having uninitialized column IDs). var invertedColumnID descpb.ColumnID - if nKey > 0 && idx.Type == descpb.IndexDescriptor_INVERTED { + if nKey > 0 && idx.Type == idxtype.INVERTED { invertedColumnID = idx.InvertedColumnID() } var compositeIDs catalog.TableColSet diff --git a/pkg/sql/catalog/tabledesc/index.go b/pkg/sql/catalog/tabledesc/index.go index ce44ea649c4d..f7b7c0f82944 100644 --- a/pkg/sql/catalog/tabledesc/index.go +++ b/pkg/sql/catalog/tabledesc/index.go @@ -15,6 +15,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/catenumpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/catpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/iterutil" "github.com/cockroachdb/cockroach/pkg/util/protoutil" @@ -126,7 +127,7 @@ func (w index) GetPredicate() string { } // GetType returns the type of index, inverted or forward. -func (w index) GetType() descpb.IndexDescriptor_Type { +func (w index) GetType() idxtype.T { return w.desc.Type } @@ -211,7 +212,7 @@ func (w index) InvertedColumnKeyType() *types.T { // // Panics if the index is not inverted. func (w index) InvertedColumnKind() catpb.InvertedIndexColumnKind { - if w.desc.Type != descpb.IndexDescriptor_INVERTED { + if w.desc.Type != idxtype.INVERTED { panic(errors.AssertionFailedf("index is not inverted")) } if len(w.desc.InvertedColumnKinds) == 0 { diff --git a/pkg/sql/catalog/tabledesc/index_test.go b/pkg/sql/catalog/tabledesc/index_test.go index 3ec271ec3228..1dd2059142c2 100644 --- a/pkg/sql/catalog/tabledesc/index_test.go +++ b/pkg/sql/catalog/tabledesc/index_test.go @@ -27,6 +27,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" "github.com/cockroachdb/cockroach/pkg/sql/catalog/internal/validate" "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -271,7 +272,7 @@ func TestIndexInterface(t *testing.T) { errMsgFmt, "GetPredicate", idx.GetName()) require.Equal(t, idx == s5 || idx == pk, idx.IsUnique(), errMsgFmt, "IsUnique", idx.GetName()) - require.Equal(t, idx == s2 || idx == s6, idx.GetType() == descpb.IndexDescriptor_INVERTED, + require.Equal(t, idx == s2 || idx == s6, idx.GetType() == idxtype.INVERTED, errMsgFmt, "GetType", idx.GetName()) require.Equal(t, idx == s4, idx.IsSharded(), errMsgFmt, "IsSharded", idx.GetName()) diff --git a/pkg/sql/catalog/tabledesc/structured.go b/pkg/sql/catalog/tabledesc/structured.go index fc61e24d4571..5b2d46c7f2d8 100644 --- a/pkg/sql/catalog/tabledesc/structured.go +++ b/pkg/sql/catalog/tabledesc/structured.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/rowenc" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -790,7 +791,7 @@ func (desc *Mutable) allocateIndexIDs(columnNames map[string]descpb.ColumnID) er // index encoding. It is the set difference of the primary key minus the // non-inverted columns in the index's key. colIDs := idx.CollectKeyColumnIDs() - isInverted := idx.GetType() == descpb.IndexDescriptor_INVERTED + isInverted := idx.GetType() == idxtype.INVERTED invID := catid.ColumnID(0) if isInverted { invID = idx.InvertedColumnID() @@ -1186,7 +1187,7 @@ func (desc *Mutable) AddFamily(fam descpb.ColumnFamilyDescriptor) { // AddPrimaryIndex adds a primary index to a mutable table descriptor, assuming // that none has yet been set, and performs some sanity checks. func (desc *Mutable) AddPrimaryIndex(idx descpb.IndexDescriptor) error { - if idx.Type == descpb.IndexDescriptor_INVERTED { + if idx.Type == idxtype.INVERTED { return fmt.Errorf("primary index cannot be inverted") } if err := checkColumnsValidForIndex(desc, idx.KeyColumnNames); err != nil { @@ -1226,7 +1227,7 @@ func (desc *Mutable) AddPrimaryIndex(idx descpb.IndexDescriptor) error { // AddSecondaryIndex adds a secondary index to a mutable table descriptor. func (desc *Mutable) AddSecondaryIndex(idx descpb.IndexDescriptor) error { - if idx.Type == descpb.IndexDescriptor_FORWARD { + if idx.Type == idxtype.FORWARD { if err := checkColumnsValidForIndex(desc, idx.KeyColumnNames); err != nil { return err } @@ -2084,11 +2085,11 @@ func (desc *Mutable) AddIndexMutation( func (desc *Mutable) checkValidIndex(idx *descpb.IndexDescriptor) error { switch idx.Type { - case descpb.IndexDescriptor_FORWARD: + case idxtype.FORWARD: if err := checkColumnsValidForIndex(desc, idx.KeyColumnNames); err != nil { return err } - case descpb.IndexDescriptor_INVERTED: + case idxtype.INVERTED: if err := checkColumnsValidForInvertedIndex( desc, idx.KeyColumnNames, idx.KeyColumnDirections, ); err != nil { diff --git a/pkg/sql/catalog/tabledesc/table_desc_builder.go b/pkg/sql/catalog/tabledesc/table_desc_builder.go index 0bfbf7b80273..e55c3b894141 100644 --- a/pkg/sql/catalog/tabledesc/table_desc_builder.go +++ b/pkg/sql/catalog/tabledesc/table_desc_builder.go @@ -22,6 +22,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/util/hlc" "github.com/cockroachdb/cockroach/pkg/util/intsets" @@ -842,7 +843,7 @@ func maybeUpgradePrimaryIndexFormatVersion(builder *tableDescriptorBuilder) (has func maybeUpgradeSecondaryIndexFormatVersion(idx *descpb.IndexDescriptor) (hasChanged bool) { switch idx.Version { case descpb.SecondaryIndexFamilyFormatVersion: - if idx.Type == descpb.IndexDescriptor_INVERTED { + if idx.Type == idxtype.INVERTED { return false } case descpb.EmptyArraysInInvertedIndexesVersion: diff --git a/pkg/sql/colenc/BUILD.bazel b/pkg/sql/colenc/BUILD.bazel index 0660312e1593..0ef565fb1a00 100644 --- a/pkg/sql/colenc/BUILD.bazel +++ b/pkg/sql/colenc/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//pkg/sql/rowenc/valueside", "//pkg/sql/rowinfra", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sqlerrors", "//pkg/sql/types", diff --git a/pkg/sql/colenc/encode.go b/pkg/sql/colenc/encode.go index 318d12fe27f4..92f71a5552ce 100644 --- a/pkg/sql/colenc/encode.go +++ b/pkg/sql/colenc/encode.go @@ -23,6 +23,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/rowenc/valueside" "github.com/cockroachdb/cockroach/pkg/sql/rowinfra" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -427,7 +428,7 @@ func (b *BatchEncoder) encodeSecondaryIndex(ctx context.Context, ind catalog.Ind // Store nulls we encounter so we can properly make the key unique below. var nulls coldata.Nulls - if ind.GetType() == descpb.IndexDescriptor_INVERTED { + if ind.GetType() == idxtype.INVERTED { // Since the inverted indexes generate multiple keys per row just handle them // separately. return b.encodeInvertedSecondaryIndex(ctx, ind, kys, b.extraKeys) diff --git a/pkg/sql/crdb_internal.go b/pkg/sql/crdb_internal.go index a2b7892e4450..12d56a555c7b 100644 --- a/pkg/sql/crdb_internal.go +++ b/pkg/sql/crdb_internal.go @@ -77,6 +77,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/cockroach/pkg/sql/sqlliveness" @@ -4276,7 +4277,7 @@ CREATE TABLE crdb_internal.table_indexes ( tree.NewDString(idx.GetName()), idxType, tree.MakeDBool(tree.DBool(idx.IsUnique())), - tree.MakeDBool(idx.GetType() == descpb.IndexDescriptor_INVERTED), + tree.MakeDBool(idx.GetType() == idxtype.INVERTED), tree.MakeDBool(tree.DBool(idx.IsSharded())), tree.MakeDBool(idxInvisibility == 0.0), tree.NewDFloat(tree.DFloat(1-idxInvisibility)), diff --git a/pkg/sql/create_index.go b/pkg/sql/create_index.go index 2742f751ef13..567240a260f0 100644 --- a/pkg/sql/create_index.go +++ b/pkg/sql/create_index.go @@ -25,6 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgnotice" "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry" "github.com/cockroachdb/cockroach/pkg/sql/storageparam" @@ -222,7 +223,7 @@ func makeIndexDescriptor( return nil, pgerror.New(pgcode.InvalidSQLStatementName, "inverted indexes can't be unique") } - indexDesc.Type = descpb.IndexDescriptor_INVERTED + indexDesc.Type = idxtype.INVERTED invCol := columns[len(columns)-1] column, err := catalog.MustFindColumnByTreeName(tableDesc, invCol.Column) if err != nil { @@ -286,7 +287,7 @@ func makeIndexDescriptor( } // Increment telemetry once a descriptor has been successfully created. - if indexDesc.Type == descpb.IndexDescriptor_INVERTED { + if indexDesc.Type == idxtype.INVERTED { telemetry.Inc(sqltelemetry.InvertedIndexCounter) if indexDesc.GeoConfig.IsGeometry() { telemetry.Inc(sqltelemetry.GeometryInvertedIndexCounter) @@ -785,7 +786,7 @@ func (n *createIndexNode) startExec(params runParams) error { return err } - if indexDesc.Type == descpb.IndexDescriptor_INVERTED && indexDesc.Partitioning.NumColumns != 0 { + if indexDesc.Type == idxtype.INVERTED && indexDesc.Partitioning.NumColumns != 0 { telemetry.Inc(sqltelemetry.PartitionedInvertedIndexCounter) } diff --git a/pkg/sql/create_stats.go b/pkg/sql/create_stats.go index 28c1780f147f..1ae24fd1be49 100644 --- a/pkg/sql/create_stats.go +++ b/pkg/sql/create_stats.go @@ -25,6 +25,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqltelemetry" "github.com/cockroachdb/cockroach/pkg/sql/stats" @@ -491,7 +492,7 @@ func createStatsDefaultColumns( // implicitly partitioned indexes. if partialStats { for _, idx := range desc.ActiveIndexes() { - if idx.GetType() != descpb.IndexDescriptor_FORWARD || + if idx.GetType() != idxtype.FORWARD || idx.IsPartial() || idx.IsSharded() || idx.ImplicitPartitioningColumnCount() > 0 { @@ -561,7 +562,7 @@ func createStatsDefaultColumns( for _, idx := range desc.PublicNonPrimaryIndexes() { for j, n := 0, idx.NumKeyColumns(); j < n; j++ { colID := idx.GetKeyColumnID(j) - isInverted := idx.GetType() == descpb.IndexDescriptor_INVERTED && colID == idx.InvertedColumnID() + isInverted := idx.GetType() == idxtype.INVERTED && colID == idx.InvertedColumnID() // Generate stats for each indexed column. if err := addIndexColumnStatsIfNotExists(colID, isInverted); err != nil { diff --git a/pkg/sql/create_table.go b/pkg/sql/create_table.go index 95dcc9220f05..7b064cace1a8 100644 --- a/pkg/sql/create_table.go +++ b/pkg/sql/create_table.go @@ -46,6 +46,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treebin" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treecmp" @@ -1928,7 +1929,7 @@ func NewTableDesc( Invisibility: d.Invisibility.Value, } if d.Type == tree.IndexTypeInverted { - idx.Type = descpb.IndexDescriptor_INVERTED + idx.Type = idxtype.INVERTED } columns := d.Columns if d.Sharded != nil { @@ -2371,7 +2372,7 @@ func NewTableDesc( if idx.IsSharded() { telemetry.Inc(sqltelemetry.HashShardedIndexCounter) } - if idx.GetType() == descpb.IndexDescriptor_INVERTED { + if idx.GetType() == idxtype.INVERTED { telemetry.Inc(sqltelemetry.InvertedIndexCounter) geoConfig := idx.GetGeoConfig() if !geoConfig.IsEmpty() { @@ -2770,18 +2771,9 @@ func replaceLikeTableOpts(n *tree.CreateTable, params runParams) (tree.TableDefs // we'll just generate a new one. continue } - var indexType tree.IndexType - switch idx.GetType() { - case descpb.IndexDescriptor_FORWARD: - indexType = tree.IndexTypeForward - case descpb.IndexDescriptor_INVERTED: - indexType = tree.IndexTypeInverted - default: - return nil, errors.AssertionFailedf("unknown index descriptor type %v", idx.GetType()) - } indexDef := tree.IndexTableDef{ Name: tree.Name(idx.GetName()), - Type: indexType, + Type: idx.GetType(), Storing: make(tree.NameList, 0, idx.NumSecondaryStoredColumns()), Columns: make(tree.IndexElemList, 0, idx.NumKeyColumns()), Invisibility: tree.IndexInvisibility{Value: idx.GetInvisibility()}, diff --git a/pkg/sql/distsql_plan_stats.go b/pkg/sql/distsql_plan_stats.go index c0f3cb824565..dec4cb0032a0 100644 --- a/pkg/sql/distsql_plan_stats.go +++ b/pkg/sql/distsql_plan_stats.go @@ -26,6 +26,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/parser" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/span" "github.com/cockroachdb/cockroach/pkg/sql/stats" @@ -440,7 +441,7 @@ func (dsp *DistSQLPlanner) createPartialStatsPlan( // (i.e., with different configurations). See #50655. if len(reqStat.columns) == 1 { for _, index := range desc.PublicNonPrimaryIndexes() { - if index.GetType() == descpb.IndexDescriptor_INVERTED && index.InvertedColumnID() == column.GetID() { + if index.GetType() == idxtype.INVERTED && index.InvertedColumnID() == column.GetID() { spec.Index = index.IndexDesc() break } @@ -680,7 +681,7 @@ func (dsp *DistSQLPlanner) createStatsPlan( if len(s.columns) == 1 { col := s.columns[0] for _, index := range desc.PublicNonPrimaryIndexes() { - if index.GetType() == descpb.IndexDescriptor_INVERTED && index.InvertedColumnID() == col { + if index.GetType() == idxtype.INVERTED && index.InvertedColumnID() == col { spec.Index = index.IndexDesc() break } diff --git a/pkg/sql/indexbackfiller_test.go b/pkg/sql/indexbackfiller_test.go index f539949f531f..b523fc5611e4 100644 --- a/pkg/sql/indexbackfiller_test.go +++ b/pkg/sql/indexbackfiller_test.go @@ -33,6 +33,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/row" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" "github.com/cockroachdb/cockroach/pkg/sql/rowinfra" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" @@ -255,7 +256,7 @@ INSERT INTO foo VALUES (1, 2), (2, 3), (3, 4); KeySuffixColumnIDs: []descpb.ColumnID{ mut.Columns[0].ID, }, - Type: descpb.IndexDescriptor_FORWARD, + Type: idxtype.FORWARD, EncodingType: catenumpb.SecondaryIndexEncoding, } mut.NextIndexID++ @@ -339,7 +340,7 @@ INSERT INTO foo VALUES (1), (10), (100); columnWithDefault.ID, computedColumnNotInPrimaryIndex.ID, }, - Type: descpb.IndexDescriptor_FORWARD, + Type: idxtype.FORWARD, EncodingType: catenumpb.PrimaryIndexEncoding, } mut.NextIndexID++ diff --git a/pkg/sql/opt_catalog.go b/pkg/sql/opt_catalog.go index 93c528a888b9..e98707ac678b 100644 --- a/pkg/sql/opt_catalog.go +++ b/pkg/sql/opt_catalog.go @@ -34,6 +34,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treecmp" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" @@ -853,7 +854,7 @@ func newOptTable( // Add one for each inverted index column. secondaryIndexes := ot.desc.DeletableNonPrimaryIndexes() for _, index := range secondaryIndexes { - if index.GetType() == descpb.IndexDescriptor_INVERTED { + if index.GetType() == idxtype.INVERTED { numCols++ } } @@ -1002,7 +1003,7 @@ func newOptTable( } } } - if idx.GetType() == descpb.IndexDescriptor_INVERTED { + if idx.GetType() == idxtype.INVERTED { // The inverted column of an inverted index is special: in the // descriptors, it looks as if the table column is part of the // index; in fact the key contains values *derived* from that @@ -1674,7 +1675,7 @@ func (oi *optIndex) IsUnique() bool { // IsInverted is part of the cat.Index interface. func (oi *optIndex) IsInverted() bool { - return oi.idx.GetType() == descpb.IndexDescriptor_INVERTED + return oi.idx.GetType() == idxtype.INVERTED } // IsVector is part of the cat.Index interface. diff --git a/pkg/sql/pg_catalog.go b/pkg/sql/pg_catalog.go index 209439f238a4..31dccbe4cef8 100644 --- a/pkg/sql/pg_catalog.go +++ b/pkg/sql/pg_catalog.go @@ -41,6 +41,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/sem/cast" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/semenumpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree/treecmp" @@ -816,7 +817,7 @@ https://www.postgresql.org/docs/9.5/catalog-pg-class.html`, // Indexes. return catalog.ForEachIndex(table, catalog.IndexOpts{}, func(index catalog.Index) error { indexType := forwardIndexOid - if index.GetType() == descpb.IndexDescriptor_INVERTED { + if index.GetType() == idxtype.INVERTED { indexType = invertedIndexOid } ownerOid, err := getOwnerOID(ctx, p, table) diff --git a/pkg/sql/randgen/BUILD.bazel b/pkg/sql/randgen/BUILD.bazel index fbf3afb9198e..2751084b3049 100644 --- a/pkg/sql/randgen/BUILD.bazel +++ b/pkg/sql/randgen/BUILD.bazel @@ -31,6 +31,7 @@ go_library( "//pkg/sql/rowenc/valueside", "//pkg/sql/sem/cast", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sem/tree/treebin", "//pkg/sql/sem/tree/treecmp", diff --git a/pkg/sql/randgen/schema.go b/pkg/sql/randgen/schema.go index 7918528976b3..baf7b28f2e05 100644 --- a/pkg/sql/randgen/schema.go +++ b/pkg/sql/randgen/schema.go @@ -22,6 +22,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/parser" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util" @@ -616,13 +617,13 @@ func randIndexTableDefFromCols( // The last index column can be inverted-indexable, which makes the // index an inverted index. if colinfo.ColumnTypeIsOnlyInvertedIndexable(semType) { - def.Type = tree.IndexTypeInverted + def.Type = idxtype.INVERTED stopPrefix = true } else if isLastCol && !stopPrefix && invertedIndexable { // With 1/4 probability, choose to use an inverted index for a column type // that is both inverted indexable and forward indexable. if rng.Intn(4) == 0 { - def.Type = tree.IndexTypeInverted + def.Type = idxtype.INVERTED stopPrefix = true if semType.Family() == types.StringFamily { elem.OpClass = "gin_trgm_ops" @@ -631,7 +632,7 @@ func randIndexTableDefFromCols( } // Last column for inverted indexes must always be ascending. - if i == nCols-1 && def.Type == tree.IndexTypeInverted { + if i == nCols-1 && def.Type == idxtype.INVERTED { elem.Direction = tree.Ascending } @@ -644,7 +645,7 @@ func randIndexTableDefFromCols( // An inverted index column cannot be DESC, so use either the default // direction or ASC. - if def.Type == tree.IndexTypeInverted { + if def.Type == idxtype.INVERTED { dir := tree.Direction(rng.Intn(int(tree.Ascending) + 1)) def.Columns[len(def.Columns)-1].Direction = dir } diff --git a/pkg/sql/row/BUILD.bazel b/pkg/sql/row/BUILD.bazel index d8d0faf01649..62f3d47e5c25 100644 --- a/pkg/sql/row/BUILD.bazel +++ b/pkg/sql/row/BUILD.bazel @@ -62,6 +62,7 @@ go_library( "//pkg/sql/scrub", "//pkg/sql/sem/builtins/builtinconstants", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/transform", "//pkg/sql/sem/tree", "//pkg/sql/sem/volatility", diff --git a/pkg/sql/row/helper.go b/pkg/sql/row/helper.go index bbc4062627b4..cc4592097fd5 100644 --- a/pkg/sql/row/helper.go +++ b/pkg/sql/row/helper.go @@ -27,6 +27,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/rowenc/rowencpb" "github.com/cockroachdb/cockroach/pkg/sql/rowenc/valueside" "github.com/cockroachdb/cockroach/pkg/sql/rowinfra" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/util/encoding" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -240,7 +241,7 @@ func (rh *RowHelper) encodeTombstonesForIndex( if !index.IsUnique() { return nil, errors.AssertionFailedf("Expected index %s to be unique", index.GetName()) } - if index.GetType() != descpb.IndexDescriptor_FORWARD { + if index.GetType() != idxtype.FORWARD { return nil, errors.AssertionFailedf("Expected index %s to be a forward index", index.GetName()) } diff --git a/pkg/sql/row/updater.go b/pkg/sql/row/updater.go index 7eed190609a1..518432dc22b2 100644 --- a/pkg/sql/row/updater.go +++ b/pkg/sql/row/updater.go @@ -18,6 +18,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" "github.com/cockroachdb/cockroach/pkg/sql/rowinfra" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/util/intsets" "github.com/cockroachdb/cockroach/pkg/util/log" @@ -310,7 +311,7 @@ func (ru *Updater) UpdateRow( return nil, err } } - if ru.Helper.Indexes[i].GetType() == descpb.IndexDescriptor_INVERTED && !ru.Helper.Indexes[i].IsTemporaryIndexForBackfill() { + if ru.Helper.Indexes[i].GetType() == idxtype.INVERTED && !ru.Helper.Indexes[i].IsTemporaryIndexForBackfill() { // Deduplicate the keys we're adding and removing if we're updating an // inverted index. For example, imagine a table with an inverted index on j: // @@ -379,7 +380,7 @@ func (ru *Updater) UpdateRow( // in the new and old values. var writtenIndexes intsets.Fast for i, index := range ru.Helper.Indexes { - if index.GetType() == descpb.IndexDescriptor_FORWARD { + if index.GetType() == idxtype.FORWARD { oldIdx, newIdx := 0, 0 oldEntries, newEntries := ru.oldIndexEntries[i], ru.newIndexEntries[i] // The index entries for a particular index are stored in diff --git a/pkg/sql/rowenc/BUILD.bazel b/pkg/sql/rowenc/BUILD.bazel index ecf48682638f..ca362dbba5d4 100644 --- a/pkg/sql/rowenc/BUILD.bazel +++ b/pkg/sql/rowenc/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//pkg/sql/rowenc/rowencpb", "//pkg/sql/rowenc/valueside", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/sqlerrors", "//pkg/sql/types", @@ -79,6 +80,7 @@ go_test( "//pkg/sql/randgen", "//pkg/sql/rowenc/valueside", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/testutils/datapathutils", diff --git a/pkg/sql/rowenc/index_encoding.go b/pkg/sql/rowenc/index_encoding.go index 1e1a92c41259..347cbefd633a 100644 --- a/pkg/sql/rowenc/index_encoding.go +++ b/pkg/sql/rowenc/index_encoding.go @@ -26,6 +26,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/rowenc/rowencpb" "github.com/cockroachdb/cockroach/pkg/sql/rowenc/valueside" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" "github.com/cockroachdb/cockroach/pkg/sql/types" @@ -1299,7 +1300,7 @@ func EncodeSecondaryIndexKey( var containsNull = false var secondaryKeys [][]byte var err error - if secondaryIndex.GetType() == descpb.IndexDescriptor_INVERTED { + if secondaryIndex.GetType() == idxtype.INVERTED { secondaryKeys, err = EncodeInvertedIndexKeys(ctx, secondaryIndex, colMap, values, secondaryIndexKeyPrefix) } else { var secondaryIndexKey []byte @@ -1360,7 +1361,7 @@ func EncodeSecondaryIndex( } if tableDesc.NumFamilies() == 1 || - secondaryIndex.GetType() == descpb.IndexDescriptor_INVERTED || + secondaryIndex.GetType() == idxtype.INVERTED || secondaryIndex.GetVersion() == descpb.BaseIndexFormatVersion { // We do all computation that affects indexes with families in a separate code path to avoid performance // regression for tables without column families. @@ -1560,7 +1561,7 @@ func GetValueColumns(index catalog.Index) []ValueEncodedColumn { id := index.GetCompositeColumnID(i) // Inverted indexes on a composite type (i.e. an array of composite types) // should not add the indexed column to the value. - if index.GetType() == descpb.IndexDescriptor_INVERTED && id == index.InvertedColumnID() { + if index.GetType() == idxtype.INVERTED && id == index.InvertedColumnID() { continue } cols = append(cols, ValueEncodedColumn{ColID: id, IsComposite: true}) diff --git a/pkg/sql/rowenc/index_encoding_test.go b/pkg/sql/rowenc/index_encoding_test.go index c29863978865..9b7049108a04 100644 --- a/pkg/sql/rowenc/index_encoding_test.go +++ b/pkg/sql/rowenc/index_encoding_test.go @@ -26,6 +26,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/randgen" . "github.com/cockroachdb/cockroach/pkg/sql/rowenc" "github.com/cockroachdb/cockroach/pkg/sql/sem/eval" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util" @@ -49,7 +50,7 @@ func makeTableDescForTest( secondaryColumnIDs := make([]descpb.ColumnID, len(test.secondaryValues)) columns := make([]descpb.ColumnDescriptor, len(test.primaryValues)+len(test.secondaryValues)) var colMap catalog.TableColMap - secondaryType := descpb.IndexDescriptor_FORWARD + secondaryType := idxtype.FORWARD for i := range columns { columns[i] = descpb.ColumnDescriptor{ ID: descpb.ColumnID(i + 1), @@ -61,10 +62,10 @@ func makeTableDescForTest( } else { columns[i].Type = test.secondaryValues[i-len(test.primaryValues)].ResolvedType() if colinfo.ColumnTypeIsInvertedIndexable(columns[i].Type) { - secondaryType = descpb.IndexDescriptor_INVERTED + secondaryType = idxtype.INVERTED } if isSecondaryIndexForward && columns[i].Type.Family() == types.JsonFamily { - secondaryType = descpb.IndexDescriptor_FORWARD + secondaryType = idxtype.FORWARD } secondaryColumnIDs[i-len(test.primaryValues)] = columns[i].ID } diff --git a/pkg/sql/rowenc/index_fetch.go b/pkg/sql/rowenc/index_fetch.go index c21a03ffae35..cac40e6a80bd 100644 --- a/pkg/sql/rowenc/index_fetch.go +++ b/pkg/sql/rowenc/index_fetch.go @@ -10,6 +10,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog" "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/catalog/fetchpb" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/util/buildutil" "github.com/cockroachdb/cockroach/pkg/util/encoding" "github.com/cockroachdb/errors" @@ -72,7 +73,7 @@ func InitIndexFetchSpec( s.KeyAndSuffixColumns = table.IndexFetchSpecKeyAndSuffixColumns(index) var invertedColumnID descpb.ColumnID - if index.GetType() == descpb.IndexDescriptor_INVERTED { + if index.GetType() == idxtype.INVERTED { invertedColumnID = index.InvertedColumnID() } diff --git a/pkg/sql/scan.go b/pkg/sql/scan.go index 33ab379dc015..8d6f444030df 100644 --- a/pkg/sql/scan.go +++ b/pkg/sql/scan.go @@ -16,6 +16,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/opt/exec" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util" @@ -230,7 +231,7 @@ func (n *scanNode) initDescSpecificCol(colCfg scanColumnsConfig, prefixCol catal // table where prefixCol is the key column. foundIndex := false for _, idx := range indexes { - if idx.GetType() != descpb.IndexDescriptor_FORWARD || idx.IsPartial() { + if idx.GetType() != idxtype.FORWARD || idx.IsPartial() { continue } columns := n.desc.IndexKeyColumns(idx) diff --git a/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/BUILD.bazel b/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/BUILD.bazel index 20dda974429a..aad80f227534 100644 --- a/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/BUILD.bazel +++ b/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/BUILD.bazel @@ -93,6 +93,7 @@ go_library( "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/transform", "//pkg/sql/sem/tree", "//pkg/sql/sem/volatility", diff --git a/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_add_column.go b/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_add_column.go index 2bb019d92f59..0b3d15b69922 100644 --- a/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_add_column.go +++ b/pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_add_column.go @@ -30,6 +30,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scerrors" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sessiondatapb" "github.com/cockroachdb/cockroach/pkg/sql/sqlerrors" @@ -680,7 +681,7 @@ func addSecondaryIndexTargetsForAddColumn( TableID: tbl.TableID, IndexID: desc.ID, IsUnique: desc.Unique, - IsInverted: desc.Type == descpb.IndexDescriptor_INVERTED, + IsInverted: desc.Type == idxtype.INVERTED, SourceIndexID: newPrimaryIdx.IndexID, IsNotVisible: desc.NotVisible, Invisibility: desc.Invisibility, diff --git a/pkg/sql/schemachanger/scdecomp/BUILD.bazel b/pkg/sql/schemachanger/scdecomp/BUILD.bazel index 3e13a4fd68a2..ccf39a423872 100644 --- a/pkg/sql/schemachanger/scdecomp/BUILD.bazel +++ b/pkg/sql/schemachanger/scdecomp/BUILD.bazel @@ -24,6 +24,7 @@ go_library( "//pkg/sql/schemachanger/scpb", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/util/iterutil", diff --git a/pkg/sql/schemachanger/scdecomp/decomp.go b/pkg/sql/schemachanger/scdecomp/decomp.go index 3c94e61c8545..e5383bf994ca 100644 --- a/pkg/sql/schemachanger/scdecomp/decomp.go +++ b/pkg/sql/schemachanger/scdecomp/decomp.go @@ -20,6 +20,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" "github.com/cockroachdb/cockroach/pkg/sql/sem/catconstants" "github.com/cockroachdb/cockroach/pkg/sql/sem/catid" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/util/iterutil" "github.com/cockroachdb/cockroach/pkg/util/protoutil" @@ -632,7 +633,7 @@ func (w *walkCtx) walkIndex(tbl catalog.TableDescriptor, idx catalog.Index) { TableID: tbl.GetID(), IndexID: idx.GetID(), IsUnique: idx.IsUnique(), - IsInverted: idx.GetType() == descpb.IndexDescriptor_INVERTED, + IsInverted: idx.GetType() == idxtype.INVERTED, IsCreatedExplicitly: idx.IsCreatedExplicitly(), ConstraintID: idx.GetConstraintID(), IsNotVisible: idx.GetInvisibility() != 0.0, diff --git a/pkg/sql/schemachanger/scexec/BUILD.bazel b/pkg/sql/schemachanger/scexec/BUILD.bazel index 9258648b7aee..514a99f00b70 100644 --- a/pkg/sql/schemachanger/scexec/BUILD.bazel +++ b/pkg/sql/schemachanger/scexec/BUILD.bazel @@ -38,6 +38,7 @@ go_library( "//pkg/sql/schemachanger/scpb", "//pkg/sql/schemachanger/scplan", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sessiondata", "//pkg/util/ctxgroup", "//pkg/util/hlc", @@ -107,6 +108,7 @@ go_test( "//pkg/util/timeutil", "@com_github_golang_mock//gomock", "@com_github_stretchr_testify//require", + "//pkg/sql/sem/idxtype", ], ) diff --git a/pkg/sql/schemachanger/scexec/exec_backfill_test.go b/pkg/sql/schemachanger/scexec/exec_backfill_test.go index 44ea64afa0a9..794ada59f5f8 100644 --- a/pkg/sql/schemachanger/scexec/exec_backfill_test.go +++ b/pkg/sql/schemachanger/scexec/exec_backfill_test.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scdeps/sctestdeps" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scexec" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scop" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/testutils/serverutils" "github.com/cockroachdb/cockroach/pkg/testutils/sqlutils" "github.com/cockroachdb/cockroach/pkg/util/hlc" @@ -83,7 +84,7 @@ func TestExecBackfiller(t *testing.T) { KeyColumnDirections: dirs, KeyColumnIDs: columnIDs, KeySuffixColumnIDs: keySuffixColumnIDs, - Type: descpb.IndexDescriptor_FORWARD, + Type: idxtype.FORWARD, CreatedExplicitly: true, EncodingType: catenumpb.SecondaryIndexEncoding, UseDeletePreservingEncoding: isTempIndex, diff --git a/pkg/sql/schemachanger/scexec/exec_validation.go b/pkg/sql/schemachanger/scexec/exec_validation.go index f5b663292463..1f5fb34e3e7e 100644 --- a/pkg/sql/schemachanger/scexec/exec_validation.go +++ b/pkg/sql/schemachanger/scexec/exec_validation.go @@ -9,9 +9,9 @@ import ( "context" "github.com/cockroachdb/cockroach/pkg/sql/catalog" - "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scerrors" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scop" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/sessiondata" "github.com/cockroachdb/errors" ) @@ -34,7 +34,7 @@ func executeValidateUniqueIndex( } // Execute the validation operation as a node user. execOverride := sessiondata.NodeUserSessionDataOverride - if index.GetType() == descpb.IndexDescriptor_FORWARD { + if index.GetType() == idxtype.FORWARD { err = deps.Validator().ValidateForwardIndexes(ctx, deps.TransactionalJobRegistry().CurrentJob(), table, []catalog.Index{index}, execOverride) } else { err = deps.Validator().ValidateInvertedIndexes(ctx, deps.TransactionalJobRegistry().CurrentJob(), table, []catalog.Index{index}, execOverride) diff --git a/pkg/sql/schemachanger/scexec/scmutationexec/BUILD.bazel b/pkg/sql/schemachanger/scexec/scmutationexec/BUILD.bazel index 88605ad08c64..9c313364c25c 100644 --- a/pkg/sql/schemachanger/scexec/scmutationexec/BUILD.bazel +++ b/pkg/sql/schemachanger/scexec/scmutationexec/BUILD.bazel @@ -52,6 +52,7 @@ go_library( "//pkg/sql/schemachanger/scpb", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/util/iterutil", diff --git a/pkg/sql/schemachanger/scexec/scmutationexec/index.go b/pkg/sql/schemachanger/scexec/scmutationexec/index.go index 660195d45261..162b5042a979 100644 --- a/pkg/sql/schemachanger/scexec/scmutationexec/index.go +++ b/pkg/sql/schemachanger/scexec/scmutationexec/index.go @@ -17,6 +17,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog/tabledesc" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scop" "github.com/cockroachdb/cockroach/pkg/sql/schemachanger/scpb" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/errors" ) @@ -61,9 +62,9 @@ func addNewIndexMutation( } // Set up the index descriptor type. - indexType := descpb.IndexDescriptor_FORWARD + indexType := idxtype.FORWARD if opIndex.IsInverted { - indexType = descpb.IndexDescriptor_INVERTED + indexType = idxtype.INVERTED } // Set up the encoding type. encodingType := catenumpb.PrimaryIndexEncoding @@ -408,7 +409,7 @@ func (i *immediateVisitor) AddColumnToIndex(ctx context.Context, op scop.AddColu }) } // If this is an inverted column, note that. - if indexDesc.Type == descpb.IndexDescriptor_INVERTED && op.ColumnID == indexDesc.InvertedColumnID() { + if indexDesc.Type == idxtype.INVERTED && op.ColumnID == indexDesc.InvertedColumnID() { indexDesc.InvertedColumnKinds = []catpb.InvertedIndexColumnKind{op.InvertedKind} } return nil @@ -447,7 +448,7 @@ func (i *immediateVisitor) RemoveColumnFromIndex( idx.KeyColumnNames = idx.KeyColumnNames[:i] idx.KeyColumnIDs = idx.KeyColumnIDs[:i] idx.KeyColumnDirections = idx.KeyColumnDirections[:i] - if idx.Type == descpb.IndexDescriptor_INVERTED && i == len(idx.KeyColumnIDs)-1 { + if idx.Type == idxtype.INVERTED && i == len(idx.KeyColumnIDs)-1 { idx.InvertedColumnKinds = nil } } diff --git a/pkg/sql/sem/idxtype/BUILD.bazel b/pkg/sql/sem/idxtype/BUILD.bazel new file mode 100644 index 000000000000..39c10fb13936 --- /dev/null +++ b/pkg/sql/sem/idxtype/BUILD.bazel @@ -0,0 +1,34 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +proto_library( + name = "idxtype_proto", + srcs = ["idxtype.proto"], + strip_import_prefix = "/pkg", + visibility = ["//visibility:public"], + deps = ["@com_github_gogo_protobuf//gogoproto:gogo_proto"], +) + +go_library( + name = "idxtype", + embed = [":idxtype_go_proto"], + importpath = "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype", + visibility = ["//visibility:public"], +) + +go_proto_library( + name = "idxtype_go_proto", + compilers = ["//pkg/cmd/protoc-gen-gogoroach:protoc-gen-gogoroach_compiler"], + importpath = "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype", + proto = ":idxtype_proto", + visibility = ["//visibility:public"], + deps = ["@com_github_gogo_protobuf//gogoproto"], +) + +go_library( + name = "idxtypepb", + srcs = ["idxtype.go"], + importpath = "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtypepb", + visibility = ["//visibility:public"], +) diff --git a/pkg/sql/sem/idxtype/idxtype.proto b/pkg/sql/sem/idxtype/idxtype.proto new file mode 100644 index 000000000000..0f16be5d75f5 --- /dev/null +++ b/pkg/sql/sem/idxtype/idxtype.proto @@ -0,0 +1,27 @@ +// Copyright 2025 The Cockroach Authors. +// +// Use of this software is governed by the CockroachDB Software License +// included in the /LICENSE file. + +syntax = "proto3"; +package cockroach.sql.sem.idxtype; +option go_package = "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype"; + +import "gogoproto/gogo.proto"; + +// T represents different types of indexes that can be defined on a table. +enum T { + option (gogoproto.goproto_enum_prefix) = false; + + // FORWARD is a standard relational index, containing at most one entry for + // each row in the table (if a partial index, a table row may not have a + // corresponding entry in the index). + FORWARD = 0; + // INVERTED can contain multiple entries for each row in the table, in order + // to index collection or composite data types like JSONB, ARRAY, and + // GEOGRAPHY. + INVERTED = 1; + // VECTOR indexes high-dimensional vectors to enable rapid similarity search + // using an approximate nearest neighbor (ANN) algorithm. + VECTOR = 2; +}; diff --git a/pkg/sql/sem/tree/BUILD.bazel b/pkg/sql/sem/tree/BUILD.bazel index fb211ca30260..1fec9ed5a401 100644 --- a/pkg/sql/sem/tree/BUILD.bazel +++ b/pkg/sql/sem/tree/BUILD.bazel @@ -146,6 +146,7 @@ go_library( "//pkg/sql/sem/cast", "//pkg/sql/sem/catconstants", "//pkg/sql/sem/catid", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/semenumpb", "//pkg/sql/sem/tree/treebin", "//pkg/sql/sem/tree/treecmp", diff --git a/pkg/sql/sem/tree/create.go b/pkg/sql/sem/tree/create.go index a7938ea0796b..da5495cec47a 100644 --- a/pkg/sql/sem/tree/create.go +++ b/pkg/sql/sem/tree/create.go @@ -23,6 +23,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/lexbase" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgcode" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/sql/types" "github.com/cockroachdb/cockroach/pkg/util/collatedstring" "github.com/cockroachdb/cockroach/pkg/util/pretty" @@ -223,12 +224,12 @@ func (l *IndexElemList) doc(p *PrettyCfg) pretty.Doc { return p.commaSeparated(d...) } -type IndexType uint8 +type IndexType = idxtype.T const ( - IndexTypeForward IndexType = iota - IndexTypeInverted - IndexTypeVector + IndexTypeForward = idxtype.FORWARD + IndexTypeInverted = idxtype.INVERTED + IndexTypeVector = idxtype.VECTOR ) type IndexInvisibility struct { diff --git a/pkg/sql/span/BUILD.bazel b/pkg/sql/span/BUILD.bazel index b8e92ecdb6b8..9d0769325176 100644 --- a/pkg/sql/span/BUILD.bazel +++ b/pkg/sql/span/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//pkg/sql/rowenc", "//pkg/sql/rowenc/keyside", "//pkg/sql/sem/eval", + "//pkg/sql/sem/idxtype", "//pkg/sql/sem/tree", "//pkg/sql/types", "//pkg/util/encoding", diff --git a/pkg/sql/span/span_splitter.go b/pkg/sql/span/span_splitter.go index d2512f72519d..55148e872a94 100644 --- a/pkg/sql/span/span_splitter.go +++ b/pkg/sql/span/span_splitter.go @@ -11,6 +11,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/catalog" "github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" "github.com/cockroachdb/cockroach/pkg/sql/rowenc" + "github.com/cockroachdb/cockroach/pkg/sql/sem/idxtype" "github.com/cockroachdb/cockroach/pkg/util/intsets" "github.com/cockroachdb/errors" ) @@ -87,7 +88,7 @@ func MakeSplitterBase( if index.GetID() != table.GetPrimaryIndexID() { // * The index cannot be inverted. - if index.GetType() != descpb.IndexDescriptor_FORWARD { + if index.GetType() != idxtype.FORWARD { return NoopSplitter() }