public static IEnumerable <SearchItem> Print(SearchExpressionContext c) { var skipCount = 0; if (SearchExpression.GetFormatString(c.args[0], out var formatStr)) { skipCount++; } var outputValueFieldName = System.Guid.NewGuid().ToString("N"); foreach (var expr in c.args.Skip(skipCount)) { if (expr == null) { yield return(null); continue; } var str = new List <string>(); var dataSet = SearchExpression.ProcessValues(expr.Execute(c), outputValueFieldName, item => { var valueStr = SearchExpression.FormatItem(c.search, item, formatStr); str.Add(valueStr); return(valueStr); }); foreach (var item in dataSet) { yield return(item); } Debug.Log($"[{string.Join(",", str)}]"); } }
public static IEnumerable <SearchItem> Format(SearchExpressionContext c) { var skipCount = 0; if (SearchExpression.GetFormatString(c.args[0], out var formatStr)) { skipCount++; } var items = c.args.Skip(skipCount).SelectMany(e => e.Execute(c)); var dataSet = SearchExpression.ProcessValues(items, null, item => SearchExpression.FormatItem(c.search, item, formatStr)); return(dataSet); }
public static IEnumerable <SearchItem> Alias(SearchExpressionContext c) { var aliasSelector = c.args.Last(); if (c.HasFlag(SearchExpressionExecutionFlags.Expand)) { yield return(SearchExpression.CreateSearchExpressionItem(new SearchExpression(c.args[0], newAlias: aliasSelector.innerText))); } else { foreach (var r in c.args[0].Execute(c)) { if (r == null) { yield return(null); continue; } var hasFormatString = SearchExpression.GetFormatString(aliasSelector, out var formatStr); if (hasFormatString && aliasSelector.types.HasAny(SearchExpressionType.Text)) { r.label = SearchExpression.FormatItem(c.search, r, formatStr); } else if (aliasSelector.types.HasAny(SearchExpressionType.Selector)) { r.label = SelectorManager.SelectValue(r, c.search, aliasSelector.innerText.ToString()).ToString(); yield return(r); } else if (aliasSelector.types.HasAny(SearchExpressionType.Iterable)) { bool valueSelected = false; using (c.runtime.Push(r)) { foreach (var s in aliasSelector.Execute(c)) { if (s != null) { r.label = s.value.ToString(); valueSelected = true; break; } else { yield return(null); } } } if (!valueSelected) { r.label = r.label = SearchExpression.FormatItem(c.search, r, aliasSelector.innerText.ToString()); } } else { c.ThrowError($"Alias selector `{aliasSelector.outerText}` not supported", aliasSelector.outerText); } yield return(r); } } }