private SearchRequest BuildFromSearchQuery(SearchExpressionNode node, string searchQuery) { var providers = new List <SearchProvider>(); if (node.source?.type == ExpressionType.Provider) { var selectedProviderName = Convert.ToString(node.source.value); if (!m_AdditionalProviders.TryGetValue(selectedProviderName, out var selectedProvider)) { selectedProvider = SearchService.GetProvider(selectedProviderName); } if (selectedProvider != null) { providers.Add(selectedProvider); } } else if (node.source == null) { providers.AddRange(SearchService.Providers.Where(p => p.active)); } else { throw new NotSupportedException($"Evaluation of source node {node.source.id} of type {node.source.type} is not supported."); } requestCount++; return(new SearchRequest(node.type, SearchService.CreateContext(providers, searchQuery, m_SearchOptions))); }
private SearchRequest BuildSearchRequest(SearchExpressionNode node) { var searchQuery = Convert.ToString(node.value); if (node.variables != null) { // Replace constants foreach (var v in node.variables) { if (v.type != ExpressionType.Value) { continue; } var constantValue = Convert.ToString(v.source.value); if (String.IsNullOrEmpty(constantValue)) { UnityEngine.Debug.LogWarning($"Constant value is null for {v.source.id}"); } searchQuery = searchQuery.Replace($"${v.name}", constantValue); } foreach (var v in node.variables) { if (v.type == ExpressionType.Value) { continue; } switch (v.type) { case ExpressionType.Search: case ExpressionType.Select: { var varName = v.name; return(BuildRequest(v.source).Join(varValue => { var selectNode = new SearchExpressionNode(node.type, node.source, searchQuery.Replace($"${varName}", varValue)); return BuildRequest(selectNode); })); } case ExpressionType.Undefined: break; default: throw new NotSupportedException($"Evaluation of variable {v.name} of type {v.type} not supported"); } } } var providers = new List <SearchProvider>(); if (node.source?.type == ExpressionType.Provider) { var selectedProviderName = Convert.ToString(node.source.value); if (!m_AdditionalProviders.TryGetValue(selectedProviderName, out var selectedProvider)) { selectedProvider = SearchService.GetProvider(selectedProviderName); } if (selectedProvider != null) { providers.Add(selectedProvider); } } else if (node.source == null) { providers.AddRange(SearchService.Providers.Where(p => p.active)); } else { throw new NotSupportedException($"Evaluation of source node {node.source.id} of type {node.source.type} is not supported."); } requestCount++; return(new SearchRequest(node.type, SearchService.CreateContext(providers, searchQuery, m_SearchOptions))); }