001package gudusoft.gsqlparser.nodes.oceanbase;
002
003import gudusoft.gsqlparser.EDbObjectType;
004import gudusoft.gsqlparser.nodes.TConstant;
005import gudusoft.gsqlparser.nodes.TObjectName;
006import gudusoft.gsqlparser.nodes.TParseTreeNode;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008
009/**
010 * AST node for OceanBase system-tenant {@code SHOW} statements
011 * (Phase 4 — OceanBase documented syntax gaps).
012 *
013 * <p>One node represents the family of OB-only SHOW variants that are not
014 * covered by the inherited MySQL grammar:
015 * <ul>
016 *   <li>{@code SHOW TENANT [LIKE 'pattern']}</li>
017 *   <li>{@code SHOW CREATE TENANT tenant_name}</li>
018 *   <li>{@code SHOW RESOURCE POOL}</li>
019 * </ul>
020 *
021 * <p>The {@link #getShowType()} discriminator identifies which variant
022 * was parsed. {@link #getTenantName()} is populated only for
023 * {@code SHOW CREATE TENANT}; {@link #getLikePattern()} is populated only
024 * for {@code SHOW TENANT LIKE 'pattern'}.
025 *
026 * @since 4.0.1.4
027 */
028public class TOceanbaseShowTenantSqlNode extends TParseTreeNode {
029
030    /**
031     * Discriminator for the concrete SHOW variant represented by this
032     * node. The value is set in the grammar action and is never
033     * {@code null} after a successful parse.
034     */
035    public enum EShowType {
036        /** {@code SHOW TENANT [LIKE 'pattern']}. */
037        tenant,
038        /** {@code SHOW CREATE TENANT tenant_name}. */
039        createTenant,
040        /** {@code SHOW RESOURCE POOL}. */
041        resourcePool,
042        /** {@code SHOW TENANTS}. */
043        tenants,
044        /** {@code SHOW TENANT STATUS}. */
045        tenantStatus,
046        /** {@code SHOW RECYCLEBIN}. */
047        recyclebin,
048        /** {@code SHOW TABLEGROUPS}. */
049        tablegroups,
050        /** {@code SHOW PARAMETERS [LIKE 'pattern' [TENANT = 'name']]}. */
051        parameters
052    }
053
054    private EShowType showType;
055    private TObjectName tenantName;
056    private TConstant likePattern;
057
058    public EShowType getShowType() {
059        return showType;
060    }
061
062    public void setShowType(EShowType showType) {
063        this.showType = showType;
064    }
065
066    public TObjectName getTenantName() {
067        return tenantName;
068    }
069
070    public void setTenantName(TObjectName tenantName) {
071        this.tenantName = tenantName;
072        if (tenantName != null) {
073            tenantName.setDbObjectType(EDbObjectType.database);
074        }
075    }
076
077    public TConstant getLikePattern() {
078        return likePattern;
079    }
080
081    public void setLikePattern(TConstant likePattern) {
082        this.likePattern = likePattern;
083    }
084
085    @Override
086    public void accept(TParseTreeVisitor v) {
087        v.preVisit(this);
088        v.postVisit(this);
089    }
090
091    @Override
092    public void acceptChildren(TParseTreeVisitor v) {
093        v.preVisit(this);
094        if (tenantName != null) {
095            tenantName.acceptChildren(v);
096        }
097        v.postVisit(this);
098    }
099}