Пример #1
0
        private static StatementGrammarNode FindCondition(StatementGrammarNode rootNode)
        {
            if (!String.Equals(rootNode.ParentNode.Id, NonTerminals.Expression))
            {
                return(null);
            }

            return(rootNode.GetAncestor(NonTerminals.Condition));
        }
Пример #2
0
        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
            };
        }