예제 #1
0
        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;
        }
예제 #2
0
 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();
     }
 }
예제 #3
0
 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;
 }