/*
* 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.api.sql.optimizers.name;
import java.util.Map;
import ch.epfl.data.squall.api.sql.schema.Schema;
import ch.epfl.data.squall.api.sql.util.TableAliasName;
/*
* It generates different NameCompGen for each partial query plan
* NameCompGen is responsible for attaching operators to components
* Aggregation only on the last level.
*/
public class NameCompGenFactory {
private final Schema _schema;
private final Map _map; // map is updates in place
private final TableAliasName _tan;
private CostParallelismAssigner _parAssigner;
/*
* only plan, no parallelism
*/
public NameCompGenFactory(Map map, TableAliasName tan) {
_map = map;
_tan = tan;
_schema = new Schema(map);
}
/*
* generating plan + parallelism
*/
public NameCompGenFactory(Map map, TableAliasName tan, int totalSourcePar) {
this(map, tan);
setParAssignerMode(totalSourcePar);
}
public NameCompGen create() {
return new NameCompGen(_schema, _map, _parAssigner);
}
public CostParallelismAssigner getParAssigner() {
return _parAssigner;
}
public final void setParAssignerMode(int totalSourcePar) {
// in general there might be many NameComponentGenerators,
// that's why CPA is computed before of NCG
_parAssigner = new CostParallelismAssigner(_schema, _tan, _map);
// for the same _parAssigner, we might try with different totalSourcePar
_parAssigner.computeSourcePar(totalSourcePar);
}
}