001package gudusoft.gsqlparser.sqlenv;
002
003import java.util.List;
004
005/**
006 * SQL procedure
007 */
008public class TSQLOraclePackage extends TSQLRoutine {
009
010    public TSQLOraclePackage(TSQLSchema sqlSchema, String packageName) {
011        super(sqlSchema, packageName, ESQLDataObjectType.dotOraclePackage);
012    }
013
014    /**
015     * create a procedure belong to this schema
016     *
017     * @param procedureName procedure name
018     * @return an instance of the SQL procedure
019     */
020    public TSQLProcedure createProcedure(String procedureName) {
021        return (TSQLProcedure) createSchemaObject(procedureName, ESQLDataObjectType.dotProcedure);
022    }
023
024    /**
025     * create a function belong to this schema
026     *
027     * @param functionName function name
028     * @return an instance of the SQL function.
029     */
030    public TSQLFunction createFunction(String functionName) {
031        return (TSQLFunction) createSchemaObject(functionName, ESQLDataObjectType.dotFunction);
032    }
033
034    /**
035     * create a trigger belong to this schema
036     *
037     * @param triggerName trigger name
038     * @return an instance of the SQL trigger.
039     */
040    public TSQLTrigger createTrigger(String triggerName) {
041        return (TSQLTrigger) createSchemaObject(triggerName, ESQLDataObjectType.dotTrigger);
042    }
043
044    protected TSQLSchemaObject createSchemaObject(String schemaObjectName, ESQLDataObjectType dataObjectType) {
045        return createSchemaObject(schemaObjectName, dataObjectType, 0);
046    }
047
048    protected TSQLSchemaObject createSchemaObject(String schemaObjectName, ESQLDataObjectType dataObjectType, int priority) {
049        TSQLSchemaObject result = null;
050        TSQLSchemaObject schemaObject = findSchemaObject(dataObjectType, schemaObjectName);
051        if (schemaObject == null) {
052            switch (dataObjectType) {
053                case dotProcedure:
054                    result = new TSQLProcedure(this, schemaObjectName);
055                    break;
056                case dotFunction:
057                    result = new TSQLFunction(this, schemaObjectName);
058                    break;
059                case dotTrigger:
060                    result = new TSQLTrigger(this, schemaObjectName);
061                    break;
062            }
063        } else if (dataObjectType == schemaObject.getDataObjectType()) {
064            result = schemaObject;
065        } else {
066            //System.out.println("object name conflict:"+getQualifiedName()+"."+schemaObjectName+",type:"+dataObjectType+" VS "+schemaObject.getQualifiedName()+", type:"+schemaObject.getDataObjectType());
067        }
068
069        if (result != null && priority > result.getPriority()) {
070            result.setPriority(priority);
071        }
072        if(result instanceof TSQLProcedure){
073            ((TSQLProcedure)result).setOraclePackage(this);
074        }
075        return result;
076    }
077
078    private TSQLSchemaObject findSchemaObject(ESQLDataObjectType dataObjectType, String schemaObjectName) {
079        return getSchema().findSchemaObject(dataObjectType, schemaObjectName);
080    }
081
082    public List<TSQLSchemaObject> getSchemaObjectList() {
083        return getSchema().getPackageObjectList(this);
084    }
085}