Package com.facebook.presto.sql.gen

Source Code of com.facebook.presto.sql.gen.TestExpressionKey

/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.presto.sql.gen;

import com.facebook.presto.spi.type.Type;
import com.facebook.presto.sql.tree.ArithmeticExpression;
import com.facebook.presto.sql.tree.InputReference;
import com.facebook.presto.sql.tree.ComparisonExpression;
import com.facebook.presto.sql.tree.Expression;
import com.facebook.presto.sql.tree.LongLiteral;
import org.testng.annotations.Test;

import java.util.IdentityHashMap;

import static com.facebook.presto.spi.type.BigintType.BIGINT;
import static com.facebook.presto.spi.type.BooleanType.BOOLEAN;
import static com.facebook.presto.spi.type.DoubleType.DOUBLE;
import static com.facebook.presto.sql.tree.ArithmeticExpression.Type.ADD;
import static com.facebook.presto.sql.tree.ComparisonExpression.Type.EQUAL;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;

public class TestExpressionKey
{
    @Test
    public void testEqual()
            throws Exception
    {
        IdentityHashMap<Expression, Type> firstTypes = new IdentityHashMap<>();
        ComparisonExpression firstExpression = comparison(firstTypes,
                EQUAL,
                longLiteral(firstTypes, "42"), add(firstTypes,
                        longLiteral(firstTypes, "40"),
                        longLiteral(firstTypes, "2"))
        );

        IdentityHashMap<Expression, Type> secondTypes = new IdentityHashMap<>();
        ComparisonExpression secondExpression = comparison(secondTypes,
                EQUAL,
                longLiteral(secondTypes, "42"), add(secondTypes,
                        longLiteral(secondTypes, "40"),
                        longLiteral(secondTypes, "2"))
        );

        assertEquals(firstExpression, secondExpression);
        assertNotEquals(firstTypes, secondTypes);
        assertEquals(new ExpressionKey(firstExpression, firstTypes), new ExpressionKey(secondExpression, secondTypes));
    }

    @Test
    public void testNotEqual()
            throws Exception
    {
        IdentityHashMap<Expression, Type> firstTypes = new IdentityHashMap<>();
        ComparisonExpression firstExpression = comparison(firstTypes,
                EQUAL,
                input(firstTypes, 1, BIGINT),
                add(firstTypes,
                        input(firstTypes, 2, BIGINT),
                        input(firstTypes, 3, BIGINT))
        );

        IdentityHashMap<Expression, Type> secondTypes = new IdentityHashMap<>();
        ComparisonExpression secondExpression = comparison(secondTypes, EQUAL,
                input(secondTypes, 1, DOUBLE),
                add(secondTypes,
                        input(secondTypes, 2, DOUBLE),
                        input(secondTypes, 3, DOUBLE))
        );

        assertEquals(firstExpression, secondExpression);
        assertNotEquals(firstTypes, secondTypes);
        assertNotEquals(new ExpressionKey(firstExpression, firstTypes), new ExpressionKey(secondExpression, secondTypes));
    }

    public static ComparisonExpression comparison(IdentityHashMap<Expression, Type> types, ComparisonExpression.Type type, Expression left, Expression right)
    {
        ComparisonExpression expression = new ComparisonExpression(type, left, right);
        types.put(expression, BOOLEAN);
        return expression;
    }

    public static ArithmeticExpression add(IdentityHashMap<Expression, Type> types, Expression left, Expression right)
    {
        ArithmeticExpression expression = new ArithmeticExpression(ADD, left, right);
        types.put(expression, BIGINT);
        return expression;
    }

    public static LongLiteral longLiteral(IdentityHashMap<Expression, Type> types, String value)
    {
        LongLiteral expression = new LongLiteral(value);
        types.put(expression, BIGINT);
        return expression;
    }

    public static InputReference input(IdentityHashMap<Expression, Type> types, int channel, Type type)
    {
        InputReference expression = new InputReference(channel);
        types.put(expression, type);
        return expression;
    }
}
TOP

Related Classes of com.facebook.presto.sql.gen.TestExpressionKey

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.