/*
*
* * Copyright (c) 2011-2015 EPFL DATA Laboratory
* * Copyright (c) 2014-2015 The Squall Collaboration (see NOTICE)
* *
* * All rights reserved.
* *
* * 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 ch.epfl.data.squall.examples.imperative.traditional;
import org.apache.log4j.Logger;
import ch.epfl.data.squall.components.Component;
import ch.epfl.data.squall.components.OperatorComponent;
import ch.epfl.data.squall.components.DataSourceComponent;
import ch.epfl.data.squall.components.hyper_cube.HyperCubeJoinComponent;
import ch.epfl.data.squall.components.hyper_cube.HyperCubeJoinComponentFactory;
import ch.epfl.data.squall.expressions.ColumnReference;
import ch.epfl.data.squall.expressions.Multiplication;
import ch.epfl.data.squall.expressions.Subtraction;
import ch.epfl.data.squall.expressions.ValueExpression;
import ch.epfl.data.squall.expressions.ValueSpecification;
import ch.epfl.data.squall.operators.AggregateOperator;
import ch.epfl.data.squall.operators.AggregateSumOperator;
import ch.epfl.data.squall.operators.AggregateCountOperator;
import ch.epfl.data.squall.operators.ProjectOperator;
import ch.epfl.data.squall.operators.SelectOperator;
import ch.epfl.data.squall.predicates.ComparisonPredicate;
import ch.epfl.data.squall.predicates.LikePredicate;
import ch.epfl.data.squall.query_plans.QueryBuilder;
import ch.epfl.data.squall.query_plans.QueryPlan;
import ch.epfl.data.squall.query_plans.ThetaQueryPlansParameters;
import ch.epfl.data.squall.types.DateType;
import ch.epfl.data.squall.types.DoubleType;
import ch.epfl.data.squall.types.IntegerType;
import ch.epfl.data.squall.types.NumericType;
import ch.epfl.data.squall.types.LongType;
import ch.epfl.data.squall.types.StringType;
import ch.epfl.data.squall.types.Type;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class TraditionalHybridUrlReachability extends QueryPlan {
private static Logger LOG = Logger.getLogger(TraditionalHybridUrlReachability.class);
private static final IntegerType _ic = new IntegerType();
private static final Type<Date> _dc = new DateType();
private static final Type<Long> _lc = new LongType();
private static final Type<String> _sc = new StringType();
private static final NumericType<Double> _doubleConv = new DoubleType();
private final QueryBuilder _queryBuilder = new QueryBuilder();
public TraditionalHybridUrlReachability(String dataPath, String extension, Map conf) {
// -------------------------------------------------------------------------------------
// columns : From -> To
//final SampleOperator samples1 = new SampleOperator(0.1);
final DataSourceComponent relationArcs1 = new DataSourceComponent(
"ARCS1", dataPath + "sd-arc" + extension, conf);//.add(samples1);
_queryBuilder.add(relationArcs1);
// -------------------------------------------------------------------------------------
// columns : From -> To
//final SampleOperator samples2 = new SampleOperator(0.1);
final DataSourceComponent relationArcs2 = new DataSourceComponent(
"ARCS2", dataPath + "sd-arc" + extension, conf);//.add(samples2);
_queryBuilder.add(relationArcs2);
// // -------------------------------------------------------------------------------------
//final SampleOperator samples3 = new SampleOperator(0.1);
final DataSourceComponent relationIndex = new DataSourceComponent(
"INDEX1", dataPath + "sd-index" + extension, conf);//.add(samples3);
_queryBuilder.add(relationIndex);
HyperCubeJoinComponentFactory lastJoiner =
new HyperCubeJoinComponentFactory(new Component[]{
relationArcs1,
relationArcs2,
relationIndex});
lastJoiner.addRelation(relationArcs1,
new Type[]{_lc, _lc}, new String[]{"From1", "To1_rand1"}, new int[]{1});
lastJoiner.addRelation(relationArcs2,
new Type[]{_lc, _lc}, new String[]{"To1_rand2", "From2"}, new int[]{0});
lastJoiner.addRelation(relationIndex,
new Type[]{_sc, _lc}, new String[]{"URL", "From1"});
// Predicates
ColumnReference colArcs1_To1 = new ColumnReference(_ic, 1);
ColumnReference colArcs2_To1 = new ColumnReference(_ic, 0);
ComparisonPredicate Arcs1_Arcs2_comp = new ComparisonPredicate(ComparisonPredicate.EQUAL_OP,
colArcs1_To1, colArcs2_To1);
lastJoiner.addPredicate("ARCS1ARCS2", Arcs1_Arcs2_comp);
ColumnReference colArcs1_From1 = new ColumnReference(_ic, 0);
ColumnReference colIndex1_From1 = new ColumnReference(_ic, 1);
ComparisonPredicate Arcs1_Index1_comp = new ComparisonPredicate(ComparisonPredicate.EQUAL_OP,
colArcs1_From1, colIndex1_From1);
lastJoiner.addPredicate("ARCS1INDEX1", Arcs1_Index1_comp);
final AggregateCountOperator agg = new AggregateCountOperator(conf).
setGroupByColumns(Arrays.asList(0));
HyperCubeJoinComponent hyper_cube =
lastJoiner.createHyperCubeJoinOperator().add(agg).setContentSensitiveThetaJoinWrapper(_ic);
_queryBuilder.add(hyper_cube);
//
final AggregateSumOperator agg2 = new AggregateSumOperator(
new ColumnReference(_lc, 1), conf).setGroupByColumns(Arrays
.asList(0));
OperatorComponent oc = new OperatorComponent(hyper_cube,
"COUNTAGG").add(agg);
_queryBuilder.add(oc);
}
public QueryBuilder getQueryPlan() {
return _queryBuilder;
}
}