@@ -61,156 +61,112 @@ enum Type {
6161
6262// ----------------------------------------------------------------------
6363// Mirrors thrift enum `ConvertedType`
64- //
65- // Cannot use macros because of added field `None`
6664
6765// TODO(ets): Adding the `NONE` variant to this enum is a bit awkward. We should
68- // look into removing it and using `Option<ConvertedType>` instead. Then all of this
69- // handwritten code could go away.
70-
66+ // look into removing it and using `Option<ConvertedType>` instead.
67+ thrift_enum ! (
7168/// Common types (converted types) used by frameworks when using Parquet.
7269///
7370/// This helps map between types in those frameworks to the base types in Parquet.
7471/// This is only metadata and not needed to read or write the data.
7572///
7673/// This struct was renamed from `LogicalType` in version 4.0.0.
7774/// If targeting Parquet format 2.4.0 or above, please use [LogicalType] instead.
78- #[ derive( Debug , Clone , Copy , PartialEq , Eq ) ]
79- #[ allow( non_camel_case_types) ]
80- pub enum ConvertedType {
81- /// No type conversion.
82- NONE ,
83- /// A BYTE_ARRAY actually contains UTF8 encoded chars.
84- UTF8 ,
85-
86- /// A map is converted as an optional field containing a repeated key/value pair.
87- MAP ,
88-
89- /// A key/value pair is converted into a group of two fields.
90- MAP_KEY_VALUE ,
91-
92- /// A list is converted into an optional field containing a repeated field for its
93- /// values.
94- LIST ,
95-
96- /// An enum is converted into a binary field
97- ENUM ,
98-
99- /// A decimal value.
100- /// This may be used to annotate binary or fixed primitive types. The
101- /// underlying byte array stores the unscaled value encoded as two's
102- /// complement using big-endian byte order (the most significant byte is the
103- /// zeroth element).
104- ///
105- /// This must be accompanied by a (maximum) precision and a scale in the
106- /// SchemaElement. The precision specifies the number of digits in the decimal
107- /// and the scale stores the location of the decimal point. For example 1.23
108- /// would have precision 3 (3 total digits) and scale 2 (the decimal point is
109- /// 2 digits over).
110- DECIMAL ,
75+ enum ConvertedType {
76+ /// Not defined in the spec, used internally to indicate no type conversion
77+ NONE = -1 ;
11178
112- /// A date stored as days since Unix epoch, encoded as the INT32 physical type .
113- DATE ,
79+ /// A BYTE_ARRAY actually contains UTF8 encoded chars .
80+ UTF8 = 0 ;
11481
115- /// The total number of milliseconds since midnight. The value is stored as an INT32
116- /// physical type.
117- TIME_MILLIS ,
82+ /// A map is converted as an optional field containing a repeated key/value pair.
83+ MAP = 1 ;
11884
119- /// The total number of microseconds since midnight. The value is stored as an INT64
120- /// physical type.
121- TIME_MICROS ,
85+ /// A key/value pair is converted into a group of two fields.
86+ MAP_KEY_VALUE = 2 ;
12287
123- /// Date and time recorded as milliseconds since the Unix epoch.
124- /// Recorded as a physical type of INT64 .
125- TIMESTAMP_MILLIS ,
88+ /// A list is converted into an optional field containing a repeated field for its
89+ /// values .
90+ LIST = 3 ;
12691
127- /// Date and time recorded as microseconds since the Unix epoch.
128- /// The value is stored as an INT64 physical type.
129- TIMESTAMP_MICROS ,
92+ /// An enum is converted into a BYTE_ARRAY field
93+ ENUM = 4 ;
13094
131- /// An unsigned 8 bit integer value stored as INT32 physical type.
132- UINT_8 ,
95+ /// A decimal value.
96+ ///
97+ /// This may be used to annotate BYTE_ARRAY or FIXED_LEN_BYTE_ARRAY primitive
98+ /// types. The underlying byte array stores the unscaled value encoded as two's
99+ /// complement using big-endian byte order (the most significant byte is the
100+ /// zeroth element). The value of the decimal is the value * 10^{-scale}.
101+ ///
102+ /// This must be accompanied by a (maximum) precision and a scale in the
103+ /// SchemaElement. The precision specifies the number of digits in the decimal
104+ /// and the scale stores the location of the decimal point. For example 1.23
105+ /// would have precision 3 (3 total digits) and scale 2 (the decimal point is
106+ /// 2 digits over).
107+ DECIMAL = 5 ;
133108
134- /// An unsigned 16 bit integer value stored as INT32 physical type.
135- UINT_16 ,
109+ /// A date stored as days since Unix epoch, encoded as the INT32 physical type.
110+ DATE = 6 ;
136111
137- /// An unsigned 32 bit integer value stored as INT32 physical type.
138- UINT_32 ,
112+ /// The total number of milliseconds since midnight. The value is stored as an INT32
113+ /// physical type.
114+ TIME_MILLIS = 7 ;
139115
140- /// An unsigned 64 bit integer value stored as INT64 physical type.
141- UINT_64 ,
116+ /// The total number of microseconds since midnight. The value is stored as an INT64
117+ /// physical type.
118+ TIME_MICROS = 8 ;
142119
143- /// A signed 8 bit integer value stored as INT32 physical type.
144- INT_8 ,
120+ /// Date and time recorded as milliseconds since the Unix epoch.
121+ /// Recorded as a physical type of INT64.
122+ TIMESTAMP_MILLIS = 9 ;
145123
146- /// A signed 16 bit integer value stored as INT32 physical type.
147- INT_16 ,
124+ /// Date and time recorded as microseconds since the Unix epoch.
125+ /// The value is stored as an INT64 physical type.
126+ TIMESTAMP_MICROS = 10 ;
148127
149- /// A signed 32 bit integer value stored as INT32 physical type.
150- INT_32 ,
128+ /// An unsigned 8 bit integer value stored as INT32 physical type.
129+ UINT_8 = 11 ;
151130
152- /// A signed 64 bit integer value stored as INT64 physical type.
153- INT_64 ,
131+ /// An unsigned 16 bit integer value stored as INT32 physical type.
132+ UINT_16 = 12 ;
154133
155- /// A JSON document embedded within a single UTF8 column .
156- JSON ,
134+ /// An unsigned 32 bit integer value stored as INT32 physical type .
135+ UINT_32 = 13 ;
157136
158- /// A BSON document embedded within a single BINARY column .
159- BSON ,
137+ /// An unsigned 64 bit integer value stored as INT64 physical type .
138+ UINT_64 = 14 ;
160139
161- /// An interval of time.
162- ///
163- /// This type annotates data stored as a FIXED_LEN_BYTE_ARRAY of length 12.
164- /// This data is composed of three separate little endian unsigned integers.
165- /// Each stores a component of a duration of time. The first integer identifies
166- /// the number of months associated with the duration, the second identifies
167- /// the number of days associated with the duration and the third identifies
168- /// the number of milliseconds associated with the provided duration.
169- /// This duration of time is independent of any particular timezone or date.
170- INTERVAL ,
171- }
140+ /// A signed 8 bit integer value stored as INT32 physical type.
141+ INT_8 = 15 ;
172142
173- impl < ' a , R : ThriftCompactInputProtocol < ' a > > ReadThrift < ' a , R > for ConvertedType {
174- fn read_thrift ( prot : & mut R ) -> Result < Self > {
175- let val = prot. read_i32 ( ) ?;
176- Ok ( match val {
177- 0 => Self :: UTF8 ,
178- 1 => Self :: MAP ,
179- 2 => Self :: MAP_KEY_VALUE ,
180- 3 => Self :: LIST ,
181- 4 => Self :: ENUM ,
182- 5 => Self :: DECIMAL ,
183- 6 => Self :: DATE ,
184- 7 => Self :: TIME_MILLIS ,
185- 8 => Self :: TIME_MICROS ,
186- 9 => Self :: TIMESTAMP_MILLIS ,
187- 10 => Self :: TIMESTAMP_MICROS ,
188- 11 => Self :: UINT_8 ,
189- 12 => Self :: UINT_16 ,
190- 13 => Self :: UINT_32 ,
191- 14 => Self :: UINT_64 ,
192- 15 => Self :: INT_8 ,
193- 16 => Self :: INT_16 ,
194- 17 => Self :: INT_32 ,
195- 18 => Self :: INT_64 ,
196- 19 => Self :: JSON ,
197- 20 => Self :: BSON ,
198- 21 => Self :: INTERVAL ,
199- _ => return Err ( general_err ! ( "Unexpected ConvertedType {}" , val) ) ,
200- } )
201- }
202- }
143+ /// A signed 16 bit integer value stored as INT32 physical type.
144+ INT_16 = 16 ;
203145
204- impl WriteThrift for ConvertedType {
205- const ELEMENT_TYPE : ElementType = ElementType :: I32 ;
146+ /// A signed 32 bit integer value stored as INT32 physical type.
147+ INT_32 = 17 ;
206148
207- fn write_thrift < W : Write > ( & self , writer : & mut ThriftCompactOutputProtocol < W > ) -> Result < ( ) > {
208- // because we've added NONE, the variant values are off by 1, so correct that here
209- writer . write_i32 ( * self as i32 - 1 )
210- }
211- }
149+ /// A signed 64 bit integer value stored as INT64 physical type.
150+ INT_64 = 18 ;
151+
152+ /// A JSON document embedded within a single UTF8 column.
153+ JSON = 19 ;
212154
213- write_thrift_field ! ( ConvertedType , FieldType :: I32 ) ;
155+ /// A BSON document embedded within a single BINARY column.
156+ BSON = 20 ;
157+
158+ /// An interval of time
159+ ///
160+ /// This type annotates data stored as a FIXED_LEN_BYTE_ARRAY of length 12.
161+ /// This data is composed of three separate little endian unsigned integers.
162+ /// Each stores a component of a duration of time. The first integer identifies
163+ /// the number of months associated with the duration, the second identifies
164+ /// the number of days associated with the duration and the third identifies
165+ /// the number of milliseconds associated with the provided duration.
166+ /// This duration of time is independent of any particular timezone or date.
167+ INTERVAL = 21 ;
168+ }
169+ ) ;
214170
215171// ----------------------------------------------------------------------
216172// Mirrors thrift union `TimeUnit`
@@ -1327,12 +1283,6 @@ impl WriteThrift for ColumnOrder {
13271283// ----------------------------------------------------------------------
13281284// Display handlers
13291285
1330- impl fmt:: Display for ConvertedType {
1331- fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
1332- write ! ( f, "{self:?}" )
1333- }
1334- }
1335-
13361286impl fmt:: Display for Compression {
13371287 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
13381288 write ! ( f, "{self:?}" )
0 commit comments