001package gudusoft.gsqlparser.sqlenv; 002 003import gudusoft.gsqlparser.nodes.TTypeName; 004import gudusoft.gsqlparser.util.SQLUtil; 005 006import java.util.*; 007 008public abstract class TSQLRoutine extends TSQLSchemaObject{ 009 private String definition; 010 011 public void setDefinition(String definition) { 012 this.definition = definition; 013 } 014 015 public String getDefinition() { 016 return definition; 017 } 018 019 public TSQLRoutine(TSQLSchema schema, String objectName, ESQLDataObjectType dataObjectType){ 020 super(schema,objectName,dataObjectType); 021 } 022 023 /** 024 * column list 025 * @return a column list 026 */ 027 public List<TSQLParameter> getParameterList() { 028 List<TSQLParameter> parameterList = new LinkedList<>(); 029 for(String parameter: parameterMap.keySet()){ 030 parameterList.add(parameterMap.get(parameter)); 031 } 032 return parameterList; 033 } 034 035 036 private Map<String, TSQLParameter> parameterMap = Collections.synchronizedMap(new LinkedHashMap<String, TSQLParameter>( )); 037 038 039 public void addParameter(int index, TTypeName parameterDataType){ 040 if (!searchParameter(index,parameterDataType,null)){ 041 parameterMap.put(SQLUtil.getIdentifierNormalColumnName(this.sqlEnv.getDBVendor(), makeParameterMapId(index,parameterDataType,null)), new TSQLParameter(this, index,parameterDataType,null)); 042 } 043 } 044 045 public void addParameter(int index, TTypeName parameterDataType,String parameterName){ 046 if (!searchParameter(index,parameterDataType,parameterName)){ 047 parameterMap.put(SQLUtil.getIdentifierNormalColumnName(this.sqlEnv.getDBVendor(), makeParameterMapId(index,parameterDataType,parameterName)), new TSQLParameter(this,index,parameterDataType,parameterName)); 048 } 049 } 050 051 052 public boolean searchParameter(int index, TTypeName datatype, String parameterName){ 053 return parameterMap.containsKey(SQLUtil.getIdentifierNormalColumnName(this.sqlEnv.getDBVendor() 054 , makeParameterMapId(index,datatype,parameterName))); 055 } 056 057 public TSQLParameter getParameter(int index, TTypeName datatype, String parameterName){ 058 return parameterMap.get(SQLUtil.getIdentifierNormalColumnName(this.sqlEnv.getDBVendor() 059 , makeParameterMapId(index,datatype,parameterName))); 060 } 061 062 String makeParameterMapId(int index, TTypeName datatype, String parameterName){ 063 return index+datatype.toString()+parameterName == null?"N/A":parameterName; 064 } 065 066 067}