in internal/enricher/enricher.go [364:481]
func (mc *MetadataCollector) GenerateDeleteCommentSQLs(ctx context.Context) ([]string, error) {
startTime := time.Now()
log.Println("INFO: Starting metadata collection and SQL comment deletion generation...")
tables, err := mc.db.ListTables()
if err != nil {
return nil, fmt.Errorf("failed to list tables: %w", err)
}
// Apply table filtering
filteredTables := []string{}
if len(mc.TableFilters) > 0 {
for table := range mc.TableFilters {
filteredTables = append(filteredTables, table)
}
} else {
filteredTables = tables
}
tables = filteredTables
var allSQLs []string
var wg sync.WaitGroup
errorChannel := make(chan error, len(tables))
for _, table := range tables {
wg.Add(1)
go func(table string) {
defer wg.Done()
// Generate SQL for deleting TABLE comments
tableSQL, genTableErr := withRetry[string](ctx, DefaultRetryOptions, func(ctx context.Context) (string, error) {
return mc.db.GenerateDeleteTableCommentSQL(ctx, table)
})
if genTableErr != nil {
log.Printf("WARN: Failed to generate delete table comment SQL for %s: %v", table, genTableErr)
errorChannel <- genTableErr
return
}
if tableSQL != "" {
mc.mu.Lock()
allSQLs = append(allSQLs, tableSQL)
mc.mu.Unlock()
} else {
log.Printf("INFO: No SQL generated for deleting table comment in %s, possibly no gemini tag.", table)
}
columnInfos, err := mc.db.ListColumns(table)
if err != nil {
log.Println("ERROR: Failed to list columns for table:", table, "error:", err)
errorChannel <- err
return
}
// Apply column filtering
filteredColumnInfos := []database.ColumnInfo{}
if columnFilters, ok := mc.TableFilters[table]; ok && columnFilters != nil {
for _, colInfo := range columnInfos {
for _, filteredCol := range columnFilters {
if colInfo.Name == filteredCol {
filteredColumnInfos = append(filteredColumnInfos, colInfo)
break
}
}
}
} else {
filteredColumnInfos = columnInfos
}
columnInfos = filteredColumnInfos
for _, colInfo := range columnInfos {
wg.Add(1)
go func(colInfo database.ColumnInfo) {
defer wg.Done()
sql, genErr := withRetry[string](ctx, DefaultRetryOptions, func(ctx context.Context) (string, error) {
return mc.db.GenerateDeleteCommentSQL(ctx, table, colInfo.Name)
})
if genErr != nil {
log.Printf("WARN: Failed to generate delete comment SQL for %s.%s: %v", table, colInfo.Name, genErr)
errorChannel <- genErr
return
}
if sql != "" {
mc.mu.Lock()
allSQLs = append(allSQLs, sql)
mc.mu.Unlock()
} else {
log.Printf("INFO: No SQL generated for deleting comment in %s.%s, possibly no gemini tag.", table, colInfo.Name)
}
}(colInfo)
}
}(table)
}
wg.Wait()
close(errorChannel)
// Check for and combine errors
var combinedErr error
for err := range errorChannel {
if err != nil {
if combinedErr == nil {
combinedErr = err
} else {
combinedErr = fmt.Errorf("%w; %v", combinedErr, err)
}
}
}
if combinedErr != nil {
return nil, combinedErr
}
if len(allSQLs) == 0 {
log.Println("INFO: No SQL statements generated for deleting comments. Possibly no gemini tags found.")
}
log.Println("INFO: SQL comment deletion generation completed in:", time.Since(startTime))
return allSQLs, nil
}