private IQueryModelTransform CompileSearchQuery(SearchQuery query) { if (!query.BooleanOperation.HasValue) { throw new CompileException("Operation is not specified"); } SearchQueryTransformer transformer; switch (query.Left.Type) { case SearchNode.SearchNodeType.Nil: throw new CompileException("Query is empty."); case SearchNode.SearchNodeType.Id: case SearchNode.SearchNodeType.Grouped: transformer = new SearchQueryTransformer(query); transformer.Nodes.Add(CompileSearchNode(query.Left)); break; default: transformer = new SearchQueryTransformer(query); IQueryModelTransform s = CompileSearchNode(query.Left); if (s != null) { transformer.Nodes.Add(s); } s = CompileSearchNode(query.Right); if (s != null) { transformer.Nodes.Add(s); } break; } return(transformer); }
public virtual string Compile(SearchNode node) { if (node == null) { throw new CompileException("Not a valid query."); } IQueryModelTransform structure = CompileSearchNode(node); if (structure == null) { throw new CompileException("Failed to compile query!"); } JsonSerializerSettings settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ContractResolver = new CamelCasePropertyNamesContractResolver(), Converters = new List <JsonConverter> { new StringEnumConverter { CamelCaseText = false } }, }; return(JsonConvert.SerializeObject(structure, settings)); }