public override FilterTerm VisitSimple_filter_term(V1QueryParser.Simple_filter_termContext context) { var attributeName = context.attribute_name(); var attributeVisitor = new AttributeDefinitionVisitor(_rootAssetType, _metaModel); var attributeDefinition = attributeVisitor.Visit(attributeName); var binaryOperator = context.binary_operator(); if (binaryOperator == null) { var unaryOperator = context.unary_operator(); if (unaryOperator?.MINUS() != null) { return(FieldFilterTerm.NotExists(attributeDefinition)); } return(FieldFilterTerm.Exists(attributeDefinition)); } List <object> values = new List <object>(); var valueList = context.filter_value_list(); if (valueList != null) { var filterValues = valueList.filter_value(); foreach (var filterValue in filterValues) { var singleQuoteValue = filterValue.SINGLE_QUOTED_STRING(); var doubleQuoteValue = filterValue.DOUBLE_QUOTED_STRING(); string filterValueToken = singleQuoteValue?.GetText() ?? doubleQuoteValue.GetText(); filterValueToken = filterValueToken.Substring(1, filterValueToken.Length - 2); values.Add(attributeDefinition.Coerce(filterValueToken)); } } else { var variableContext = context.variable(); throw new NotImplementedException("Filter Variables"); } var binaryOperatorText = binaryOperator.GetText(); switch (binaryOperatorText) { case "=": return(FieldFilterTerm.Equal(attributeDefinition, values)); case "!=": return(FieldFilterTerm.NotEqual(attributeDefinition, values)); case "<": return(FieldFilterTerm.Less(attributeDefinition, values)); case "<=": return(FieldFilterTerm.LessOrEqual(attributeDefinition, values)); case ">": return(FieldFilterTerm.Greater(attributeDefinition, values)); case ">=": return(FieldFilterTerm.GreaterOrEqual(attributeDefinition, values)); default: throw new NotSupportedException("Unknown binary operator"); } }
/// <summary> /// Exit a parse tree produced by <see cref="V1QueryParser.simple_filter_term"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitSimple_filter_term([NotNull] V1QueryParser.Simple_filter_termContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="V1QueryParser.simple_filter_term"/>. /// <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 VisitSimple_filter_term([NotNull] V1QueryParser.Simple_filter_termContext context) { return(VisitChildren(context)); }