| 821 | } |
| 822 | |
| 823 | func buildTablesMetadata(table *storepb.TableMetadata, tableCatalog *storepb.TableCatalog, isDetailCaseSensitive bool) ([]*TableMetadata, []string) { |
| 824 | if table == nil { |
| 825 | return nil, nil |
| 826 | } |
| 827 | |
| 828 | // Build a map of column catalogs |
| 829 | columnCatalogMap := make(map[string]*storepb.ColumnCatalog) |
| 830 | if tableCatalog != nil { |
| 831 | for _, columnCatalog := range tableCatalog.Columns { |
| 832 | columnCatalogMap[columnCatalog.Name] = columnCatalog |
| 833 | } |
| 834 | } |
| 835 | |
| 836 | var result []*TableMetadata |
| 837 | var name []string |
| 838 | tableMetadata := &TableMetadata{ |
| 839 | isDetailCaseSensitive: isDetailCaseSensitive, |
| 840 | internalColumn: make(map[string]*ColumnMetadata), |
| 841 | internalIndexes: make(map[string]*IndexMetadata), |
| 842 | proto: table, |
| 843 | config: tableCatalog, |
| 844 | } |
| 845 | for _, column := range table.Columns { |
| 846 | columnCatalog := columnCatalogMap[column.Name] |
| 847 | columnID := normalizeNameByCaseSensitivity(column.Name, isDetailCaseSensitive) |
| 848 | tableMetadata.internalColumn[columnID] = &ColumnMetadata{ |
| 849 | proto: column, |
| 850 | config: columnCatalog, |
| 851 | } |
| 852 | } |
| 853 | indexes := buildIndexesMetadata(table) |
| 854 | for _, index := range indexes { |
| 855 | indexID := normalizeNameByCaseSensitivity(index.proto.Name, isDetailCaseSensitive) |
| 856 | tableMetadata.internalIndexes[indexID] = index |
| 857 | } |
| 858 | result = append(result, tableMetadata) |
| 859 | name = append(name, table.Name) |
| 860 | |
| 861 | if table.Partitions != nil { |
| 862 | partitionTables, partitionNames := buildTablesMetadataRecursive(table.Columns, columnCatalogMap, table.Partitions, tableMetadata, table, isDetailCaseSensitive) |
| 863 | result = append(result, partitionTables...) |
| 864 | name = append(name, partitionNames...) |
| 865 | } |
| 866 | return result, name |
| 867 | } |
| 868 | |
| 869 | func buildIndexesMetadata(table *storepb.TableMetadata) []*IndexMetadata { |
| 870 | if table == nil { |