Exemple #1
0
        public override object VisitQueryLetClause(QueryLetClause queryLetClause, object data)
        {
            if (SimplifyLetExpression(queryLetClause.Expression) is LambdaExpression)
            {
                var text = QueryParsingUtils.ToText(queryLetClause);
                throw new SecurityException("Let expression cannot contain labmda expressions, but got: " + text);
            }

            return(base.VisitQueryLetClause(queryLetClause, data));
        }
Exemple #2
0
        public override object VisitLambdaExpression(LambdaExpression lambdaExpression, object data)
        {
            if (lambdaExpression.StatementBody == null || lambdaExpression.StatementBody.IsNull)
            {
                return(base.VisitLambdaExpression(lambdaExpression, data));
            }
            var text = QueryParsingUtils.ToText(lambdaExpression);

            throw new SecurityException("Lambda expression can only consist of a single expression, not a statement, but got: " + text);
        }
Exemple #3
0
        public override object VisitQueryOrderClause(QueryOrderClause queryOrderClause, object data)
        {
            var text = QueryParsingUtils.ToText(queryOrderClause);

            throw new InvalidOperationException(
                      @"OrderBy calls are not valid during map or reduce phase, but the following was found:
" + text + @"
OrderBy calls modify the indexing output, but doesn't actually impact the order of results returned from the database.
You should be calling OrderBy on the QUERY, not on the index, if you want to specify ordering.");
        }
Exemple #4
0
        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 }));
        }
Exemple #7
0
        public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
        {
            foreach (var forbidden in Members.Where(x => x.Names.Contains(memberReferenceExpression.MemberName)))
            {
                var identifierExpression = GetTarget(memberReferenceExpression);
                if (forbidden.TypeAliases.Contains(identifierExpression) == false)
                {
                    continue;
                }

                var text = QueryParsingUtils.ToText(memberReferenceExpression);
                throw new InvalidOperationException(string.Format(forbidden.Error, text));
            }

            return(base.VisitMemberReferenceExpression(memberReferenceExpression, data));
        }
        public void ProcessQuery(AstNode queryExpressionSelectClause)
        {
            var objectCreateExpression = QueryParsingUtils.GetAnonymousCreateExpression(queryExpressionSelectClause) as AnonymousTypeCreateExpression;

            if (objectCreateExpression == null)
            {
                return;
            }

            // we only want the outer most value
            if (queryProcessed && _outerMostRequired)
            {
                return;
            }

            fieldNames.Clear();
            selectExpressions.Clear();

            queryProcessed = true;

            foreach (var expression in objectCreateExpression.Initializers.OfType <NamedArgumentExpression>())
            {
                fieldNames.Add(expression.Name);
                selectExpressions[expression.Name] = expression.Expression;
            }

            foreach (var expression in objectCreateExpression.Initializers.OfType <NamedExpression>())
            {
                fieldNames.Add(expression.Name);
                selectExpressions[expression.Name] = expression.Expression;
            }
            foreach (var expression in objectCreateExpression.Initializers.OfType <MemberReferenceExpression>())
            {
                fieldNames.Add(expression.MemberName);
                selectExpressions[expression.MemberName] = expression;
            }

            foreach (var expression in objectCreateExpression.Initializers.OfType <IdentifierExpression>())
            {
                fieldNames.Add(expression.Identifier);
                selectExpressions[expression.Identifier] = expression;
            }
        }
        private void ProcessQuery(Expression queryExpressionSelectClause)
        {
            var objectCreateExpression = QueryParsingUtils.GetAnonymousCreateExpression(queryExpressionSelectClause) as ObjectCreateExpression;

            if (objectCreateExpression == null ||
                objectCreateExpression.IsAnonymousType == false)
            {
                return;
            }

            // we only want the outer most value
            if (queryProcessed)
            {
                return;
            }

            queryProcessed = true;

            foreach (
                var expression in
                objectCreateExpression.ObjectInitializer.CreateExpressions.OfType <NamedArgumentExpression>())
            {
                FieldNames.Add(expression.Name);
            }

            foreach (
                var expression in
                objectCreateExpression.ObjectInitializer.CreateExpressions.OfType <MemberReferenceExpression>())
            {
                FieldNames.Add(expression.MemberName);
            }

            foreach (
                var expression in
                objectCreateExpression.ObjectInitializer.CreateExpressions.OfType <IdentifierExpression>())
            {
                FieldNames.Add(expression.Identifier);
            }
        }
Exemple #10
0
        private void ProcessQuery(Expression queryExpressionSelectClause)
        {
            var objectCreateExpression = QueryParsingUtils.GetAnonymousCreateExpression(queryExpressionSelectClause) as AnonymousTypeCreateExpression;

            if (objectCreateExpression == null)
            {
                return;
            }

            foreach (var expression in objectCreateExpression.Initializers.OfType <NamedArgumentExpression>())
            {
                var generateExpression = GenerateExpression(expression.Expression);
                if (generateExpression != null)
                {
                    QueryParameters.Add(generateExpression);
                }
            }


            foreach (var expression in objectCreateExpression.Initializers.OfType <NamedExpression>())
            {
                var generateExpression = GenerateExpression(expression.Expression);
                if (generateExpression != null)
                {
                    QueryParameters.Add(generateExpression);
                }
            }

            foreach (var expression in  objectCreateExpression.Initializers.OfType <MemberReferenceExpression>())
            {
                var generateExpression = GenerateExpression(expression);
                if (generateExpression != null)
                {
                    QueryParameters.Add(generateExpression);
                }
            }
        }
        public string Generate()
        {
            var indexDeclaration = new TypeDeclaration
            {
                Name      = Regex.Replace(_indexDefinition.Name, @"[^\w\d]", ""),
                BaseTypes =
                {
                    new SimpleType("AbstractIndexCreationTask")
                },
                Modifiers = Modifiers.Public,
                Members   =
                {
                    new PropertyDeclaration
                    {
                        Name       = "IndexName",
                        ReturnType = new PrimitiveType("string"),
                        Modifiers  = Modifiers.Public | Modifiers.Override, Getter = new Accessor
                        {
                            Body = new BlockStatement()
                            {
                                new ReturnStatement(new PrimitiveExpression(_indexDefinition.Name))
                            }
                        }
                    }
                }
            };

            var objectCreateExpression = new ObjectCreateExpression(new SimpleType("IndexDefinition"))
            {
                Initializer = new ArrayInitializerExpression()
            };

            if (_indexDefinition.Maps.Count == 1)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Map", new VerbatimStringLiteralExpression(_indexDefinition.Map)));
            }
            else
            {
                var maps = new ArrayInitializerExpression();
                _indexDefinition.Maps.ForEach(map => maps.Elements.Add(new VerbatimStringLiteralExpression(map)));

                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Maps", maps));
            }

            if (_indexDefinition.Reduce != null)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Reduce", new VerbatimStringLiteralExpression(_indexDefinition.Reduce)));
            }

            if (_indexDefinition.MaxIndexOutputsPerDocument != null)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("MaxIndexOutputsPerDocument", new PrimitiveExpression(_indexDefinition.MaxIndexOutputsPerDocument)));
            }

            if (_indexDefinition.Indexes.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Indexes", CreateExpressionFromStringToEnumDictionary(_indexDefinition.Indexes)));
            }

            if (_indexDefinition.Stores.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Stores", CreateExpressionFromStringToEnumDictionary(_indexDefinition.Stores)));
            }

            if (_indexDefinition.TermVectors.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("TermVectors", CreateExpressionFromStringToEnumDictionary(_indexDefinition.TermVectors)));
            }

            if (_indexDefinition.SortOptions.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("SortOptions", CreateExpressionFromStringToEnumDictionary(_indexDefinition.SortOptions)));
            }

            if (_indexDefinition.Analyzers.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("Analyzers", CreateAnalizersExpression(_indexDefinition)));
            }

            if (_indexDefinition.SuggestionsOptions.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("SuggestionsOptions", CreateSuggestionsExpression(_indexDefinition)));
            }

            if (_indexDefinition.SpatialIndexes.Count > 0)
            {
                objectCreateExpression.Initializer.Elements.Add(new NamedExpression("SpatialIndexes", CreateSpatialIndexesExpression(_indexDefinition)));
            }

            var createIndexDefinition = new MethodDeclaration
            {
                Name       = "CreateIndexDefinition",
                Modifiers  = Modifiers.Public | Modifiers.Override,
                ReturnType = new SimpleType("IndexDefinition"),
                Body       = new BlockStatement
                {
                    new ReturnStatement(objectCreateExpression)
                }
            };

            indexDeclaration.Members.Add(createIndexDefinition);

            var namespaces = new HashSet <string>
            {
                typeof(SystemTime).Namespace,
                typeof(Enumerable).Namespace,
                typeof(IEnumerable <>).Namespace,
                typeof(IEnumerable).Namespace,
                typeof(int).Namespace,
                typeof(CultureInfo).Namespace,
                typeof(Regex).Namespace,
                typeof(AbstractIndexCreationTask).Namespace,
                typeof(IndexDefinition).Namespace,
                typeof(StringDistanceTypes).Namespace,
            };

            var text = QueryParsingUtils.GenerateText(indexDeclaration, new OrderedPartCollection <AbstractDynamicCompilationExtension>(), namespaces);

            return(text);
        }