@@ -88,7 +88,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
8888 }
8989
9090 @ Override
91- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
91+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
9292 if (logicalType == null ) {
9393 return PrimitiveComparator .SIGNED_INT64_COMPARATOR ;
9494 }
@@ -146,7 +146,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
146146 }
147147
148148 @ Override
149- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
149+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
150150 if (logicalType == null ) {
151151 return PrimitiveComparator .SIGNED_INT32_COMPARATOR ;
152152 }
@@ -210,7 +210,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
210210 }
211211
212212 @ Override
213- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
213+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
214214 return PrimitiveComparator .BOOLEAN_COMPARATOR ;
215215 }
216216 },
@@ -236,7 +236,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
236236 }
237237
238238 @ Override
239- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
239+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
240240 if (logicalType == null ) {
241241 return PrimitiveComparator .UNSIGNED_LEXICOGRAPHICAL_BINARY_COMPARATOR ;
242242 }
@@ -310,8 +310,10 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
310310 }
311311
312312 @ Override
313- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
314- return PrimitiveComparator .FLOAT_COMPARATOR ;
313+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
314+ return columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER
315+ ? PrimitiveComparator .FLOAT_IEEE_754_TOTAL_ORDER_COMPARATOR
316+ : PrimitiveComparator .FLOAT_COMPARATOR ;
315317 }
316318 },
317319 DOUBLE ("getDouble" , Double .TYPE ) {
@@ -336,8 +338,10 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
336338 }
337339
338340 @ Override
339- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
340- return PrimitiveComparator .DOUBLE_COMPARATOR ;
341+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
342+ return columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER
343+ ? PrimitiveComparator .DOUBLE_IEEE_754_TOTAL_ORDER_COMPARATOR
344+ : PrimitiveComparator .DOUBLE_COMPARATOR ;
341345 }
342346 },
343347 INT96 ("getBinary" , Binary .class ) {
@@ -362,7 +366,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
362366 }
363367
364368 @ Override
365- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
369+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
366370 return PrimitiveComparator .BINARY_AS_SIGNED_INTEGER_COMPARATOR ;
367371 }
368372 },
@@ -388,11 +392,16 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
388392 }
389393
390394 @ Override
391- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
395+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
392396 if (logicalType == null ) {
393397 return PrimitiveComparator .UNSIGNED_LEXICOGRAPHICAL_BINARY_COMPARATOR ;
394398 }
395399
400+ if (logicalType .getType () == LogicalTypeAnnotation .LogicalTypeToken .FLOAT16
401+ && columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
402+ return PrimitiveComparator .UNSIGNED_LEXICOGRAPHICAL_BINARY_COMPARATOR ;
403+ }
404+
396405 return logicalType
397406 .accept (new LogicalTypeAnnotation .LogicalTypeAnnotationVisitor <PrimitiveComparator >() {
398407 @ Override
@@ -453,7 +462,7 @@ public abstract void addValueToPrimitiveConverter(
453462
454463 public abstract <T , E extends Exception > T convert (PrimitiveTypeNameConverter <T , E > converter ) throws E ;
455464
456- abstract PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType );
465+ abstract PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder );
457466 }
458467
459468 private final PrimitiveTypeName primitive ;
@@ -545,6 +554,12 @@ public PrimitiveType(
545554 columnOrder = primitive == PrimitiveTypeName .INT96 || originalType == OriginalType .INTERVAL
546555 ? ColumnOrder .undefined ()
547556 : ColumnOrder .typeDefined ();
557+ } else if (columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
558+ Preconditions .checkArgument (
559+ primitive == PrimitiveTypeName .FLOAT || primitive == PrimitiveTypeName .DOUBLE ,
560+ "The column order %s is not supported by type %s" ,
561+ columnOrder ,
562+ primitive );
548563 }
549564 this .columnOrder = requireValidColumnOrder (columnOrder );
550565 }
@@ -591,6 +606,17 @@ public PrimitiveType(
591606 || logicalTypeAnnotation instanceof LogicalTypeAnnotation .IntervalLogicalTypeAnnotation
592607 ? ColumnOrder .undefined ()
593608 : ColumnOrder .typeDefined ();
609+ } else if (columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
610+ Preconditions .checkArgument (
611+ primitive == PrimitiveTypeName .FLOAT
612+ || primitive == PrimitiveTypeName .DOUBLE
613+ || (logicalTypeAnnotation != null
614+ && logicalTypeAnnotation .getType ()
615+ == LogicalTypeAnnotation .LogicalTypeToken .FLOAT16 ),
616+ "The column order %s is not supported by type %s logical type %s" ,
617+ columnOrder ,
618+ primitive ,
619+ logicalTypeAnnotation );
594620 }
595621 this .columnOrder = requireValidColumnOrder (columnOrder );
596622 }
@@ -631,6 +657,15 @@ public PrimitiveType withLogicalTypeAnnotation(LogicalTypeAnnotation logicalType
631657 return new PrimitiveType (getRepetition (), primitive , length , getName (), logicalType , getId ());
632658 }
633659
660+ /**
661+ * @param columnOrder the column order
662+ * @return the same type with the column order set
663+ */
664+ public Type withColumnOrder (ColumnOrder columnOrder ) {
665+ return new PrimitiveType (
666+ getRepetition (), primitive , length , getName (), getLogicalTypeAnnotation (), getId (), columnOrder );
667+ }
668+
634669 /**
635670 * @return the primitive type
636671 */
@@ -845,7 +880,7 @@ protected Type union(Type toMerge, boolean strict) {
845880 */
846881 @ SuppressWarnings ("unchecked" )
847882 public <T > PrimitiveComparator <T > comparator () {
848- return (PrimitiveComparator <T >) getPrimitiveTypeName ().comparator (getLogicalTypeAnnotation ());
883+ return (PrimitiveComparator <T >) getPrimitiveTypeName ().comparator (getLogicalTypeAnnotation (), columnOrder () );
849884 }
850885
851886 /**
0 commit comments