Example #1
0
        private LogicalTerm getLogicalTerm(QueryBuilderQueriesParser.LogicalTermContext context)
        {
            if (context.relationalOperator() != null)
            {
                var ret = new RelationalLogicalTerm();

                var Element   = metadata.EntityRelationshipModel.FindByName(context.simpleAttribute().elementName.Text);
                var Attribute = Element.GetAttribute(context.simpleAttribute().attribute.Text);

                Map.MapRule ElementRule  = metadata.ERMongoMapping.Rules.First(R => R.Source.Name == Element.Name);
                string      AttributeMap = ElementRule.Rules.First(R => R.Key == Attribute.Name).Value;

                ret.SimpleAttribute = new SimpleAttribute($"${AttributeMap}");
                ret.Value           = context.value().GetText();

                switch (context.relationalOperator().GetText())
                {
                case "=":
                    ret.RelationalOperator = RelationalOperator.EQUAL;
                    break;

                case "<>":
                    ret.RelationalOperator = RelationalOperator.NOT_EQUAL;
                    break;

                case ">=":
                    ret.RelationalOperator = RelationalOperator.GREATER_EQUAL;
                    break;

                case "<=":
                    ret.RelationalOperator = RelationalOperator.LESS_EQUAL;
                    break;

                case ">":
                    ret.RelationalOperator = RelationalOperator.GREATER;
                    break;

                case "<":
                    ret.RelationalOperator = RelationalOperator.LESS;
                    break;

                case "like":
                    ret.RelationalOperator = RelationalOperator.LIKE;
                    break;

                case "is":
                    ret.RelationalOperator = RelationalOperator.IS;
                    break;
                }

                return(ret);
            }
            else if (context.rangeOperator() != null)
            {
                var         ret          = new RangeLogicalTerm();
                var         Element      = metadata.EntityRelationshipModel.FindByName(context.simpleAttribute().elementName.Text);
                var         Attribute    = Element.GetAttribute(context.simpleAttribute().attribute.Text);
                Map.MapRule ElementRule  = metadata.ERMongoMapping.Rules.First(R => R.Source.Name == Element.Name);
                string      AttributeMap = ElementRule.Rules.First(R => R.Key == Attribute.Name).Value;

                ret.SimpleAttribute = new SimpleAttribute($"${AttributeMap}");

                switch (context.rangeOperator().type)
                {
                case "BETWEEN":
                    ret.RangeOperator = RangeOperator.BETWEEN;
                    context.rangeOperator().value().ToList().ForEach(v => ret.Values.Add(v.GetText()));
                    break;

                case "NOT_IN_QUERY":
                    ret.RangeOperator = RangeOperator.NOT_IN_QUERY;
                    break;

                case "NOT_IN_VALUES":
                    ret.RangeOperator = RangeOperator.NOT_IN_VALUES;
                    context.rangeOperator().value().ToList().ForEach(v => ret.Values.Add(v.GetText()));
                    break;

                case "IN_QUERY":
                    ret.RangeOperator = RangeOperator.IN_QUERY;
                    break;

                case "IN_VALUES":
                    ret.RangeOperator = RangeOperator.IN_VALUES;
                    context.rangeOperator().value().ToList().ForEach(v => ret.Values.Add(v.GetText()));
                    break;

                case "NOT_EXISTS_QUERY":
                    ret.RangeOperator = RangeOperator.NOT_EXISTS_QUERY;
                    break;

                case "EXISTS_QUERY":
                    ret.RangeOperator = RangeOperator.EXISTS_QUERY;
                    break;
                }
                return(ret);
            }
            else
            {
                var ret = new ParenthesisLogicalTerm();
                ret.LogicalExpression = getLogicalExpression(context.logicalExpression());
                return(ret);
            }
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="QueryBuilderQueriesParser.logicalTerm"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitLogicalTerm([NotNull] QueryBuilderQueriesParser.LogicalTermContext context)
 {
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="QueryBuilderQueriesParser.logicalTerm"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitLogicalTerm([NotNull] QueryBuilderQueriesParser.LogicalTermContext context)
 {
     return(VisitChildren(context));
 }