package org.aksw.sparqlify.core.interfaces;
import java.util.List;
import java.util.Map;
import org.aksw.jena_sparql_api.views.VarDefinition;
import org.aksw.sparqlify.core.domain.input.Mapping;
import org.aksw.sparqlify.core.domain.input.MappingUnion;
import org.apache.jena.query.SortCondition;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.core.VarExprList;
import org.apache.jena.sparql.expr.ExprAggregator;
import org.apache.jena.sparql.expr.ExprList;
public interface MappingUnionOps {
//Mapping createMapping(ViewInstance<ViewDefinition> viewInstance);
/**
* Creates a new mapping with all column references
* in the variable definition renamed, and injects an
* approprate SqlProjection into the logical table
*/
MappingUnion rename(MappingUnion a, Map<String, String> columnRenames);
MappingUnion join(MappingUnion a, Mapping b);
MappingUnion leftJoin(MappingUnion a, Mapping b);
// A binary union would be sucky to compute (permanently moving projections around)
// Therfore we use one that deals with lists.
MappingUnion union(List<MappingUnion> members);
/**
*
*
* @param a
* @param limit The limit. Null for no limit
* @param offset The offset. Null for no offset
* @return
*/
MappingUnion slice(MappingUnion a, Long limit, Long offset);
MappingUnion project(MappingUnion a, List<Var> vars);
MappingUnion filter(MappingUnion a, ExprList exprs);
MappingUnion distinct(MappingUnion a);
MappingUnion groupBy(MappingUnion a, VarExprList groupVars, List<ExprAggregator> aggregators);
MappingUnion extend(MappingUnion a, VarDefinition varDef);
MappingUnion order(MappingUnion a, List<SortCondition> sortConditions);
}