From 4795bd5c9cc6b05970b96f2821684b41e877923d Mon Sep 17 00:00:00 2001 From: Marco Neumann Date: Tue, 14 Sep 2021 13:14:19 +0200 Subject: [PATCH] refactor: stricter delete predicate TS parsing As a a nice side effect, the parser no longer depends on the line protocol parser. --- Cargo.lock | 1 - query/Cargo.toml | 1 - query/src/predicate.rs | 20 +++++--------------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5e9f594d64..30e1657027 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3323,7 +3323,6 @@ dependencies = [ "datafusion_util", "futures", "hashbrown", - "influxdb_line_protocol", "internal_types", "itertools 0.10.1", "libc", diff --git a/query/Cargo.toml b/query/Cargo.toml index fb9727f233..2df7f5f508 100644 --- a/query/Cargo.toml +++ b/query/Cargo.toml @@ -24,7 +24,6 @@ datafusion = { path = "../datafusion" } datafusion_util = { path = "../datafusion_util" } futures = "0.3" hashbrown = "0.11" -influxdb_line_protocol = { path = "../influxdb_line_protocol" } internal_types = { path = "../internal_types" } observability_deps = { path = "../observability_deps" } parking_lot = "0.11.2" diff --git a/query/src/predicate.rs b/query/src/predicate.rs index ce923e8f50..3a497313dc 100644 --- a/query/src/predicate.rs +++ b/query/src/predicate.rs @@ -15,7 +15,6 @@ use datafusion::{ optimizer::utils, }; use datafusion_util::{make_range_expr, AndExprBuilder}; -use influxdb_line_protocol::timestamp; use internal_types::schema::TIME_COLUMN_NAME; use observability_deps::tracing::debug; use sqlparser::{ @@ -609,9 +608,9 @@ impl ParseDeletePredicate { Ok(datetime) => Ok(datetime.timestamp_nanos()), Err(timestamp_err) => { // See if it is in nanosecond form - let time_result = timestamp(input); + let time_result = input.parse::(); match time_result { - Ok((_, nano)) => Ok(nano), + Ok(nano) => Ok(nano), Err(nano_err) => { // wrong format, return both error let error_str = format!("{}, {}", timestamp_err, nano_err); @@ -867,24 +866,15 @@ mod tests { #[test] fn test_parse_timestamp_invalid() { - // It turn out this is not invalid but return1 123 let input = r#"123gdb"#; - let time = ParseDeletePredicate::parse_time(input).unwrap(); - assert_eq!(time, 123); - //assert!(time.is_err()); + ParseDeletePredicate::parse_time(input).unwrap_err(); - // must parse time - // It turn out this is not invalid but return1 1970 let input = r#"1970-01-01T00:00:00"#; - let time = ParseDeletePredicate::parse_time(input).unwrap(); - assert_eq!(time, 1970); - //assert!(time.is_err()); + ParseDeletePredicate::parse_time(input).unwrap_err(); // It turn out this is not invalid but return1 1971 let input = r#"1971-02-01:30:21Z"#; - let time = ParseDeletePredicate::parse_time(input).unwrap(); - assert_eq!(time, 1971); - //assert!(time.is_err()); + ParseDeletePredicate::parse_time(input).unwrap_err(); } #[test]