Skip to content

Commit 1db4d32

Browse files
committed
Merge remote-tracking branch 'origin/feat/real' into feat/real
2 parents 5d259ff + c531d2e commit 1db4d32

5 files changed

Lines changed: 40 additions & 6 deletions

File tree

src/optimizer/core/histogram.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ impl Histogram {
353353
| LogicalType::Bigint
354354
| LogicalType::UBigint
355355
| LogicalType::Float
356+
| LogicalType::Real
356357
| LogicalType::Double
357358
| LogicalType::Decimal(_, _) => value.clone().cast(&LogicalType::Double)?.double(),
358359
LogicalType::Tuple(_) => match value {

src/types/evaluator/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ impl EvaluatorFactory {
188188
LogicalType::UInteger => numeric_binary_evaluator!(UInt32, op, LogicalType::UInteger),
189189
LogicalType::UBigint => numeric_binary_evaluator!(UInt64, op, LogicalType::UBigint),
190190
LogicalType::Float => numeric_binary_evaluator!(Float32, op, LogicalType::Float),
191+
LogicalType::Real => numeric_binary_evaluator!(Float32, op, LogicalType::Real),
191192
LogicalType::Double => numeric_binary_evaluator!(Float64, op, LogicalType::Double),
192193
LogicalType::Date => numeric_binary_evaluator!(Date, op, LogicalType::Date),
193194
LogicalType::DateTime => numeric_binary_evaluator!(DateTime, op, LogicalType::DateTime),

src/types/mod.rs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

src/types/value.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ impl DataValue {
399399
LogicalType::Bigint => DataValue::Int64(0),
400400
LogicalType::UBigint => DataValue::UInt64(0),
401401
LogicalType::Float => DataValue::Float32(OrderedFloat(0.0)),
402+
LogicalType::Real => DataValue::Float32(OrderedFloat(0.0)),
402403
LogicalType::Double => DataValue::Float64(OrderedFloat(0.0)),
403404
LogicalType::Char(len, unit) => DataValue::Utf8 {
404405
value: String::new(),
@@ -605,6 +606,13 @@ impl DataValue {
605606
}
606607
DataValue::Float32(OrderedFloat(reader.read_f32::<LittleEndian>()?))
607608
}
609+
LogicalType::Real => {
610+
if !is_projection {
611+
reader.seek(SeekFrom::Current(4))?;
612+
return Ok(None);
613+
}
614+
DataValue::Float32(OrderedFloat(reader.read_f32::<LittleEndian>()?))
615+
}
608616
LogicalType::Double => {
609617
if !is_projection {
610618
reader.seek(SeekFrom::Current(8))?;

tests/slt/sql_2016/E011_02.slt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ CREATE TABLE TABLE_E011_02_01_02 ( ID INT PRIMARY KEY, A FLOAT ( 2 ) )
99
statement ok
1010
CREATE TABLE TABLE_E011_02_01_03 ( ID INT PRIMARY KEY, A FLOAT )
1111

12-
# TODO: REAL
13-
# statement ok
14-
# CREATE TABLE TABLE_E011_02_01_04 ( ID INT PRIMARY KEY, A REAL )
12+
statement ok
13+
CREATE TABLE TABLE_E011_02_01_04 ( ID INT PRIMARY KEY, A REAL )
1514

1615
query R
1716
SELECT +7.8

0 commit comments

Comments
 (0)