67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package store
|
|
|
|
var migrations = []string{
|
|
`
|
|
CREATE TABLE IF NOT EXISTS user_filter_ids (
|
|
user_id VARCHAR(255) PRIMARY KEY,
|
|
filter_id VARCHAR(255)
|
|
)
|
|
`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS user_batch_tokens (
|
|
user_id VARCHAR(255) PRIMARY KEY,
|
|
next_batch_token VARCHAR(255)
|
|
)
|
|
`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS rooms (
|
|
room_id VARCHAR(255) PRIMARY KEY,
|
|
encryption_event VARCHAR(65535) NULL
|
|
)
|
|
`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS room_members (
|
|
room_id VARCHAR(255),
|
|
user_id VARCHAR(255),
|
|
PRIMARY KEY (room_id, user_id)
|
|
)
|
|
`,
|
|
`
|
|
CREATE TABLE IF NOT EXISTS session (
|
|
user_id VARCHAR(255),
|
|
device_id VARCHAR(255),
|
|
access_token VARCHAR(255)
|
|
)
|
|
`,
|
|
}
|
|
|
|
// CreateTables applies all the pending database migrations.
|
|
func (s *Store) CreateTables() error {
|
|
s.log.Debug("migrating database...")
|
|
tx, beginErr := s.db.Begin()
|
|
if beginErr != nil {
|
|
s.log.Error("cannot begin transaction: %v", beginErr)
|
|
return beginErr
|
|
}
|
|
|
|
for _, query := range migrations {
|
|
_, execErr := tx.Exec(query)
|
|
if execErr != nil {
|
|
s.log.Error("cannot apply migration: %v", execErr)
|
|
// nolint // we already have the execErr to return
|
|
tx.Rollback()
|
|
return execErr
|
|
}
|
|
}
|
|
|
|
commitErr := tx.Commit()
|
|
if commitErr != nil {
|
|
s.log.Error("cannot commit transaction: %v", commitErr)
|
|
// nolint // we already have the commitErr to return
|
|
tx.Rollback()
|
|
return commitErr
|
|
}
|
|
|
|
return nil
|
|
}
|