Files
rustpad/src/queries/mod.rs
T

342 lines
14 KiB
Rust

/*
* 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;