001package gudusoft.gsqlparser.stmt.oceanbase;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.ESqlStatementType;
005import gudusoft.gsqlparser.TCustomSqlStatement;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
008import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseFlashbackSqlNode;
009
010/**
011 * OceanBase {@code FLASHBACK TABLE/DATABASE} statement.
012 *
013 * <p>Supports:
014 * <ul>
015 *   <li>{@code FLASHBACK TABLE name TO BEFORE DROP [RENAME TO new_name]}</li>
016 *   <li>{@code FLASHBACK DATABASE name TO BEFORE DROP}</li>
017 * </ul>
018 * Tagged {@link ESqlStatementType#sstoceanbase_flashback}.
019 *
020 * @since 4.0.1.4
021 */
022public class TFlashbackSqlStatement extends TCustomSqlStatement {
023
024    private TOceanbaseFlashbackSqlNode.EFlashbackType flashbackType;
025    private TObjectName objectName;
026    private TObjectName renameTo;
027
028    public TFlashbackSqlStatement(EDbVendor dbvendor) {
029        super(dbvendor);
030        this.sqlstatementtype = ESqlStatementType.sstoceanbase_flashback;
031    }
032
033    public TOceanbaseFlashbackSqlNode.EFlashbackType getFlashbackType() {
034        return flashbackType;
035    }
036
037    public TObjectName getObjectName() {
038        return objectName;
039    }
040
041    public TObjectName getRenameTo() {
042        return renameTo;
043    }
044
045    @Override
046    public int doParseStatement(TCustomSqlStatement psql) {
047        if (rootNode == null) return -1;
048        super.doParseStatement(psql);
049        TOceanbaseFlashbackSqlNode node = (TOceanbaseFlashbackSqlNode) rootNode;
050        this.flashbackType = node.getFlashbackType();
051        this.objectName = node.getObjectName();
052        this.renameTo = node.getRenameTo();
053        return 0;
054    }
055
056    @Override
057    public void accept(TParseTreeVisitor v) {
058        v.preVisit(this);
059        v.postVisit(this);
060    }
061
062    @Override
063    public void acceptChildren(TParseTreeVisitor v) {
064        v.preVisit(this);
065        v.postVisit(this);
066    }
067}