package org.reldb.rel.v0.types;
import org.reldb.rel.exceptions.*;
import org.reldb.rel.v0.generator.SelectOrder;
import org.reldb.rel.v0.values.Value;
public class OrderMap {
private int[] map;
private SelectOrder.Order[] order;
public OrderMap(Heading heading, SelectOrder orderItems) {
int count = orderItems.getCount();
map = new int[count];
order = new SelectOrder.Order[count];
for (int i=0; i<count; i++) {
SelectOrder.Item item = orderItems.getItem(i);
map[i] = heading.getIndexOf(item.getName());
if (map[i] < 0)
throw new ExceptionSemantic("RS0255: Attribute " + item.getName() + " is not found in " + heading);
order[i] = item.getOrder();
}
}
public int[] getMap() {
return map;
}
public SelectOrder.Order[] getOrder() {
return order;
}
public String toString() {
String out = "";
for (int i=0; i<map.length; i++) {
if (i > 0)
out += ", ";
out += map[i] + "=" + order[i];
}
return "OrderMap [" + out + "]";
}
public boolean isDifferentSortKey(Value[] oldTuple, Value[] newTuple) {
for (int i=0; i<map.length; i++)
if (oldTuple[map[i]].compareTo(newTuple[map[i]]) != 0)
return true;
return false;
}
}