public override object VisitScalarFunctionCall([NotNull] PostgresParser.ScalarFunctionCallContext context) { ScalarFunction res; if (context.scalarFunctionName().SUM() != null) res = new SumAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().COUNT() != null) res = new CountAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().AVG() != null) res = new AvgAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().MIN() != null) res = new MinAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().MAX() != null) res = new MaxAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().STDDEV_SAMP() != null) res = new StDevAggregationFunction(context.scalarFunctionName().GetText()); else if (context.scalarFunctionName().LINREG() != null) res = new LinRegAggregationFunction(context.scalarFunctionName().GetText()); else res = new ScalarFunction(context.scalarFunctionName().GetText()); if (context.functionArgs() != null) foreach (var exp in (List<Expression>)Visit(context.functionArgs())) res.AddChild(exp); return res; }
public void FunctionsEquals() { { var func = new SumAggregationFunction("fn"); func.AddChild(new ColumnRef("a")); var func2 = new SumAggregationFunction("fn"); Assert.NotEqual(func, func2); func2.AddChild(new ColumnRef("a")); Assert.Equal(func, func2); var func3 = func.Clone() as SumAggregationFunction; Assert.Equal(func, func3); } { var func = new CountAggregationFunction("fn"); func.AddChild(new ColumnRef("a")); var func2 = new CountAggregationFunction("fn"); Assert.NotEqual(func, func2); func2.AddChild(new ColumnRef("a")); Assert.Equal(func, func2); var func3 = func.Clone() as CountAggregationFunction; Assert.Equal(func, func3); } { var func = new AvgAggregationFunction("fn"); func.AddChild(new ColumnRef("a")); var func2 = new AvgAggregationFunction("fn"); Assert.NotEqual(func, func2); func2.AddChild(new ColumnRef("a")); Assert.Equal(func, func2); var func3 = func.Clone() as AvgAggregationFunction; Assert.Equal(func, func3); } { var func = new PaillierAdditionFunction("fn", new ColumnRef("a"), new ColumnRef("b"), new BinaryConstant(new byte[] { 0x00 })); var func2 = new PaillierAdditionFunction("fn", new ColumnRef("a"), new ColumnRef("b"), new BinaryConstant(new byte[] { 0x00 }), "alias"); Assert.NotEqual(func, func2); func.Alias.id = "alias"; Assert.Equal(func, func2); var func3 = func.Clone() as PaillierAdditionFunction; Assert.Equal(func, func3); } { var func = new ElGamalMultiplicationFunction("fn", new ColumnRef("a"), new ColumnRef("b"), new BinaryConstant(new byte[] { 0x00 })); var func2 = new ElGamalMultiplicationFunction("fn", new ColumnRef("a"), new ColumnRef("b"), new BinaryConstant(new byte[] { 0x00 }), "alias"); Assert.NotEqual(func, func2); func.Alias.id = "alias"; Assert.Equal(func, func2); var func3 = func.Clone() as ElGamalMultiplicationFunction; Assert.Equal(func, func3); } }