diff --git a/message/cache_postgres.go b/message/cache_postgres.go index f5ced3bb..0a57d18e 100644 --- a/message/cache_postgres.go +++ b/message/cache_postgres.go @@ -70,9 +70,9 @@ const ( postgresSelectAttachmentsSizeBySenderQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = '' AND sender = $1 AND attachment_expires >= $2` postgresSelectAttachmentsSizeByUserIDQuery = `SELECT COALESCE(SUM(attachment_size), 0) FROM message WHERE user_id = $1 AND attachment_expires >= $2` - postgresSelectStatsQuery = `SELECT value FROM message_stats WHERE key = 'messages'` - postgresUpdateStatsQuery = `UPDATE message_stats SET value = $1 WHERE key = 'messages'` - postgresUpdateMessageTimesQuery = `UPDATE message SET time = $1 WHERE mid = $2` + postgresSelectStatsQuery = `SELECT value FROM message_stats WHERE key = 'messages'` + postgresUpdateStatsQuery = `UPDATE message_stats SET value = $1 WHERE key = 'messages'` + postgresUpdateMessageTimeQuery = `UPDATE message SET time = $1 WHERE mid = $2` ) var pgQueries = queries{ @@ -98,7 +98,7 @@ var pgQueries = queries{ selectAttachmentsSizeByUserID: postgresSelectAttachmentsSizeByUserIDQuery, selectStats: postgresSelectStatsQuery, updateStats: postgresUpdateStatsQuery, - updateMessageTime: postgresUpdateMessageTimesQuery, + updateMessageTime: postgresUpdateMessageTimeQuery, } // NewPostgresStore creates a new PostgreSQL-backed message cache store using an existing database connection pool. diff --git a/message/cache_sqlite_schema.go b/message/cache_sqlite_schema.go index 8adc80f4..00a26c09 100644 --- a/message/cache_sqlite_schema.go +++ b/message/cache_sqlite_schema.go @@ -10,7 +10,7 @@ import ( // Initial SQLite schema const ( - sqliteCreateMessagesTableQuery = ` + sqliteCreateTablesQuery = ` BEGIN; CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -259,7 +259,7 @@ func setupSQLite(db *sql.DB, startupQueries string, cacheDuration time.Duration) } func setupNewSQLite(db *sql.DB) error { - if _, err := db.Exec(sqliteCreateMessagesTableQuery); err != nil { + if _, err := db.Exec(sqliteCreateTablesQuery); err != nil { return err } if _, err := db.Exec(sqliteCreateSchemaVersionTableQuery); err != nil { diff --git a/webpush/store_sqlite.go b/webpush/store_sqlite.go index 867891ec..d41e1c8d 100644 --- a/webpush/store_sqlite.go +++ b/webpush/store_sqlite.go @@ -8,7 +8,7 @@ import ( ) const ( - sqliteCreateWebPushSubscriptionsTableQuery = ` + sqliteCreateTablesQuery = ` CREATE TABLE IF NOT EXISTS subscription ( id TEXT PRIMARY KEY, endpoint TEXT NOT NULL, @@ -37,42 +37,42 @@ const ( PRAGMA foreign_keys = ON; ` - sqliteSelectWebPushSubscriptionIDByEndpointQuery = `SELECT id FROM subscription WHERE endpoint = ?` - sqliteSelectWebPushSubscriptionCountBySubscriberIPQuery = `SELECT COUNT(*) FROM subscription WHERE subscriber_ip = ?` - sqliteSelectWebPushSubscriptionsForTopicQuery = ` + sqliteSelectSubscriptionIDByEndpointQuery = `SELECT id FROM subscription WHERE endpoint = ?` + sqliteSelectSubscriptionCountBySubscriberIPQuery = `SELECT COUNT(*) FROM subscription WHERE subscriber_ip = ?` + sqliteSelectSubscriptionsForTopicQuery = ` SELECT id, endpoint, key_auth, key_p256dh, user_id FROM subscription_topic st JOIN subscription s ON s.id = st.subscription_id WHERE st.topic = ? ORDER BY endpoint ` - sqliteSelectWebPushSubscriptionsExpiringSoonQuery = ` + sqliteSelectSubscriptionsExpiringSoonQuery = ` SELECT id, endpoint, key_auth, key_p256dh, user_id FROM subscription WHERE warned_at = 0 AND updated_at <= ? ` - sqliteInsertWebPushSubscriptionQuery = ` + sqliteUpsertSubscriptionQuery = ` INSERT INTO subscription (id, endpoint, key_auth, key_p256dh, user_id, subscriber_ip, updated_at, warned_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (endpoint) DO UPDATE SET key_auth = excluded.key_auth, key_p256dh = excluded.key_p256dh, user_id = excluded.user_id, subscriber_ip = excluded.subscriber_ip, updated_at = excluded.updated_at, warned_at = excluded.warned_at ` - sqliteUpdateWebPushSubscriptionWarningSentQuery = `UPDATE subscription SET warned_at = ? WHERE id = ?` - sqliteUpdateWebPushSubscriptionUpdatedAtQuery = `UPDATE subscription SET updated_at = ? WHERE endpoint = ?` - sqliteDeleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscription WHERE endpoint = ?` - sqliteDeleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?` - sqliteDeleteWebPushSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan! + sqliteUpdateSubscriptionWarningSentQuery = `UPDATE subscription SET warned_at = ? WHERE id = ?` + sqliteUpdateSubscriptionUpdatedAtQuery = `UPDATE subscription SET updated_at = ? WHERE endpoint = ?` + sqliteDeleteSubscriptionByEndpointQuery = `DELETE FROM subscription WHERE endpoint = ?` + sqliteDeleteSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?` + sqliteDeleteSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan! - sqliteInsertWebPushSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)` - sqliteDeleteWebPushSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?` - sqliteDeleteWebPushSubscriptionTopicWithoutSubscriptionQuery = `DELETE FROM subscription_topic WHERE subscription_id NOT IN (SELECT id FROM subscription)` + sqliteInsertSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)` + sqliteDeleteSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?` + sqliteDeleteSubscriptionTopicWithoutSubscriptionQuery = `DELETE FROM subscription_topic WHERE subscription_id NOT IN (SELECT id FROM subscription)` ) // SQLite schema management queries const ( - sqliteCurrentWebPushSchemaVersion = 1 - sqliteInsertWebPushSchemaVersionQuery = `INSERT INTO schemaVersion VALUES (1, ?)` - sqliteSelectWebPushSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1` + sqliteCurrentSchemaVersion = 1 + sqliteInsertSchemaVersionQuery = `INSERT INTO schemaVersion VALUES (1, ?)` + sqliteSelectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1` ) // NewSQLiteStore creates a new SQLite-backed web push store. @@ -90,31 +90,31 @@ func NewSQLiteStore(filename, startupQueries string) (*Store, error) { return &Store{ db: db, queries: queries{ - selectSubscriptionIDByEndpoint: sqliteSelectWebPushSubscriptionIDByEndpointQuery, - selectSubscriptionCountBySubscriberIP: sqliteSelectWebPushSubscriptionCountBySubscriberIPQuery, - selectSubscriptionsForTopic: sqliteSelectWebPushSubscriptionsForTopicQuery, - selectSubscriptionsExpiringSoon: sqliteSelectWebPushSubscriptionsExpiringSoonQuery, - upsertSubscription: sqliteInsertWebPushSubscriptionQuery, - updateSubscriptionWarningSent: sqliteUpdateWebPushSubscriptionWarningSentQuery, - updateSubscriptionUpdatedAt: sqliteUpdateWebPushSubscriptionUpdatedAtQuery, - deleteSubscriptionByEndpoint: sqliteDeleteWebPushSubscriptionByEndpointQuery, - deleteSubscriptionByUserID: sqliteDeleteWebPushSubscriptionByUserIDQuery, - deleteSubscriptionByAge: sqliteDeleteWebPushSubscriptionByAgeQuery, - insertSubscriptionTopic: sqliteInsertWebPushSubscriptionTopicQuery, - deleteSubscriptionTopicAll: sqliteDeleteWebPushSubscriptionTopicAllQuery, - deleteSubscriptionTopicWithoutSubscription: sqliteDeleteWebPushSubscriptionTopicWithoutSubscriptionQuery, + selectSubscriptionIDByEndpoint: sqliteSelectSubscriptionIDByEndpointQuery, + selectSubscriptionCountBySubscriberIP: sqliteSelectSubscriptionCountBySubscriberIPQuery, + selectSubscriptionsForTopic: sqliteSelectSubscriptionsForTopicQuery, + selectSubscriptionsExpiringSoon: sqliteSelectSubscriptionsExpiringSoonQuery, + upsertSubscription: sqliteUpsertSubscriptionQuery, + updateSubscriptionWarningSent: sqliteUpdateSubscriptionWarningSentQuery, + updateSubscriptionUpdatedAt: sqliteUpdateSubscriptionUpdatedAtQuery, + deleteSubscriptionByEndpoint: sqliteDeleteSubscriptionByEndpointQuery, + deleteSubscriptionByUserID: sqliteDeleteSubscriptionByUserIDQuery, + deleteSubscriptionByAge: sqliteDeleteSubscriptionByAgeQuery, + insertSubscriptionTopic: sqliteInsertSubscriptionTopicQuery, + deleteSubscriptionTopicAll: sqliteDeleteSubscriptionTopicAllQuery, + deleteSubscriptionTopicWithoutSubscription: sqliteDeleteSubscriptionTopicWithoutSubscriptionQuery, }, }, nil } func setupSQLite(db *sql.DB) error { var schemaVersion int - err := db.QueryRow(sqliteSelectWebPushSchemaVersionQuery).Scan(&schemaVersion) + err := db.QueryRow(sqliteSelectSchemaVersionQuery).Scan(&schemaVersion) if err != nil { return setupNewSQLite(db) } - if schemaVersion > sqliteCurrentWebPushSchemaVersion { - return fmt.Errorf("unexpected schema version: version %d is higher than current version %d", schemaVersion, sqliteCurrentWebPushSchemaVersion) + if schemaVersion > sqliteCurrentSchemaVersion { + return fmt.Errorf("unexpected schema version: version %d is higher than current version %d", schemaVersion, sqliteCurrentSchemaVersion) } return nil } @@ -125,10 +125,10 @@ func setupNewSQLite(db *sql.DB) error { return err } defer tx.Rollback() - if _, err := tx.Exec(sqliteCreateWebPushSubscriptionsTableQuery); err != nil { + if _, err := tx.Exec(sqliteCreateTablesQuery); err != nil { return err } - if _, err := tx.Exec(sqliteInsertWebPushSchemaVersionQuery, sqliteCurrentWebPushSchemaVersion); err != nil { + if _, err := tx.Exec(sqliteInsertSchemaVersionQuery, sqliteCurrentSchemaVersion); err != nil { return err } return tx.Commit()