From 5c921476f9ece24cb1884a14f2d96d7ab67a62ea Mon Sep 17 00:00:00 2001 From: Till Faelligen Date: Thu, 1 Oct 2020 22:04:06 +0200 Subject: [PATCH] Rename column Prepare statements --- .../deltas/20201001204705_last_seen_ts_ip.sql | 4 ++-- .../storage/devices/postgres/devices_table.go | 16 +++++++++++++++- .../deltas/20201001204705_last_seen_ts_ip.sql | 4 ++-- userapi/storage/devices/sqlite3/devices_table.go | 16 +++++++++++++++- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/userapi/storage/devices/postgres/deltas/20201001204705_last_seen_ts_ip.sql b/userapi/storage/devices/postgres/deltas/20201001204705_last_seen_ts_ip.sql index 5527cbee7..391572ee6 100644 --- a/userapi/storage/devices/postgres/deltas/20201001204705_last_seen_ts_ip.sql +++ b/userapi/storage/devices/postgres/deltas/20201001204705_last_seen_ts_ip.sql @@ -1,11 +1,11 @@ -- +goose Up -- +goose StatementBegin -ALTER TABLE device_devices ADD COLUMN last_used_ts BIGINT NOT NULL; +ALTER TABLE device_devices ADD COLUMN last_seen_ts BIGINT NOT NULL; ALTER TABLE device_devices ADD COLUMN ip TEXT; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin -ALTER TABLE device_devices DROP COLUMN last_used_ts; +ALTER TABLE device_devices DROP COLUMN last_seen_ts; ALTER TABLE device_devices DROP COLUMN ip; -- +goose StatementEnd diff --git a/userapi/storage/devices/postgres/devices_table.go b/userapi/storage/devices/postgres/devices_table.go index ce17b27cc..0aa8de6cb 100644 --- a/userapi/storage/devices/postgres/devices_table.go +++ b/userapi/storage/devices/postgres/devices_table.go @@ -53,7 +53,7 @@ CREATE TABLE IF NOT EXISTS device_devices ( -- The display name, human friendlier than device_id and updatable display_name TEXT, -- The time the device was last used, as a unix timestamp (ms resolution). - last_used_ts BIGINT NOT NULL, + last_seen_ts BIGINT NOT NULL, -- The last seen IP address of this device ip TEXT @@ -92,6 +92,9 @@ const deleteDevicesSQL = "" + const selectDevicesByIDSQL = "" + "SELECT device_id, localpart, display_name FROM device_devices WHERE device_id = ANY($1)" +const updateDeviceLastSeen = "" + + "UPDATE device_devices SET last_seen_ts = $1, ip = $2 WHERE device_id = $3" + type devicesStatements struct { insertDeviceStmt *sql.Stmt selectDeviceByTokenStmt *sql.Stmt @@ -99,6 +102,7 @@ type devicesStatements struct { selectDevicesByLocalpartStmt *sql.Stmt selectDevicesByIDStmt *sql.Stmt updateDeviceNameStmt *sql.Stmt + updateDeviceLastSeenStmt *sql.Stmt deleteDeviceStmt *sql.Stmt deleteDevicesByLocalpartStmt *sql.Stmt deleteDevicesStmt *sql.Stmt @@ -137,6 +141,9 @@ func (s *devicesStatements) prepare(db *sql.DB, server gomatrixserverlib.ServerN if s.selectDevicesByIDStmt, err = db.Prepare(selectDevicesByIDSQL); err != nil { return } + if s.updateDeviceLastSeenStmt, err = db.Prepare(updateDeviceLastSeen); err != nil { + return + } s.serverName = server return } @@ -287,3 +294,10 @@ func (s *devicesStatements) selectDevicesByLocalpart( return devices, rows.Err() } + +func (s *devicesStatements) updateDeviceLastSeen(ctx context.Context, txn *sql.Tx, deviceID, ipAddr string) error { + lastSeenTs := time.Now().UnixNano() / 1000000 + stmt := sqlutil.TxStmt(txn, s.updateDeviceLastSeenStmt) + _, err := stmt.ExecContext(ctx, lastSeenTs, ipAddr, deviceID) + return err +} diff --git a/userapi/storage/devices/sqlite3/deltas/20201001204705_last_seen_ts_ip.sql b/userapi/storage/devices/sqlite3/deltas/20201001204705_last_seen_ts_ip.sql index b7c2f9647..4994bd3db 100644 --- a/userapi/storage/devices/sqlite3/deltas/20201001204705_last_seen_ts_ip.sql +++ b/userapi/storage/devices/sqlite3/deltas/20201001204705_last_seen_ts_ip.sql @@ -8,13 +8,13 @@ CREATE TABLE device_devices ( localpart TEXT , created_ts BIGINT, display_name TEXT, - last_used_ts BIGINT, + last_seen_ts BIGINT, ip TEXT, UNIQUE (localpart, device_id) ); INSERT INTO device_devices ( - access_token, session_id, device_id, localpart, created_ts, display_name, last_used_ts, ip + access_token, session_id, device_id, localpart, created_ts, display_name, last_seen_ts, ip ) SELECT access_token, session_id, device_id, localpart, created_ts, display_name, created_ts, '' FROM device_devices_tmp; diff --git a/userapi/storage/devices/sqlite3/devices_table.go b/userapi/storage/devices/sqlite3/devices_table.go index 215dec0ea..0d1154f1d 100644 --- a/userapi/storage/devices/sqlite3/devices_table.go +++ b/userapi/storage/devices/sqlite3/devices_table.go @@ -40,7 +40,7 @@ CREATE TABLE IF NOT EXISTS device_devices ( localpart TEXT , created_ts BIGINT, display_name TEXT, - last_used_ts BIGINT, + last_seen_ts BIGINT, ip TEXT, UNIQUE (localpart, device_id) @@ -78,6 +78,9 @@ const deleteDevicesSQL = "" + const selectDevicesByIDSQL = "" + "SELECT device_id, localpart, display_name FROM device_devices WHERE device_id IN ($1)" +const updateDeviceLastSeen = "" + + "UPDATE device_devices SET last_seen_ts = $1, ip = $2 WHERE device_id = $3" + type devicesStatements struct { db *sql.DB writer sqlutil.Writer @@ -88,6 +91,7 @@ type devicesStatements struct { selectDevicesByIDStmt *sql.Stmt selectDevicesByLocalpartStmt *sql.Stmt updateDeviceNameStmt *sql.Stmt + updateDeviceLastSeenStmt *sql.Stmt deleteDeviceStmt *sql.Stmt deleteDevicesByLocalpartStmt *sql.Stmt serverName gomatrixserverlib.ServerName @@ -127,6 +131,9 @@ func (s *devicesStatements) prepare(db *sql.DB, writer sqlutil.Writer, server go if s.selectDevicesByIDStmt, err = db.Prepare(selectDevicesByIDSQL); err != nil { return } + if s.updateDeviceLastSeenStmt, err = db.Prepare(updateDeviceLastSeen); err != nil { + return + } s.serverName = server return } @@ -292,3 +299,10 @@ func (s *devicesStatements) selectDevicesByID(ctx context.Context, deviceIDs []s } return devices, rows.Err() } + +func (s *devicesStatements) updateDeviceLastSeen(ctx context.Context, txn *sql.Tx, deviceID, ipAddr string) error { + lastSeenTs := time.Now().UnixNano() / 1000000 + stmt := sqlutil.TxStmt(txn, s.updateDeviceLastSeenStmt) + _, err := stmt.ExecContext(ctx, lastSeenTs, ipAddr, deviceID) + return err +}