Strip (bd-xxx), (gt-xxx) suffixes from code comments and changelog entries. The descriptions remain meaningful without the ephemeral issue IDs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package migrations
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
)
|
|
|
|
// MigrateAdditionalIndexes adds performance optimization indexes identified
|
|
// during schema review.
|
|
//
|
|
// Indexes added:
|
|
// - idx_issues_updated_at: For GetStaleIssues date filtering
|
|
// - idx_issues_status_priority: For common list query patterns
|
|
// - idx_labels_label_issue: Covering index for label lookups
|
|
// - idx_dependencies_issue_type: For blocked issues queries
|
|
// - idx_events_issue_type: For close reason queries
|
|
func MigrateAdditionalIndexes(db *sql.DB) error {
|
|
indexes := []struct {
|
|
name string
|
|
sql string
|
|
}{
|
|
// Issues table indexes
|
|
{
|
|
name: "idx_issues_updated_at",
|
|
sql: `CREATE INDEX IF NOT EXISTS idx_issues_updated_at ON issues(updated_at)`,
|
|
},
|
|
{
|
|
name: "idx_issues_status_priority",
|
|
sql: `CREATE INDEX IF NOT EXISTS idx_issues_status_priority ON issues(status, priority)`,
|
|
},
|
|
|
|
// Labels table covering index
|
|
{
|
|
name: "idx_labels_label_issue",
|
|
sql: `CREATE INDEX IF NOT EXISTS idx_labels_label_issue ON labels(label, issue_id)`,
|
|
},
|
|
|
|
// Dependencies table composite index
|
|
{
|
|
name: "idx_dependencies_issue_type",
|
|
sql: `CREATE INDEX IF NOT EXISTS idx_dependencies_issue_type ON dependencies(issue_id, type)`,
|
|
},
|
|
|
|
// Events table composite index
|
|
{
|
|
name: "idx_events_issue_type",
|
|
sql: `CREATE INDEX IF NOT EXISTS idx_events_issue_type ON events(issue_id, event_type)`,
|
|
},
|
|
}
|
|
|
|
for _, idx := range indexes {
|
|
if _, err := db.Exec(idx.sql); err != nil {
|
|
return fmt.Errorf("failed to create index %s: %w", idx.name, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|