(table *metaCom.Table)
| 255 | } |
| 256 | |
| 257 | func (cf *CachedSchemaHandler) fetchAndSetEnumCases(table *metaCom.Table) error { |
| 258 | enumMappings := make(map[int]enumDict) |
| 259 | enumDefaultValueMappings := make(map[int]int) |
| 260 | for columnID, column := range table.Columns { |
| 261 | if column.Deleted { |
| 262 | continue |
| 263 | } |
| 264 | enumMappings[columnID] = make(enumDict) |
| 265 | caseInsensitive := column.CaseInsensitive |
| 266 | var defValuePtr *string |
| 267 | |
| 268 | if column.DefaultValue != nil { |
| 269 | var defValue = *column.DefaultValue |
| 270 | if caseInsensitive { |
| 271 | defValue = strings.ToLower(defValue) |
| 272 | } |
| 273 | defValuePtr = &defValue |
| 274 | } |
| 275 | |
| 276 | if column.IsEnumColumn() { |
| 277 | enumCases, err := cf.schemaFetcher.FetchAllEnums(table.Name, column.Name) |
| 278 | if err == nil { |
| 279 | for enumID, enumCase := range enumCases { |
| 280 | // Convert to lower case for comparison during ingestion. |
| 281 | if caseInsensitive { |
| 282 | enumCase = strings.ToLower(enumCase) |
| 283 | } |
| 284 | // all mapping should be pre created |
| 285 | enumMappings[columnID][enumCase] = enumID |
| 286 | |
| 287 | if defValuePtr != nil { |
| 288 | if *defValuePtr == enumCase { |
| 289 | enumDefaultValueMappings[columnID] = enumID |
| 290 | } |
| 291 | } |
| 292 | } |
| 293 | } else { |
| 294 | cf.metricScope.Tagged(map[string]string{ |
| 295 | "table": table.Name, |
| 296 | "columnID": strconv.Itoa(columnID), |
| 297 | }).Counter("err_fetch_enum_dict").Inc(1) |
| 298 | return utils.StackError(err, "Failed to fetch enum cases for table: %s, column: %d", table.Name, columnID) |
| 299 | } |
| 300 | } |
| 301 | } |
| 302 | cf.Lock() |
| 303 | cf.enumMappings[table.Name] = enumMappings |
| 304 | cf.enumDefaultValueMappings[table.Name] = enumDefaultValueMappings |
| 305 | cf.Unlock() |
| 306 | return nil |
| 307 | } |
| 308 | |
| 309 | func (cf *CachedSchemaHandler) setTable(table *metaCom.Table) *TableSchema { |
| 310 | columnDict := make(map[string]int) |
no test coverage detected