SlotKeeper 設計と品質

list_reservations query

001_select_reservations.sql

SQL種別

SELECT

SQLの概要

自分の予約一覧を返すため、日付・状態・将来予約の条件で開始日時とIDの順に取得する。

利用するテーブル

  • reservations

引数

DDLテーブル DDL項目 SQL項目 日本語名 型 nullable
reservations owner_principal_id owner_principal_id 予約者の認証subject。 VARCHAR(200) no
reservations start_at range_end 予約開始日時。UTCで保存する。 TIMESTAMPTZ no
reservations end_at range_start 予約終了日時。UTCで保存し、この時刻を含まない。 TIMESTAMPTZ no
reservations status status 予約状態。confirmedまたはcancelled。 VARCHAR(20) no
- future_only future_only - bool no
reservations start_at now 予約開始日時。UTCで保存する。 TIMESTAMPTZ no
- after_start_at after_start_at - datetime | None yes
- after_reservation_id after_reservation_id - str | None yes
- limit limit - int no

戻り値

DDLテーブル DDL項目 SQL項目 日本語名 型 nullable
reservations reservation_id reservation_id 予約ID。 VARCHAR(36) no
reservations resource_id resource_id 予約対象の資源ID。 VARCHAR(36) no
reservations owner_principal_id owner_principal_id 予約者の認証subject。 VARCHAR(200) no
reservations start_at start_at 予約開始日時。UTCで保存する。 TIMESTAMPTZ no
reservations end_at end_at 予約終了日時。UTCで保存し、この時刻を含まない。 TIMESTAMPTZ no
reservations purpose purpose 予約目的。1〜200文字。本人と管理者だけに返す。 VARCHAR(200) no
reservations status status 予約状態。confirmedまたはcancelled。 VARCHAR(20) no
reservations row_version row_version 楽観ロック用の行バージョン。 INT no

条件

  • WHERE
    • reservations.owner_principal_id = @owner_principal_id
    • AND reservations.start_at < @range_end
    • AND reservations.end_at > @range_start
    • AND (CAST(@status AS VARCHAR) IS NULL
    • OR reservations.status = @status)
    • AND (NOT CAST(@future_only AS BOOLEAN)
    • OR (reservations.status = 'confirmed'
    • AND reservations.start_at > @now))
    • AND (CAST(@after_start_at AS TIMESTAMPTZ) IS NULL
    • OR CAST(@after_reservation_id AS VARCHAR) IS NULL
    • OR (reservations.start_at, reservations.reservation_id) > (CAST(@after_start_at AS TIMESTAMPTZ), CAST(@after_reservation_id AS VARCHAR)))