(ctx *sql.Context, catalogName, schemaName, tableName string)
| 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) |
no test coverage detected