chore: some initial tests for validating column schema inference

pull/24376/head
Stuart Carnie 2023-05-11 09:46:38 +10:00
parent 26c96b356f
commit f234442534
No known key found for this signature in database
GPG Key ID: 848D9C9718D78B4F
1 changed files with 39 additions and 0 deletions

View File

@ -1717,6 +1717,7 @@ mod test {
use super::*;
use datafusion::common::Result;
use influxdb_influxql_parser::select::SelectStatement;
use schema::{InfluxColumnType, InfluxFieldType};
/// Test implementation that converts `Select` to `SelectStatement` so that it can be
/// converted back to a string.
@ -1728,6 +1729,44 @@ mod test {
Ok(stmt.select.into())
}
#[test]
fn projection_schema() {
let namespace = MockSchemaProvider::default();
let stmt = parse_select("SELECT usage_idle, usage_idle + usage_system, cpu FROM cpu");
let q = rewrite_statement(&namespace, &stmt).unwrap();
// first field is always the time column and thus a Timestamp
assert_matches!(
q.select.fields[0].data_type,
Some(InfluxColumnType::Timestamp)
);
// usage_idle is a Float
assert_matches!(
q.select.fields[1].data_type,
Some(InfluxColumnType::Field(InfluxFieldType::Float))
);
// The expression usage_idle + usage_system is a Float
assert_matches!(
q.select.fields[2].data_type,
Some(InfluxColumnType::Field(InfluxFieldType::Float))
);
// cpu is a Tag
assert_matches!(q.select.fields[3].data_type, Some(InfluxColumnType::Tag));
let stmt = parse_select("SELECT field_i64 + field_f64 FROM all_types");
let q = rewrite_statement(&namespace, &stmt).unwrap();
// first field is always the time column and thus a Timestamp
assert_matches!(
q.select.fields[0].data_type,
Some(InfluxColumnType::Timestamp)
);
// Expression is promoted to a Float
assert_matches!(
q.select.fields[1].data_type,
Some(InfluxColumnType::Field(InfluxFieldType::Float))
);
}
/// Validating types for simple projections
#[test]
fn projection_simple() {