package routes import ( "database/sql" "log" "strings" ) // EnsureTranslationPerfIndexes creates helpful indexes for translation listing/search. // It is safe to run on each startup; failures are logged and do not stop the service. func EnsureTranslationPerfIndexes(db *sql.DB) { if db == nil { return } statements := []string{ `CREATE EXTENSION IF NOT EXISTS pg_trgm`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_t_key_lang ON mk_translator (t_key, lang_code)`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_status_lang_updated ON mk_translator (status, lang_code, updated_at DESC)`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_manual_status ON mk_translator (is_manual, status)`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_source_type_expr ON mk_translator ((COALESCE(NULLIF(provider_meta->>'source_type',''),'dummy')))`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_source_text_trgm ON mk_translator USING gin (source_text_tr gin_trgm_ops)`, `CREATE INDEX IF NOT EXISTS idx_mk_translator_translated_text_trgm ON mk_translator USING gin (translated_text gin_trgm_ops)`, } for _, stmt := range statements { if _, err := db.Exec(stmt); err != nil { log.Printf("[TranslationPerf] index_setup_warn sql=%q err=%v", summarizeSQL(stmt), err) continue } log.Printf("[TranslationPerf] index_ready sql=%q", summarizeSQL(stmt)) } } func summarizeSQL(sqlText string) string { s := strings.TrimSpace(sqlText) if len(s) <= 100 { return s } return s[:100] + "..." }