Rename column

Prepare statements
This commit is contained in:
Till Faelligen 2020-10-01 22:04:06 +02:00
parent ae09b09a8b
commit 5c921476f9
4 changed files with 34 additions and 6 deletions

View file

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

View file

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

View file

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

View file

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