diff --git a/query/src/frontend/influxrpc.rs b/query/src/frontend/influxrpc.rs index aae61e2862..775918128a 100644 --- a/query/src/frontend/influxrpc.rs +++ b/query/src/frontend/influxrpc.rs @@ -277,6 +277,10 @@ impl InfluxRpcPlanner { let mut known_columns = BTreeSet::new(); for chunk in database.chunks(normalizer.unnormalized()) { + let mut do_full_plan = false; + if chunk.has_delete_predicates() { + do_full_plan = true; + } let table_name = chunk.table_name(); let predicate = normalizer.normalized(table_name); @@ -302,36 +306,43 @@ impl InfluxRpcPlanner { let selection = Selection::Some(&column_names); - // filter the columns further from the predicate - let maybe_names = chunk - .column_names(&predicate, selection) - .map_err(|e| Box::new(e) as _) - .context(FindingColumnNames)?; + if !do_full_plan { + // filter the columns further from the predicate + let maybe_names = chunk + .column_names(&predicate, selection) + .map_err(|e| Box::new(e) as _) + .context(FindingColumnNames)?; - match maybe_names { - Some(mut names) => { - debug!( - table_name, - names=?names, - chunk_id=%chunk.id().get(), - "column names found from metadata", - ); - known_columns.append(&mut names); - } - None => { - debug!( - table_name, - chunk_id=%chunk.id().get(), - "column names need full plan" - ); - // can't get columns only from metadata, need - // a general purpose plan - need_full_plans - .entry(table_name.to_string()) - .or_insert_with(Vec::new) - .push(Arc::clone(&chunk)); + match maybe_names { + Some(mut names) => { + debug!( + table_name, + names=?names, + chunk_id=%chunk.id().get(), + "column names found from metadata", + ); + known_columns.append(&mut names); + } + None => { + do_full_plan = true; + } } } + + // can't get columns only from metadata, need + // a general purpose plan + if do_full_plan { + debug!( + table_name, + chunk_id=%chunk.id().get(), + "column names need full plan" + ); + + need_full_plans + .entry(table_name.to_string()) + .or_insert_with(Vec::new) + .push(Arc::clone(&chunk)); + } } let mut builder = StringSetPlanBuilder::new(); diff --git a/query_tests/src/influxrpc/tag_keys.rs b/query_tests/src/influxrpc/tag_keys.rs index 5fc071d62f..db5c9372f0 100644 --- a/query_tests/src/influxrpc/tag_keys.rs +++ b/query_tests/src/influxrpc/tag_keys.rs @@ -144,8 +144,6 @@ async fn list_tag_name_end_to_end() { run_tag_keys_test_case(EndToEndTest {}, predicate, expected_tag_keys).await; } -// https://github.com/influxdata/influxdb_iox/issues/2863 -#[ignore] #[tokio::test] async fn list_tag_name_end_to_end_with_delete() { let predicate = PredicateBuilder::default()