package io.mycat.sqlengine.tmp; import io.mycat.server.packet.RowDataPacket; import io.mycat.sqlengine.mpp.OrderCol; import io.mycat.sqlengine.mpp.RowDataPacketSorter; import java.util.Comparator; /** * * @author coderczp-2014-12-8 */ public class RowDataCmp implements Comparator<RowDataPacket> { private OrderCol[] orderCols; public RowDataCmp(OrderCol[] orderCols) { this.orderCols = orderCols; } @Override public int compare(RowDataPacket o1, RowDataPacket o2) { OrderCol[] tmp = this.orderCols; int cmp = 0; int len = tmp.length; //依次比较order by语句上的多个排序字段的值 int type = OrderCol.COL_ORDER_TYPE_ASC; for (int i = 0; i < len; i++) { int colIndex = tmp[i].colMeta.colIndex; byte[] left = o1.fieldValues.get(colIndex); byte[] right = o2.fieldValues.get(colIndex); if (tmp[i].orderType == type) { cmp = RowDataPacketSorter.compareObject(left, right, tmp[i]); } else { cmp = RowDataPacketSorter.compareObject(right, left, tmp[i]); } if (cmp != 0) return cmp; } return cmp; } }