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}