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.TOceanbaseCreateDblinkSqlNode; 009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseDblinkOption; 010 011import java.util.ArrayList; 012 013/** 014 * OceanBase {@code CREATE DBLINK} statement (US-005 Round 3). 015 * 016 * <p>Tagged {@link ESqlStatementType#sstoceanbase_create_dblink}. 017 * 018 * @since 4.0.1.4 019 */ 020public class TCreateDblinkSqlStatement extends TCustomSqlStatement { 021 022 private TObjectName dblinkName; 023 private boolean ifNotExists; 024 private ArrayList<TOceanbaseDblinkOption> dblinkOptions 025 = new ArrayList<TOceanbaseDblinkOption>(); 026 027 public TCreateDblinkSqlStatement(EDbVendor dbvendor) { 028 super(dbvendor); 029 this.sqlstatementtype = ESqlStatementType.sstoceanbase_create_dblink; 030 } 031 032 public TObjectName getDblinkName() { 033 return dblinkName; 034 } 035 036 public boolean isIfNotExists() { 037 return ifNotExists; 038 } 039 040 public ArrayList<TOceanbaseDblinkOption> getDblinkOptions() { 041 return dblinkOptions; 042 } 043 044 public TObjectName getOptionValue(String canonicalName) { 045 if (canonicalName == null) return null; 046 for (TOceanbaseDblinkOption opt : dblinkOptions) { 047 if (opt == null || opt.getName() == null) continue; 048 if (canonicalName.equals(opt.getName())) { 049 return opt.getValue(); 050 } 051 } 052 return null; 053 } 054 055 @Override 056 public int doParseStatement(TCustomSqlStatement psql) { 057 if (rootNode == null) return -1; 058 super.doParseStatement(psql); 059 TOceanbaseCreateDblinkSqlNode node = (TOceanbaseCreateDblinkSqlNode) rootNode; 060 this.dblinkName = node.getDblinkName(); 061 this.ifNotExists = node.isIfNotExists(); 062 this.dblinkOptions = node.getDblinkOptions(); 063 return 0; 064 } 065 066 @Override 067 public void accept(TParseTreeVisitor v) { 068 v.preVisit(this); 069 v.postVisit(this); 070 } 071 072 @Override 073 public void acceptChildren(TParseTreeVisitor v) { 074 v.preVisit(this); 075 v.postVisit(this); 076 } 077}