コード例 #1
0
        private static OracleProgramMetadata MapProgramMetadata(IDataRecord reader, bool isBuiltIn, IDictionary <int, OracleProgramMetadata> metadataDictionary)
        {
            var functionId               = OracleReaderValueConvert.ToInt32(reader["FUNCTION_ID"]);
            var identifier               = CreateFunctionIdentifierFromReaderValues(reader["OWNER"], reader["PACKAGE_NAME"], reader["PROGRAM_NAME"], reader["OVERLOAD"]);
            var type                     = Convert.ToBoolean(reader["IS_FUNCTION"]) ? ProgramType.Function : ProgramType.Procedure;
            var isAnalytic               = String.Equals((string)reader["ANALYTIC"], "YES");
            var isAggregate              = String.Equals((string)reader["AGGREGATE"], "YES");
            var isPipelined              = String.Equals((string)reader["PIPELINED"], "YES");
            var isOffloadable            = String.Equals((string)reader["OFFLOADABLE"], "YES");
            var parallelSupport          = String.Equals((string)reader["PARALLEL"], "YES");
            var isDeterministic          = String.Equals((string)reader["DETERMINISTIC"], "YES");
            var metadataMinimumArguments = OracleReaderValueConvert.ToInt32(reader["MINARGS"]);
            var metadataMaximumArguments = OracleReaderValueConvert.ToInt32(reader["MAXARGS"]);
            var authId                   = String.Equals((string)reader["AUTHID"], "CURRENT_USER") ? AuthId.CurrentUser : AuthId.Definer;
            var displayType              = (string)reader["DISP_TYPE"];

            var metadata = new OracleProgramMetadata(type, identifier, isAnalytic, isAggregate, isPipelined, isOffloadable, parallelSupport, isDeterministic, metadataMinimumArguments, metadataMaximumArguments, authId, displayType, isBuiltIn);

            if (functionId.HasValue)
            {
                metadataDictionary.Add(functionId.Value, metadata);
            }

            return(metadata);
        }
コード例 #2
0
        private static string BuildTypeLabel(OracleProgramMetadata metadata)
        {
            switch (metadata.Type)
            {
            case ProgramType.StatementFunction:
                return("Statement defined function");

            case ProgramType.PackageFunction:
                return("Package function");

            case ProgramType.PackageProcedure:
                return("Package procedure");
            }

            var label = String.IsNullOrEmpty(metadata.Identifier.Owner)
                                ? "SQL "
                                : metadata.IsBuiltIn ? "Built-in " : null;

            if (!String.IsNullOrEmpty(metadata.Identifier.Package))
            {
                label = $"{label}{(label == null ? "Package " : "package ")}";
            }
            else if (!String.IsNullOrEmpty(metadata.Identifier.Owner))
            {
                label = "Schema ";
            }

            var programType = metadata.Type.ToString().ToLowerInvariant();

            return($"{label}{programType}");
        }
コード例 #3
0
        public ToolTipProgram(string title, string documentation, OracleProgramMetadata programMetadata)
        {
            InitializeComponent();

            LabelTitle.Text         = title;
            LabelDocumentation.Text = documentation;

            IsExtractDdlVisible =
                programMetadata.Type != ProgramType.PackageProcedure &&
                programMetadata.Type != ProgramType.PackageFunction &&
                programMetadata.Owner != null &&
                String.IsNullOrEmpty(programMetadata.Identifier.Package);

            DataContext = programMetadata;
        }
コード例 #4
0
 public OraclePlSqlProgram(string normalizedName, ProgramType programType, PlSqlProgramType plSqlProgramType, OraclePlSqlStatementSemanticModel semanticModel) : base(semanticModel)
 {
     Name     = normalizedName;
     Type     = plSqlProgramType;
     Metadata = new OracleProgramMetadata(programType, OracleProgramIdentifier.CreateFromValues(null, null, normalizedName), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
 }
コード例 #5
0
		private static bool IsMetadataMatched(OracleProgramMetadata metadata, OracleProgramReference programReference, int currentParameterIndex)
		{
			var isParameterlessCompatible = currentParameterIndex == 0 && metadata.NamedParameters.Count == 0;
			if (!isParameterlessCompatible && metadata.Parameters.Count > 0 && metadata.Parameters[0].Direction == ParameterDirection.ReturnValue && currentParameterIndex >= metadata.NamedParameters.Count)
			{
				return false;
			}

			var isNotAnalyticCompatible = !metadata.IsAnalytic || !String.IsNullOrEmpty(metadata.Identifier.Owner);
			return (programReference.AnalyticClauseNode == null && isNotAnalyticCompatible) ||
			       (programReference.AnalyticClauseNode != null && metadata.IsAnalytic);
		}
コード例 #6
0
		private static string GetAdditionalFunctionClause(OracleProgramMetadata[] metadataCollection)
		{
			var metadata = metadataCollection[0];
			var orderByClause = metadata.IsBuiltIn && metadata.Identifier.Name.In("\"NTILE\"", "\"ROW_NUMBER\"", "\"RANK\"", "\"DENSE_RANK\"", "\"LEAD\"", "\"LAG\"")
				? "ORDER BY NULL"
				: String.Empty;

			if (metadata.IsBuiltIn && String.Equals(metadata.Identifier.Name, "\"LISTAGG\""))
			{
				return " WITHIN GROUP (ORDER BY NULL)";
			}

			if (!metadataCollection.Any(m => m.IsAggregate) && metadata.IsAnalytic)
			{
				return $" OVER ({orderByClause})";
			}

			return String.Empty;
		}
コード例 #7
0
		private static bool IsDbmsMetadata(OracleProgramMetadata metadata)
		{
			return metadata.Owner.GetTargetSchemaObject()?.FullyQualifiedName == OracleObjectIdentifier.IdentifierDbmsMetadata;
		}
コード例 #8
0
		public OraclePlSqlProgram(string normalizedName, ProgramType programType, PlSqlProgramType plSqlProgramType, OraclePlSqlStatementSemanticModel semanticModel) : base(semanticModel)
		{
			Name = normalizedName;
			Type = plSqlProgramType;
			Metadata = new OracleProgramMetadata(programType, OracleProgramIdentifier.CreateFromValues(null, null, normalizedName), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
		}
コード例 #9
0
		static OracleTestDatabaseModel()
		{
			#region object synonyms
			var synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, TableNameDual),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, TableNameDual) && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			/*synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "SYNONYM_TO_HQ_PDB_LOOPBACK"),
					SchemaObject = DatabaseLinksInternal.Single(o => String.Equals(o.Name, "\"HQ_PDB_LOOPBACK\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys)),
					IsValid = true
				};

			synonym.SchemaObject.Synonyms.Add(synonym);*/

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "V$SESSION"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"V_$SESSION\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "XMLTYPE"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"XMLTYPE\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(InitialSchema, "SYNONYM_TO_TEST_SEQ"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"TEST_SEQ\"") && String.Equals(o.Owner, InitialSchema)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(InitialSchema, "SYNONYM_TO_SELECTION"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SELECTION\"") && String.Equals(o.Owner, InitialSchema)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "PUBLIC_SYNONYM_TO_SELECTION"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SELECTION\"") && String.Equals(o.Owner, InitialSchema)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(InitialSchema, "RAWLIST"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"ODCIRAWLIST\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys)),
					IsValid = true
				};
			
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.DBMS_RANDOM
			var dbmsRandom = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, OracleObjectIdentifier.PackageDbmsRandom) && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var randomStringFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierDbmsRandomString, false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			randomStringFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			randomStringFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"OPT\"", 1, 1, 0, ParameterDirection.Input, "CHAR", OracleObjectIdentifier.Empty, false));
			randomStringFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEN\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomStringFunctionMetadata.Owner = dbmsRandom;
			dbmsRandom.Programs.Add(randomStringFunctionMetadata);
			var randomNormalFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, OracleObjectIdentifier.PackageDbmsRandom, "NORMAL"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			randomNormalFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomNormalFunctionMetadata.Owner = dbmsRandom;
			dbmsRandom.Programs.Add(randomNormalFunctionMetadata);
			var randomValueFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, OracleObjectIdentifier.PackageDbmsRandom, "VALUE"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			randomValueFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomValueFunctionMetadata.Owner = dbmsRandom;
			dbmsRandom.Programs.Add(randomValueFunctionMetadata);
			var randomValueTwoParameterFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, OracleObjectIdentifier.PackageDbmsRandom, "VALUE"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			randomValueTwoParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomValueTwoParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LOW\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomValueTwoParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"HIGH\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			randomValueTwoParameterFunctionMetadata.Owner = dbmsRandom;
			dbmsRandom.Programs.Add(randomValueTwoParameterFunctionMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "DBMS_RANDOM"),
					SchemaObject = dbmsRandom,
					IsValid = true
				};
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.DBMS_XPLAN
			var dbmsXPlan = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"DBMS_XPLAN\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var displayCursorFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "DBMS_XPLAN", "DISPLAY_CURSOR"), false, false, true, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, false);
			displayCursorFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, OracleTypeCollection.OracleCollectionTypeNestedTable, OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, "DBMS_XPLAN_TYPE_TABLE"), false));
			displayCursorFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 1, 1, ParameterDirection.ReturnValue, OracleTypeBase.TypeCodeObject, OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, "DBMS_XPLAN_TYPE"), false));
			displayCursorFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"SQL_ID\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, true));
			displayCursorFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"CURSOR_CHILD_NUMBER\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, true));
			displayCursorFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"FORMAT\"", 3, 3, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, true));
			displayCursorFunctionMetadata.Owner = dbmsXPlan;
			dbmsXPlan.Programs.Add(displayCursorFunctionMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "DBMS_XPLAN"),
					SchemaObject = dbmsXPlan,
					IsValid = true
				};
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.DBMS_CRYPTO
			var dbmsCrypto = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"DBMS_CRYPTO\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var randomBytesFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "DBMS_CRYPTO", "RANDOMBYTES"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			randomBytesFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Raw, OracleObjectIdentifier.Empty, false));
			randomBytesFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"NUMBER_BYTES\"", 1, 1, 0, ParameterDirection.Input, "BINARY_INTEGER", OracleObjectIdentifier.Empty, false));
			randomBytesFunctionMetadata.Owner = dbmsCrypto;
			dbmsCrypto.Programs.Add(randomBytesFunctionMetadata);
			var dbmsCryptoHashMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "DBMS_CRYPTO", "HASH"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			dbmsCryptoHashMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Raw, OracleObjectIdentifier.Empty, false));
			dbmsCryptoHashMetadata.AddParameter(new OracleProgramParameterMetadata("\"SRC\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Raw, OracleObjectIdentifier.Empty, false));
			dbmsCryptoHashMetadata.AddParameter(new OracleProgramParameterMetadata("\"TYP\"", 2, 2, 0, ParameterDirection.Input, "BINARY_INTEGER", OracleObjectIdentifier.Empty, false));
			dbmsCryptoHashMetadata.Owner = dbmsCrypto;
			dbmsCrypto.Programs.Add(dbmsCryptoHashMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "DBMS_CRYPTO"),
					SchemaObject = dbmsCrypto,
					IsValid = true
				};
			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.DBMS_OUTPUT
			var dbmsOutput = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"DBMS_OUTPUT\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var putLineProcedureMetadata = new OracleProgramMetadata(ProgramType.Procedure, OracleProgramIdentifier.CreateFromValues("SYS", "DBMS_OUTPUT", "PUT_LINE"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			putLineProcedureMetadata.AddParameter(new OracleProgramParameterMetadata("\"A\"", 1, 1, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			putLineProcedureMetadata.Owner = dbmsOutput;
			dbmsOutput.Programs.Add(putLineProcedureMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "DBMS_OUTPUT"),
					SchemaObject = dbmsOutput,
					IsValid = true
				};

			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.DBMS_METADATA
			var dbmsMetadata = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"DBMS_METADATA\"") && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var getDdlFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "DBMS_METADATA", "GET_DDL"), false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, false);
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 1, 0, ParameterDirection.ReturnValue, "CLOB", OracleObjectIdentifier.Empty, false));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"OBJECT_TYPE\"", 1, 2, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"NAME\"", 2, 3, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"SCHEMA\"", 3, 4, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"VERSION\"", 4, 5, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"MODEL\"", 5, 6, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			getDdlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"TRANSFORM\"", 6, 7, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			getDdlFunctionMetadata.Owner = dbmsMetadata;
			dbmsMetadata.Programs.Add(getDdlFunctionMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, "DBMS_METADATA"),
					SchemaObject = dbmsMetadata,
					IsValid = true
				};

			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region SYS.STANDARD
			var builtInFunctionPackage = (OraclePackage)AllObjectsInternal.Single(o => o.FullyQualifiedName == OracleObjectIdentifier.IdentifierBuiltInFunctionPackage);
			var truncFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramTrunc, false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			truncFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			truncFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			truncFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"RIGHT\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			truncFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(truncFunctionMetadata);

			var toCharFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramToChar, false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			toCharFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toCharFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			toCharFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(toCharFunctionMetadata);

			var sysContextFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramSysContext, false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			sysContextFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			sysContextFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"NAMESPACE\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			sysContextFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"ATTRIBUTE\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			sysContextFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(sysContextFunctionMetadata);

			var toCharWithNlsParameterFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, OracleObjectIdentifier.PackageBuiltInFunction, "TO_CHAR", 1), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			toCharWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toCharWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			toCharWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"FORMAT\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toCharWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"PARMS\"", 3, 3, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toCharWithNlsParameterFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(toCharWithNlsParameterFunctionMetadata);

			var toDateWithNlsParameterFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(OracleObjectIdentifier.SchemaSys, OracleObjectIdentifier.PackageBuiltInFunction, "TO_DATE", 1), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			toDateWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			toDateWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toDateWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"FORMAT\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toDateWithNlsParameterFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"PARMS\"", 3, 3, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			toDateWithNlsParameterFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(toDateWithNlsParameterFunctionMetadata);

			var roundFunctionOverload1Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramRound, false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			roundFunctionOverload1Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			roundFunctionOverload1Metadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			roundFunctionOverload1Metadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(roundFunctionOverload1Metadata);

			var roundFunctionOverload2Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "ROUND", 2), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			roundFunctionOverload2Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			roundFunctionOverload2Metadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			roundFunctionOverload2Metadata.AddParameter(new OracleProgramParameterMetadata("\"RIGHT\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			roundFunctionOverload2Metadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(roundFunctionOverload2Metadata);

			var convertFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramConvert, false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			convertFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			convertFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"SRC\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			convertFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"DESTCSET\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			convertFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"SRCCSET\"", 3, 3, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			convertFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(convertFunctionMetadata);

			var dumpFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "DUMP"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			dumpFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(dumpFunctionMetadata);

			var coalesceFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "COALESCE"), false, false, false, true, false, false, 2, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			coalesceFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(coalesceFunctionMetadata);

			var greatestFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "GREATEST"), false, false, false, true, false, false, 2, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			greatestFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(greatestFunctionMetadata);

			var noParenthesisFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "SESSIONTIMEZONE"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNoParenthesis, true);
			noParenthesisFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(noParenthesisFunctionMetadata);

			var reservedWordFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "ROWNUM"), false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			reservedWordFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			reservedWordFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(reservedWordFunctionMetadata);

			var levelFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramLevel, false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			levelFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			levelFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(levelFunctionMetadata);

			var nvlFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "NVL"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			nvlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			nvlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"B1\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			nvlFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"B2\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			nvlFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(nvlFunctionMetadata);

			var hexToRawFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "HEXTORAW"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			hexToRawFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Raw, OracleObjectIdentifier.Empty, false));
			hexToRawFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"C\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			hexToRawFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(hexToRawFunctionMetadata);

			var upperFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "UPPER"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			upperFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			upperFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"CH\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			upperFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(upperFunctionMetadata);

			var sysGuidFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "SYS_GUID"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeParenthesis, true);
			sysGuidFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Raw, OracleObjectIdentifier.Empty, false));
			sysGuidFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(sysGuidFunctionMetadata);

			var nextDayFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "STANDARD", "NEXT_DAY"), false, false, false, true, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeParenthesis, true);
			nextDayFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			nextDayFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"LEFT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			nextDayFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"RIGHT\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			nextDayFunctionMetadata.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(nextDayFunctionMetadata);

			var numberToYearToMonthInterval = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramNumberToYearToMonthInterval, false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeParenthesis, true);
			numberToYearToMonthInterval.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, BuiltInDataTypeIntervalYearToMonth, OracleObjectIdentifier.Empty, false));
			numberToYearToMonthInterval.AddParameter(new OracleProgramParameterMetadata("\"NUMERATOR\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			numberToYearToMonthInterval.AddParameter(new OracleProgramParameterMetadata("\"UNITS\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			numberToYearToMonthInterval.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(numberToYearToMonthInterval);

			var numberToDayToSecondInterval = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramNumberToDayToSecondInterval, false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeParenthesis, true);
			numberToDayToSecondInterval.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, BuiltInDataTypeIntervalYearToMonth, OracleObjectIdentifier.Empty, false));
			numberToDayToSecondInterval.AddParameter(new OracleProgramParameterMetadata("\"NUMERATOR\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			numberToDayToSecondInterval.AddParameter(new OracleProgramParameterMetadata("\"UNITS\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			numberToDayToSecondInterval.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(numberToDayToSecondInterval);

			var exists = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramExists, false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeParenthesis, true);
			exists.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, OracleDataType.PlSqlBooleanType.FullyQualifiedName.Name, OracleObjectIdentifier.Empty, false));
			exists.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(exists);

			var regexReplace = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramRegularExpressionReplace, false, false, false, true, false, false, 2, 6, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			regexReplace.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"SRCSTR\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"PATTERN\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"REPLACESTR\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"POSITION\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.BinaryInteger, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"OCCURENCE\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.BinaryInteger, OracleObjectIdentifier.Empty, false));
			regexReplace.AddParameter(new OracleProgramParameterMetadata("\"MODIFIER\"", 2, 2, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			regexReplace.Owner = builtInFunctionPackage;
			builtInFunctionPackage.Programs.Add(regexReplace);
			#endregion

			#region SYS.UTL_HTTP
			var utlHttp = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, OracleObjectIdentifier.PackageUtlHttp) && String.Equals(o.Owner, OracleObjectIdentifier.SchemaSys));
			var beginRequestFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues("SYS", "UTL_HTTP", "BEGIN_REQUEST"), false, false, false, false, false, false, null, null, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, false);
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 1, 0, ParameterDirection.ReturnValue, null, OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"URL\"", 1, 2, 1, ParameterDirection.Output, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"METHOD\"", 2, 3, 1, ParameterDirection.Output, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"HTTP_VERSION\"", 3, 4, 1, ParameterDirection.Output, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"PRIVATE_HNDL\"", 4, 5, 1, ParameterDirection.Output, "BINARY_INTEGER", OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"URL\"", 1, 6, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, false));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"METHOD\"", 2, 7, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"HTTP_VERSION\"", 3, 8, 0, ParameterDirection.Input, "VARCHAR2", OracleObjectIdentifier.Empty, true));
			beginRequestFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"REQUEST_CONTEXT\"", 4, 9, 0, ParameterDirection.Input, "BINARY_INTEGER", OracleObjectIdentifier.Empty, true));
			beginRequestFunctionMetadata.Owner = utlHttp;
			utlHttp.Programs.Add(beginRequestFunctionMetadata);

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaPublic, OracleObjectIdentifier.PackageUtlHttp),
					SchemaObject = utlHttp,
					IsValid = true
				};

			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);
			#endregion

			#region user functions
			var uncompilableFunction = (OracleFunction)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"UNCOMPILABLE_FUNCTION\"") && String.Equals(o.Owner, InitialSchema));
			uncompilableFunction.Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "UNCOMPILABLE_FUNCTION"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			uncompilableFunction.Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			uncompilableFunction.Metadata.Owner = uncompilableFunction;

			var uncompilablePackage = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"UNCOMPILABLE_PACKAGE\"") && String.Equals(o.Owner, InitialSchema));
			var uncompilablePackageFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), "UNCOMPILABLE_PACKAGE", "FUNCTION"), false, false, false, false, true, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			uncompilablePackageFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			uncompilablePackage.Programs.Add(uncompilablePackageFunctionMetadata);
			uncompilablePackageFunctionMetadata.Owner = uncompilablePackage;

			var userCountFunction = (OracleFunction)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"COUNT\"") && String.Equals(o.Owner, InitialSchema));
			userCountFunction.Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "COUNT"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			userCountFunction.Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			userCountFunction.Metadata.Owner = userCountFunction;

			var sqlPadProcedure = (OracleProcedure)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SQLPAD_PROCEDURE\"") && String.Equals(o.Owner, InitialSchema));
			sqlPadProcedure.Metadata = new OracleProgramMetadata(ProgramType.Procedure, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "SQLPAD_PROCEDURE"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			sqlPadProcedure.Metadata.Owner = sqlPadProcedure;

			var sqlPadFunction = (OracleFunction)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SQLPAD_FUNCTION\"") && String.Equals(o.Owner, InitialSchema));
			sqlPadFunction.Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "SQLPAD_FUNCTION"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			sqlPadFunction.Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			sqlPadFunction.Metadata.Owner = sqlPadFunction;

			synonym =
				new OracleSynonym
				{
					FullyQualifiedName = OracleObjectIdentifier.Create(InitialSchema, "SYNONYM_TO_SQLPAD_FUNCTION"),
					SchemaObject = AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SQLPAD_FUNCTION\"") && String.Equals(o.Owner, InitialSchema)),
					IsValid = true
				};

			synonym.SchemaObject.Synonyms.Add(synonym);

			AllObjectsInternal.Add(synonym);

			var testFunction = (OracleFunction)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"TESTFUNC\"") && String.Equals(o.Owner, InitialSchema));
			testFunction.Metadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "TESTFUNC"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			testFunction.Metadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			testFunction.Metadata.AddParameter(new OracleProgramParameterMetadata("\"PARAM\"", 1, 1, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			testFunction.Metadata.Owner = testFunction;

			var sqlPadPackage = (OraclePackage)AllObjectsInternal.Single(o => String.Equals(o.Name, "\"SQLPAD\"") && String.Equals(o.Owner, InitialSchema));
			var packageSqlPadFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), "SQLPAD", "SQLPAD_FUNCTION"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			packageSqlPadFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			packageSqlPadFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"P\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			packageSqlPadFunctionMetadata.Owner = sqlPadPackage;
			sqlPadPackage.Programs.Add(packageSqlPadFunctionMetadata);

			var packageSqlPadPipelinedFunctionWithCursorParameterMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), "SQLPAD", "CURSOR_FUNCTION"), false, false, true, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 1, 0, ParameterDirection.ReturnValue, OracleTypeCollection.OracleCollectionTypeNestedTable, OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, "DBMS_XPLAN_TYPE_TABLE"), false));
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 2, 1, ParameterDirection.ReturnValue, OracleTypeBase.TypeCodeObject, OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, "DBMS_XPLAN_TYPE"), false));
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.AddParameter(new OracleProgramParameterMetadata("\"I\"", 1, 3, 0, ParameterDirection.Input, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.AddParameter(new OracleProgramParameterMetadata("\"C1\"", 2, 4, 0, ParameterDirection.Input, "REF CURSOR", OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.AddParameter(new OracleProgramParameterMetadata("\"C2\"", 3, 28, 0, ParameterDirection.Input, "REF CURSOR", OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionWithCursorParameterMetadata.Owner = sqlPadPackage;
			sqlPadPackage.Programs.Add(packageSqlPadPipelinedFunctionWithCursorParameterMetadata);

			var packageSqlPadPipelinedFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), "SQLPAD", "PIPELINED_FUNCTION"), false, false, true, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			packageSqlPadPipelinedFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, OracleTypeCollection.OracleCollectionTypeNestedTable, OracleObjectIdentifier.Create(OracleObjectIdentifier.SchemaSys, "ODCIDATELIST"), false));
			packageSqlPadPipelinedFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 1, 1, ParameterDirection.ReturnValue, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"DATE_FROM\"", 1, 2, 0, ParameterDirection.Input, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"DATE_TO\"", 2, 3, 0, ParameterDirection.Input, TerminalValues.Date, OracleObjectIdentifier.Empty, false));
			packageSqlPadPipelinedFunctionMetadata.Owner = sqlPadPackage;
			sqlPadPackage.Programs.Add(packageSqlPadPipelinedFunctionMetadata);

			var sqlPadProcedureMetadata = new OracleProgramMetadata(ProgramType.Procedure, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), null, "SQLPAD_PROCEDURE"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			sqlPadProcedureMetadata.Owner = sqlPadPackage;
			sqlPadPackage.Programs.Add(sqlPadProcedureMetadata);

			var asPdfPackage = (OraclePackage)AllObjectsInternal.Single(o => o.Name == "\"AS_PDF3\"" && o.Owner == InitialSchema);
			var asPdfPackageFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(InitialSchema.ToSimpleIdentifier(), "AS_PDF3", "STR_LEN"), false, false, false, false, false, false, null, null, AuthId.Definer, OracleProgramMetadata.DisplayTypeNormal, false);
			asPdfPackageFunctionMetadata.AddParameter(new OracleProgramParameterMetadata(null, 0, 0, 0, ParameterDirection.ReturnValue, TerminalValues.Number, OracleObjectIdentifier.Empty, false));
			asPdfPackageFunctionMetadata.AddParameter(new OracleProgramParameterMetadata("\"P_TXT\"", 1, 1, 0, ParameterDirection.Input, TerminalValues.Varchar2, OracleObjectIdentifier.Empty, false));
			asPdfPackage.Programs.Add(asPdfPackageFunctionMetadata);
			asPdfPackageFunctionMetadata.Owner = asPdfPackage;
			#endregion

			AllObjectDictionary = AllObjectsInternal.ToDictionary(o => o.FullyQualifiedName, o => o);

			ObjectsInternal = AllObjectDictionary
				.Values.Where(o => o.Owner == OracleObjectIdentifier.SchemaPublic || o.Owner == InitialSchema)
				.ToDictionary(o => OracleObjectIdentifier.Create(o.Owner, o.Name), o => o);

			AddConstraints();

			#region non-schema built-in functions
			var allProgramMetadata = AllObjectsInternal.OfType<IProgramCollection>().SelectMany(c => c.Programs).ToList();

			var countFunctionAggregateMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "COUNT"), false, true, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			countFunctionAggregateMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 1, 0, ParameterDirection.Input, "EXPR", OracleObjectIdentifier.Empty, false));
			allProgramMetadata.Add(countFunctionAggregateMetadata);

			var countFunctionAnalyticMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "COUNT"), true, false, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			countFunctionAnalyticMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 1, 0, ParameterDirection.Input, "EXPR", OracleObjectIdentifier.Empty, false));
			allProgramMetadata.Add(countFunctionAnalyticMetadata);

			var maxFunctionAnalyticMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "MAX"), true, false, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(maxFunctionAnalyticMetadata);

			var castFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramCast, false, false, false, true, false, false, 1, 0, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(castFunctionMetadata);

			var maxFunctionAggregateMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "MAX"), false, true, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			maxFunctionAggregateMetadata.AddParameter(new OracleProgramParameterMetadata(null, 1, 1, 0, ParameterDirection.Input, "EXPR", OracleObjectIdentifier.Empty, false));
			allProgramMetadata.Add(maxFunctionAggregateMetadata);

			var lastValueFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "LAST_VALUE"), true, false, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(lastValueFunctionMetadata);

			var sysDateFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.CreateFromValues(null, null, "SYSDATE"), false, false, false, false, false, false, 0, 0, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNoParenthesis, true);
			allProgramMetadata.Add(sysDateFunctionMetadata);

			var lnNvlFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramLnNvl, false, false, false, true, false, false, 1, 0, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNoParenthesis, true);
			allProgramMetadata.Add(lnNvlFunctionMetadata);

			var extractFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramExtract, false, false, false, false, false, false, 1, 0, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(extractFunctionMetadata);

			var ratioToReportFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramRatioToReport, true, false, false, false, false, false, 1, 1, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(ratioToReportFunctionMetadata);

			var sysConnectByPathFunctionMetadata = new OracleProgramMetadata(ProgramType.Function, OracleProgramIdentifier.IdentifierBuiltInProgramSysConnectByPath, false, false, false, false, false, false, 2, 2, AuthId.CurrentUser, OracleProgramMetadata.DisplayTypeNormal, true);
			allProgramMetadata.Add(sysConnectByPathFunctionMetadata);

			AllProgramMetadataInternal = allProgramMetadata.ToLookup(m => m.Identifier);
			NonSchemaBuiltInFunctionMetadataInternal = allProgramMetadata
				.Where(m => String.IsNullOrEmpty(m.Identifier.Owner))
				.ToLookup(m => m.Identifier);

			BuiltInPackageProgramMetadataInternal = allProgramMetadata
				.Where(m => m.Owner != null && m.Owner.FullyQualifiedName == OracleObjectIdentifier.IdentifierBuiltInFunctionPackage)
				.ToLookup(m => m.Identifier);
			#endregion

			UniqueConstraintReferringReferenceConstraintsInternal = BuildUniqueConstraintReferringReferenceConstraintLookup(AllObjectsInternal);

			Instance = new OracleTestDatabaseModel { CurrentSchema = InitialSchema };
		}
コード例 #10
0
			private object Convert(OracleProgramMetadata metadata)
			{
				return _converter.Convert(metadata, typeof(string), null, CultureInfo.InvariantCulture);
			}
コード例 #11
0
        public ProgramMatchResult GetMatchResult(OracleProgramMetadata programMetadata, string quotedCurrentSchema)
        {
            var  programType = programMetadata.Type;
            bool programTypeSupported;

            if (PlSqlCompletion.HasFlag(PlSqlCompletion.Procedure))
            {
                programTypeSupported = programType == ProgramType.Procedure || programType == ProgramType.PackageProcedure;
            }
            else
            {
                programTypeSupported = programType != ProgramType.Procedure;
            }

            var matchResult =
                new ProgramMatchResult
            {
                Metadata  = programMetadata,
                IsMatched = programTypeSupported
            };

            if (!programTypeSupported)
            {
                return(matchResult);
            }

            var isSchemaMatched =
                _ownerMatch == null ||
                (_ownerMatch.Value?.Length == 0 && String.Equals(programMetadata.Identifier.Owner, quotedCurrentSchema)) ||
                _ownerMatch.IsMatch(programMetadata).Any();

            matchResult.IsMatched &= isSchemaMatched;

            if (_packageMatch != null && isSchemaMatched)
            {
                var matchedPackageNames = _packageMatch.IsMatch(programMetadata);
                if (_packageMatch.IsResultValue)
                {
                    matchResult.Matches = matchedPackageNames;
                }

                matchResult.IsMatched &= matchedPackageNames.Any();
            }

            if (_identifierMatch != null && matchResult.IsMatched)
            {
                var matchedIdentifierNames = _identifierMatch.IsMatch(programMetadata);
                if (_identifierMatch.IsResultValue)
                {
                    if (matchResult.Matches != null)
                    {
                        throw new InvalidOperationException("Only one MatchElement can be IsResultValue enabled. ");
                    }

                    matchResult.Matches = matchedIdentifierNames;
                }

                matchResult.IsMatched &= matchedIdentifierNames.Any();
            }

            return(matchResult);
        }