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}