项目文件夹

文件
wehub-resource-sync 5357c39144
Fuzzer / Run Fuzzer (push) Has been cancelled
Race tests / Go race tests (ubuntu-22.04) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:01:40 +08:00

133 行
4.4 KiB
Go

// Copyright 2020 Dolthub, 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 indexcmds
import (
"context"
"fmt"
"sort"
"strings"
"github.com/dolthub/dolt/go/cmd/dolt/cli"
"github.com/dolthub/dolt/go/cmd/dolt/errhand"
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
"github.com/dolthub/dolt/go/libraries/doltcore/env"
"github.com/dolthub/dolt/go/libraries/utils/argparser"
)
var lsDocs = cli.CommandDocumentationContent{
ShortDesc: `Display the list of indexes`,
LongDesc: IndexCmdWarning + `
This command displays the list of all indexes. You may append a table name to show indexes for only that table, otherwise indexes for all tables are displayed for the working set.`,
Synopsis: []string{
`[{{.LessThan}}table{{.GreaterThan}}]`,
},
}
type LsCmd struct{}
func (cmd LsCmd) Name() string {
return "ls"
}
func (cmd LsCmd) Description() string {
return "Internal debugging command to display the list of indexes."
}
func (cmd LsCmd) Docs() *cli.CommandDocumentation {
return nil
}
func (cmd LsCmd) ArgParser() *argparser.ArgParser {
ap := argparser.NewArgParserWithMaxArgs(cmd.Name(), 1)
ap.ArgListHelp = append(ap.ArgListHelp, [2]string{"table", "The table to display indexes from. If one is not specified, then all tables' indexes are displayed."})
return ap
}
func (cmd LsCmd) Exec(ctx context.Context, commandStr string, args []string, dEnv *env.DoltEnv, cliCtx cli.CliContext) int {
ap := cmd.ArgParser()
ap.TooManyArgsErrorFunc = func(receivedArgs []string) error {
args := strings.Join(receivedArgs, ", ")
return fmt.Errorf("Only one table may be provided at a time. Received %d: %s", len(receivedArgs), args)
}
help, _ := cli.HelpAndUsagePrinters(cli.CommandDocsForCommandString(commandStr, lsDocs, ap))
apr := cli.ParseArgsOrDie(ap, args, help)
working, err := dEnv.WorkingRoot(context.Background())
if err != nil {
return HandleErr(errhand.BuildDError("Unable to get working.").AddCause(err).Build(), nil)
}
var tableNames []string
if apr.NArg() == 0 {
tableNames, err = working.GetTableNames(ctx, doltdb.DefaultSchemaName, true)
if err != nil {
return HandleErr(errhand.BuildDError("Unable to get tables.").AddCause(err).Build(), nil)
}
sort.Strings(tableNames)
} else if apr.NArg() == 1 {
tableNames = []string{apr.Arg(0)}
}
if len(tableNames) == 0 {
cli.Println("No tables in the working set.")
return 0
}
var output []string
for _, tableName := range tableNames {
table, ok, err := working.GetTable(ctx, doltdb.TableName{Name: tableName})
if err != nil {
return HandleErr(errhand.BuildDError("Unable to get table `%s`.", tableName).AddCause(err).Build(), nil)
}
if !ok {
return HandleErr(errhand.BuildDError("The given table `%s` does not exist.", tableName).Build(), nil)
}
sch, err := table.GetSchema(ctx)
if err != nil {
return HandleErr(errhand.BuildDError("Unable to get schema for `%s`.", tableName).AddCause(err).Build(), nil)
}
if sch.Indexes().Count() == 0 {
if len(tableNames) == 1 {
output = append(output, "No indexes on this table")
}
continue
} else {
if len(tableNames) > 1 {
output = append(output, fmt.Sprintf("%s:", tableName))
}
for _, index := range sch.Indexes().AllIndexes() {
output = append(output, fmt.Sprintf(" %s(%s)", index.Name(), strings.Join(index.ColumnNames(), ", ")))
if index.IsFullText() {
props := index.FullTextProperties()
output = append(output, fmt.Sprintf(" %s", props.ConfigTable))
output = append(output, fmt.Sprintf(" %s", props.PositionTable))
output = append(output, fmt.Sprintf(" %s", props.DocCountTable))
output = append(output, fmt.Sprintf(" %s", props.GlobalCountTable))
output = append(output, fmt.Sprintf(" %s", props.RowCountTable))
}
}
}
}
if len(output) > 0 {
cli.Println(strings.Join(output, "\n"))
} else {
cli.Println("No indexes in the working set")
}
return 0
}