@@ -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 }
@@ -298,8 +298,10 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
298298 }
299299
300300 @ Override
301- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
302- return PrimitiveComparator .FLOAT_COMPARATOR ;
301+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
302+ return columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER
303+ ? PrimitiveComparator .FLOAT_IEEE_754_TOTAL_ORDER_COMPARATOR
304+ : PrimitiveComparator .FLOAT_COMPARATOR ;
303305 }
304306 },
305307 DOUBLE ("getDouble" , Double .TYPE ) {
@@ -324,8 +326,10 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
324326 }
325327
326328 @ Override
327- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
328- return PrimitiveComparator .DOUBLE_COMPARATOR ;
329+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
330+ return columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER
331+ ? PrimitiveComparator .DOUBLE_IEEE_754_TOTAL_ORDER_COMPARATOR
332+ : PrimitiveComparator .DOUBLE_COMPARATOR ;
329333 }
330334 },
331335 INT96 ("getBinary" , Binary .class ) {
@@ -350,7 +354,7 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
350354 }
351355
352356 @ Override
353- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
357+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
354358 return PrimitiveComparator .BINARY_AS_SIGNED_INTEGER_COMPARATOR ;
355359 }
356360 },
@@ -376,11 +380,16 @@ public <T, E extends Exception> T convert(PrimitiveTypeNameConverter<T, E> conve
376380 }
377381
378382 @ Override
379- PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType ) {
383+ PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder ) {
380384 if (logicalType == null ) {
381385 return PrimitiveComparator .UNSIGNED_LEXICOGRAPHICAL_BINARY_COMPARATOR ;
382386 }
383387
388+ if (logicalType .getType () == LogicalTypeAnnotation .LogicalTypeToken .FLOAT16
389+ && columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
390+ return PrimitiveComparator .UNSIGNED_LEXICOGRAPHICAL_BINARY_COMPARATOR ;
391+ }
392+
384393 return logicalType
385394 .accept (new LogicalTypeAnnotation .LogicalTypeAnnotationVisitor <PrimitiveComparator >() {
386395 @ Override
@@ -441,7 +450,7 @@ public abstract void addValueToPrimitiveConverter(
441450
442451 public abstract <T , E extends Exception > T convert (PrimitiveTypeNameConverter <T , E > converter ) throws E ;
443452
444- abstract PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType );
453+ abstract PrimitiveComparator <?> comparator (LogicalTypeAnnotation logicalType , ColumnOrder columnOrder );
445454 }
446455
447456 private final PrimitiveTypeName primitive ;
@@ -533,6 +542,12 @@ public PrimitiveType(
533542 columnOrder = primitive == PrimitiveTypeName .INT96 || originalType == OriginalType .INTERVAL
534543 ? ColumnOrder .undefined ()
535544 : ColumnOrder .typeDefined ();
545+ } else if (columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
546+ Preconditions .checkArgument (
547+ primitive == PrimitiveTypeName .FLOAT || primitive == PrimitiveTypeName .DOUBLE ,
548+ "The column order %s is not supported by type %s" ,
549+ columnOrder ,
550+ primitive );
536551 }
537552 this .columnOrder = requireValidColumnOrder (columnOrder );
538553 }
@@ -579,6 +594,17 @@ public PrimitiveType(
579594 || logicalTypeAnnotation instanceof LogicalTypeAnnotation .IntervalLogicalTypeAnnotation
580595 ? ColumnOrder .undefined ()
581596 : ColumnOrder .typeDefined ();
597+ } else if (columnOrder .getColumnOrderName () == ColumnOrderName .IEEE_754_TOTAL_ORDER ) {
598+ Preconditions .checkArgument (
599+ primitive == PrimitiveTypeName .FLOAT
600+ || primitive == PrimitiveTypeName .DOUBLE
601+ || (logicalTypeAnnotation != null
602+ && logicalTypeAnnotation .getType ()
603+ == LogicalTypeAnnotation .LogicalTypeToken .FLOAT16 ),
604+ "The column order %s is not supported by type %s logical type %s" ,
605+ columnOrder ,
606+ primitive ,
607+ logicalTypeAnnotation );
582608 }
583609 this .columnOrder = requireValidColumnOrder (columnOrder );
584610 }
@@ -619,6 +645,15 @@ public PrimitiveType withLogicalTypeAnnotation(LogicalTypeAnnotation logicalType
619645 return new PrimitiveType (getRepetition (), primitive , length , getName (), logicalType , getId ());
620646 }
621647
648+ /**
649+ * @param columnOrder the column order
650+ * @return the same type with the column order set
651+ */
652+ public Type withColumnOrder (ColumnOrder columnOrder ) {
653+ return new PrimitiveType (
654+ getRepetition (), primitive , length , getName (), getLogicalTypeAnnotation (), getId (), columnOrder );
655+ }
656+
622657 /**
623658 * @return the primitive type
624659 */
@@ -833,7 +868,7 @@ protected Type union(Type toMerge, boolean strict) {
833868 */
834869 @ SuppressWarnings ("unchecked" )
835870 public <T > PrimitiveComparator <T > comparator () {
836- return (PrimitiveComparator <T >) getPrimitiveTypeName ().comparator (getLogicalTypeAnnotation ());
871+ return (PrimitiveComparator <T >) getPrimitiveTypeName ().comparator (getLogicalTypeAnnotation (), columnOrder () );
837872 }
838873
839874 /**
0 commit comments