public override void VisitJoinClause(JoinClause joinClause, QueryModel queryModel, int index) { if (!_query.TryGetValue("FROM", out List <Dictionary <string, object> > fromList)) { var mainDb = queryModel.MainFromClause.ItemName; fromList = new List <Dictionary <string, object> > { new Dictionary <string, object> { ["as"] = mainDb } }; _query["FROM"] = fromList; } var innerPath = LiteCoreSelectExpressionVisitor.GetJsonExpression(joinClause.InnerKeySelector, true)[0]; var outerPath = LiteCoreSelectExpressionVisitor.GetJsonExpression(joinClause.OuterKeySelector, true)[0]; fromList.Add(new Dictionary <string, object> { ["as"] = joinClause.ItemName, ["on"] = new[] { "=", outerPath, innerPath } }); base.VisitJoinClause(joinClause, queryModel, index); }
public override void VisitSelectClause(SelectClause selectClause, QueryModel queryModel) { var visitor = new LiteCoreSelectExpressionVisitor(queryModel.BodyClauses.Count > 1); visitor.Visit(selectClause.Selector); _query["WHAT"] = visitor.GetJsonExpression(); SelectResult = visitor.SelectResult; base.VisitSelectClause(selectClause, queryModel); }