001package gudusoft.gsqlparser.nodes.oceanbase;
002
003import gudusoft.gsqlparser.nodes.TConstant;
004import gudusoft.gsqlparser.nodes.TParseTreeNode;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006
007/**
008 * AST node for OceanBase MySQL-mode {@code XA} transaction statements.
009 *
010 * <p>Supports:
011 * <ul>
012 *   <li>{@code XA START 'xid' [JOIN | RESUME]}</li>
013 *   <li>{@code XA END 'xid' [SUSPEND [FOR MIGRATE]]}</li>
014 *   <li>{@code XA PREPARE 'xid'}</li>
015 *   <li>{@code XA COMMIT 'xid' [ONE PHASE]}</li>
016 *   <li>{@code XA ROLLBACK 'xid'}</li>
017 *   <li>{@code XA RECOVER [CONVERT XID]}</li>
018 * </ul>
019 *
020 * @since 4.0.1.4
021 */
022public class TOceanbaseXaSqlNode extends TParseTreeNode {
023
024    public enum EXaType { START, END, PREPARE, COMMIT, ROLLBACK, RECOVER }
025
026    private EXaType xaType;
027    private TConstant xid;
028
029    public EXaType getXaType() {
030        return xaType;
031    }
032
033    public void setXaType(EXaType xaType) {
034        this.xaType = xaType;
035    }
036
037    public TConstant getXid() {
038        return xid;
039    }
040
041    public void setXid(TConstant xid) {
042        this.xid = xid;
043    }
044
045    @Override
046    public void accept(TParseTreeVisitor v) {
047        v.preVisit(this);
048        v.postVisit(this);
049    }
050
051    @Override
052    public void acceptChildren(TParseTreeVisitor v) {
053        v.preVisit(this);
054        if (xid != null) {
055            xid.acceptChildren(v);
056        }
057        v.postVisit(this);
058    }
059}