001package gudusoft.gsqlparser;
002
003/**
004 * OceanBase tenant compatibility mode.
005 *
006 * <p>OceanBase is a multi-tenant database whose SQL surface depends on the
007 * tenant kind. Each {@link TGSqlParser} instance configured for
008 * {@link EDbVendor#dbvoceanbase} carries one of these modes:
009 *
010 * <ul>
011 *   <li>{@link #MYSQL} — User tenant in MySQL compatibility mode. SQL surface
012 *       is MySQL 5.7 / 8.0 plus OceanBase extensions. Uses backtick-quoted
013 *       identifiers and {@code ;} as the statement terminator.</li>
014 *   <li>{@link #ORACLE} — User tenant in Oracle compatibility mode. SQL surface
015 *       is Oracle SQL plus PL/SQL plus OceanBase extensions. Uses double-quoted
016 *       identifiers, {@code /} as the PL/SQL block delimiter, and supports
017 *       packages, anonymous blocks, and PL/SQL routines.</li>
018 *   <li>{@link #SYSTEM} — System ({@code sys}) tenant. Lexically MySQL-family
019 *       (backticks, {@code ;}, no PL/SQL) but additionally accepts
020 *       OceanBase administrative DDL such as {@code CREATE TENANT},
021 *       {@code ALTER SYSTEM}, {@code CREATE RESOURCE POOL},
022 *       {@code CREATE RESOURCE UNIT}, and zone/server management commands.</li>
023 * </ul>
024 *
025 * <p>Tenant mode is permanent for the life of an OceanBase tenant on the
026 * server side; this enum mirrors that immutability at the parser level.
027 * One mode per {@link TGSqlParser} instance — do not switch modes mid-script.
028 *
029 * <p>Set the mode via {@link TGSqlParser#setOBTenantMode(EOBTenantMode)}.
030 * The default for a freshly constructed parser configured for
031 * {@code dbvoceanbase} is {@link #MYSQL}.
032 *
033 * @since 4.0.1.4
034 */
035public enum EOBTenantMode {
036    /** User tenant — MySQL compatibility mode (default). */
037    MYSQL,
038
039    /** User tenant — Oracle compatibility mode (full PL/SQL). */
040    ORACLE,
041
042    /** System ({@code sys}) tenant — MySQL syntax + OceanBase administrative DDL. */
043    SYSTEM
044}