2018-09-01-initial-schema.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package upgrades
  2. import (
  3. "database/sql"
  4. "fmt"
  5. )
  6. func init() {
  7. upgrades[0] = upgrade{"Initial schema", func(dialect Dialect, tx *sql.Tx, db *sql.DB) error {
  8. var byteType string
  9. if dialect == SQLite {
  10. byteType = "BLOB"
  11. } else {
  12. byteType = "bytea"
  13. }
  14. _, err := tx.Exec(`CREATE TABLE IF NOT EXISTS portal (
  15. jid VARCHAR(255),
  16. receiver VARCHAR(255),
  17. mxid VARCHAR(255) UNIQUE,
  18. name VARCHAR(255) NOT NULL,
  19. topic VARCHAR(255) NOT NULL,
  20. avatar VARCHAR(255) NOT NULL,
  21. PRIMARY KEY (jid, receiver)
  22. )`)
  23. if err != nil {
  24. return err
  25. }
  26. _, err = tx.Exec(`CREATE TABLE IF NOT EXISTS puppet (
  27. jid VARCHAR(255) PRIMARY KEY,
  28. avatar VARCHAR(255),
  29. displayname VARCHAR(255),
  30. name_quality SMALLINT
  31. )`)
  32. if err != nil {
  33. return err
  34. }
  35. _, err = tx.Exec(fmt.Sprintf(`CREATE TABLE IF NOT EXISTS "user" (
  36. mxid VARCHAR(255) PRIMARY KEY,
  37. jid VARCHAR(255) UNIQUE,
  38. management_room VARCHAR(255),
  39. client_id VARCHAR(255),
  40. client_token VARCHAR(255),
  41. server_token VARCHAR(255),
  42. enc_key %[1]s,
  43. mac_key %[1]s
  44. )`, byteType))
  45. if err != nil {
  46. return err
  47. }
  48. _, err = tx.Exec(fmt.Sprintf(`CREATE TABLE IF NOT EXISTS message (
  49. chat_jid VARCHAR(255),
  50. chat_receiver VARCHAR(255),
  51. jid VARCHAR(255),
  52. mxid VARCHAR(255) NOT NULL UNIQUE,
  53. sender VARCHAR(255) NOT NULL,
  54. content %[1]s NOT NULL,
  55. PRIMARY KEY (chat_jid, chat_receiver, jid),
  56. FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
  57. )`, byteType))
  58. if err != nil {
  59. return err
  60. }
  61. return nil
  62. }}
  63. }