blob: 68dbaee923a031e1006e32989d31ded67066f288 [file] [log] [blame]
package edu.uci.ics.asterix.formats.nontagged;
import edu.uci.ics.asterix.om.types.IAType;
import edu.uci.ics.hyracks.algebricks.data.ITypeTraitProvider;
import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
public class AqlTypeTraitProvider implements ITypeTraitProvider {
// WARNING: the byte sizes depend on the serializer!
// currently assuming a serializer that adds a 1-byte type indicator before
// the data
private static final ITypeTraits ONEBYTETYPETRAIT = new TypeTrait(1 + 1);
private static final ITypeTraits TWOBYTETYPETRAIT = new TypeTrait(2 + 1);
private static final ITypeTraits FOURBYTETYPETRAIT = new TypeTrait(4 + 1);
private static final ITypeTraits EIGHTBYTETYPETRAIT = new TypeTrait(8 + 1);
private static final ITypeTraits SIXTEENBYTETYPETRAIT = new TypeTrait(16 + 1);
private static final ITypeTraits THIRTYTWOBYTETYPETRAIT = new TypeTrait(32 + 1);
private static final ITypeTraits TWENTYFOURBYTETYPETRAIT = new TypeTrait(24 + 1);
private static final ITypeTraits VARLENTYPETRAIT = new TypeTrait(false,-1);
public static final AqlTypeTraitProvider INSTANCE = new AqlTypeTraitProvider();
@Override
public ITypeTraits getTypeTrait(Object type) {
IAType aqlType = (IAType) type;
switch (aqlType.getTypeTag()) {
case BOOLEAN:
case INT8:
return ONEBYTETYPETRAIT;
case INT16:
return TWOBYTETYPETRAIT;
case INT32:
case FLOAT:
case DATE:
case TIME:
return FOURBYTETYPETRAIT;
case INT64:
case DOUBLE:
case DATETIME:
case DURATION:
return EIGHTBYTETYPETRAIT;
case POINT:
return SIXTEENBYTETYPETRAIT;
case POINT3D:
return TWENTYFOURBYTETYPETRAIT;
case LINE:
return THIRTYTWOBYTETYPETRAIT;
default: {
return VARLENTYPETRAIT;
}
}
}
}
class TypeTrait implements ITypeTraits {
@Override
public boolean isFixedLength() {
return isFixedLength;
}
@Override
public int getFixedLength() {
return fixedLength;
}
private boolean isFixedLength;
private int fixedLength;
public TypeTrait(boolean isFixedLength, int fixedLength){
this.isFixedLength = isFixedLength;
this.fixedLength = fixedLength;
}
public TypeTrait(int fixedLength){
this.isFixedLength = true;
this.fixedLength = fixedLength;
}
}