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; } } }
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"); }
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('"'); }
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); } }
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); } }
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)); }
public static OracleStatementSemanticModel Build(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel) { return BuildInternal(statementText, statement, databaseModel, CancellationToken.None); }
public static Task<OracleStatementSemanticModel> BuildAsync(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken) { return Task.Factory.StartNew( () => BuildInternal(statementText, statement, databaseModel, cancellationToken), cancellationToken); }
public static Task <OracleStatementSemanticModel> BuildAsync(string statementText, OracleStatement statement, OracleDatabaseModelBase databaseModel, CancellationToken cancellationToken) { return(Task.Run(() => BuildInternal(statementText, statement, databaseModel, cancellationToken), cancellationToken)); }
public void TestTryGetPlSqlUnitNameFromCreateTable() { var statement = Parser.Parse("CREATE TABLE TEST_SCHEMA.TEST_TABLE")[0]; OracleStatement.TryGetPlSqlUnitName(statement, out var _).ShouldBeFalse(); }
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); }
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))); }