public SearchResults Search(F.Query query) { SearchResults results = new SearchResults(); var criteria = parseCriteria(query, results); if (!results.HasErrors) { results.UsedCriteria = criteria; var normalizedCriteria = NormalizeNonChainedReferenceCriteria(criteria, query.ResourceType); List<BsonValue> keys = CollectKeys(query.ResourceType, normalizedCriteria, results); int numMatches = keys.Count(); results.AddRange(KeysToSearchResults(keys)); results.MatchCount = numMatches; } return results; }
public static Argument Create(F.Conformance.SearchParamType type, bool fuzzy=false) { switch (type) { case F.Conformance.SearchParamType.Number: return new IntArgument(); case F.Conformance.SearchParamType.String: return new StringArgument(); case F.Conformance.SearchParamType.Date: return new DateArgument(); case F.Conformance.SearchParamType.Token: return new TokenArgument(); case F.Conformance.SearchParamType.Reference: return new ReferenceArgument(); case F.Conformance.SearchParamType.Composite: //TODO: Implement Composite arguments return new Argument(); default: return new Argument(); } }
private List<Criterium> parseCriteria(F.Query query, SearchResults results) { var result = new List<Criterium>(); foreach (var c in query.Criteria) { try { result.Add(Criterium.Parse(c)); } catch (Exception ex) { results.AddIssue(String.Format("Could not parse parameter [{0}] for reason [{1}].", c.ToString(), ex.Message)); } } return result; }