更新客户端适配性问题
build-winui / winui (push) Has been cancelled

This commit is contained in:
2026-06-28 08:56:45 +08:00
parent 962a2f2143
commit f00124c1c0
21 changed files with 428 additions and 63 deletions
+61 -12
View File
@@ -22,6 +22,9 @@ func (s *Store) migrate(conn *sql.DB, d dialect) error {
return err
}
}
if err := createSchemaIndexes(conn, d); err != nil {
return err
}
return s.recordSchemaVersion(conn, d)
}
@@ -281,21 +284,67 @@ func schemaStatements(d dialect) []string {
created_at %s NOT NULL,
finished_at %s NOT NULL DEFAULT ''
)`, d.idType(), keyText, keyText, keyText, longText, shortText, shortText, shortText),
`CREATE INDEX IF NOT EXISTS idx_feedback_tickets_activity ON feedback_tickets(last_activity_at)`,
`CREATE INDEX IF NOT EXISTS idx_feedback_comments_code ON feedback_comments(feedback_code)`,
`CREATE INDEX IF NOT EXISTS idx_feedback_attachments_code ON feedback_attachments(feedback_code)`,
`CREATE INDEX IF NOT EXISTS idx_feedback_events_code ON feedback_events(feedback_code)`,
`CREATE INDEX IF NOT EXISTS idx_mail_records_code ON mail_records(feedback_code)`,
`CREATE INDEX IF NOT EXISTS idx_endpoint_call_logs_source ON endpoint_call_logs(source_id)`,
`CREATE INDEX IF NOT EXISTS idx_audit_logs_created ON audit_logs(created_at)`,
`CREATE INDEX IF NOT EXISTS idx_audit_logs_type ON audit_logs(type)`,
`CREATE INDEX IF NOT EXISTS idx_audit_logs_target ON audit_logs(target)`,
`CREATE INDEX IF NOT EXISTS idx_legacy_json_revisions_name ON legacy_json_revisions(name, id)`,
`CREATE INDEX IF NOT EXISTS idx_release_notices_version ON release_notices(version)`,
`CREATE INDEX IF NOT EXISTS idx_release_notice_revisions_version ON release_notice_revisions(version, id)`,
}
}
type schemaIndex struct {
name string
table string
columns string
}
func schemaIndexes() []schemaIndex {
return []schemaIndex{
{name: "idx_feedback_tickets_activity", table: "feedback_tickets", columns: "last_activity_at"},
{name: "idx_feedback_comments_code", table: "feedback_comments", columns: "feedback_code"},
{name: "idx_feedback_attachments_code", table: "feedback_attachments", columns: "feedback_code"},
{name: "idx_feedback_events_code", table: "feedback_events", columns: "feedback_code"},
{name: "idx_mail_records_code", table: "mail_records", columns: "feedback_code"},
{name: "idx_endpoint_call_logs_source", table: "endpoint_call_logs", columns: "source_id"},
{name: "idx_audit_logs_created", table: "audit_logs", columns: "created_at"},
{name: "idx_audit_logs_type", table: "audit_logs", columns: "type"},
{name: "idx_audit_logs_target", table: "audit_logs", columns: "target"},
{name: "idx_legacy_json_revisions_name", table: "legacy_json_revisions", columns: "name, id"},
{name: "idx_release_notices_version", table: "release_notices", columns: "version"},
{name: "idx_release_notice_revisions_version", table: "release_notice_revisions", columns: "version, id"},
}
}
func createSchemaIndexes(conn *sql.DB, d dialect) error {
for _, index := range schemaIndexes() {
if d.name == "mysql" {
exists, err := mysqlIndexExists(conn, index)
if err != nil {
return err
}
if exists {
continue
}
}
if _, err := conn.Exec(d.rebind(createIndexStatement(d, index))); err != nil {
return err
}
}
return nil
}
func mysqlIndexExists(conn *sql.DB, index schemaIndex) (bool, error) {
var count int
err := conn.QueryRow(`SELECT COUNT(1)
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = ?
AND index_name = ?`, index.table, index.name).Scan(&count)
return count > 0, err
}
func createIndexStatement(d dialect, index schemaIndex) string {
if d.name == "mysql" {
return fmt.Sprintf("CREATE INDEX %s ON %s(%s)", d.quoteIdent(index.name), d.quoteIdent(index.table), index.columns)
}
return fmt.Sprintf("CREATE INDEX IF NOT EXISTS %s ON %s(%s)", d.quoteIdent(index.name), d.quoteIdent(index.table), index.columns)
}
func (s *Store) recordSchemaVersion(conn *sql.DB, d dialect) error {
columns := []string{"version", "applied_at", "description"}
_, err := conn.Exec(d.rebind(d.upsert("schema_migrations", columns, []string{"version"})),