فهرست منبع

Don't use different types for SQLite in DB schema

Tulir Asokan 5 سال پیش
والد
کامیت
ed978bcb9c

+ 1 - 1
database/cryptostore.go

@@ -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

+ 4 - 0
database/migrate.go

@@ -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)
+	}
 }
 }

+ 9 - 16
database/upgrades/2018-09-01-initial-schema.go

@@ -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,
-			mac_key      %[1]s
-		)`, byteType))
+			enc_key      bytea,
+			mac_key      bytea
+		)`)
 		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
 		}
 		}

+ 0 - 1
database/upgrades/2020-05-09-crypto-store.go

@@ -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,

+ 0 - 1
database/upgrades/2020-05-12-outbound-group-session-store.go

@@ -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,