diff --git a/influxdb_iox/tests/end_to_end_cases/querier/influxrpc/read_filter.rs b/influxdb_iox/tests/end_to_end_cases/querier/influxrpc/read_filter.rs index bb3483d1ca..eb74e56a2d 100644 --- a/influxdb_iox/tests/end_to_end_cases/querier/influxrpc/read_filter.rs +++ b/influxdb_iox/tests/end_to_end_cases/querier/influxrpc/read_filter.rs @@ -2,16 +2,17 @@ use super::{dump::dump_data_frames, read_group_data, run_data_test, InfluxRpcTes use async_trait::async_trait; use futures::{prelude::*, FutureExt}; use generated_types::{ - node::{Comparison, Logical}, + node::{Comparison, Logical, Type as NodeType, Value}, read_response::frame::Data, storage_client::StorageClient, - Predicate, ReadFilterRequest, + Node, Predicate, ReadFilterRequest, }; use influxdb_iox_client::connection::GrpcConnection; use std::sync::Arc; use test_helpers_end_to_end::{ - comparison_expression_node, maybe_skip_integration, string_value_node, DataGenerator, - GrpcRequestBuilder, MiniCluster, Step, StepTest, StepTestState, + comparison_expression_node, field_ref_node, float_value_node, maybe_skip_integration, + string_value_node, tag_ref_node, DataGenerator, GrpcRequestBuilder, MiniCluster, Step, + StepTest, StepTestState, }; #[tokio::test] @@ -860,25 +861,38 @@ async fn data_plan_order() { .await; } -// #[tokio::test] -// async fn filter_on_value() { -// // This is how the test existed in query tests: -// -// test_helpers::maybe_start_logging(); -// -// let predicate = Predicate::default() -// .with_expr(col("_value").eq(lit(1.77))) -// .with_expr(col("_field").eq(lit("load4"))); -// let predicate = InfluxRpcPredicate::new(None, predicate); -// -// let expected_results = vec![ -// "Series tags={_field=load4, _measurement=system, host=host.local}\n FloatPoints timestamps: [1527018806000000000, 1527018826000000000], values: [1.77, 1.77]", -// ]; -// -// run_read_filter_test_case(MeasurementsForDefect2845 {}, predicate, expected_results).await; -// -// // I can't figure out how to create a `_value=` expression. -// } +#[tokio::test] +async fn filter_on_value() { + let node1 = comparison_expression_node( + field_ref_node("_value"), + Comparison::Equal, + float_value_node(1.77), + ); + let node2 = comparison_expression_node( + tag_ref_node([255].to_vec()), + Comparison::Equal, + string_value_node("load4"), + ); + let predicate = Predicate { + root: Some(Node { + node_type: NodeType::LogicalExpression as i32, + children: vec![node1, node2], + value: Some(Value::Logical(Logical::And as i32)), + }), + }; + + Arc::new(ReadFilterTest { + setup_name: "MeasurementsForDefect2845", + request: GrpcRequestBuilder::new().predicate(predicate), + expected_results: vec![ + "SeriesFrame, tags: _field=load4,_measurement=system,host=host.local, type: 0", + "FloatPointsFrame, timestamps: [1527018806000000000, 1527018826000000000], \ + values: \"1.77,1.77\"", + ], + }) + .run() + .await; +} #[tokio::test] #[should_panic(expected = "Unsupported _field predicate")] diff --git a/test_helpers_end_to_end/src/grpc.rs b/test_helpers_end_to_end/src/grpc.rs index 7ea7d31550..2b043029d6 100644 --- a/test_helpers_end_to_end/src/grpc.rs +++ b/test_helpers_end_to_end/src/grpc.rs @@ -415,6 +415,14 @@ impl GrpcRequestBuilder { } } +pub fn field_ref_node(field_name: impl Into) -> Node { + Node { + node_type: NodeType::FieldRef.into(), + children: vec![], + value: Some(Value::FieldRefValue(field_name.into())), + } +} + pub fn tag_ref_node(tag_name: impl Into>) -> Node { Node { node_type: NodeType::TagRef as i32, @@ -431,6 +439,14 @@ pub fn string_value_node(value: impl Into) -> Node { } } +pub fn float_value_node(value: f64) -> Node { + Node { + node_type: NodeType::Literal as i32, + children: vec![], + value: Some(Value::FloatValue(value)), + } +} + pub fn comparison_expression_node(lhs: Node, comparison: Comparison, rhs: Node) -> Node { Node { node_type: NodeType::ComparisonExpression as i32, diff --git a/test_helpers_end_to_end/src/lib.rs b/test_helpers_end_to_end/src/lib.rs index e705b2cf4b..85cb750a38 100644 --- a/test_helpers_end_to_end/src/lib.rs +++ b/test_helpers_end_to_end/src/lib.rs @@ -22,7 +22,10 @@ pub use client::*; pub use config::TestConfig; pub use data_generator::DataGenerator; pub use error::{check_flight_error, check_tonic_status}; -pub use grpc::{comparison_expression_node, string_value_node, GrpcRequestBuilder}; +pub use grpc::{ + comparison_expression_node, field_ref_node, float_value_node, string_value_node, tag_ref_node, + GrpcRequestBuilder, +}; pub use mini_cluster::MiniCluster; pub use server_fixture::{ServerFixture, TestServer}; pub use server_type::{AddAddrEnv, ServerType};