コード例 #1
0
        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;
        }
コード例 #2
0
        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);
            }
        }