PrepareEnumCases prepares enum cases
(tableName, columnName string, enumCases []string)
| 197 | |
| 198 | // PrepareEnumCases prepares enum cases |
| 199 | func (cf *CachedSchemaHandler) PrepareEnumCases(tableName, columnName string, enumCases []string) error { |
| 200 | newEnumCases := make([]string, 0, len(enumCases)) |
| 201 | cf.RLock() |
| 202 | schema, exist := cf.schemas[tableName] |
| 203 | if !exist { |
| 204 | cf.RUnlock() |
| 205 | return nil |
| 206 | } |
| 207 | columnID, exist := schema.ColumnDict[columnName] |
| 208 | if !exist { |
| 209 | cf.RUnlock() |
| 210 | return nil |
| 211 | } |
| 212 | |
| 213 | caseInsensitive := schema.Table.Columns[columnID].CaseInsensitive |
| 214 | disableAutoExpand := schema.Table.Columns[columnID].DisableAutoExpand |
| 215 | for _, enumCase := range enumCases { |
| 216 | if _, exist := cf.enumMappings[tableName][columnID][enumCase]; !exist { |
| 217 | newEnumCases = append(newEnumCases, enumCase) |
| 218 | } |
| 219 | } |
| 220 | cf.RUnlock() |
| 221 | |
| 222 | numNewEnumCases := len(newEnumCases) |
| 223 | if disableAutoExpand && numNewEnumCases > 0 { |
| 224 | // It's recommended to set up elk or sentry logging to catch this error. |
| 225 | cf.logger.With( |
| 226 | "TableName", tableName, |
| 227 | "ColumnName", columnName, |
| 228 | "ColumnID", columnID, |
| 229 | "newEnumCasesSet", newEnumCases, |
| 230 | "caseInsensitive", caseInsensitive, |
| 231 | ).Warn("Finding new enum cases during ingestion but enum auto expansion is disabled") |
| 232 | cf.metricScope.Tagged( |
| 233 | map[string]string{ |
| 234 | "TableName": tableName, |
| 235 | "ColumnID": strconv.Itoa(columnID), |
| 236 | }, |
| 237 | ).Counter("new_enum_cases_ignored").Inc(int64(numNewEnumCases)) |
| 238 | return nil |
| 239 | } |
| 240 | |
| 241 | enumIDs, err := cf.schemaFetcher.ExtendEnumCases(tableName, columnName, newEnumCases) |
| 242 | if err != nil { |
| 243 | return err |
| 244 | } |
| 245 | |
| 246 | cf.Lock() |
| 247 | for index, enumCase := range newEnumCases { |
| 248 | if caseInsensitive { |
| 249 | enumCase = strings.ToLower(enumCase) |
| 250 | } |
| 251 | cf.enumMappings[tableName][columnID][enumCase] = enumIDs[index] |
| 252 | } |
| 253 | cf.Unlock() |
| 254 | return nil |
| 255 | } |
| 256 |
no test coverage detected