package jef.database.jdbc.result;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Comparator;
import javax.persistence.PersistenceException;
import jef.database.wrapper.clause.InMemoryOrderBy;
/**
* 结果集比较器
* @author jiyi
*
*/
final class ResultSetCompartor implements Comparator<ResultSet> {
private InMemoryOrderBy orders;
public ResultSetCompartor(InMemoryOrderBy order) {
this.orders=order;
}
@Override
public int compare(ResultSet value, ResultSet value2) {
int len = orders.size();
int[] orderFields = orders.getOrderFields();
boolean[] orderAscendent = orders.getOrderAsc();
int retVal = 0;
for (int i = 0; i < len; i++) {
try {
retVal = compares(value.getObject(orderFields[i]), value2.getObject(orderFields[i]));
} catch (SQLException e) {
throw new PersistenceException(e);
}
if(retVal!=0){
return orderAscendent[i]?retVal:-retVal;
}
}
return -1;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private int compares(Object object, Object object2) {
if (object == object2)
return 0;
if (object == null)
return 1;
if (object2 == null)
return -1;
return ((Comparable) object).compareTo(object2);
}
}