private static StatementGrammarNode FindCondition(StatementGrammarNode rootNode) { if (!String.Equals(rootNode.ParentNode.Id, NonTerminals.Expression)) { return(null); } return(rootNode.GetAncestor(NonTerminals.Condition)); }
private void AnalyzePlSqlReference(StatementGrammarNode effectiveTerminal) { var plSqlIdentifiers = new Stack <StatementGrammarNode>(); var parentNode = effectiveTerminal.ParentNode; var plSqlCompletion = PlSqlCompletion.None; var plSqlAssignmentTargetNode = effectiveTerminal.GetAncestor(NonTerminals.PlSqlAssignmentTarget); if (plSqlAssignmentTargetNode != null) { plSqlIdentifiers.PushMany(GetPlSqlIdentifiers(plSqlAssignmentTargetNode[Terminals.PlSqlIdentifier])); plSqlCompletion = PlSqlCompletion.Function | PlSqlCompletion.Procedure; } else if (String.Equals(parentNode.ParentNode?.Id, NonTerminals.PlSqlProcedureCall)) { var prefixNode = parentNode[NonTerminals.Prefix]; if (prefixNode != null) { var schemaIdentifierTerminal = prefixNode[NonTerminals.SchemaPrefix, Terminals.SchemaIdentifier]; plSqlIdentifiers.PushIfNotNull(schemaIdentifierTerminal); var objectIdentifierTerminal = prefixNode[NonTerminals.ObjectPrefix, Terminals.ObjectIdentifier]; plSqlIdentifiers.PushIfNotNull(objectIdentifierTerminal); } var identifierTerminal = parentNode[Terminals.Identifier]; plSqlIdentifiers.PushIfNotNull(identifierTerminal); plSqlCompletion = PlSqlCompletion.Procedure; } if (plSqlIdentifiers.Count == 0 || plSqlIdentifiers.Count > 3) { return; } PlSqlCompletion = plSqlCompletion; ReferenceIdentifier = new ReferenceIdentifier { Identifier = plSqlIdentifiers.PopIfNotEmpty(), ObjectIdentifier = plSqlIdentifiers.PopIfNotEmpty(), SchemaIdentifier = plSqlIdentifiers.PopIfNotEmpty(), CursorPosition = CursorPosition }; }