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

Function queryColumns

catalog/table.go:732–778  ·  view source on GitHub ↗
(ctx *sql.Context, catalogName, schemaName, tableName string)

Source from the content-addressed store, hash-verified

730 defer rows.Close()
731
732 indexes := []sql.Index{}
733
734 // Primary key is not returned by duckdb_indexes()
735 sch, pkOrds := t.schema.Schema, t.schema.PkOrdinals
736 if len(pkOrds) > 0 {
737 pkExprs := make([]sql.Expression, len(pkOrds))
738 for i, ord := range pkOrds {
739 pkExprs[i] = expression.NewGetFieldWithTable(ord, 0, sch[ord].Type, t.db.name, t.name, sch[ord].Name, sch[ord].Nullable)
740 }
741 indexes = append(indexes, NewIndex(t.db.name, t.name, "PRIMARY", true, NewComment[IndexMeta](""), pkExprs))
742 }
743
744 columnsInfo, err := queryColumns(ctx, t.db.catalog, t.db.name, t.name)
745 columnsInfoMap := make(map[string]*ColumnInfo)
746 for _, columnInfo := range columnsInfo {
747 columnsInfoMap[columnInfo.ColumnName] = columnInfo
748 }
749
750 if err != nil {
751 return nil, ErrDuckDB.New(err)
752 }
753
754 for rows.Next() {
755 var encodedIndexName string
756 var comment stdsql.NullString
757 var isUnique bool
758 var createIndexSQL string
759 var exprs []sql.Expression
760
761 if err := rows.Scan(&encodedIndexName, &isUnique, &comment, &createIndexSQL); err != nil {
762 return nil, ErrDuckDB.New(err)
763 }
764
765 _, indexName := DecodeIndexName(encodedIndexName)
766 columnNames, err := DecodeCreateindex(createIndexSQL)
767 if err != nil {
768 return nil, ErrDuckDB.New(err)
769 }
770
771 for _, columnName := range columnNames {
772 if columnInfo, exists := columnsInfoMap[columnName]; exists {
773 exprs = append(exprs, expression.NewGetFieldWithTable(columnInfo.ColumnIndex, 0, columnInfo.DataType, t.db.name, t.name, columnInfo.ColumnName, columnInfo.IsNullable))
774 }
775 }
776
777 indexes = append(indexes, NewIndex(t.db.name, t.name, indexName, isUnique, DecodeComment[IndexMeta](comment.String), exprs))
778 }
779
780 if err := rows.Err(); err != nil {
781 return nil, ErrDuckDB.New(err)

Callers 2

getPKSchemaFunction · 0.85
GetIndexesMethod · 0.85

Calls 5

QueryCatalogFunction · 0.92
mysqlDataTypeFunction · 0.85
CloseMethod · 0.65
NextMethod · 0.45
ErrMethod · 0.45

Tested by

no test coverage detected