001package gudusoft.gsqlparser.stmt.oceanbase;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.TConstant;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseXaSqlNode;
009
010/**
011 * OceanBase MySQL-mode {@code XA} transaction statement
012 * (XA START/END/PREPARE/COMMIT/ROLLBACK/RECOVER).
013 *
014 * <p>Tagged {@link ESqlStatementType#sstoceanbase_xa}.
015 *
016 * @since 4.0.1.4
017 */
018public class TXaSqlStatement extends TCustomSqlStatement {
019
020    private TOceanbaseXaSqlNode.EXaType xaType;
021    private TConstant xid;
022
023    public TXaSqlStatement(EDbVendor dbvendor) {
024        super(dbvendor);
025        this.sqlstatementtype = ESqlStatementType.sstoceanbase_xa;
026    }
027
028    public TOceanbaseXaSqlNode.EXaType getXaType() {
029        return xaType;
030    }
031
032    public TConstant getXid() {
033        return xid;
034    }
035
036    @Override
037    public int doParseStatement(TCustomSqlStatement psql) {
038        if (rootNode == null) return -1;
039        super.doParseStatement(psql);
040        TOceanbaseXaSqlNode node = (TOceanbaseXaSqlNode) rootNode;
041        this.xaType = node.getXaType();
042        this.xid = node.getXid();
043        return 0;
044    }
045
046    @Override
047    public void accept(TParseTreeVisitor v) {
048        v.preVisit(this);
049        v.postVisit(this);
050    }
051
052    @Override
053    public void acceptChildren(TParseTreeVisitor v) {
054        v.preVisit(this);
055        v.postVisit(this);
056    }
057}