database.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package database
  2. import (
  3. _ "embed"
  4. "fmt"
  5. _ "github.com/lib/pq"
  6. _ "github.com/mattn/go-sqlite3"
  7. "maunium.net/go/mautrix/util/dbutil"
  8. "go.mau.fi/mautrix-discord/database/upgrades"
  9. )
  10. type Database struct {
  11. *dbutil.Database
  12. User *UserQuery
  13. Portal *PortalQuery
  14. Puppet *PuppetQuery
  15. Message *MessageQuery
  16. Thread *ThreadQuery
  17. Reaction *ReactionQuery
  18. Attachment *AttachmentQuery
  19. Emoji *EmojiQuery
  20. Guild *GuildQuery
  21. }
  22. //go:embed legacymigrate.sql
  23. var legacyMigrate string
  24. func New(baseDB *dbutil.Database) *Database {
  25. db := &Database{Database: baseDB}
  26. _, err := db.Exec("SELECT id FROM version")
  27. if err == nil {
  28. baseDB.Log.Infoln("Migrating from legacy database versioning")
  29. _, err = db.Exec(legacyMigrate)
  30. if err != nil {
  31. panic(fmt.Errorf("failed to migrate from legacy database versioning: %v", err))
  32. }
  33. }
  34. db.UpgradeTable = upgrades.Table
  35. db.User = &UserQuery{
  36. db: db,
  37. log: db.Log.Sub("User"),
  38. }
  39. db.Portal = &PortalQuery{
  40. db: db,
  41. log: db.Log.Sub("Portal"),
  42. }
  43. db.Puppet = &PuppetQuery{
  44. db: db,
  45. log: db.Log.Sub("Puppet"),
  46. }
  47. db.Message = &MessageQuery{
  48. db: db,
  49. log: db.Log.Sub("Message"),
  50. }
  51. db.Thread = &ThreadQuery{
  52. db: db,
  53. log: db.Log.Sub("Thread"),
  54. }
  55. db.Reaction = &ReactionQuery{
  56. db: db,
  57. log: db.Log.Sub("Reaction"),
  58. }
  59. db.Attachment = &AttachmentQuery{
  60. db: db,
  61. log: db.Log.Sub("Attachment"),
  62. }
  63. db.Emoji = &EmojiQuery{
  64. db: db,
  65. log: db.Log.Sub("Emoji"),
  66. }
  67. db.Guild = &GuildQuery{
  68. db: db,
  69. log: db.Log.Sub("Guild"),
  70. }
  71. return db
  72. }
  73. func strPtr(val string) *string {
  74. if val == "" {
  75. return nil
  76. }
  77. return &val
  78. }