Don't use different types for SQLite in DB schema

This commit is contained in:
Tulir Asokan 2020-05-21 20:56:41 +03:00
parent 64af0209b7
commit ed978bcb9c
5 changed files with 14 additions and 19 deletions

View file

@ -258,7 +258,7 @@ func (store *SQLCryptoStore) AddOutboundGroupSession(session *crypto.OutboundGro
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
ON CONFLICT (room_id) DO UPDATE SET session_id=$2, session=$3, shared=$4, max_messages=$5, message_count=$6, max_age=$7, created_at=$8, last_used=$9`, ON CONFLICT (room_id) DO UPDATE SET session_id=$2, session=$3, shared=$4, max_messages=$5, message_count=$6, max_age=$7, created_at=$8, last_used=$9`,
session.RoomID, session.ID(), sessionBytes, session.Shared, session.MaxMessages, session.MessageCount, session.MaxAge, session.CreationTime, session.UseTime) session.RoomID, session.ID(), sessionBytes, session.Shared, session.MaxMessages, session.MessageCount, session.MaxAge, session.CreationTime, session.UseTime)
} else if store.db.dialect == "sqlite" { } else if store.db.dialect == "sqlite3" {
_, err = store.db.Exec(` _, err = store.db.Exec(`
INSERT OR REPLACE INTO crypto_megolm_outbound_session ( INSERT OR REPLACE INTO crypto_megolm_outbound_session (
room_id, session_id, session, shared, max_messages, message_count, max_age, created_at, last_used room_id, session_id, session, shared, max_messages, message_count, max_age, created_at, last_used

View file

@ -145,4 +145,8 @@ func Migrate(old *Database, new *Database) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
err = migrateTable(old, new, "crypto_megolm_outbound_session", "room_id", "session_id", "session", "shared", "max_messages", "message_count", "max_age", "created_at", "last_used")
if err != nil {
panic(err)
}
} }

View file

@ -2,26 +2,19 @@ package upgrades
import ( import (
"database/sql" "database/sql"
"fmt"
) )
func init() { func init() {
upgrades[0] = upgrade{"Initial schema", func(tx *sql.Tx, ctx context) error { upgrades[0] = upgrade{"Initial schema", func(tx *sql.Tx, ctx context) error {
var byteType string
if ctx.dialect == SQLite {
byteType = "BLOB"
} else {
byteType = "bytea"
}
_, err := tx.Exec(`CREATE TABLE IF NOT EXISTS portal ( _, err := tx.Exec(`CREATE TABLE IF NOT EXISTS portal (
jid VARCHAR(255), jid VARCHAR(255),
receiver VARCHAR(255), receiver VARCHAR(255),
mxid VARCHAR(255) UNIQUE, mxid VARCHAR(255) UNIQUE,
name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL,
topic VARCHAR(255) NOT NULL, topic VARCHAR(255) NOT NULL,
avatar VARCHAR(255) NOT NULL, avatar VARCHAR(255) NOT NULL,
PRIMARY KEY (jid, receiver) PRIMARY KEY (jid, receiver)
)`) )`)
if err != nil { if err != nil {
@ -38,7 +31,7 @@ func init() {
return err return err
} }
_, err = tx.Exec(fmt.Sprintf(`CREATE TABLE IF NOT EXISTS "user" ( _, err = tx.Exec(`CREATE TABLE IF NOT EXISTS "user" (
mxid VARCHAR(255) PRIMARY KEY, mxid VARCHAR(255) PRIMARY KEY,
jid VARCHAR(255) UNIQUE, jid VARCHAR(255) UNIQUE,
@ -47,24 +40,24 @@ func init() {
client_id VARCHAR(255), client_id VARCHAR(255),
client_token VARCHAR(255), client_token VARCHAR(255),
server_token VARCHAR(255), server_token VARCHAR(255),
enc_key %[1]s, enc_key bytea,
mac_key %[1]s mac_key bytea
)`, byteType)) )`)
if err != nil { if err != nil {
return err return err
} }
_, err = tx.Exec(fmt.Sprintf(`CREATE TABLE IF NOT EXISTS message ( _, err = tx.Exec(`CREATE TABLE IF NOT EXISTS message (
chat_jid VARCHAR(255), chat_jid VARCHAR(255),
chat_receiver VARCHAR(255), chat_receiver VARCHAR(255),
jid VARCHAR(255), jid VARCHAR(255),
mxid VARCHAR(255) NOT NULL UNIQUE, mxid VARCHAR(255) NOT NULL UNIQUE,
sender VARCHAR(255) NOT NULL, sender VARCHAR(255) NOT NULL,
content %[1]s NOT NULL, content bytea NOT NULL,
PRIMARY KEY (chat_jid, chat_receiver, jid), PRIMARY KEY (chat_jid, chat_receiver, jid),
FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE FOREIGN KEY (chat_jid, chat_receiver) REFERENCES portal(jid, receiver) ON DELETE CASCADE
)`, byteType)) )`)
if err != nil { if err != nil {
return err return err
} }

View file

@ -6,7 +6,6 @@ import (
func init() { func init() {
upgrades[13] = upgrade{"Add crypto store to database", func(tx *sql.Tx, ctx context) error { upgrades[13] = upgrade{"Add crypto store to database", func(tx *sql.Tx, ctx context) error {
// TODO use DATETIME instead of timestamp and BLOB instead of bytea for sqlite
_, err := tx.Exec(`CREATE TABLE crypto_account ( _, err := tx.Exec(`CREATE TABLE crypto_account (
device_id VARCHAR(255) PRIMARY KEY, device_id VARCHAR(255) PRIMARY KEY,
shared BOOLEAN NOT NULL, shared BOOLEAN NOT NULL,

View file

@ -6,7 +6,6 @@ import (
func init() { func init() {
upgrades[14] = upgrade{"Add outbound group sessions to database", func(tx *sql.Tx, ctx context) error { upgrades[14] = upgrade{"Add outbound group sessions to database", func(tx *sql.Tx, ctx context) error {
// TODO use DATETIME instead of timestamp and BLOB instead of bytea for sqlite
_, err := tx.Exec(`CREATE TABLE crypto_megolm_outbound_session ( _, err := tx.Exec(`CREATE TABLE crypto_megolm_outbound_session (
room_id VARCHAR(255) PRIMARY KEY, room_id VARCHAR(255) PRIMARY KEY,
session_id CHAR(43) NOT NULL UNIQUE, session_id CHAR(43) NOT NULL UNIQUE,