001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.EDbVendor;
004import gudusoft.gsqlparser.nodes.TConstant;
005import gudusoft.gsqlparser.nodes.TObjectName;
006import gudusoft.gsqlparser.nodes.TTypeName;
007
008
009/**
010 * Base class of procedure and function.
011 */
012public class TRoutine extends TCommonStoredProcedureSqlStatement {
013
014    public static final int LANGUAGE_UNKNOWN = 0;
015    public static final int LANGUAGE_SQL = 1;
016    public static final int LANGUAGE_PLPGSQL = 1;
017
018    protected int language = LANGUAGE_SQL ;
019
020    public TRoutine(EDbVendor dbvendor) {
021        super(dbvendor);
022    }
023
024    protected TTypeName returnDataType = null;
025
026    public TTypeName getReturnDataType() {
027        return returnDataType;
028    }
029
030    public void setReturnDataType(TTypeName returnDataType) {
031        this.returnDataType = returnDataType;
032    }
033
034    private TObjectName routineName;
035
036    public void setRoutineName(TObjectName routineName) {
037        this.routineName = routineName;
038    }
039
040    public TObjectName getRoutineName() {
041        return routineName;
042    }
043
044    private String routineLanguage;
045
046    public void setRoutineLanguage(String routineLanguage) {
047        this.routineLanguage = routineLanguage;
048    }
049
050    public String getRoutineLanguage() {
051        return routineLanguage;
052    }
053
054    private TConstant routineLanguageInConstant;
055
056    public void setRoutineLanguageInConstant(TConstant routineLanguageInConstant) {
057        this.routineLanguageInConstant = routineLanguageInConstant;
058    }
059
060    public TConstant getRoutineLanguageInConstant() {
061        return routineLanguageInConstant;
062    }
063
064    private String routineBody;
065
066    public void setRoutineBody(String routineBody) {
067        this.routineBody = routineBody;
068    }
069
070    public String getRoutineBody() {
071        return routineBody;
072    }
073
074    private TConstant routineBodyInConstant;
075
076    public void setRoutineBodyInConstant(TConstant routineBodyInConstant) {
077        this.routineBodyInConstant = routineBodyInConstant;
078    }
079
080    public TConstant getRoutineBodyInConstant() {
081        return routineBodyInConstant;
082    }
083
084    public boolean isBodyInSQL(){
085        if (getRoutineLanguage() == null) return true;
086
087        return getRoutineLanguage().equalsIgnoreCase("sql")||getRoutineLanguage().equalsIgnoreCase("plpgsql")
088                ||getRoutineLanguage().equalsIgnoreCase("plvsql")||getRoutineLanguage().equalsIgnoreCase("nzplsql");
089    }
090
091    public boolean isGaussDBSpInOracle(){
092        // GaussDB stored  procedure can be written in Postgre or Oracle
093        // if the language clause is not picked up during getRawSqlStatement() method, then we know it's in Oracle syntax
094        return (getRoutineLanguage() == null);
095    }
096}