public override void VisitQuerySelectClause(QuerySelectClause querySelectClause) { var visitor = new CaptureSelectNewFieldNamesVisitor(); querySelectClause.AcceptVisitor(visitor, null); indexData.SelectExpressions = visitor.SelectExpressions; indexData.NumberOfSelectClauses++; }
public override void VisitQuerySelectClause(QuerySelectClause querySelectClause) { var selectExpressions = new Dictionary <string, Expression>(); var visitor = new CaptureSelectNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions); querySelectClause.AcceptVisitor(visitor, null); indexData.SelectExpressions = selectExpressions; indexData.NumberOfSelectClauses++; }
public override void Respond(IHttpContext context) { var indexStr = context.ReadString(); VariableInitializer mapDefinition = indexStr.Trim().StartsWith("from") ? QueryParsingUtils.GetVariableDeclarationForLinqQuery(indexStr, true) : QueryParsingUtils.GetVariableDeclarationForLinqMethods(indexStr, true); var captureSelectNewFieldNamesVisitor = new CaptureSelectNewFieldNamesVisitor(); mapDefinition.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); context.WriteJson(new { captureSelectNewFieldNamesVisitor.FieldNames }); }
public async Task <HttpResponseMessage> IndexFields() { var indexStr = await ReadStringAsync(); var mapDefinition = indexStr.Trim().StartsWith("from") ? QueryParsingUtils.GetVariableDeclarationForLinqQuery(indexStr, true) : QueryParsingUtils.GetVariableDeclarationForLinqMethods(indexStr, true); var captureSelectNewFieldNamesVisitor = new CaptureSelectNewFieldNamesVisitor(); mapDefinition.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); return(GetMessageWithObject(new { captureSelectNewFieldNamesVisitor.FieldNames })); }
public async Task <HttpResponseMessage> IndexFields() { var indexStr = await ReadStringAsync().ConfigureAwait(false); bool querySyntax = indexStr.Trim().StartsWith("from"); var mapDefinition = querySyntax ? QueryParsingUtils.GetVariableDeclarationForLinqQuery(indexStr, true) : QueryParsingUtils.GetVariableDeclarationForLinqMethods(indexStr, true); var captureSelectNewFieldNamesVisitor = new CaptureSelectNewFieldNamesVisitor(querySyntax == false, new HashSet <string>(), new Dictionary <string, Expression>()); mapDefinition.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); return(GetMessageWithObject(new { FieldNames = captureSelectNewFieldNamesVisitor.FieldNames })); }
public override void VisitInvocationExpression(InvocationExpression invocationExpression) { base.VisitInvocationExpression(invocationExpression); var visitor = new CaptureSelectNewFieldNamesVisitor(); invocationExpression.AcceptVisitor(visitor, null); var memberReferenceExpression = invocationExpression.Target as MemberReferenceExpression; if (memberReferenceExpression == null) { base.VisitInvocationExpression(invocationExpression); return; } if (memberReferenceExpression.MemberName == "Where") { indexData.HasWhere = true; } indexData.SelectExpressions = visitor.SelectExpressions; }
public override void VisitInvocationExpression(InvocationExpression invocationExpression) { base.VisitInvocationExpression(invocationExpression); var selectExpressions = new Dictionary <string, Expression>(); var visitor = new CaptureSelectNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions); invocationExpression.AcceptVisitor(visitor, null); var memberReferenceExpression = invocationExpression.Target as MemberReferenceExpression; if (memberReferenceExpression == null) { base.VisitInvocationExpression(invocationExpression); return; } if (memberReferenceExpression.MemberName == "Where") { indexData.HasWhere = true; } indexData.SelectExpressions = selectExpressions; }
public async Task<HttpResponseMessage> IndexFields() { var indexStr = await ReadStringAsync(); bool querySyntax = indexStr.Trim().StartsWith("from"); var mapDefinition = querySyntax ? QueryParsingUtils.GetVariableDeclarationForLinqQuery(indexStr, true) : QueryParsingUtils.GetVariableDeclarationForLinqMethods(indexStr, true); var captureSelectNewFieldNamesVisitor = new CaptureSelectNewFieldNamesVisitor(querySyntax == false, new HashSet<string>(), new Dictionary<string, Expression>()); mapDefinition.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); return GetMessageWithObject(new { FieldNames = captureSelectNewFieldNamesVisitor.FieldNames }); }
private void HandleMapFunction(ConstructorDeclaration ctor, string map) { string entityName; VariableDeclaration mapDefinition = map.Trim().StartsWith("from") ? TransformMapDefinitionFromLinqQuerySyntax(map, out entityName) : TransformMapDefinitionFromLinqMethodSyntax(map, out entityName); if (string.IsNullOrEmpty(entityName) == false) { //this.ForEntityNames.Add(entityName); ctor.Body.AddChild(new ExpressionStatement( new InvocationExpression( new MemberReferenceExpression( new MemberReferenceExpression(new ThisReferenceExpression(), "ForEntityNames"), "Add"), new List<Expression> {new PrimitiveExpression(entityName, entityName)}) )); } // this.AddMapDefinition(from doc in docs ...); ctor.Body.AddChild(new ExpressionStatement( new InvocationExpression(new MemberReferenceExpression(new ThisReferenceExpression(), "AddMapDefinition"), new List<Expression>{new LambdaExpression { Parameters = { new ParameterDeclarationExpression(null, "docs") }, ExpressionBody = mapDefinition.Initializer }} ))); if(firstMap) { mapDefinition.Initializer.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); firstMap = false; } else { var secondMapFieldNames = new CaptureSelectNewFieldNamesVisitor(); mapDefinition.Initializer.AcceptVisitor(secondMapFieldNames, null); if(secondMapFieldNames.FieldNames.SetEquals(captureSelectNewFieldNamesVisitor.FieldNames) == false) { var message = string.Format(@"Map functions defined as part of a multi map index must return identical types. Baseline map : {0} Non matching map : {1} Common fields : {2} Missing fields : {3} Additional fields : {4}", indexDefinition.Maps.First(), map, string.Join(", ", captureSelectNewFieldNamesVisitor.FieldNames.Intersect(secondMapFieldNames.FieldNames)), string.Join(", ", captureSelectNewFieldNamesVisitor.FieldNames.Except(secondMapFieldNames.FieldNames)), string.Join(", ", secondMapFieldNames.FieldNames.Except(captureSelectNewFieldNamesVisitor.FieldNames)) ); throw new InvalidOperationException(message); } } mapDefinition.Initializer.AcceptVisitor(new ThrowOnInvalidMethodCalls(), null); mapDefinition.Initializer.AcceptVisitor(captureQueryParameterNamesVisitorForMap, null); }
public async Task<HttpResponseMessage> IndexFields() { var indexStr = await ReadStringAsync(); var mapDefinition = indexStr.Trim().StartsWith("from") ? QueryParsingUtils.GetVariableDeclarationForLinqQuery(indexStr, true) : QueryParsingUtils.GetVariableDeclarationForLinqMethods(indexStr, true); var captureSelectNewFieldNamesVisitor = new CaptureSelectNewFieldNamesVisitor(); mapDefinition.AcceptVisitor(captureSelectNewFieldNamesVisitor, null); return GetMessageWithObject(new { captureSelectNewFieldNamesVisitor.FieldNames }); }