@@ -38,8 +38,7 @@ object SortPrefixUtils {
3838 def getPrefixComparator (sortOrder : SortOrder ): PrefixComparator = {
3939 sortOrder.dataType match {
4040 case StringType => PrefixComparators .STRING
41- case IntegerType => PrefixComparators .INTEGER
42- case LongType => PrefixComparators .LONG
41+ case BooleanType | ByteType | ShortType | IntegerType | LongType => PrefixComparators .INTEGRAL
4342 case FloatType => PrefixComparators .FLOAT
4443 case DoubleType => PrefixComparators .DOUBLE
4544 case _ => NoOpPrefixComparator
@@ -51,16 +50,37 @@ object SortPrefixUtils {
5150 case StringType => (row : InternalRow ) => {
5251 PrefixComparators .STRING .computePrefix(sortOrder.child.eval(row).asInstanceOf [UTF8String ])
5352 }
54- case IntegerType => (row : InternalRow ) => {
55- val exprVal = sortOrder.child.eval(row)
56- if (exprVal == null ) PrefixComparators .INTEGER .NULL_PREFIX
57- else PrefixComparators .INTEGER .computePrefix(sortOrder.child.eval(row).asInstanceOf [Int ])
58- }
59- case LongType => (row : InternalRow ) => {
60- val exprVal = sortOrder.child.eval(row)
61- if (exprVal == null ) PrefixComparators .LONG .NULL_PREFIX
62- else sortOrder.child.eval(row).asInstanceOf [Long ]
63- }
53+ case BooleanType =>
54+ (row : InternalRow ) => {
55+ val exprVal = sortOrder.child.eval(row)
56+ if (exprVal == null ) PrefixComparators .INTEGRAL .NULL_PREFIX
57+ else if (sortOrder.child.eval(row).asInstanceOf [Boolean ]) 1
58+ else 0
59+ }
60+ case ByteType =>
61+ (row : InternalRow ) => {
62+ val exprVal = sortOrder.child.eval(row)
63+ if (exprVal == null ) PrefixComparators .INTEGRAL .NULL_PREFIX
64+ else sortOrder.child.eval(row).asInstanceOf [Byte ]
65+ }
66+ case ShortType =>
67+ (row : InternalRow ) => {
68+ val exprVal = sortOrder.child.eval(row)
69+ if (exprVal == null ) PrefixComparators .INTEGRAL .NULL_PREFIX
70+ else sortOrder.child.eval(row).asInstanceOf [Short ]
71+ }
72+ case IntegerType =>
73+ (row : InternalRow ) => {
74+ val exprVal = sortOrder.child.eval(row)
75+ if (exprVal == null ) PrefixComparators .INTEGRAL .NULL_PREFIX
76+ else sortOrder.child.eval(row).asInstanceOf [Int ]
77+ }
78+ case LongType =>
79+ (row : InternalRow ) => {
80+ val exprVal = sortOrder.child.eval(row)
81+ if (exprVal == null ) PrefixComparators .INTEGRAL .NULL_PREFIX
82+ else sortOrder.child.eval(row).asInstanceOf [Long ]
83+ }
6484 case FloatType => (row : InternalRow ) => {
6585 val exprVal = sortOrder.child.eval(row)
6686 if (exprVal == null ) PrefixComparators .FLOAT .NULL_PREFIX
0 commit comments