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.TOceanbaseCreateResourceUnitSqlNode; 009import gudusoft.gsqlparser.nodes.oceanbase.TOceanbaseResourceOption; 010 011import java.util.ArrayList; 012 013/** 014 * OceanBase {@code CREATE RESOURCE UNIT} statement (Phase 4 Batch 2). 015 * 016 * <p>Tagged {@link ESqlStatementType#sstoceanbase_create_resource_unit}. 017 * 018 * @since 4.0.1.4 019 */ 020public class TCreateResourceUnitSqlStatement extends TCustomSqlStatement { 021 022 private TObjectName unitName; 023 private ArrayList<TOceanbaseResourceOption> resourceOptions 024 = new ArrayList<TOceanbaseResourceOption>(); 025 026 public TCreateResourceUnitSqlStatement(EDbVendor dbvendor) { 027 super(dbvendor); 028 this.sqlstatementtype = ESqlStatementType.sstoceanbase_create_resource_unit; 029 } 030 031 public TObjectName getUnitName() { 032 return unitName; 033 } 034 035 public ArrayList<TOceanbaseResourceOption> getResourceOptions() { 036 return resourceOptions; 037 } 038 039 public TObjectName getMinCpu() { return firstValueOfOption("MIN_CPU"); } 040 public TObjectName getMaxCpu() { return firstValueOfOption("MAX_CPU"); } 041 public TObjectName getMemorySize() { return firstValueOfOption("MEMORY_SIZE"); } 042 public TObjectName getLogDiskSize() { return firstValueOfOption("LOG_DISK_SIZE"); } 043 public TObjectName getMinIops() { return firstValueOfOption("MIN_IOPS"); } 044 public TObjectName getMaxIops() { return firstValueOfOption("MAX_IOPS"); } 045 public TObjectName getIopsWeight() { return firstValueOfOption("IOPS_WEIGHT"); } 046 public TObjectName getMaxSessionNum() { return firstValueOfOption("MAX_SESSION_NUM"); } 047 048 private TObjectName firstValueOfOption(String canonicalName) { 049 for (TOceanbaseResourceOption opt : resourceOptions) { 050 if (opt == null || opt.getName() == null) continue; 051 if (canonicalName.equals(opt.getName())) { 052 return opt.getFirstValue(); 053 } 054 } 055 return null; 056 } 057 058 @Override 059 public int doParseStatement(TCustomSqlStatement psql) { 060 if (rootNode == null) return -1; 061 super.doParseStatement(psql); 062 TOceanbaseCreateResourceUnitSqlNode node = 063 (TOceanbaseCreateResourceUnitSqlNode) rootNode; 064 this.unitName = node.getUnitName(); 065 this.resourceOptions = node.getResourceOptions(); 066 return 0; 067 } 068 069 @Override 070 public void accept(TParseTreeVisitor v) { 071 v.preVisit(this); 072 v.postVisit(this); 073 } 074 075 @Override 076 public void acceptChildren(TParseTreeVisitor v) { 077 v.preVisit(this); 078 v.postVisit(this); 079 } 080}