|
| 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 (?, ?)"#; |
0 commit comments