Show / Hide Table of Contents

Class ScopeExpression

Scope expression visitor.

Inheritance
Object
LoggingExpressionVisitorBase
ExpressionEmitterBase
ScopeExpression
CsharpExpression
Implements
IGenericExpressionVisitor<String>
IExpressionVisitor
IGenericVisitor<String>
Inherited Members
ExpressionEmitterBase._output
ExpressionEmitterBase.Result
ExpressionEmitterBase.Reset()
ExpressionEmitterBase.VisitWithTracing(Aggregand)
ExpressionEmitterBase.VisitWithTracing(BinaryAggregation)
ExpressionEmitterBase.VisitWithTracing(DataSourceColumn)
ExpressionEmitterBase.VisitWithTracing(Extern)
ExpressionEmitterBase.VisitWithTracing(Filter)
ExpressionEmitterBase.VisitWithTracing(JoinKey)
ExpressionEmitterBase.VisitWithTracing(Literal)
ExpressionEmitterBase.VisitWithTracing(RuntimeVariable)
ExpressionEmitterBase.VisitWithTracing(TernaryOperation)
ExpressionEmitterBase.VisitWithTracing(UnaryAggregation)
ExpressionEmitterBase.VisitWithTracing(UnaryOperation)
ExpressionEmitterBase.VisitWithTracing(UnionExpression)
ExpressionEmitterBase.VisitWithTracing(UnaryWindowFunction)
ExpressionEmitterBase.AcceptWithSeparator(IEnumerable<Expression>, String, String, String)
ExpressionEmitterBase.AcceptAndAppend(Object[])
ExpressionEmitterBase.VisitParseExpression(UnaryOperation)
ExpressionEmitterBase.CreateVectorOperationFromBinary(VectorOperationKind, IEnumerable<Expression>)
ExpressionEmitterBase.ThrowHelpfulError(Object)
LoggingExpressionVisitorBase.Logger
LoggingExpressionVisitorBase.VisitorName
LoggingExpressionVisitorBase.Visit(JoinKey)
LoggingExpressionVisitorBase.Visit(Literal)
LoggingExpressionVisitorBase.Visit(RuntimeVariable)
LoggingExpressionVisitorBase.Visit(TernaryOperation)
LoggingExpressionVisitorBase.Visit(UnaryAggregation)
LoggingExpressionVisitorBase.Visit(UnaryOperation)
LoggingExpressionVisitorBase.Visit(UnionExpression)
LoggingExpressionVisitorBase.Visit(VectorOperation)
LoggingExpressionVisitorBase.Visit(Aggregand)
LoggingExpressionVisitorBase.Visit(BinaryAggregation)
LoggingExpressionVisitorBase.Visit(BinaryOperation)
LoggingExpressionVisitorBase.Visit(ColumnReference)
LoggingExpressionVisitorBase.Visit(DataSourceColumn)
LoggingExpressionVisitorBase.Visit(Extern)
LoggingExpressionVisitorBase.Visit(Filter)
LoggingExpressionVisitorBase.Visit(UnaryWindowFunction)
Object.Equals(Object)
Object.Equals(Object, Object)
Object.GetHashCode()
Object.GetType()
Object.MemberwiseClone()
Object.ReferenceEquals(Object, Object)
Object.ToString()
Namespace: Mangrove.MetricSetEmitters
Assembly: MetricSetEmitters.dll
Syntax
public class ScopeExpression : ExpressionEmitterBase, IGenericExpressionVisitor<string>, IExpressionVisitor, IGenericVisitor<string>
Remarks

This can be used in Scope emitters, or just for debugging.

Constructors

View Source

ScopeExpression(ILogger)

Declaration
public ScopeExpression(ILogger logger = null)
Parameters
Type Name Description
ILogger logger

Properties

View Source

AssignmentOperator

Declaration
protected override string AssignmentOperator { get; }
Property Value
Type Description
String
Overrides
ExpressionEmitterBase.AssignmentOperator
View Source

BinaryAggregationToOperator

Declaration
protected override IReadOnlyDictionary<BinaryAggregationKind, (string prefix, string separator, string suffix)> BinaryAggregationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<BinaryAggregationKind, ValueTuple<String, String, String>>
Overrides
ExpressionEmitterBase.BinaryAggregationToOperator
View Source

BinaryOperationToOperator

Declaration
protected override IReadOnlyDictionary<BinaryOperationKind, (string prefix, string infix, string suffix)> BinaryOperationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<BinaryOperationKind, ValueTuple<String, String, String>>
Overrides
ExpressionEmitterBase.BinaryOperationToOperator
View Source

LiteralFalse

Declaration
protected override string LiteralFalse { get; }
Property Value
Type Description
String
Overrides
ExpressionEmitterBase.LiteralFalse
View Source

LiteralTrue

Declaration
protected override string LiteralTrue { get; }
Property Value
Type Description
String
Overrides
ExpressionEmitterBase.LiteralTrue
View Source

Min_Max_Value

Declaration
protected override Dictionary<string, string> Min_Max_Value { get; }
Property Value
Type Description
Dictionary<String, String>
Overrides
ExpressionEmitterBase.Min_Max_Value
View Source

MutableBinaryOperationToOperator

Mutable version of BinaryOperationToOperator so that subclasses may "override" the syntax for a chosen subset of operations.

Declaration
protected Dictionary<BinaryOperationKind, (string prefix, string infix, string suffix)> MutableBinaryOperationToOperator { get; }
Property Value
Type Description
Dictionary<BinaryOperationKind, ValueTuple<String, String, String>>
View Source

MutableTypeKindToParseFromStringOperator

Declaration
protected Dictionary<TypeKind, (string prefix, string suffix)> MutableTypeKindToParseFromStringOperator { get; }
Property Value
Type Description
Dictionary<TypeKind, ValueTuple<String, String>>
View Source

MutableUnaryOperationToOperator

Mutable version of UnaryOperationToOperator so that subclasses may "override" the syntax for a chosen subset of operations.

Declaration
protected Dictionary<UnaryOperationKind, (string prefix, string suffix)> MutableUnaryOperationToOperator { get; }
Property Value
Type Description
Dictionary<UnaryOperationKind, ValueTuple<String, String>>
View Source

NegativeInfinity

Declaration
protected override string NegativeInfinity { get; }
Property Value
Type Description
String
Overrides
ExpressionEmitterBase.NegativeInfinity
View Source

PositiveInfinity

Declaration
protected override string PositiveInfinity { get; }
Property Value
Type Description
String
Overrides
ExpressionEmitterBase.PositiveInfinity
View Source

TernaryOperationToOperator

Declaration
protected override IReadOnlyDictionary<TernaryOperationKind, (string prefix, string leftInfix, string rightInfix, string suffix)> TernaryOperationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<TernaryOperationKind, ValueTuple<String, String, String, String>>
Overrides
ExpressionEmitterBase.TernaryOperationToOperator
View Source

TypeKindToParseFromStringOperator

Declaration
protected override IReadOnlyDictionary<TypeKind, (string prefix, string suffix)> TypeKindToParseFromStringOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<TypeKind, ValueTuple<String, String>>
Overrides
ExpressionEmitterBase.TypeKindToParseFromStringOperator
View Source

TypeToName

Declaration
protected override IReadOnlyDictionary<TypeKind, string> TypeToName { get; }
Property Value
Type Description
IReadOnlyDictionary<TypeKind, String>
Overrides
ExpressionEmitterBase.TypeToName
View Source

TypeToNonNullableName

Declaration
protected IReadOnlyDictionary<TypeKind, string> TypeToNonNullableName { get; }
Property Value
Type Description
IReadOnlyDictionary<TypeKind, String>
Remarks

By default all Mangrove types are nullable. We model Histograms as Scope MAPs which do not allow keys to be of nullable types (it throws a compilation error). Thus we need to get non-nullable analogs for the basic supported types.

View Source

TypeToNull

Declaration
protected override IReadOnlyDictionary<TypeKind, string> TypeToNull { get; }
Property Value
Type Description
IReadOnlyDictionary<TypeKind, String>
Overrides
ExpressionEmitterBase.TypeToNull
View Source

UnaryAggregationToOperator

Declaration
protected override IReadOnlyDictionary<UnaryAggregationKind, (string op, string prefix, string suffix)> UnaryAggregationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<UnaryAggregationKind, ValueTuple<String, String, String>>
Overrides
ExpressionEmitterBase.UnaryAggregationToOperator
View Source

UnaryOperationToOperator

Declaration
protected override IReadOnlyDictionary<UnaryOperationKind, (string prefix, string suffix)> UnaryOperationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<UnaryOperationKind, ValueTuple<String, String>>
Overrides
ExpressionEmitterBase.UnaryOperationToOperator
View Source

VectorOperationToOperator

Declaration
protected override IReadOnlyDictionary<VectorOperationKind, (string prefix, string separator, string suffix)> VectorOperationToOperator { get; }
Property Value
Type Description
IReadOnlyDictionary<VectorOperationKind, ValueTuple<String, String, String>>
Overrides
ExpressionEmitterBase.VectorOperationToOperator
View Source

WindowFunctionSyntax

Declaration
protected override (string prefix, string separator, string suffix) WindowFunctionSyntax { get; }
Property Value
Type Description
ValueTuple<String, String, String>
Overrides
ExpressionEmitterBase.WindowFunctionSyntax

Methods

View Source

Escape(String)

Declaration
protected override string Escape(string input)
Parameters
Type Name Description
String input
Returns
Type Description
String
Overrides
ExpressionEmitterBase.Escape(String)
View Source

StaticEscape(String)

Use Roslyn to escape a C# string.

Declaration
public static string StaticEscape(string input)
Parameters
Type Name Description
String input
Returns
Type Description
String
Remarks

Follows: https://stackoverflow.com/q/55514123 .

View Source

VisitCreateHistogramExpression(UnaryOperation)

Visit CreateHistogram operation.

Declaration
protected override void VisitCreateHistogramExpression(UnaryOperation expr)
Parameters
Type Name Description
UnaryOperation expr
Overrides
ExpressionEmitterBase.VisitCreateHistogramExpression(UnaryOperation)
Remarks

The output code is the following:

If the operand col is not a string, then the code is

col != null ? new MAP<type, int?>( col != null ? new Dictionary<type, int?>(){{col, 1}} : new Dictionary<type, int?>() ) : null

otherwise it is

!string.IsNullOrEmpty(col) ? new MAP<type, int?>( !string.IsNullOrEmpty(col) ? new Dictionary<type, int?>(){{col, 1}} : new Dictionary<type, int?>() ) : null

The reason for doing an extra null check inside the MAP is that Scope prioritizes native Scope commands differently than C# commands: it first tries to evaluate new MAP. In other words,

col != null ? new MAP<int, int?>{{col, 1}} : null

which is exactly equivalent to

col != null ? new MAP<int, int?>( new Dictionary<int,int?>(){{col, 1}} ) : null

would throw a runtime error of the value of col is null.

The reason to do another null check outside is that we do not want empty histograms for null values: we want these histograms to be null. However, we are forced to provide an empty dictionary and not null into the constructor of MAP, thus we do the null check outside as well.

View Source

VisitTypeCastExpression(UnaryOperation)

Visit TypeCast expression.

Declaration
protected override void VisitTypeCastExpression(UnaryOperation expr)
Parameters
Type Name Description
UnaryOperation expr
Overrides
ExpressionEmitterBase.VisitTypeCastExpression(UnaryOperation)
Remarks

The result is a string in the format (type)(expression-string).

View Source

VisitWithTracing(BinaryOperation)

Declaration
public override void VisitWithTracing(BinaryOperation expr)
Parameters
Type Name Description
BinaryOperation expr
Overrides
ExpressionEmitterBase.VisitWithTracing(BinaryOperation)
View Source

VisitWithTracing(ColumnReference)

Declaration
public override void VisitWithTracing(ColumnReference expr)
Parameters
Type Name Description
ColumnReference expr
Overrides
LoggingExpressionVisitorBase.VisitWithTracing(ColumnReference)
View Source

VisitWithTracing(VectorOperation)

Handling vector operations in Scope.

Declaration
public override void VisitWithTracing(VectorOperation expr)
Parameters
Type Name Description
VectorOperation expr
Overrides
ExpressionEmitterBase.VisitWithTracing(VectorOperation)
Remarks

Scope does not support vector min/max so we create those manually by iterating the usual min/max. For example, the analog of MAX( a, b, c ) would be MAX( a, MAX(b,c) ).

Implements

IGenericExpressionVisitor<T>
IExpressionVisitor
IGenericVisitor<T>

Extension Methods

ObjectExtensions.EventId(Object)
  • View Source
Back to top Generated by DocFX