@@ -293,7 +293,7 @@ public indirect enum ArrowType: Codable, Sendable, Equatable {
293293 ///
294294 /// This type mostly used to represent low cardinality string
295295 /// arrays or a limited set of primitive types as integers.
296- case dictionary( ArrowType , ArrowType )
296+ case dictionary( id : Int64 , isOrdered : Bool , key : ArrowType , value : ArrowType )
297297 /// Exact 32-bit width decimal value with precision and scale
298298 ///
299299 /// * precision is the total number of digits
@@ -496,8 +496,8 @@ extension ArrowType: CustomStringConvertible {
496496 return " LargeListView( \( elementType) ) "
497497 case . union( let mode, let fields) :
498498 return " Union( \( mode) , \( fields) fields) "
499- case . dictionary( let keyType, let valueType) :
500- return " Dictionary( \( keyType) , \( valueType) ) "
499+ case . dictionary( let id , let isOrdered , let keyType, let valueType) :
500+ return " Dictionary( \( id ) , \( isOrdered ) , \( keyType) , \( valueType) ) "
501501 case . decimal32( let precision, let scale) :
502502 return " Decimal32( \( precision) , \( scale) ) "
503503 case . decimal64( let precision, let scale) :
@@ -627,7 +627,7 @@ extension ArrowType {
627627 @inlinable
628628 public var isNested : Bool {
629629 switch self {
630- case . dictionary( _, let v) :
630+ case . dictionary( _, _ , _ , let v) :
631631 return v. isNested
632632 case . runEndEncoded( _, let v) :
633633 return v. type. isNested
@@ -699,7 +699,8 @@ extension ArrowType {
699699 && aField. type. equalsDataType ( bField. type) && aSorted == bSorted
700700
701701 // Dictionary
702- case ( . dictionary( let aKey, let aValue) , . dictionary( let bKey, let bValue) ) :
702+ case ( . dictionary( _, _, let aKey, let aValue) , . dictionary( _, _, let bKey, let bValue) ) :
703+ // Ignoring dictionary id here.
703704 return aKey. equalsDataType ( bKey) && aValue. equalsDataType ( bValue)
704705
705706 // RunEndEncoded
@@ -855,7 +856,7 @@ extension ArrowType {
855856 }
856857
857858 // Dictionary
858- case ( . dictionary( let k1, let v1) , . dictionary( let k2, let v2) ) :
859+ case ( . dictionary( _ , _ , let k1, let v1) , . dictionary( _ , _ , let k2, let v2) ) :
859860 return k1. contains ( k2) && v1. contains ( v2)
860861
861862 // Base case: equality
0 commit comments