@@ -43,6 +43,7 @@ pub enum LogicalType {
4343 Bigint ,
4444 UBigint ,
4545 Float ,
46+ Real ,
4647 Double ,
4748 Char ( u32 , CharLengthUnits ) ,
4849 Varchar ( Option < u32 > , CharLengthUnits ) ,
@@ -76,6 +77,8 @@ impl LogicalType {
7677 Some ( LogicalType :: UBigint )
7778 } else if type_id == TypeId :: of :: < f32 > ( ) {
7879 Some ( LogicalType :: Float )
80+ } else if type_id == TypeId :: of :: < f32 > ( ) {
81+ Some ( LogicalType :: Real )
7982 } else if type_id == TypeId :: of :: < f64 > ( ) {
8083 Some ( LogicalType :: Double )
8184 } else if type_id == TypeId :: of :: < NaiveDate > ( ) {
@@ -106,6 +109,7 @@ impl LogicalType {
106109 LogicalType :: Bigint => Some ( 8 ) ,
107110 LogicalType :: UBigint => Some ( 8 ) ,
108111 LogicalType :: Float => Some ( 4 ) ,
112+ LogicalType :: Real => Some ( 4 ) ,
109113 LogicalType :: Double => Some ( 8 ) ,
110114 /// Note: The non-fixed length type's raw_len is None e.g. Varchar
111115 LogicalType :: Varchar ( _, _) => None ,
@@ -132,6 +136,7 @@ impl LogicalType {
132136 LogicalType :: Bigint ,
133137 LogicalType :: UBigint ,
134138 LogicalType :: Float ,
139+ LogicalType :: Real ,
135140 LogicalType :: Double ,
136141 ]
137142 }
@@ -148,6 +153,7 @@ impl LogicalType {
148153 | LogicalType :: Bigint
149154 | LogicalType :: UBigint
150155 | LogicalType :: Float
156+ | LogicalType :: Real
151157 | LogicalType :: Double
152158 | LogicalType :: Decimal ( _, _)
153159 )
@@ -174,7 +180,10 @@ impl LogicalType {
174180 }
175181
176182 pub fn is_floating_point_numeric ( & self ) -> bool {
177- matches ! ( self , LogicalType :: Float | LogicalType :: Double )
183+ matches ! (
184+ self ,
185+ LogicalType :: Float | LogicalType :: Real | LogicalType :: Double
186+ )
178187 }
179188
180189 pub fn max_logical_type (
@@ -290,6 +299,7 @@ impl LogicalType {
290299 | LogicalType :: Integer
291300 | LogicalType :: Bigint
292301 | LogicalType :: Float
302+ | LogicalType :: Real
293303 | LogicalType :: Double
294304 | LogicalType :: Decimal ( _, _)
295305 ) ,
@@ -302,6 +312,7 @@ impl LogicalType {
302312 | LogicalType :: Integer
303313 | LogicalType :: Bigint
304314 | LogicalType :: Float
315+ | LogicalType :: Real
305316 | LogicalType :: Double
306317 | LogicalType :: Decimal ( _, _)
307318 ) ,
@@ -310,6 +321,7 @@ impl LogicalType {
310321 LogicalType :: Integer
311322 | LogicalType :: Bigint
312323 | LogicalType :: Float
324+ | LogicalType :: Real
313325 | LogicalType :: Double
314326 | LogicalType :: Decimal ( _, _)
315327 ) ,
@@ -320,13 +332,15 @@ impl LogicalType {
320332 | LogicalType :: Integer
321333 | LogicalType :: Bigint
322334 | LogicalType :: Float
335+ | LogicalType :: Real
323336 | LogicalType :: Double
324337 | LogicalType :: Decimal ( _, _)
325338 ) ,
326339 LogicalType :: Integer => matches ! (
327340 to,
328341 LogicalType :: Bigint
329342 | LogicalType :: Float
343+ | LogicalType :: Real
330344 | LogicalType :: Double
331345 | LogicalType :: Decimal ( _, _)
332346 ) ,
@@ -335,18 +349,26 @@ impl LogicalType {
335349 LogicalType :: UBigint
336350 | LogicalType :: Bigint
337351 | LogicalType :: Float
352+ | LogicalType :: Real
338353 | LogicalType :: Double
339354 | LogicalType :: Decimal ( _, _)
340355 ) ,
341356 LogicalType :: Bigint => matches ! (
342357 to,
343- LogicalType :: Float | LogicalType :: Double | LogicalType :: Decimal ( _, _)
358+ LogicalType :: Float
359+ | LogicalType :: Real
360+ | LogicalType :: Double
361+ | LogicalType :: Decimal ( _, _)
344362 ) ,
345363 LogicalType :: UBigint => matches ! (
346364 to,
347- LogicalType :: Float | LogicalType :: Double | LogicalType :: Decimal ( _, _)
365+ LogicalType :: Float
366+ | LogicalType :: Real
367+ | LogicalType :: Double
368+ | LogicalType :: Decimal ( _, _)
348369 ) ,
349370 LogicalType :: Float => matches ! ( to, LogicalType :: Double | LogicalType :: Decimal ( _, _) ) ,
371+ LogicalType :: Real => matches ! ( to, LogicalType :: Double | LogicalType :: Decimal ( _, _) ) ,
350372 LogicalType :: Double => matches ! ( to, LogicalType :: Decimal ( _, _) ) ,
351373 LogicalType :: Char ( ..) => false ,
352374 LogicalType :: Varchar ( ..) => false ,
@@ -406,6 +428,7 @@ impl TryFrom<sqlparser::ast::DataType> for LogicalType {
406428 Ok ( LogicalType :: Varchar ( None , CharLengthUnits :: Characters ) )
407429 }
408430 sqlparser:: ast:: DataType :: Float ( _) => Ok ( LogicalType :: Float ) ,
431+ sqlparser:: ast:: DataType :: Real => Ok ( LogicalType :: Real ) ,
409432 sqlparser:: ast:: DataType :: Double | sqlparser:: ast:: DataType :: DoublePrecision => {
410433 Ok ( LogicalType :: Double )
411434 }
@@ -473,6 +496,7 @@ impl std::fmt::Display for LogicalType {
473496 LogicalType :: Bigint => write ! ( f, "Bigint" ) ?,
474497 LogicalType :: UBigint => write ! ( f, "UBigint" ) ?,
475498 LogicalType :: Float => write ! ( f, "Float" ) ?,
499+ LogicalType :: Real => write ! ( f, "Real" ) ?,
476500 LogicalType :: Double => write ! ( f, "Double" ) ?,
477501 LogicalType :: Char ( len, units) => write ! ( f, "Char({}, {})" , len, units) ?,
478502 LogicalType :: Varchar ( len, units) => write ! ( f, "Varchar({:?}, {})" , len, units) ?,
@@ -542,6 +566,7 @@ pub(crate) mod test {
542566 fn_assert ( & mut cursor, & mut reference_tables, LogicalType :: Bigint ) ?;
543567 fn_assert ( & mut cursor, & mut reference_tables, LogicalType :: UBigint ) ?;
544568 fn_assert ( & mut cursor, & mut reference_tables, LogicalType :: Float ) ?;
569+ fn_assert ( & mut cursor, & mut reference_tables, LogicalType :: Real ) ?;
545570 fn_assert ( & mut cursor, & mut reference_tables, LogicalType :: Double ) ?;
546571 fn_assert (
547572 & mut cursor,
0 commit comments