/* * Copyright (C) 2026 Mateusz GruszczyƄski @linuxiarz.pl * Source-Available Code / Dual-Licensed. * * Free for non-commercial and evaluation use under terms of BSL/GPLv3. * Commercial or production use requires a valid paid license. * See LICENSE file in repository root for details. */ 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_UPDATE_THEME, AUTH_EDITOR_COLOR_BY_USER, RESOURCE_COLOR_BY_USER, RESOURCE_COLOR_DELETE, RESOURCE_COLOR_INSERT, RESOURCE_COLORS_DELETE_BY_RESOURCE, RESOURCE_COLORS_DELETE_BY_USER, RESOURCE_EDITOR_SETTINGS_SELECT, RESOURCE_EDITOR_SETTINGS_UPSERT, RESOURCE_EDITOR_SETTINGS_DELETE, EDITOR_PREFERENCES_SELECT_PAD, EDITOR_PREFERENCES_SELECT_NOTE, EDITOR_PREFERENCES_UPSERT_PAD, EDITOR_PREFERENCES_UPSERT_NOTE, EDITOR_PREFERENCES_DELETE_BY_USER, 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_ANONYMIZE_USER, AUTH_ANONYMIZE_NOTE_CREATORS, AUTH_NICKNAME_BY_ID, 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, AUTH_USER_BY_SHARE_IDENTIFIER, 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_DELETE_BY_TOKEN_HASH, 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, SHARE_LINK_SESSION_SOURCE, SHARE_SESSION_INSERT, SHARE_SESSION_PERMISSION, SHARE_SESSIONS_DELETE_BY_LINK, SHARE_SESSIONS_DELETE_EXPIRED, PAD_PUBLIC_PAGE_DISABLED, NOTE_PUBLIC_PAGE_DISABLED, 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, Q044, Q045, Q048, Q049, Q050, Q051, Q054, Q055, Q056, Q057, Q058, Q059, } 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_UPDATE_THEME: Query = Query::AUTH_UPDATE_THEME; 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 RESOURCE_COLORS_DELETE_BY_RESOURCE: Query = Query::RESOURCE_COLORS_DELETE_BY_RESOURCE; pub const RESOURCE_COLORS_DELETE_BY_USER: Query = Query::RESOURCE_COLORS_DELETE_BY_USER; pub const RESOURCE_EDITOR_SETTINGS_SELECT: Query = Query::RESOURCE_EDITOR_SETTINGS_SELECT; pub const RESOURCE_EDITOR_SETTINGS_UPSERT: Query = Query::RESOURCE_EDITOR_SETTINGS_UPSERT; pub const RESOURCE_EDITOR_SETTINGS_DELETE: Query = Query::RESOURCE_EDITOR_SETTINGS_DELETE; pub const EDITOR_PREFERENCES_SELECT_PAD: Query = Query::EDITOR_PREFERENCES_SELECT_PAD; pub const EDITOR_PREFERENCES_SELECT_NOTE: Query = Query::EDITOR_PREFERENCES_SELECT_NOTE; pub const EDITOR_PREFERENCES_UPSERT_PAD: Query = Query::EDITOR_PREFERENCES_UPSERT_PAD; pub const EDITOR_PREFERENCES_UPSERT_NOTE: Query = Query::EDITOR_PREFERENCES_UPSERT_NOTE; pub const EDITOR_PREFERENCES_DELETE_BY_USER: Query = Query::EDITOR_PREFERENCES_DELETE_BY_USER; 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_ANONYMIZE_USER: Query = Query::AUTH_ANONYMIZE_USER; pub const AUTH_ANONYMIZE_NOTE_CREATORS: Query = Query::AUTH_ANONYMIZE_NOTE_CREATORS; pub const AUTH_NICKNAME_BY_ID: Query = Query::AUTH_NICKNAME_BY_ID; 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 AUTH_USER_BY_SHARE_IDENTIFIER: Query = Query::AUTH_USER_BY_SHARE_IDENTIFIER; 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_DELETE_BY_TOKEN_HASH: Query = Query::RESOURCE_ACCESS_TOKENS_DELETE_BY_TOKEN_HASH; 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 SHARE_LINK_SESSION_SOURCE: Query = Query::SHARE_LINK_SESSION_SOURCE; pub const SHARE_SESSION_INSERT: Query = Query::SHARE_SESSION_INSERT; pub const SHARE_SESSION_PERMISSION: Query = Query::SHARE_SESSION_PERMISSION; pub const SHARE_SESSIONS_DELETE_BY_LINK: Query = Query::SHARE_SESSIONS_DELETE_BY_LINK; pub const SHARE_SESSIONS_DELETE_EXPIRED: Query = Query::SHARE_SESSIONS_DELETE_EXPIRED; pub const PAD_PUBLIC_PAGE_DISABLED: Query = Query::PAD_PUBLIC_PAGE_DISABLED; pub const NOTE_PUBLIC_PAGE_DISABLED: Query = Query::NOTE_PUBLIC_PAGE_DISABLED; 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 Q044: Query = Query::Q044; pub const Q045: Query = Query::Q045; pub const Q048: Query = Query::Q048; pub const Q049: Query = Query::Q049; pub const Q050: Query = Query::Q050; pub const Q051: Query = Query::Q051; pub const Q054: Query = Query::Q054; pub const Q055: Query = Query::Q055; pub const Q056: Query = Query::Q056; pub const Q057: Query = Query::Q057; pub const Q058: Query = Query::Q058; pub const Q059: Query = Query::Q059; #[cfg(test)] #[path = "../tests/queries.rs"] mod tests;