MCPcopy Create free account
hub / github.com/apecloud/myduckserver / GetIndexes

Method GetIndexes

catalog/table.go:647–712  ·  view source on GitHub ↗

GetIndexes implements sql.IndexAddressableTable. This is only used for show index in SHOW INDEX and SHOW CREATE TABLE.

(ctx *sql.Context)

Source from the content-addressed store, hash-verified

645 strings.Join(columns, ", ")))
646
647 // DuckDB does not retain the logical MySQL prefix length, so keep it in
648 // managed metadata alongside the user-visible index comment.
649 if indexDef.Comment != "" || hasPrefix {
650 meta := IndexMeta{}
651 if hasPrefix {
652 meta.PrefixLengths = prefixLengths
653 }
654 comment := NewCommentWithMeta(indexDef.Comment, meta)
655 b.WriteString(fmt.Sprintf("; COMMENT ON INDEX %s IS '%s'",
656 FullIndexName(t.db.catalog, t.db.name, EncodeIndexName(t.name, indexDef.Name)),
657 comment.Encode()))
658 }
659
660 // Execute the SQL statement to create the index
661 _, err := adapter.Exec(ctx, b.String())
662 if err != nil {
663 if IsDuckDBIndexAlreadyExistsError(err) {
664 return sql.ErrDuplicateKey.New(indexDef.Name)
665 }
666 if IsDuckDBUniqueConstraintViolationError(err) {
667 return sql.ErrUniqueKeyViolation.New()
668 }
669
670 return ErrDuckDB.New(err)
671 }
672
673 return nil
674}
675
676// DropIndex implements sql.IndexAlterableTable.
677func (t *Table) DropIndex(ctx *sql.Context, indexName string) error {
678 t.mu.Lock()
679 defer t.mu.Unlock()
680
681 // Construct the SQL statement for dropping the index
682 // DuckDB requires switching context to the schema by USE statement
683 sql := fmt.Sprintf(`USE %s; DROP INDEX "%s"`,
684 FullSchemaName(t.db.catalog, t.db.name),
685 EncodeIndexName(t.name, indexName))
686
687 // Execute the SQL statement to drop the index
688 _, err := adapter.Exec(ctx, sql)
689 if err != nil {
690 return ErrDuckDB.New(err)
691 }
692
693 return nil
694}
695
696// RenameIndex implements sql.IndexAlterableTable.
697func (t *Table) RenameIndex(ctx *sql.Context, fromIndexName string, toIndexName string) error {
698 return sql.ErrUnsupportedFeature.New("RenameIndex is not supported")
699}
700
701// GetIndexes implements sql.IndexAddressableTable.
702// This is only used for show index in SHOW INDEX and SHOW CREATE TABLE.
703func (t *Table) GetIndexes(ctx *sql.Context) ([]sql.Index, error) {
704 t.mu.RLock()

Callers 1

RunCreateTableTestFunction · 0.80

Calls 8

QueryCatalogFunction · 0.92
NewIndexFunction · 0.85
queryColumnsFunction · 0.85
DecodeIndexNameFunction · 0.85
DecodeCreateindexFunction · 0.85
CloseMethod · 0.65
NextMethod · 0.45
ErrMethod · 0.45

Tested by 1

RunCreateTableTestFunction · 0.64