Exemple #1
0
        private void ResolveSqlStatements(OraclePlSqlProgram program)
        {
            var sqlStatementNodes = program.RootNode.GetPathFilterDescendants(
                n => !String.Equals(n.Id, NonTerminals.ItemList2) && !(String.Equals(n.Id, NonTerminals.PlSqlBlock) && String.Equals(n.ParentNode.Id, NonTerminals.PlSqlStatementType)),
                NonTerminals.SelectStatement, NonTerminals.InsertStatement, NonTerminals.UpdateStatement, NonTerminals.MergeStatement);

            foreach (var sqlStatementNode in sqlStatementNodes)
            {
                var childStatement =
                    new OracleStatement
                {
                    RootNode       = sqlStatementNode,
                    ParseStatus    = Statement.ParseStatus,
                    SourcePosition = sqlStatementNode.SourcePosition
                };

                var sqlStatementSemanticModel = new OracleStatementSemanticModel(sqlStatementNode.GetText(StatementText), childStatement, DatabaseModel).Build(CancellationToken);
                program.SqlModels.Add(sqlStatementSemanticModel);

                foreach (var queryBlock in sqlStatementSemanticModel.QueryBlocks)
                {
                    QueryBlockNodes.Add(queryBlock.RootNode, queryBlock);
                }

                foreach (var plSqlVariableReference in sqlStatementSemanticModel.AllReferenceContainers.SelectMany(c => c.PlSqlVariableReferences))
                {
                    plSqlVariableReference.PlSqlProgram = program;
                }
            }
        }
Exemple #2
0
		private static OracleStatementSemanticModel BuildInternal(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken)
		{
			var semanticModel = statement != null && statement.IsPlSql
				? new OraclePlSqlStatementSemanticModel(statementText, statement, databaseModel)
				: new OracleStatementSemanticModel(statementText, statement, databaseModel);
			return semanticModel.Build(cancellationToken);
		}
            public void TestTryGetPlSqlUnitNameFromCreateProcedure()
            {
                var statement = Parser.Parse("CREATE PROCEDURE TEST_SCHEMA.TEST_PROCEDURE")[0];

                OracleStatement.TryGetPlSqlUnitName(statement, out var identifier).ShouldBeTrue();
                identifier.Owner.ShouldBe("TEST_SCHEMA");
                identifier.Name.ShouldBe("TEST_PROCEDURE");
            }
            public void TestTryGetPlSqlUnitNameFromCreateFunction()
            {
                var statement = Parser.Parse("CREATE FUNCTION TEST_SCHEMA.TEST_FUNCTION")[0];

                OracleStatement.TryGetPlSqlUnitName(statement, out var identifier).ShouldBeTrue();
                identifier.Owner.ShouldBe("TEST_SCHEMA");
                identifier.Name.ShouldBe("TEST_FUNCTION");
            }
Exemple #5
0
        internal OraclePlSqlStatementSemanticModel(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel)
            : base(statementText, statement, databaseModel)
        {
            if (!statement.IsPlSql)
            {
                throw new ArgumentException("Statement is not PL/SQL statement. ", nameof(statement));
            }

            _redundantSymbolGroup =
                new Lazy <ICollection <RedundantTerminalGroup> >(
                    () => AllPrograms.SelectMany(p => p.SqlModels).SelectMany(m => m.RedundantSymbolGroups).ToArray());
        }
        public CompilationErrorDataProvider(StatementBase statement, string currentSchema)
            : base(null)
        {
            _statement = statement;

            if (!OracleStatement.TryGetPlSqlUnitName(statement, out OracleObjectIdentifier objectIdentifier))
            {
                return;
            }

            if (!objectIdentifier.HasOwner)
            {
                objectIdentifier = OracleObjectIdentifier.Create(currentSchema, objectIdentifier.Name);
            }

            _owner      = objectIdentifier.NormalizedOwner.Trim('"');
            _objectName = objectIdentifier.NormalizedName.Trim('"');
        }
Exemple #7
0
		public OracleQueryBlock(OracleStatement statement, StatementGrammarNode rootNode, OracleStatementSemanticModel semanticModel) : base(semanticModel)
		{
			if (rootNode == null)
			{
				throw new ArgumentNullException(nameof(rootNode));
			}

			if (!String.Equals(rootNode.Id, NonTerminals.QueryBlock))
			{
				throw new ArgumentException($"'rootNode' parameter must be '{NonTerminals.QueryBlock}' non-terminal. ", nameof(rootNode));
			}

			Statement = statement;
			RootNode = rootNode;

			FromClause = rootNode[NonTerminals.FromClause];
			HierarchicalQueryClause = rootNode[NonTerminals.HierarchicalQueryClause];

			if (HierarchicalQueryClause != null)
			{
				var hasNoCycleSupport = HierarchicalQueryClause[NonTerminals.HierarchicalQueryConnectByClause, OracleGrammarDescription.Terminals.NoCycle] != null;
				HierarchicalClauseReference = new OracleHierarchicalClauseReference(hasNoCycleSupport);
			}
		}
Exemple #8
0
        public OracleQueryBlock(OracleStatement statement, StatementGrammarNode rootNode, OracleStatementSemanticModel semanticModel) : base(semanticModel)
        {
            if (rootNode == null)
            {
                throw new ArgumentNullException(nameof(rootNode));
            }

            if (!String.Equals(rootNode.Id, NonTerminals.QueryBlock))
            {
                throw new ArgumentException($"'rootNode' parameter must be '{NonTerminals.QueryBlock}' non-terminal. ", nameof(rootNode));
            }

            Statement = statement;
            RootNode  = rootNode;

            FromClause = rootNode[NonTerminals.FromClause];
            HierarchicalQueryClause = rootNode[NonTerminals.HierarchicalQueryClause];

            if (HierarchicalQueryClause != null)
            {
                var hasNoCycleSupport = HierarchicalQueryClause[NonTerminals.HierarchicalQueryConnectByClause, OracleGrammarDescription.Terminals.NoCycle] != null;
                HierarchicalClauseReference = new OracleHierarchicalClauseReference(hasNoCycleSupport);
            }
        }
Exemple #9
0
		public static IEnumerable<StatementGrammarNode> GetEqualValueLiteralTerminals(OracleStatement statement, StatementGrammarNode literal)
		{
			return statement.RootNode.Terminals.Where(t => String.Equals(t.Id, literal.Id) && String.Equals(t.Token.Value, literal.Token.Value));
		}
Exemple #10
0
		public static OracleStatementSemanticModel Build(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel)
		{
			return BuildInternal(statementText, statement, databaseModel, CancellationToken.None);
		}
Exemple #11
0
		public static Task<OracleStatementSemanticModel> BuildAsync(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken)
		{
			return Task.Factory.StartNew(
				() => BuildInternal(statementText, statement, databaseModel, cancellationToken), cancellationToken);
		}
Exemple #12
0
 public static Task <OracleStatementSemanticModel> BuildAsync(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken)
 {
     return(Task.Run(() => BuildInternal(statementText, statement, databaseModel, cancellationToken), cancellationToken));
 }
Exemple #13
0
            public void TestTryGetPlSqlUnitNameFromCreateTable()
            {
                var statement = Parser.Parse("CREATE TABLE TEST_SCHEMA.TEST_TABLE")[0];

                OracleStatement.TryGetPlSqlUnitName(statement, out var _).ShouldBeFalse();
            }
Exemple #14
0
 public static OracleStatementSemanticModel Build(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel)
 {
     return(BuildInternal(statementText, statement, databaseModel, CancellationToken.None));
 }
            public void TestTryGetPlSqlUnitNameFromCreateTable()
            {
                var statement = Parser.Parse("CREATE TABLE TEST_SCHEMA.TEST_TABLE")[0];

                OracleStatement.TryGetPlSqlUnitName(statement, out OracleObjectIdentifier identifier).ShouldBe(false);
            }
Exemple #16
0
        private static OracleStatementSemanticModel BuildInternal(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken)
        {
            var semanticModel = statement != null && statement.IsPlSql
                                ? new OraclePlSqlStatementSemanticModel(statementText, statement, databaseModel)
                                : new OracleStatementSemanticModel(statementText, statement, databaseModel);

            return(semanticModel.Build(cancellationToken));
        }
 public static IEnumerable <StatementGrammarNode> GetEqualValueLiteralTerminals(OracleStatement statement, StatementGrammarNode literal)
 {
     return(statement.RootNode.Terminals.Where(t => String.Equals(t.Id, literal.Id) && String.Equals(t.Token.Value, literal.Token.Value)));
 }