Skip to content

Commit

Permalink
Change internal type to int64
Browse files Browse the repository at this point in the history
  • Loading branch information
junli1026 committed Sep 7, 2021
1 parent 7c3a9ae commit e94a714
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 13 deletions.
2 changes: 1 addition & 1 deletion common/datavalues/src/data_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ impl From<&DataType> for DataValue {
DataType::List(f) => DataValue::List(None, f.data_type().clone()),
DataType::Struct(_) => DataValue::Struct(vec![]),
DataType::String => DataValue::String(None),
DataType::Interval(_) => DataValue::Float64(None),
DataType::Interval(_) => DataValue::Int64(None),
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion common/datavalues/src/types/data_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ impl DataType {
ArrowDataType::Struct(arrows_fields)
}
String => ArrowDataType::LargeBinary,
Interval(_) => ArrowDataType::Float64,
Interval(_unit) => ArrowDataType::Int64,
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion common/datavalues/src/types/physical_data_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ impl From<DataType> for PhysicalDataType {
DataType::List(x) => List(x),
DataType::Struct(x) => Struct(x),
DataType::String => String,
DataType::Interval(_) => Float64,
DataType::Interval(_) => Int64,
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion common/datavalues/src/types/serializations/interval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ impl IntervalSerializer {
impl TypeSerializer for IntervalSerializer {
fn serialize_strings(&self, column: &DataColumn) -> Result<Vec<String>> {
let seconds_per_unit = IntervalUnit::avg_seconds(self.unit.clone());
let seconds = DataColumn::Constant(DataValue::Int32(Some(seconds_per_unit)), 1);
let seconds = DataColumn::Constant(DataValue::Float64(Some(seconds_per_unit as f64)), 1);
let interval = column.arithmetic(DataValueArithmeticOperator::Div, &seconds)?;
NumberSerializer::<f64>::default().serialize_strings(&interval)
}
Expand Down
15 changes: 8 additions & 7 deletions common/functions/src/scalars/dates/interval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,15 @@ macro_rules! impl_function {
) -> Result<DataColumn> {
let interval_num = columns[0].column();
let seconds_per_unit = IntervalUnit::avg_seconds($interval_unit);
let seconds = DataColumn::Constant(
DataValue::Float64(Some(seconds_per_unit as f64)),
input_rows,
);
let seconds =
DataColumn::Constant(DataValue::Int32(Some(seconds_per_unit)), input_rows);
let total_seconds =
interval_num.arithmetic(DataValueArithmeticOperator::Mul, &seconds);
println!("total seconds: {:?}", total_seconds);
total_seconds
interval_num.arithmetic(DataValueArithmeticOperator::Mul, &seconds)?;

// convert to Int64 type
let series = total_seconds.to_minimal_array()?;
let column: DataColumn = series.cast_with_type(&DataType::Int64)?.into();
Ok(column.resize_constant(input_rows))
}
}
};
Expand Down
4 changes: 2 additions & 2 deletions query/src/servers/clickhouse/writers/query_writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -302,9 +302,9 @@ pub fn to_clickhouse_block(block: DataBlock) -> Result<Block> {
DataType::Interval(unit) => {
let seconds = IntervalUnit::avg_seconds(unit.clone()) as f64;
let vs: Vec<f64> = column
.f64()?
.i64()?
.into_no_null_iter()
.map(|c| *c / seconds)
.map(|c| (*c as f64) / seconds)
.collect();
result.column(name, vs)
}
Expand Down

0 comments on commit e94a714

Please sign in to comment.