Beispiel #1
0
        private static void ReadFilters(Tokenizer tokenizer, GraphQuery query)
        {
            tokenizer.SkipWhitespace();

            if (tokenizer.NextChar != '(')
            {
                return;
            }
            tokenizer.Advance();

            do
            {
                tokenizer.SkipWhitespace();

                if (tokenizer.NextChar == ')')
                {
                    tokenizer.Advance();
                    return;
                }

                var parameter = tokenizer.ReadIdentifier();
                tokenizer.SkipWhitespace();

                if (tokenizer.NextChar != ':')
                {
                    throw new InvalidOperationException("Filter " + parameter + " does not provide a value");
                }

                tokenizer.Advance();
                tokenizer.SkipWhitespace();

                var value = tokenizer.ReadValue();
                tokenizer.SkipWhitespace();

                if (tokenizer.NextChar == ',')
                {
                    tokenizer.Advance();
                }
                else if (tokenizer.NextChar != ')')
                {
                    throw new InvalidOperationException("Parse error after " + parameter + " filter, found: " + tokenizer.NextChar);
                }

                query.Filters.Add(parameter.ToString(), value.ToString());
            } while (true);
        }
Beispiel #2
0
        private static GraphQuery Parse(Tokenizer tokenizer)
        {
            tokenizer.SkipWhitespace();

            var objectType = tokenizer.ReadIdentifier();
            var query      = new GraphQuery(objectType.ToString());

            ReadFilters(tokenizer, query);

            var fields = new List <GraphQueryField>();

            ReadFields(tokenizer, fields);
            if (fields.Count > 0)
            {
                query.Fields = fields.ToArray();
            }

            return(query);
        }