public void Positionne_l_expression_en_deuxième_argument()
 {
     var intVar2 = new OperandeVariable(intId, "num2");
       MethodExpression method = new MethodExpression(intVar, intClass.InstanceMethods[0]);
       var tmp = (MethodExpression)method.Set(3, intVar2);
       Assert.AreSame(intVar2, tmp.Inputs[1]);
 }
        public override Expression CloneExpressionOnly()
        {
            DelegateCreationExpression result = new DelegateCreationExpression(Type, MethodExpression.CloneExpressionOnly(), Target.CloneExpressionOnly(), null);

            result.TypeIsImplicitlyInferable = this.TypeIsImplicitlyInferable;
            return(result);
        }
Exemple #3
0
        protected override IPhpValue VisitMethodExpression(MethodExpression src)
        {
            if (src.Method.IsStatic)
            {
                var phpClassName =
                    state.Principles.GetPhpType(src.Method.DeclaringType, true, state.Principles.CurrentType);
                if (phpClassName.IsEmpty)
                {
                    throw new Exception("phpClassName cannot be null");
                }
                phpClassName = phpClassName.MakeAbsolute();
                var className             = new PhpConstValue(phpClassName.FullName);
                var methodTranslationInfo = state.Principles.GetOrMakeTranslationInfo(src.Method);
                if (!src.Method.IsPublic)
                {
                    WriteWarning(string.Format("Using not public method {0}.{1} as expression",
                                               src.Method.DeclaringType, src.Method.Name));
                }
                var methodName    = new PhpConstValue(methodTranslationInfo.ScriptName);
                var arrayCreation = new PhpArrayCreateExpression(className, methodName);
                return(SimplifyPhpExpression(arrayCreation));
            }

            {
                // ryzykuję z this
                var targetObject          = new PhpThisExpression();
                var methodTranslationInfo = state.Principles.GetOrMakeTranslationInfo(src.Method);
                var methodName            = new PhpConstValue(methodTranslationInfo.ScriptName);
                var arrayCreation         = new PhpArrayCreateExpression(targetObject, methodName);
                return(SimplifyPhpExpression(arrayCreation));
            }
        }
        private bool Method(FieldExpression field, out MethodExpression op)
        {
            var args = ReadMethodArguments();

            op = new MethodExpression(field.FieldValue, args);
            return(true);
        }
 public void Jete_exception_quand_appel_method_egal()
 {
     var tmp = new OperandeVariable(intId, "nom");
       intClass.AddMethod("method", intId, new List<IArgument>() { registry.CreateArgument(intId) });
       var tmp2 = new MethodExpression(tmp, intClass.InstanceMethods[0]);
       new OperatorExpression(tmp2, OPERATOR.EQUAL);
 }
 public void Doit_retourner_deux_plus_inputs_pour_methode()
 {
     OperandeVariable operande = new OperandeVariable(classId, "var1");
       cla.AddMethod("method", classId, new List<IArgument>() { registry.CreateArgument(classId)});
       IExpression v = new MethodExpression(operande, registry.GetClassById(classId).InstanceMethods[0]);
       Assert.AreEqual(3, v.Count);
 }
        public void MethodExpressionReturnsCorrectExpression()
        {
            // Arrange & Act
            var method = new MethodExpression();

            // Assert
            Assert.Equal("$method", method.Expression);
        }
Exemple #8
0
        public override Expression Clone()
        {
            MethodInvocationExpression result = new MethodInvocationExpression(MethodExpression.Clone() as MethodReferenceExpression, this.instructions);

            result.Arguments   = Arguments.Clone();
            result.VirtualCall = this.VirtualCall;
            return(result);
        }
Exemple #9
0
        public Discovery()
        {
            Config = new Configuration();

            Classes    = new ClassExpression(Config);
            Methods    = new MethodExpression(Config);
            Parameters = new ParameterSourceExpression(Config);
        }
 public void Doit_avoir_5_elements()
 {
     var tmpVar = new OperandeVariable(classId, "maVariable");
       var tmp = new MethodExpression(tmpVar, registry.GetClassById(classId).InstanceMethods[0]);
       var visitor = new VisualisationVisitor(ref registry);
       List<IElement> lst = visitor.Visit(tmp);
       Assert.AreEqual(5, lst.Count);
 }
Exemple #11
0
 public string GetMethodName(MethodExpression method)
 {
     return(method switch
     {
         AggregateExpression aggregate => this.GetAggregateName(aggregate.Function),
         SequenceExpression sequence => this.GetSequenceName(sequence),
         _ => method.Name,
     });
 public void Doit_changer_l_element_visé_par_la_position()
 {
     var intVar2 = new OperandeVariable(intId, "num2");
       MethodExpression method = new MethodExpression(intVar, intClass.InstanceMethods[0]);
       method = (MethodExpression)method.Set(3, intVar2);
       MethodExpression method2 = new MethodExpression(intVar2, intClass.InstanceMethods[0]);
       method = (MethodExpression)method.Set(3, method2);
       Assert.AreSame(method2, method.Inputs[1]);
 }
Exemple #13
0
        public override Expression CloneExpressionOnly()
        {
            MethodInvocationExpression result = new MethodInvocationExpression(MethodExpression.CloneExpressionOnly() as MethodReferenceExpression, null)
            {
                Arguments = this.Arguments.CloneExpressionsOnly(), VirtualCall = this.VirtualCall, ConstraintType = this.ConstraintType
            };

            return(result);
        }
Exemple #14
0
        private static void ThrowInvalidMethod(BlittableJsonReaderObject parameters, MethodExpression me, string queryText, string whereCollectionName = null)
        {
            if (whereCollectionName == null)
            {
                throw new InvalidQueryException("A 'where' clause cannot contain just a '" + me.Name + "' method", queryText, parameters);
            }

            throw new InvalidQueryException($"A 'where' clause after '{whereCollectionName}' cannot contain just a '" + me.Name + "' method", queryText, parameters);
        }
        public void Doit_changer_l_element_de_la_methode_visé_par_la_position()
        {
            MethodExpression method = new MethodExpression(intVar, intClass.InstanceMethods[0]);

              MethodExpression method2 = new MethodExpression(intVar, intClass.InstanceMethods[0]);
              method = (MethodExpression)method.Set(3, method2);

              method = (MethodExpression)method.Set(5, intVar);
              Assert.AreSame(intVar, ((MethodExpression)(method.Inputs[1])).Inputs[0]);
        }
 public void Doit_avoir_des_positions_croissantes()
 {
     var tmpVar = new OperandeVariable(classId, "maVariable");
       var tmp = new MethodExpression(tmpVar, registry.GetClassById(classId).InstanceMethods[0]);
       var visitor = new VisualisationVisitor(ref registry);
       List<IElement> lst = visitor.Visit(tmp);
       for(int i = 0; i<lst.Count; i++)
       {
     Assert.AreEqual(i, lst[i].Position);
       }
 }
 public void Doit_ajouter_les_inputs()
 {
     cla.AddMethod("method2", classId, new List<IArgument>() { registry.CreateArgument(classId), registry.CreateArgument(classId) });
       var tmpVar = new OperandeVariable(classId, "maVariable");
       var tmp = new MethodExpression(tmpVar, registry.GetClassById(classId).InstanceMethods[1]);
       tmp = (MethodExpression)tmp.Set(2, tmpVar);
       tmp = (MethodExpression)tmp.Set(3, tmpVar);
       var visitor = new VisualisationVisitor(ref registry);
       List<IElement> lst = visitor.Visit(tmp);
       Assert.AreEqual(7, lst.Count);
 }
Exemple #18
0
        /// <summary>
        /// Visitor pattern method for <see cref="MethodExpression"/>.
        /// </summary>
        /// <param name="expression">The MethodExpression that is being visited.</param>
        /// <exception cref="ArgumentNullException"><paramref name="expression"/> is null</exception>
        public override bool Visit(MethodExpression expression)
        {
            bool result = VisitExpressionList(expression.Arguments);

            if (expression.Instance != null)
            {
                bool instanceNeedsRewrite = VisitExpression(expression.Instance);
                result = result || instanceNeedsRewrite;
            }
            return(result);
        }
        /// <summary>
        /// Visitor pattern method for <see cref="MethodExpression"/>.
        /// </summary>
        /// <param name="expression">The MethodExpression that is being visited.</param>
        /// <exception cref="ArgumentNullException"><paramref name="expression"/> is null</exception>
        public override void Visit(MethodExpression expression)
        {
            // #433613: PreSharp warning 56506: Parameter 'expression' to this public method must be validated: A null-dereference can occur here.
            ADP1.CheckArgumentNull(expression, "expression");

            if (expression.Instance != null)
            {
                VisitExpression(expression.Instance);
            }
            VisitExpressionList(expression.Arguments);
        }
 public override void Visit(MethodExpression e)
 {
     Begin(e);
     Dump(e.Method);
     Dump(e.Arguments, "Arguments", "Argument");
     if (e.Instance != null)
     {
         Dump(e.Instance, "Instance");
     }
     End(e);
 }
Exemple #21
0
        public Convention()
        {
            Config = new Configuration();

            Classes = new ClassExpression(Config);
            Methods = new MethodExpression(Config);;
            Parameters = new ParameterSourceExpression(Config);
            CaseExecution = new CaseBehaviorExpression(Config);
            FixtureExecution = new FixtureBehaviorExpression(Config);
            ClassExecution = new ClassBehaviorExpression(Config);
            HideExceptionDetails = new AssertionLibraryExpression(Config);
        }
Exemple #22
0
        public Convention()
        {
            Config = new Configuration();

            Classes              = new ClassExpression(Config);
            Methods              = new MethodExpression(Config);
            Parameters           = new ParameterSourceExpression(Config);
            CaseExecution        = new CaseBehaviorExpression(Config);
            FixtureExecution     = new FixtureBehaviorExpression(Config);
            ClassExecution       = new ClassBehaviorExpression(Config);
            HideExceptionDetails = new AssertionLibraryExpression(Config);
        }
 public void Doit_retourner_elements_sans_constructeur_et_word_new()
 {
     var tmpCla = new OperandeClass(classId);
       var tmp = new MethodExpression(tmpCla, registry.GetClassById(classId).Constructors[0]);
       var visitor = new VisualisationVisitor(ref registry);
       List<IElement> lst = visitor.Visit(tmp);
       Assert.AreEqual(ELEMENT_TYPE.WORD, lst[0].ElementType);
       Assert.AreEqual(ELEMENT_TYPE.CLASS, lst[1].ElementType);
       Assert.AreEqual(ELEMENT_TYPE.METHOD_BEGIN, lst[2].ElementType);
       Assert.AreEqual(ELEMENT_TYPE.ARGUMENT, lst[3].ElementType);
       Assert.AreEqual(ELEMENT_TYPE.METHOD_END, lst[4].ElementType);
 }
        public void Doit_retourner_id_class_que_methode()
        {
            var visitor = new ReturnVisitor(ref registry);

              var tmpId = registry.AddPrimitiveClass("string", DATA_TYPE.STRING);
              cla.AddMethod("method", tmpId, new System.Collections.Generic.List<ClassesRegistry.Method.Argument.IArgument>());

              var tmp = new OperandeVariable(classId, "num");
              var tmp2 = new MethodExpression(tmp, registry.GetClassById(classId).InstanceMethods[0]);

              Assert.AreEqual(tmpId, visitor.Visit(tmp2));
        }
Exemple #25
0
            public string GetMethodName(MethodExpression method)
            {
                switch (method)
                {
                case AggregateExpression aggregate:
                    return(this.GetAggregateName(aggregate.Function));

                case SequenceExpression sequence:
                    return(this.GetSequenceName(sequence));

                default:
                    return(method.Name);
                }
            }
Exemple #26
0
            public string GetMethodName(MethodExpression method)
            {
                switch (method)
                {
                case AggregateExpression aggregate:
                    return(aggregate.Method.ToString());

                case SequenceExpression sequence:
                    return(sequence.Method.ToString());

                default:
                    return(method.Name);
                }
            }
        protected SourceLocation DoParseExpression(ScriptingContext context,
                                                   LocationType type, string arg)
        {
            F.Expression     expr  = context.ParseExpression(arg);
            MethodExpression mexpr = expr.ResolveMethod(context, type);

            if (mexpr != null)
            {
                return(mexpr.EvaluateSource(context));
            }
            else
            {
                return(context.FindMethod(arg));
            }
        }
Exemple #28
0
        private static Shape HandleWkt(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters, string fieldName,
                                       SpatialField spatialField)
        {
            var wktValue = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[0]);

            AssertValueIsString(fieldName, wktValue.Type);

            SpatialUnits?spatialUnits = null;

            if (expression.Arguments.Count == 2)
            {
                spatialUnits = GetSpatialUnits(query, expression.Arguments[3] as ValueExpression, metadata, parameters, fieldName);
            }

            return(spatialField.ReadShape((string)wktValue.Value, spatialUnits));
        }
Exemple #29
0
            public static int LastWithCount(MethodExpression expression, string queryText, BlittableJsonReaderObject parameters)
            {
                try
                {
                    if (expression.Arguments.Count != 1)
                    {
                        throw new InvalidOperationException("Method 'last()' with count expects one arguments to be provided");
                    }

                    var duration = (int)Helpers.GetLong(expression.Arguments[0], parameters);
                    return(duration);
                }
                catch (Exception e)
                {
                    throw new InvalidQueryException("Could not parse last() method.", queryText, parameters, e);
                }
            }
            public override TreeNode Visit(MethodExpression e)
            {
                TreeNode retInfo = null;

                retInfo = new TreeNode(".");
                AppendType(retInfo, e.Method.DefiningType);
                retInfo.Text.Append(".");
                retInfo.Text.Append(e.Method.Name);
                AppendParameters(retInfo, e.Method.Parameters);
                if (e.Instance != null)
                {
                    retInfo.Children.Add(this.Visit("Instance", e.Instance));
                }
                AppendArguments(retInfo, e.Method.Parameters, e.Arguments);

                return(retInfo);
            }
        /// <summary>
        /// Update game logic
        /// </summary>
        /// <param name="deltaTime">Time since last frame</param>
        private void Update(float deltaTime)
        {
            // Update active scene
            SceneManager.Instance.CurrentScene.Update(deltaTime);

            // Request window redraw
            Invalidate();

            timer += deltaTime;

            if (Input.IsKeyDown(System.Windows.Forms.Keys.C))
            {
                string      line  = Console.ReadLine();
                IExpression exp   = new StringExpression(line);
                IExpression query = new MethodExpression(exp);
                Console.WriteLine(query.executeMethod());
            }
        }
Exemple #32
0
        public static (TimeSeriesRangeType Type, int Count) ParseCount(MethodExpression expression, string queryText, BlittableJsonReaderObject parameters = null)
        {
            TimeSeriesRangeType type;
            int count;

            switch (QueryMethod.GetMethodType(expression.Name.ToString()))
            {
            case MethodType.Last:
                type  = TimeSeriesRangeType.Last;
                count = QueryMethod.TimeSeries.LastWithCount(expression, queryText, parameters);
                break;

            default:
                throw new InvalidQueryException($"Got invalid type {expression.Name}.", queryText, parameters);
            }

            return(type, count);
        }
Exemple #33
0
        private static Lucene.Net.Search.Query HandleEndsWith(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters)
        {
            var fieldName = ExtractIndexFieldName(query, parameters, expression.Arguments[0], metadata);

            var(value, valueType) = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[1]);

            if (valueType != ValueTokenType.String)
            {
                ThrowMethodExpectsArgumentOfTheFollowingType("endsWith", ValueTokenType.String, valueType, metadata.QueryText, parameters);
            }

            var valueAsString = GetValueAsString(value);

            valueAsString = string.IsNullOrEmpty(valueAsString)
                ? LuceneQueryHelper.Asterisk
                : valueAsString.Insert(0, LuceneQueryHelper.Asterisk);

            return(LuceneQueryHelper.Term(fieldName, valueAsString, LuceneTermType.WildCard));
        }
Exemple #34
0
            public static TimeValue LastWithTime(MethodExpression expression, string queryText, BlittableJsonReaderObject parameters)
            {
                try
                {
                    if (expression.Arguments.Count != 2)
                    {
                        throw new InvalidOperationException("Method 'last()' expects two arguments to be provided");
                    }

                    var duration = Helpers.GetLong(expression.Arguments[0], parameters);
                    var timeValueUnitAsString = Helpers.GetString(expression.Arguments[1], parameters);

                    var offset = 0;
                    return(RangeGroup.ParseTimePeriodFromString(duration, timeValueUnitAsString, ref offset));
                }
                catch (Exception e)
                {
                    throw new InvalidQueryException("Could not parse last() method.", queryText, parameters, e);
                }
            }
Exemple #35
0
        private static Lucene.Net.Search.Query HandleLucene(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters,
                                                            Analyzer analyzer)
        {
            var fieldName = ExtractIndexFieldName(query, parameters, expression.Arguments[0], metadata);

            var(value, valueType) = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[1]);

            if (valueType != ValueTokenType.String)
            {
                ThrowMethodExpectsArgumentOfTheFollowingType("lucene", ValueTokenType.String, valueType, metadata.QueryText, parameters);
            }

            if (metadata.IsDynamic)
            {
                fieldName = new QueryFieldName(AutoIndexField.GetSearchAutoIndexFieldName(fieldName.Value), fieldName.IsQuoted);
            }

            var parser = new Lucene.Net.QueryParsers.QueryParser(Version.LUCENE_29, fieldName, analyzer);

            return(parser.Parse(GetValueAsString(value)));
        }
Exemple #36
0
        private static Shape HandleCircle(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters, string fieldName,
                                          SpatialField spatialField)
        {
            var radius = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[0]);

            AssertValueIsNumber(fieldName, radius.Type);

            var latitute = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[1]);

            AssertValueIsNumber(fieldName, latitute.Type);

            var longitude = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[2]);

            AssertValueIsNumber(fieldName, longitude.Type);

            SpatialUnits?spatialUnits = null;

            if (expression.Arguments.Count == 4)
            {
                spatialUnits = GetSpatialUnits(query, expression.Arguments[3] as ValueExpression, metadata, parameters, fieldName);
            }

            return(spatialField.ReadCircle(Convert.ToDouble(radius.Value), Convert.ToDouble(latitute.Value), Convert.ToDouble(longitude.Value), spatialUnits));
        }
 /// <summary>
 /// Visitor pattern method for MethodExpression.
 /// </summary>
 /// <param name="expression">The MethodExpression that is being visited.</param>
 public abstract void Visit(MethodExpression expression);
    /// <summary>
    /// Visitor pattern method for <see cref="MethodExpression"/>.
    /// </summary>
    /// <param name="expression">The MethodExpression that is being visited.</param>
    /// <exception cref="ArgumentNullException"><paramref name="expression"/> is null</exception>
        public override void Visit(MethodExpression expression)
        {
            // #433613: PreSharp warning 56506: Parameter 'expression' to this public method must be validated: A null-dereference can occur here.
            ADP1.CheckArgumentNull(expression, "expression");

            if (expression.Instance != null)
            {
                VisitExpression(expression.Instance);
            }
            VisitExpressionList(expression.Arguments);
        }
 public override void Visit(MethodExpression e)
 {
     Begin(e);
     Dump(e.Method);
     Dump(e.Arguments, "Arguments", "Argument");
     if (e.Instance != null)
     {
         Dump(e.Instance, "Instance");
     }
     End(e);
 }
Exemple #40
0
 private static Lucene.Net.Search.Query HandleExact(JsonOperationContext context, Query query, MethodExpression expression, QueryMetadata metadata,
                                                    BlittableJsonReaderObject parameters, Analyzer analyzer, Func <string, SpatialField> getSpatialField)
 {
     return(ToLuceneQuery(context, query, expression.Arguments[0], metadata, parameters, analyzer, getSpatialField, exact: true));
 }
Exemple #41
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, MethodExpression src)
 {
     return(null);
 }
        private static void GenerateMethodExpression(ScriptGenerator generator, MemberSymbol symbol, MethodExpression expression)
        {
            ScriptTextWriter writer = generator.Writer;

            if (expression.Method.SkipGeneration)
            {
                // If this method is to be skipped from generation, just generate the
                // left-hand-side object reference, and skip everything past it, including
                // the dot.

                GenerateExpression(generator, symbol, expression.ObjectReference);
                return;
            }

            if (expression.ObjectReference is BaseExpression)
            {
                Debug.Assert(expression.Method.IsExtension == false);

                writer.Write(((BaseExpression)expression.ObjectReference).EvaluatedType.FullGeneratedName);
                writer.Write(".prototype.");
                writer.Write(expression.Method.GeneratedName);
                writer.Write(".call(");
                writer.Write(generator.CurrentImplementation.ThisIdentifier);
                if ((expression.Parameters != null) && (expression.Parameters.Count != 0))
                {
                    writer.Write(", ");
                    GenerateExpressionList(generator, symbol, expression.Parameters);
                }
                writer.Write(")");
            }
            else
            {
                if (expression.Method.IsAliased)
                {
                    writer.Write(expression.Method.Alias);
                    writer.Write("(");
                    if ((expression.Method.Visibility & MemberVisibility.Static) == 0)
                    {
                        GenerateExpression(generator, symbol, expression.ObjectReference);
                        if ((expression.Parameters != null) && (expression.Parameters.Count != 0))
                        {
                            writer.Write(", ");
                        }
                    }
                    if ((expression.Parameters != null) && (expression.Parameters.Count != 0))
                    {
                        GenerateExpressionList(generator, symbol, expression.Parameters);
                    }
                    writer.Write(")");
                }
                else
                {
                    if (expression.Method.IsExtension)
                    {
                        Debug.Assert(expression.Method.Parent.Type == SymbolType.Class);

                        string extendee = ((ClassSymbol)expression.Method.Parent).Extendee;
                        Debug.Assert(String.IsNullOrEmpty(extendee) == false);

                        writer.Write(extendee);
                        writer.Write(".");
                    }
                    else
                    {
                        GenerateExpression(generator, symbol, expression.ObjectReference);
                        if (expression.Method.GeneratedName.Length != 0)
                        {
                            writer.Write(".");
                        }
                    }

                    if (expression.Method.GeneratedName.Length != 0)
                    {
                        writer.Write(expression.Method.GeneratedName);
                    }
                    writer.Write("(");
                    if (expression.Parameters != null)
                    {
                        GenerateExpressionList(generator, symbol, expression.Parameters);
                    }
                    writer.Write(")");
                }
            }
        }
Exemple #43
0
        private static Lucene.Net.Search.Query HandleSearch(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters,
                                                            Analyzer analyzer)
        {
            QueryFieldName fieldName;

            if (expression.Arguments[0] is FieldExpression ft)
            {
                fieldName = ExtractIndexFieldName(query, parameters, ft, metadata);
            }
            else if (expression.Arguments[0] is ValueExpression vt)
            {
                fieldName = ExtractIndexFieldName(vt, metadata, parameters);
            }
            else
            {
                throw new InvalidOperationException("search() method can only be called with an identifier or string, but was called with " + expression.Arguments[0]);
            }

            var(value, valueType) = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[1]);

            if (valueType != ValueTokenType.String)
            {
                ThrowMethodExpectsArgumentOfTheFollowingType("search", ValueTokenType.String, valueType, metadata.QueryText, parameters);
            }

            Debug.Assert(metadata.IsDynamic == false || metadata.WhereFields[fieldName].IsFullTextSearch);

            var valueAsString = GetValueAsString(value);
            var values        = valueAsString.Split(' ');

            if (metadata.IsDynamic)
            {
                fieldName = new QueryFieldName(AutoIndexField.GetSearchAutoIndexFieldName(fieldName.Value), fieldName.IsQuoted);
            }

            if (values.Length == 1)
            {
                var nValue = values[0];
                return(LuceneQueryHelper.AnalyzedTerm(fieldName, nValue, GetTermType(nValue), analyzer));
            }

            var occur = Occur.SHOULD;

            if (expression.Arguments.Count == 3)
            {
                var fieldExpression = (FieldExpression)expression.Arguments[2];
                if (fieldExpression.Compound.Count != 1)
                {
                    ThrowInvalidOperatorInSearch(metadata, parameters, fieldExpression);
                }

                var op = fieldExpression.Compound[0];
                if (string.Equals("AND", op, StringComparison.OrdinalIgnoreCase))
                {
                    occur = Occur.MUST;
                }
                else if (string.Equals("OR", op, StringComparison.OrdinalIgnoreCase))
                {
                    occur = Occur.SHOULD;
                }
                else
                {
                    ThrowInvalidOperatorInSearch(metadata, parameters, fieldExpression);
                }
            }

            var q = new BooleanQuery();

            foreach (var v in values)
            {
                q.Add(LuceneQueryHelper.AnalyzedTerm(fieldName, v, GetTermType(v), analyzer), occur);
            }

            return(q);

            LuceneTermType GetTermType(string termValue)
            {
                if (string.IsNullOrEmpty(termValue))
                {
                    return(LuceneTermType.String);
                }

                if (termValue[0] == LuceneQueryHelper.AsteriskChar)
                {
                    return(LuceneTermType.WildCard);
                }

                if (termValue[termValue.Length - 1] == LuceneQueryHelper.AsteriskChar)
                {
                    if (termValue[termValue.Length - 2] != '\\')
                    {
                        return(LuceneTermType.Prefix);
                    }
                }

                return(LuceneTermType.String);
            }
        }
 public void Jete_exception_si_position_inattendue()
 {
     MethodExpression method = new MethodExpression(intVar, intClass.InstanceMethods[0]);
       Assert.AreSame(intVar, method.Set(1, intVar));
 }
Exemple #45
0
        private static Lucene.Net.Search.Query HandleSpatial(Query query, MethodExpression expression, QueryMetadata metadata, BlittableJsonReaderObject parameters,
                                                             MethodType spatialMethod, Func <string, SpatialField> getSpatialField)
        {
            string fieldName;

            if (metadata.IsDynamic == false)
            {
                fieldName = ExtractIndexFieldName(query, parameters, expression.Arguments[0], metadata);
            }
            else
            {
                var spatialExpression = (MethodExpression)expression.Arguments[0];
                fieldName = spatialExpression.GetText();
            }

            var shapeExpression = (MethodExpression)expression.Arguments[1];

            var distanceErrorPct = Constants.Documents.Indexing.Spatial.DefaultDistanceErrorPct;

            if (expression.Arguments.Count == 3)
            {
                var distanceErrorPctValue = GetValue(fieldName, query, metadata, parameters, (ValueExpression)expression.Arguments[2]);
                AssertValueIsNumber(fieldName, distanceErrorPctValue.Type);

                distanceErrorPct = Convert.ToDouble(distanceErrorPctValue.Value);
            }

            var spatialField = getSpatialField(fieldName);

            var methodName = shapeExpression.Name;
            var methodType = QueryMethod.GetMethodType(methodName);

            Shape shape = null;

            switch (methodType)
            {
            case MethodType.Circle:
                shape = HandleCircle(query, shapeExpression, metadata, parameters, fieldName, spatialField);
                break;

            case MethodType.Wkt:
                shape = HandleWkt(query, shapeExpression, metadata, parameters, fieldName, spatialField);
                break;

            default:
                QueryMethod.ThrowMethodNotSupported(methodType, metadata.QueryText, parameters);
                break;
            }

            Debug.Assert(shape != null);

            SpatialOperation operation = null;

            switch (spatialMethod)
            {
            case MethodType.Within:
                operation = SpatialOperation.IsWithin;
                break;

            case MethodType.Contains:
                operation = SpatialOperation.Contains;
                break;

            case MethodType.Disjoint:
                operation = SpatialOperation.IsDisjointTo;
                break;

            case MethodType.Intersects:
                operation = SpatialOperation.Intersects;
                break;

            default:
                QueryMethod.ThrowMethodNotSupported(spatialMethod, metadata.QueryText, parameters);
                break;
            }

            Debug.Assert(operation != null);

            var args = new SpatialArgs(operation, shape)
            {
                DistErrPct = distanceErrorPct
            };

            return(spatialField.Strategy.MakeQuery(args));
        }
 public void Retourne_l_element_positionné_quand_position_zero()
 {
     MethodExpression method = new MethodExpression(intVar, intClass.InstanceMethods[0]);
       Assert.AreSame(intVar, method.Set(0, intVar));
 }