Exemplo n.º 1
0
        static ParsedQueryNode Traverse(ParsedQueryNode node, ParsedQueryNodeVisitorLookup visitor, ParsedQueryNode parent)
        {
            if (node == null) return null;

            if (node.GetType() == typeof (ParsedQuery))
            {
                var query = node.As<ParsedQuery>();
                node = new ParsedQuery(query.Fields.Select(n => Traverse(n, visitor, node)).ToArray());
            }

            if (node.GetType() == typeof (ParsedField))
            {
                var field = node.As<ParsedField>();

                node = new ParsedField(
                    field.Value,
                    field.Alias,
                    field.Parameters.Select(n => Traverse(n, visitor, node)).ToArray(),
                    field.Fields.Select(n => Traverse(n, visitor, node)).ToArray());
            }

            if (node.GetType() == typeof (ParsedArgument))
            {
                var arg = node.As<ParsedArgument>();
                node = new ParsedArgument(arg.Name, Traverse(arg.Value, visitor, node));
            }

            return visitor.Lookup(node.GetType()).Visit(node, parent);
        }
Exemplo n.º 2
0
 public static ParsedQueryNode Traverse(ParsedQueryNode node, ParsedQueryNodeVisitorLookup visitor)
 {
     return Traverse(node, visitor, null);
 }
Exemplo n.º 3
0
        public static string Run(string query, GraphQlSchema schema)
        {
            ParsedQuery parsedQuery = GraphQlParser.ParseQuery(query);

            var schemaCursor = new GraphQlSchemaCursor(schema);
            var queryTree = new QueryTree();
            var queryTreeCursor = new QueryTreeCursor(queryTree);

            var visitorLookup = new ParsedQueryNodeVisitorLookup();
            visitorLookup.RegisterForNode<ParsedQuery>(new NullQueryParsedQueryNodeVisitor());
            visitorLookup.RegisterForNode<ParsedField>(new FieldSelectionVisitor(schemaCursor, queryTreeCursor));
            ParsedQueryTraverser.Traverse(parsedQuery, visitorLookup);
        }