Package visitors.squall

Source Code of visitors.squall.NameSelectItemsVisitorTest

package visitors.squall;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import net.sf.jsqlparser.statement.select.SelectItem;
import static org.junit.Assert.assertEquals;

import org.apache.log4j.Logger;
import org.junit.Test;
import plan_runner.components.DataSourceComponent;
import plan_runner.conversion.*;
import plan_runner.expressions.ColumnReference;
import plan_runner.expressions.ValueExpression;
import plan_runner.operators.AggregateOperator;
import plan_runner.operators.AggregateSumOperator;
import plan_runner.query_plans.QueryPlan;
import sql.main.ParserMain;
import sql.schema.ColumnNameType;
import sql.util.ParserUtil;
import sql.util.TupleSchema;
import sql.visitors.jsql.SQLVisitor;
import sql.visitors.squall.NameSelectItemsVisitor;

/**
*
* @author vitorovi
*/
public class NameSelectItemsVisitorTest {
  private static Logger LOG = Logger.getLogger(NameSelectItemsVisitorTest.class);   
 
        //this will not break any contracts,
    //  even with new DateConversion() on all the places,
    //  we will have a single object per (possibly) multiple spout/bolt threads.
    //generating plans is done from a single thread, static additionally saves space
    private static LongConversion _lc = new LongConversion();
    private static IntegerConversion _ic = new IntegerConversion();
    private static DoubleConversion _dblConv = new DoubleConversion();
    private static DateConversion _dateConv = new DateConversion();
    private static StringConversion _sc = new StringConversion();
   
    private SQLVisitor _pq;
    private Map _map;
   
    public NameSelectItemsVisitorTest() {
        //create object
        String parserConfPath = "../test/squall/unit_tests/confs/0_1G_tpch7_ncl";
        ParserMain pm = new ParserMain();
        _map = pm.createConfig(parserConfPath);
        _pq = ParserUtil.parseQuery(_map);
    }

    @Test
    public void testFullExprs() {
        LOG.info("test NSIV: full expressions in inputTupleSchema");
       
        List<ColumnNameType> inputTupleSchema = new ArrayList<ColumnNameType>();
        inputTupleSchema.add(new ColumnNameType("N1.NAME", _sc));
        inputTupleSchema.add(new ColumnNameType("N2.NAME", _sc));
        inputTupleSchema.add(new ColumnNameType("EXTRACT_YEAR(LINEITEM.SHIPDATE)", _ic));
        inputTupleSchema.add(new ColumnNameType("LINEITEM.EXTENDEDPRICE * (1.0 - LINEITEM.DISCOUNT)", _dblConv));
        inputTupleSchema.add(new ColumnNameType("LINEITEM.ORDERKEY", _lc)); // not used
       
        DataSourceComponent source = new DataSourceComponent("TestFullExprs", "", new QueryPlan());
       
        NameSelectItemsVisitor selectVisitor = new NameSelectItemsVisitor(new TupleSchema(inputTupleSchema), _map, source);
        for(SelectItem elem: _pq.getSelectItems()){
            elem.accept(selectVisitor);
        }
        List<AggregateOperator> aggOps = selectVisitor.getAggOps();
        List<ValueExpression> groupByVEs = selectVisitor.getGroupByVEs();
       
        //expected
        AggregateOperator agg = new AggregateSumOperator(
                new ColumnReference(_dblConv, 3, "LINEITEM.EXTENDEDPRICE * (1.0 - LINEITEM.DISCOUNT)"),
                _map);
        List<AggregateOperator> expAggOps = Arrays.asList(agg);
        List<ColumnReference> expGroupByVEs = Arrays.asList(new ColumnReference(_sc, 0, "N1.NAME"),
                                                        new ColumnReference(_sc, 1, "N2.NAME"),
                                                        new ColumnReference(_ic, 2, "EXTRACT_YEAR(LINEITEM.SHIPDATE)"));
       
        //compare
        assertEquals(expAggOps.toString(), aggOps.toString());
        assertEquals(expGroupByVEs.toString(), groupByVEs.toString());
    }
   
//    @Test
//    public void testSubexpressions() {
//        LOG.info("test NSIV: subexpressions in inputTupleSchema");
//       
//        List<ColumnNameType> inputTupleSchema = new ArrayList<ColumnNameType>();
//        inputTupleSchema.add(new ColumnNameType("N1.NAME", _sc)); //0
//        inputTupleSchema.add(new ColumnNameType("N2.NAME", _sc)); //1
//        inputTupleSchema.add(new ColumnNameType("LINEITEM.SHIPDATE", _ic)); //2
//        inputTupleSchema.add(new ColumnNameType("LINEITEM.EXTENDEDPRICE", _dblConv)); //3
//        inputTupleSchema.add(new ColumnNameType("1.0 - LINEITEM.DISCOUNT", _dblConv)); //4
//       
//        DataSourceComponent source = new DataSourceComponent("TestSubExpression", "", new QueryPlan());
//       
//        NameSelectItemsVisitor selectVisitor = new NameSelectItemsVisitor(new TupleSchema(inputTupleSchema), _map, source);
//        for(SelectItem elem: _pq.getSelectItems()){
//            elem.accept(selectVisitor);
//        }
//        List<AggregateOperator> aggOps = selectVisitor.getAggOps();
//        List<ValueExpression> groupByVEs = selectVisitor.getGroupByVEs();
//       
//        //expected
//        AggregateOperator agg = new AggregateSumOperator(_dblConv,
//                                                    new Multiplication(_dblConv,
//                                                        new ColumnReference(_dblConv, 3, "LINEITEM.EXTENDEDPRICE"),
//                                                        new ColumnReference(_dblConv, 4, "1.0 - LINEITEM.DISCOUNT")
//                                                    ),
//                                                    _map);
//       
//        List<AggregateOperator> expAggOps = Arrays.asList(agg);
//        List expGroupByVEs = Arrays.asList(new ColumnReference(_sc, 0, "N1.NAME"),
//                                           new ColumnReference(_sc, 1, "N2.NAME"),
//                                           new IntegerYearFromDate(new ColumnReference(_dateConv, 2, "LINEITEM.SHIPDATE")));
//       
//        //compare
//        assertEquals(expAggOps.toString(), aggOps.toString());
//        assertEquals(expGroupByVEs.toString(), groupByVEs.toString());
//    }       
//   
//    @Test
//    public void testColumnsOnly() {
//        LOG.info("test NSIV: columns only in inputTupleSchema");
//       
//        List<ColumnNameType> inputTupleSchema = new ArrayList<ColumnNameType>();
//        inputTupleSchema.add(new ColumnNameType("N1.NAME", _sc)); //0
//        inputTupleSchema.add(new ColumnNameType("N2.NAME", _sc)); //1
//        inputTupleSchema.add(new ColumnNameType("LINEITEM.SHIPDATE", _ic)); //2
//        inputTupleSchema.add(new ColumnNameType("LINEITEM.EXTENDEDPRICE", _dblConv)); //3
//        inputTupleSchema.add(new ColumnNameType("LINEITEM.DISCOUNT", _dblConv)); //4
//       
//        DataSourceComponent source = new DataSourceComponent("TestColumnsOnly", "", new QueryPlan());
//       
//        NameSelectItemsVisitor selectVisitor = new NameSelectItemsVisitor(new TupleSchema(inputTupleSchema), _map, source);
//        for(SelectItem elem: _pq.getSelectItems()){
//            elem.accept(selectVisitor);
//        }
//        List<AggregateOperator> aggOps = selectVisitor.getAggOps();
//        List<ValueExpression> groupByVEs = selectVisitor.getGroupByVEs();
//       
//        //expected
//        AggregateOperator agg = new AggregateSumOperator(_dblConv,
//                                                    new Multiplication(_dblConv,
//                                                        new ColumnReference(_dblConv, 3, "LINEITEM.EXTENDEDPRICE"),
//                                                        new Subtraction(_dblConv,
//                                                            new ValueSpecification(_dblConv, "1.0"),
//                                                            new ColumnReference(_dblConv, 4, "LINEITEM.DISCOUNT")
//                                                        )
//                                                    ),
//                                                    _map);
//       
//        List<AggregateOperator> expAggOps = Arrays.asList(agg);
//        List expGroupByVEs = Arrays.asList(new ColumnReference(_sc, 0, "N1.NAME"),
//                                           new ColumnReference(_sc, 1, "N2.NAME"),
//                                           new IntegerYearFromDate(new ColumnReference(_dateConv, 2, "LINEITEM.SHIPDATE")));
//       
//        //compare
//        assertEquals(expAggOps.toString(), aggOps.toString());
//        assertEquals(expGroupByVEs.toString(), groupByVEs.toString());
//    }   
}
TOP

Related Classes of visitors.squall.NameSelectItemsVisitorTest

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.