package com.dksou.essql.rules; import com.dksou.essql.ElasticsearchRelNode; import org.apache.calcite.plan.Convention; import org.apache.calcite.plan.RelTraitSet; import org.apache.calcite.rel.RelCollations; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.convert.ConverterRule; import org.apache.calcite.rel.logical.LogicalSort; /** * Created by myy on 2017/6/29. */ public class ElasticsearchSortRule extends ConverterRule { static final ElasticsearchSortRule INSTANCE = new ElasticsearchSortRule(); ElasticsearchSortRule(){ super(LogicalSort.class, Convention.NONE, ElasticsearchRelNode.CONVENTION, ElasticsearchSortRule.class.getSimpleName()); } public RelNode convert(RelNode relNode) { final LogicalSort sort = (LogicalSort) relNode; final RelTraitSet traitSet = sort.getTraitSet().replace(getOutTrait()).replace(sort.getCollation()); return new ElasticsearchSort(relNode.getCluster(), traitSet, convert(sort.getInput(), traitSet.replace(RelCollations.EMPTY)), sort.getCollation(), sort.offset, sort.fetch); } }