fix in queries

This commit is contained in:
Mateusz Gruszczyński
2026-07-27 18:04:22 +02:00
parent 84497da819
commit 2538e97fe2
10 changed files with 683 additions and 327 deletions
+274
View File
@@ -0,0 +1,274 @@
use crate::database::DatabaseKind;
mod mysql;
mod postgres;
mod sqlite;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[allow(non_camel_case_types)]
pub enum Query {
SQLITE_FOREIGN_KEYS_ON,
SQLITE_JOURNAL_WAL,
SQLITE_BUSY_TIMEOUT,
SQLITE_LAST_INSERT_ID,
MYSQL_LAST_INSERT_ID,
POSTGRES_NOTE_REVISION_LAST_INSERT_ID,
POSTGRES_PAD_REVISION_LAST_INSERT_ID,
AUTH_LATEST_CONFIRMATION_CREATED_AT,
AUTH_UPDATE_NICKNAME,
AUTH_UPDATE_EDITOR_COLOR,
AUTH_EDITOR_COLOR_BY_USER,
RESOURCE_COLOR_BY_USER,
RESOURCE_COLOR_DELETE,
RESOURCE_COLOR_INSERT,
AUTH_ACCOUNT_ACTION_BY_TOKEN,
AUTH_CONSUME_ACCOUNT_ACTION,
AUTH_UPDATE_EMAIL,
AUTH_DELETE_ACCOUNT_ACTIONS,
AUTH_INSERT_ACCOUNT_ACTION,
AUTH_DELETE_EXPIRED_UNCONFIRMED_USERS,
AUTH_INSERT_USER,
AUTH_INSERT_DIRECTORY_USER,
AUTH_UPDATE_DIRECTORY_USER,
AUTH_DIRECTORY_PROFILE_BY_USER,
AUTH_USER_BY_EXTERNAL_ID,
AUTH_DELETE_USER,
AUTH_SESSION_EXPIRES_AT,
AUTH_DELETE_SESSION_BY_TOKEN,
AUTH_REFRESH_SESSION,
AUTH_DELETE_CONFIRMATION_TOKENS_BY_USER,
AUTH_INSERT_CONFIRMATION_TOKEN,
AUTH_FIND_CONFIRMATION_TOKEN,
AUTH_CONFIRM_USER,
AUTH_CONSUME_CONFIRMATION_TOKEN,
AUTH_DELETE_RESET_TOKENS_BY_USER,
AUTH_INSERT_RESET_TOKEN,
AUTH_FIND_RESET_TOKEN,
AUTH_UPDATE_PASSWORD,
AUTH_CONSUME_RESET_TOKEN,
AUTH_DELETE_SESSIONS_BY_USER,
AUTH_USER_BY_SESSION,
AUTH_INSERT_SESSION,
AUTH_USER_BY_NICKNAME,
AUTH_USER_BY_EMAIL,
USER_ATTACH_WORKSPACE,
USER_ATTACH_PAD,
USER_LIST_WORKSPACES,
USER_LIST_PADS,
USER_OWNS_WORKSPACE,
USER_OWNS_PAD,
USER_DELETE_WORKSPACE,
USER_DELETE_PAD,
USER_SET_WORKSPACE_PASSWORD,
USER_SET_PAD_PASSWORD,
USER_SET_WORKSPACE_PRIVACY,
USER_SET_PAD_PRIVACY,
RESOURCE_ACCESS_TOKENS_DELETE_BY_RESOURCE,
RESOURCE_ACCESS_TOKENS_INSERT,
RESOURCE_ACCESS_TOKENS_VALID_COUNT,
RESOURCE_PERMISSION_DELETE_USER,
RESOURCE_PERMISSION_INSERT,
SHARE_INVITATION_DELETE_USER,
SHARE_INVITATION_INSERT,
SHARE_INVITATION_DELETE_TOKEN,
SHARE_INVITATION_FIND_TOKEN,
SHARE_INVITATION_ACCEPT,
RESOURCE_SHARING_USERS,
RESOURCE_SHARING_LINKS,
RESOURCE_SHARING_PENDING,
SHARE_LINK_INSERT,
SHARE_LINK_UPDATE,
SHARE_LINK_REVOKE,
RESOURCE_PERMISSION_BY_USER,
SHARE_LINK_PERMISSION,
Q001,
Q002,
Q003,
Q004,
Q005,
Q006,
Q007,
Q008,
Q009,
Q010,
Q011,
Q012,
Q013,
Q014,
Q015,
Q016,
Q017,
Q018,
Q019,
Q020,
Q021,
Q022,
Q023,
Q024,
Q025,
Q026,
Q027,
Q028,
Q029,
Q030,
Q031,
Q032,
Q033,
Q034,
Q035,
Q036,
Q037,
Q038,
Q039,
Q046,
Q047,
Q040,
Q041,
Q042,
Q043,
Q044,
Q045,
}
pub fn get(kind: DatabaseKind, query: Query) -> &'static str {
match kind {
DatabaseKind::Sqlite => sqlite::get(query),
DatabaseKind::Postgres => postgres::get(query),
DatabaseKind::MySql => mysql::get(query),
}
}
pub const SQLITE_FOREIGN_KEYS_ON: Query = Query::SQLITE_FOREIGN_KEYS_ON;
pub const SQLITE_JOURNAL_WAL: Query = Query::SQLITE_JOURNAL_WAL;
pub const SQLITE_BUSY_TIMEOUT: Query = Query::SQLITE_BUSY_TIMEOUT;
pub const SQLITE_LAST_INSERT_ID: Query = Query::SQLITE_LAST_INSERT_ID;
pub const MYSQL_LAST_INSERT_ID: Query = Query::MYSQL_LAST_INSERT_ID;
pub const POSTGRES_NOTE_REVISION_LAST_INSERT_ID: Query = Query::POSTGRES_NOTE_REVISION_LAST_INSERT_ID;
pub const POSTGRES_PAD_REVISION_LAST_INSERT_ID: Query = Query::POSTGRES_PAD_REVISION_LAST_INSERT_ID;
pub const AUTH_LATEST_CONFIRMATION_CREATED_AT: Query = Query::AUTH_LATEST_CONFIRMATION_CREATED_AT;
pub const AUTH_UPDATE_NICKNAME: Query = Query::AUTH_UPDATE_NICKNAME;
pub const AUTH_UPDATE_EDITOR_COLOR: Query = Query::AUTH_UPDATE_EDITOR_COLOR;
pub const AUTH_EDITOR_COLOR_BY_USER: Query = Query::AUTH_EDITOR_COLOR_BY_USER;
pub const RESOURCE_COLOR_BY_USER: Query = Query::RESOURCE_COLOR_BY_USER;
pub const RESOURCE_COLOR_DELETE: Query = Query::RESOURCE_COLOR_DELETE;
pub const RESOURCE_COLOR_INSERT: Query = Query::RESOURCE_COLOR_INSERT;
pub const AUTH_ACCOUNT_ACTION_BY_TOKEN: Query = Query::AUTH_ACCOUNT_ACTION_BY_TOKEN;
pub const AUTH_CONSUME_ACCOUNT_ACTION: Query = Query::AUTH_CONSUME_ACCOUNT_ACTION;
pub const AUTH_UPDATE_EMAIL: Query = Query::AUTH_UPDATE_EMAIL;
pub const AUTH_DELETE_ACCOUNT_ACTIONS: Query = Query::AUTH_DELETE_ACCOUNT_ACTIONS;
pub const AUTH_INSERT_ACCOUNT_ACTION: Query = Query::AUTH_INSERT_ACCOUNT_ACTION;
pub const AUTH_DELETE_EXPIRED_UNCONFIRMED_USERS: Query = Query::AUTH_DELETE_EXPIRED_UNCONFIRMED_USERS;
pub const AUTH_INSERT_USER: Query = Query::AUTH_INSERT_USER;
pub const AUTH_INSERT_DIRECTORY_USER: Query = Query::AUTH_INSERT_DIRECTORY_USER;
pub const AUTH_UPDATE_DIRECTORY_USER: Query = Query::AUTH_UPDATE_DIRECTORY_USER;
pub const AUTH_DIRECTORY_PROFILE_BY_USER: Query = Query::AUTH_DIRECTORY_PROFILE_BY_USER;
pub const AUTH_USER_BY_EXTERNAL_ID: Query = Query::AUTH_USER_BY_EXTERNAL_ID;
pub const AUTH_DELETE_USER: Query = Query::AUTH_DELETE_USER;
pub const AUTH_SESSION_EXPIRES_AT: Query = Query::AUTH_SESSION_EXPIRES_AT;
pub const AUTH_DELETE_SESSION_BY_TOKEN: Query = Query::AUTH_DELETE_SESSION_BY_TOKEN;
pub const AUTH_REFRESH_SESSION: Query = Query::AUTH_REFRESH_SESSION;
pub const AUTH_DELETE_CONFIRMATION_TOKENS_BY_USER: Query = Query::AUTH_DELETE_CONFIRMATION_TOKENS_BY_USER;
pub const AUTH_INSERT_CONFIRMATION_TOKEN: Query = Query::AUTH_INSERT_CONFIRMATION_TOKEN;
pub const AUTH_FIND_CONFIRMATION_TOKEN: Query = Query::AUTH_FIND_CONFIRMATION_TOKEN;
pub const AUTH_CONFIRM_USER: Query = Query::AUTH_CONFIRM_USER;
pub const AUTH_CONSUME_CONFIRMATION_TOKEN: Query = Query::AUTH_CONSUME_CONFIRMATION_TOKEN;
pub const AUTH_DELETE_RESET_TOKENS_BY_USER: Query = Query::AUTH_DELETE_RESET_TOKENS_BY_USER;
pub const AUTH_INSERT_RESET_TOKEN: Query = Query::AUTH_INSERT_RESET_TOKEN;
pub const AUTH_FIND_RESET_TOKEN: Query = Query::AUTH_FIND_RESET_TOKEN;
pub const AUTH_UPDATE_PASSWORD: Query = Query::AUTH_UPDATE_PASSWORD;
pub const AUTH_CONSUME_RESET_TOKEN: Query = Query::AUTH_CONSUME_RESET_TOKEN;
pub const AUTH_DELETE_SESSIONS_BY_USER: Query = Query::AUTH_DELETE_SESSIONS_BY_USER;
pub const AUTH_USER_BY_SESSION: Query = Query::AUTH_USER_BY_SESSION;
pub const AUTH_INSERT_SESSION: Query = Query::AUTH_INSERT_SESSION;
pub const AUTH_USER_BY_NICKNAME: Query = Query::AUTH_USER_BY_NICKNAME;
pub const AUTH_USER_BY_EMAIL: Query = Query::AUTH_USER_BY_EMAIL;
pub const USER_ATTACH_WORKSPACE: Query = Query::USER_ATTACH_WORKSPACE;
pub const USER_ATTACH_PAD: Query = Query::USER_ATTACH_PAD;
pub const USER_LIST_WORKSPACES: Query = Query::USER_LIST_WORKSPACES;
pub const USER_LIST_PADS: Query = Query::USER_LIST_PADS;
pub const USER_OWNS_WORKSPACE: Query = Query::USER_OWNS_WORKSPACE;
pub const USER_OWNS_PAD: Query = Query::USER_OWNS_PAD;
pub const USER_DELETE_WORKSPACE: Query = Query::USER_DELETE_WORKSPACE;
pub const USER_DELETE_PAD: Query = Query::USER_DELETE_PAD;
pub const USER_SET_WORKSPACE_PASSWORD: Query = Query::USER_SET_WORKSPACE_PASSWORD;
pub const USER_SET_PAD_PASSWORD: Query = Query::USER_SET_PAD_PASSWORD;
pub const USER_SET_WORKSPACE_PRIVACY: Query = Query::USER_SET_WORKSPACE_PRIVACY;
pub const USER_SET_PAD_PRIVACY: Query = Query::USER_SET_PAD_PRIVACY;
pub const RESOURCE_ACCESS_TOKENS_DELETE_BY_RESOURCE: Query = Query::RESOURCE_ACCESS_TOKENS_DELETE_BY_RESOURCE;
pub const RESOURCE_ACCESS_TOKENS_INSERT: Query = Query::RESOURCE_ACCESS_TOKENS_INSERT;
pub const RESOURCE_ACCESS_TOKENS_VALID_COUNT: Query = Query::RESOURCE_ACCESS_TOKENS_VALID_COUNT;
pub const RESOURCE_PERMISSION_DELETE_USER: Query = Query::RESOURCE_PERMISSION_DELETE_USER;
pub const RESOURCE_PERMISSION_INSERT: Query = Query::RESOURCE_PERMISSION_INSERT;
pub const SHARE_INVITATION_DELETE_USER: Query = Query::SHARE_INVITATION_DELETE_USER;
pub const SHARE_INVITATION_INSERT: Query = Query::SHARE_INVITATION_INSERT;
pub const SHARE_INVITATION_DELETE_TOKEN: Query = Query::SHARE_INVITATION_DELETE_TOKEN;
pub const SHARE_INVITATION_FIND_TOKEN: Query = Query::SHARE_INVITATION_FIND_TOKEN;
pub const SHARE_INVITATION_ACCEPT: Query = Query::SHARE_INVITATION_ACCEPT;
pub const RESOURCE_SHARING_USERS: Query = Query::RESOURCE_SHARING_USERS;
pub const RESOURCE_SHARING_LINKS: Query = Query::RESOURCE_SHARING_LINKS;
pub const RESOURCE_SHARING_PENDING: Query = Query::RESOURCE_SHARING_PENDING;
pub const SHARE_LINK_INSERT: Query = Query::SHARE_LINK_INSERT;
pub const SHARE_LINK_UPDATE: Query = Query::SHARE_LINK_UPDATE;
pub const SHARE_LINK_REVOKE: Query = Query::SHARE_LINK_REVOKE;
pub const RESOURCE_PERMISSION_BY_USER: Query = Query::RESOURCE_PERMISSION_BY_USER;
pub const SHARE_LINK_PERMISSION: Query = Query::SHARE_LINK_PERMISSION;
pub const Q001: Query = Query::Q001;
pub const Q002: Query = Query::Q002;
pub const Q003: Query = Query::Q003;
pub const Q004: Query = Query::Q004;
pub const Q005: Query = Query::Q005;
pub const Q006: Query = Query::Q006;
pub const Q007: Query = Query::Q007;
pub const Q008: Query = Query::Q008;
pub const Q009: Query = Query::Q009;
pub const Q010: Query = Query::Q010;
pub const Q011: Query = Query::Q011;
pub const Q012: Query = Query::Q012;
pub const Q013: Query = Query::Q013;
pub const Q014: Query = Query::Q014;
pub const Q015: Query = Query::Q015;
pub const Q016: Query = Query::Q016;
pub const Q017: Query = Query::Q017;
pub const Q018: Query = Query::Q018;
pub const Q019: Query = Query::Q019;
pub const Q020: Query = Query::Q020;
pub const Q021: Query = Query::Q021;
pub const Q022: Query = Query::Q022;
pub const Q023: Query = Query::Q023;
pub const Q024: Query = Query::Q024;
pub const Q025: Query = Query::Q025;
pub const Q026: Query = Query::Q026;
pub const Q027: Query = Query::Q027;
pub const Q028: Query = Query::Q028;
pub const Q029: Query = Query::Q029;
pub const Q030: Query = Query::Q030;
pub const Q031: Query = Query::Q031;
pub const Q032: Query = Query::Q032;
pub const Q033: Query = Query::Q033;
pub const Q034: Query = Query::Q034;
pub const Q035: Query = Query::Q035;
pub const Q036: Query = Query::Q036;
pub const Q037: Query = Query::Q037;
pub const Q038: Query = Query::Q038;
pub const Q039: Query = Query::Q039;
pub const Q046: Query = Query::Q046;
pub const Q047: Query = Query::Q047;
pub const Q040: Query = Query::Q040;
pub const Q041: Query = Query::Q041;
pub const Q042: Query = Query::Q042;
pub const Q043: Query = Query::Q043;
pub const Q044: Query = Query::Q044;
pub const Q045: Query = Query::Q045;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_backend_has_explicit_queries() {
for query in [Q001, Q003, Q004, Q011, Q021, Q033, USER_LIST_WORKSPACES, USER_LIST_PADS] {
assert!(!get(DatabaseKind::Sqlite, query).is_empty());
assert!(!get(DatabaseKind::Postgres, query).is_empty());
assert!(!get(DatabaseKind::MySql, query).is_empty());
}
}
}