001package gudusoft.gsqlparser.nodes.oceanbase; 002 003import gudusoft.gsqlparser.EDbObjectType; 004import gudusoft.gsqlparser.nodes.TObjectName; 005import gudusoft.gsqlparser.nodes.TParseTreeNode; 006import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 007 008/** 009 * AST node for OceanBase {@code FLASHBACK TABLE/DATABASE} statements. 010 * 011 * <p>Supports: 012 * <ul> 013 * <li>{@code FLASHBACK TABLE name TO BEFORE DROP [RENAME TO new_name]}</li> 014 * <li>{@code FLASHBACK DATABASE name TO BEFORE DROP}</li> 015 * </ul> 016 * 017 * @since 4.0.1.4 018 */ 019public class TOceanbaseFlashbackSqlNode extends TParseTreeNode { 020 021 public enum EFlashbackType { TABLE, DATABASE, TENANT } 022 023 private EFlashbackType flashbackType; 024 private TObjectName objectName; 025 private TObjectName renameTo; 026 027 public EFlashbackType getFlashbackType() { 028 return flashbackType; 029 } 030 031 public void setFlashbackType(EFlashbackType flashbackType) { 032 this.flashbackType = flashbackType; 033 } 034 035 public TObjectName getObjectName() { 036 return objectName; 037 } 038 039 public void setObjectName(TObjectName objectName) { 040 this.objectName = objectName; 041 if (objectName != null) { 042 if (flashbackType == EFlashbackType.DATABASE) { 043 objectName.setDbObjectType(EDbObjectType.database); 044 } else if (flashbackType == EFlashbackType.TENANT) { 045 objectName.setDbObjectType(EDbObjectType.schema); 046 } else { 047 objectName.setDbObjectType(EDbObjectType.table); 048 } 049 } 050 } 051 052 public TObjectName getRenameTo() { 053 return renameTo; 054 } 055 056 public void setRenameTo(TObjectName renameTo) { 057 this.renameTo = renameTo; 058 if (renameTo != null) { 059 renameTo.setDbObjectType(EDbObjectType.table); 060 } 061 } 062 063 @Override 064 public void init(Object arg1) { 065 setObjectName((TObjectName) arg1); 066 } 067 068 @Override 069 public void accept(TParseTreeVisitor v) { 070 v.preVisit(this); 071 v.postVisit(this); 072 } 073 074 @Override 075 public void acceptChildren(TParseTreeVisitor v) { 076 v.preVisit(this); 077 if (objectName != null) { 078 objectName.acceptChildren(v); 079 } 080 if (renameTo != null) { 081 renameTo.acceptChildren(v); 082 } 083 v.postVisit(this); 084 } 085}