package net.sourceforge.mayfly.evaluation.select; import net.sourceforge.mayfly.MayflyException; import net.sourceforge.mayfly.MayflyInternalException; import net.sourceforge.mayfly.evaluation.Expression; import net.sourceforge.mayfly.evaluation.ResultRow; import net.sourceforge.mayfly.evaluation.what.What; import net.sourceforge.mayfly.evaluation.what.WhatElement; public class ReferenceOrderItem extends OrderItem { private final int reference; public ReferenceOrderItem(int reference, boolean ascending) { super(ascending); this.reference = reference; } @Override protected int compareAscending( What what, Evaluator evaluator, ResultRow first, ResultRow second) { int zeroBasedColumn = reference - 1; int size = what.size(); if (zeroBasedColumn < 0 || zeroBasedColumn >= size) { throw new MayflyException( "ORDER BY " + reference + " must be in range 1 to " + size); } WhatElement whatElement = what.element(zeroBasedColumn); if (whatElement instanceof Expression) { return ColumnOrderItem.compare(first, second, (Expression) whatElement); } else { throw new MayflyInternalException( "ORDER BY " + reference + " refers to " + whatElement.displayName() + " not an expression"); } } @Override public void check(ResultRow afterGroupByAndDistinct, ResultRow afterGroupBy, ResultRow afterJoins, Evaluator evaluator) { } }