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); }
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); }