Skip to content

Commit a21b5e4

Browse files
committed
refactor: Move tokenserver SQL strings into subcrates
1 parent efb9172 commit a21b5e4

File tree

5 files changed

+245
-180
lines changed

5 files changed

+245
-180
lines changed

tokenserver-db-mysql/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ extern crate diesel;
33
extern crate diesel_migrations;
44

55
pub mod pool;
6+
pub mod models;

tokenserver-db-mysql/src/models.rs

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
pub const LAST_INSERT_ID_QUERY: &'static str = "SELECT LAST_INSERT_ID() AS id";
2+
pub const GET_NODE_ID_SYNC_QUERY: &str = r#"
3+
SELECT id
4+
FROM nodes
5+
WHERE service = ?
6+
AND node = ?"#;
7+
pub const REPLACE_USERS_SYNC_QUERY: &str = r#"
8+
UPDATE users
9+
SET replaced_at = ?
10+
WHERE service = ?
11+
AND email = ?
12+
AND replaced_at IS NULL
13+
AND created_at < ?"#;
14+
pub const REPLACE_USER_SYNC_QUERY: &str = r#"
15+
UPDATE users
16+
SET replaced_at = ?
17+
WHERE service = ?
18+
AND uid = ?"#;
19+
// The `where` clause on this statement is designed as an extra layer of
20+
// protection, to ensure that concurrent updates don't accidentally move
21+
// timestamp fields backwards in time. The handling of `keys_changed_at`
22+
// is additionally weird because we want to treat the default `NULL` value
23+
// as zero.
24+
pub const PUT_USER_SYNC_QUERY: &str = r#"
25+
UPDATE users
26+
SET generation = ?,
27+
keys_changed_at = ?
28+
WHERE service = ?
29+
AND email = ?
30+
AND generation <= ?
31+
AND COALESCE(keys_changed_at, 0) <= COALESCE(?, keys_changed_at, 0)
32+
AND replaced_at IS NULL"#;
33+
pub const POST_USER_SYNC_QUERY: &str = r#"
34+
INSERT INTO users (service, email, generation, client_state, created_at, nodeid, keys_changed_at, replaced_at)
35+
VALUES (?, ?, ?, ?, ?, ?, ?, NULL);"#;
36+
pub const CHECK_SYNC_QUERY: &str = "SHOW STATUS LIKE \"Uptime\"";
37+
pub const GET_BEST_NODE_QUERY: &str = r#"
38+
SELECT id, node
39+
FROM nodes
40+
WHERE service = ?
41+
AND available > 0
42+
AND capacity > current_load
43+
AND downed = 0
44+
AND backoff = 0
45+
ORDER BY LOG(current_load) / LOG(capacity)
46+
LIMIT 1"#;
47+
pub const GET_BEST_NODE_RELEASE_CAPACITY_QUERY: &str = r#"
48+
UPDATE nodes
49+
SET available = LEAST(capacity * ?, capacity - current_load)
50+
WHERE service = ?
51+
AND available <= 0
52+
AND capacity > current_load
53+
AND downed = 0"#;
54+
pub const GET_BEST_NODE_SPANNER_QUERY: &str = r#"
55+
SELECT id, node
56+
FROM nodes
57+
WHERE id = ?
58+
LIMIT 1"#;
59+
pub const ADD_USER_TO_NODE_SYNC_QUERY: &str = r#"
60+
UPDATE nodes
61+
SET current_load = current_load + 1,
62+
available = GREATEST(available - 1, 0)
63+
WHERE service = ?
64+
AND node = ?"#;
65+
pub const ADD_USER_TO_NODE_SYNC_SPANNER_QUERY: &str = r#"
66+
UPDATE nodes
67+
SET current_load = current_load + 1
68+
WHERE service = ?
69+
AND node = ?"#;
70+
pub const GET_USERS_SYNC_QUERY: &str = r#"
71+
SELECT uid, nodes.node, generation, keys_changed_at, client_state, created_at, replaced_at
72+
FROM users
73+
LEFT OUTER JOIN nodes ON users.nodeid = nodes.id
74+
WHERE email = ?
75+
AND users.service = ?
76+
ORDER BY created_at DESC, uid DESC
77+
LIMIT 20"#;
78+
pub const GET_SERVICE_ID_SYNC_QUERY: &str = r#"
79+
SELECT id
80+
FROM services
81+
WHERE service = ?"#;
82+
pub const SET_USER_CREATED_AT_SYNC_QUERY: &str = r#"
83+
UPDATE users
84+
SET created_at = ?
85+
WHERE uid = ?"#;
86+
pub const SET_USER_REPLACED_AT_SYNC_QUERY: &str = r#"
87+
UPDATE users
88+
SET replaced_at = ?
89+
WHERE uid = ?"#;
90+
pub const GET_USER_SYNC_QUERY: &str = r#"
91+
SELECT service, email, generation, client_state, replaced_at, nodeid, keys_changed_at
92+
FROM users
93+
WHERE uid = ?"#;
94+
pub const POST_NODE_SYNC_QUERY: &str = r#"
95+
INSERT INTO nodes (service, node, available, current_load, capacity, downed, backoff)
96+
VALUES (?, ?, ?, ?, ?, ?, ?)"#;
97+
pub const GET_NODE_SYNC_QUERY: &str = r#"
98+
SELECT *
99+
FROM nodes
100+
WHERE id = ?"#;
101+
pub const UNASSIGNED_NODE_SYNC_QUERY: &str = r#"
102+
UPDATE users
103+
SET replaced_at = ?
104+
WHERE nodeid = ?"#;
105+
pub const REMOVE_NODE_SYNC_QUERY: &str = "DELETE FROM nodes WHERE id = ?";
106+
pub const POST_SERVICE_INSERT_SERVICE_QUERY: &str = r#"
107+
INSERT INTO services (service, pattern)
108+
VALUES (?, ?)"#;

tokenserver-db-sqlite/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ extern crate diesel;
33
extern crate diesel_migrations;
44

55
pub mod pool;
6+
pub mod models;
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
pub const LAST_INSERT_ID_QUERY: &'static str = "SELECT LAST_INSERT_ROWID() AS id";
2+
pub const GET_NODE_ID_SYNC_QUERY: &str = r#"
3+
SELECT rowid as id
4+
FROM nodes
5+
WHERE service = ?
6+
AND node = ?"#;
7+
pub const REPLACE_USERS_SYNC_QUERY: &str = r#"
8+
UPDATE users
9+
SET replaced_at = ?
10+
WHERE service = ?
11+
AND email = ?
12+
AND replaced_at IS NULL
13+
AND created_at < ?"#;
14+
pub const REPLACE_USER_SYNC_QUERY: &str = r#"
15+
UPDATE users
16+
SET replaced_at = ?
17+
WHERE service = ?
18+
AND uid = ?"#;
19+
// The `where` clause on this statement is designed as an extra layer of
20+
// protection, to ensure that concurrent updates don't accidentally move
21+
// timestamp fields backwards in time. The handling of `keys_changed_at`
22+
// is additionally weird because we want to treat the default `NULL` value
23+
// as zero.
24+
pub const PUT_USER_SYNC_QUERY: &str = r#"
25+
UPDATE users
26+
SET generation = ?,
27+
keys_changed_at = ?
28+
WHERE service = ?
29+
AND email = ?
30+
AND generation <= ?
31+
AND COALESCE(keys_changed_at, 0) <= COALESCE(?, keys_changed_at, 0)
32+
AND replaced_at IS NULL"#;
33+
pub const POST_USER_SYNC_QUERY: &str = r#"
34+
INSERT INTO users (service, email, generation, client_state, created_at, nodeid, keys_changed_at, replaced_at)
35+
VALUES (?, ?, ?, ?, ?, ?, ?, ?);"#;
36+
pub const CHECK_SYNC_QUERY: &str = "SHOW STATUS LIKE \"Uptime\"";
37+
pub const GET_BEST_NODE_QUERY: &str = r#"
38+
SELECT id, node
39+
FROM nodes
40+
WHERE service = ?
41+
AND available > 0
42+
AND capacity > current_load
43+
AND downed = 0
44+
AND backoff = 0
45+
ORDER BY LOG(current_load) / LOG(capacity)
46+
LIMIT 1"#;
47+
pub const GET_BEST_NODE_RELEASE_CAPACITY_QUERY: &str = r#"
48+
UPDATE nodes
49+
SET available = LEAST(capacity * ?, capacity - current_load)
50+
WHERE service = ?
51+
AND available <= 0
52+
AND capacity > current_load
53+
AND downed = 0"#;
54+
pub const GET_BEST_NODE_SPANNER_QUERY: &str = r#"
55+
SELECT id, node
56+
FROM nodes
57+
WHERE id = ?
58+
LIMIT 1"#;
59+
pub const ADD_USER_TO_NODE_SYNC_QUERY: &str = r#"
60+
UPDATE nodes
61+
SET current_load = current_load + 1,
62+
available = GREATEST(available - 1, 0)
63+
WHERE service = ?
64+
AND node = ?"#;
65+
pub const ADD_USER_TO_NODE_SYNC_SPANNER_QUERY: &str = r#"
66+
UPDATE nodes
67+
SET current_load = current_load + 1
68+
WHERE service = ?
69+
AND node = ?"#;
70+
pub const GET_USERS_SYNC_QUERY: &str = r#"
71+
SELECT uid, nodes.node, generation, keys_changed_at, client_state, created_at, replaced_at
72+
FROM users
73+
LEFT OUTER JOIN nodes ON users.nodeid = nodes.id
74+
WHERE email = ?
75+
AND users.service = ?
76+
ORDER BY created_at DESC, uid DESC
77+
LIMIT 20"#;
78+
pub const GET_SERVICE_ID_SYNC_QUERY: &str = r#"
79+
SELECT id
80+
FROM services
81+
WHERE service = ?"#;
82+
pub const SET_USER_CREATED_AT_SYNC_QUERY: &str = r#"
83+
UPDATE users
84+
SET created_at = ?
85+
WHERE uid = ?"#;
86+
pub const SET_USER_REPLACED_AT_SYNC_QUERY: &str = r#"
87+
UPDATE users
88+
SET replaced_at = ?
89+
WHERE uid = ?"#;
90+
pub const GET_USER_SYNC_QUERY: &str = r#"
91+
SELECT service, email, generation, client_state, replaced_at, nodeid, keys_changed_at
92+
FROM users
93+
WHERE uid = ?"#;
94+
pub const POST_NODE_SYNC_QUERY: &str = r#"
95+
INSERT INTO nodes (service, node, available, current_load, capacity, downed, backoff)
96+
VALUES (?, ?, ?, ?, ?, ?, ?)"#;
97+
pub const GET_NODE_SYNC_QUERY: &str = r#"
98+
SELECT *
99+
FROM nodes
100+
WHERE id = ?"#;
101+
pub const UNASSIGNED_NODE_SYNC_QUERY: &str = r#"
102+
UPDATE users
103+
SET replaced_at = ?
104+
WHERE nodeid = ?"#;
105+
pub const REMOVE_NODE_SYNC_QUERY: &str = "DELETE FROM nodes WHERE id = ?";
106+
pub const POST_SERVICE_INSERT_SERVICE_QUERY: &str = r#"
107+
INSERT INTO services (service, pattern)
108+
VALUES (?, ?)"#;

0 commit comments

Comments
 (0)