public override AttributeDefinition VisitAttribute_name(V1QueryParser.Attribute_nameContext context) { var parts = context.attribute_name_part(); var result = Visit(parts[0]); if (parts.Length > 1) { for (var i = 1; i < parts.Length; i++) { var part = parts[i]; var subVisitor = new AttributeDefinitionVisitor(result.RelatedAssetType, _metaModel); var relatedAttributeDefinition = subVisitor.Visit(part); result = result.CreateJoinAttributeDefinition(relatedAttributeDefinition); } } var agg = context.aggregation_name(); if (agg != null) { var aggregateName = agg.NAME().GetText(); var aggregateType = (AggregateType)Enum.Parse(typeof(AggregateType), aggregateName); result = result.CreateAggregateAttributeDefinition(aggregateType); } return(result); }
public override OrderTerm VisitDesc_sort_token_term(V1QueryParser.Desc_sort_token_termContext context) { var visitor = new AttributeDefinitionVisitor(_assetType, _metaModel); var attributeDefinition = visitor.VisitAttribute_name(context.attribute_name()); return(new OrderTerm(attributeDefinition, OrderTermDirection.Descending)); }
public static AttributeDefinition Parse(string attributeNameToken, AssetType assetType, MetaModel metaModel) { ICharStream charStream = new AntlrInputStream(attributeNameToken); ITokenSource tokenSource = new V1QueryLexer(charStream); ITokenStream tokenStream = new CommonTokenStream(tokenSource); var parser = new V1QueryParser(tokenStream); var attributeName = parser.attribute_name(); var visitor = new AttributeDefinitionVisitor(assetType, metaModel); return(visitor.Visit(attributeName)); }
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"); } }