Skip to content

Commit

Permalink
aw-query: Fix clippy issues
Browse files Browse the repository at this point in the history
Removes quite a few clones as well, some queries might become significantly
faster now
  • Loading branch information
johan-bjareholt committed Mar 26, 2020
1 parent 96bbb0e commit 6f69b8b
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 65 deletions.
23 changes: 12 additions & 11 deletions aw-query/src/datatype.rs
Expand Up @@ -27,8 +27,9 @@ pub enum DataType {
Function(String, functions::QueryFn),
}

#[allow(clippy::trivially_copy_pass_by_ref)]
fn serialize_function<S>(
_element: &String,
_element: &str,
_fun: &functions::QueryFn,
_serializer: S,
) -> Result<S::Ok, S::Error>
Expand Down Expand Up @@ -132,7 +133,7 @@ impl TryFrom<&DataType> for Vec<String> {
let s: String = (&string).try_into()?;
strings.push(s);
}
return Ok(strings);
Ok(strings)
}
}

Expand All @@ -152,7 +153,7 @@ impl TryFrom<&DataType> for Vec<Event> {
}
}
}
return Ok(events);
Ok(events)
}
}

Expand Down Expand Up @@ -184,7 +185,7 @@ impl TryFrom<&DataType> for Vec<(String, Rule)> {
}
}
}
return Ok(lists);
Ok(lists)
}
}

Expand Down Expand Up @@ -216,7 +217,7 @@ impl TryFrom<&DataType> for Vec<(Vec<String>, Rule)> {
}
}
}
return Ok(lists);
Ok(lists)
}
}

Expand Down Expand Up @@ -255,7 +256,7 @@ impl TryFrom<&DataType> for Value {
for value in tagged_values.drain(..) {
values.push((&value).try_into()?);
}
return Ok(Value::Array(values));
Ok(Value::Array(values))
}
ref invalid_type => Err(QueryError::InvalidFunctionParameters(format!(
"Query2 support for parsing values is limited, does not support parsing {:?}",
Expand All @@ -273,7 +274,7 @@ impl TryFrom<&DataType> for Vec<Value> {
for value in tagged_values.drain(..) {
values.push((&value).try_into()?);
}
return Ok(values);
Ok(values)
}
}

Expand Down Expand Up @@ -307,7 +308,7 @@ impl TryFrom<&DataType> for Rule {
}
};
if rtype == "none" {
return Ok(Self::None);
Ok(Self::None)
} else if rtype == "regex" {
let regex_val = match obj.get("regex") {
Some(regex_val) => regex_val,
Expand Down Expand Up @@ -346,12 +347,12 @@ impl TryFrom<&DataType> for Rule {
)))
}
};
return Ok(Self::Regex(regex_rule));
Ok(Self::Regex(regex_rule))
} else {
return Err(QueryError::InvalidFunctionParameters(format!(
Err(QueryError::InvalidFunctionParameters(format!(
"Unknown rule type '{}'",
rtype
)));
)))
}
}
}
61 changes: 28 additions & 33 deletions aw-query/src/functions.rs
Expand Up @@ -108,7 +108,6 @@ mod qfunctions {
use super::validate;
use crate::DataType;
use crate::QueryError;
use aw_transform;

pub fn print(
args: Vec<DataType>,
Expand All @@ -118,7 +117,7 @@ mod qfunctions {
for arg in args {
info!("{:?}", arg);
}
return Ok(DataType::None());
Ok(DataType::None())
}

pub fn query_bucket(
Expand All @@ -133,8 +132,8 @@ mod qfunctions {

let events = match ds.get_events(
bucket_id.as_str(),
Some(interval.start().clone()),
Some(interval.end().clone()),
Some(*interval.start()),
Some(*interval.end()),
None,
) {
Ok(events) => events,
Expand All @@ -149,7 +148,7 @@ mod qfunctions {
for event in events {
ret.push(DataType::Event(event));
}
return Ok(DataType::List(ret));
Ok(DataType::List(ret))
}

pub fn query_bucket_names(
Expand All @@ -171,7 +170,7 @@ mod qfunctions {
for bucketname in buckets.keys() {
bucketnames.push(DataType::String(bucketname.to_string()));
}
return Ok(DataType::List(bucketnames));
Ok(DataType::List(bucketnames))
}

pub fn find_bucket(
Expand Down Expand Up @@ -199,7 +198,7 @@ mod qfunctions {
)))
}
};
return Ok(DataType::String(bucketname));
Ok(DataType::String(bucketname))
}

pub fn contains(
Expand All @@ -210,9 +209,7 @@ mod qfunctions {
// typecheck
validate::args_length(&args, 2)?;
match args[0] {
DataType::List(ref list) => {
return Ok(DataType::Bool(list.contains(&args[1])));
}
DataType::List(ref list) => Ok(DataType::Bool(list.contains(&args[1]))),
DataType::Dict(ref dict) => {
let s = match &args[1] {
DataType::String(s) => s.to_string(),
Expand All @@ -223,14 +220,12 @@ mod qfunctions {
)))
}
};
return Ok(DataType::Bool(dict.contains_key(&s)));
}
_ => {
return Err(QueryError::InvalidFunctionParameters(format!(
"function contains got first argument {:?}, expected type List or Dict",
args[0]
)))
Ok(DataType::Bool(dict.contains_key(&s)))
}
_ => Err(QueryError::InvalidFunctionParameters(format!(
"function contains got first argument {:?}, expected type List or Dict",
args[0]
))),
}
}

Expand All @@ -249,7 +244,7 @@ mod qfunctions {
for event in flooded_events.drain(..) {
tagged_flooded_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_flooded_events));
Ok(DataType::List(tagged_flooded_events))
}

pub fn categorize(
Expand All @@ -268,7 +263,7 @@ mod qfunctions {
for event in flooded_events.drain(..) {
tagged_flooded_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_flooded_events));
Ok(DataType::List(tagged_flooded_events))
}

pub fn tag(
Expand All @@ -287,7 +282,7 @@ mod qfunctions {
for event in flooded_events.drain(..) {
tagged_flooded_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_flooded_events));
Ok(DataType::List(tagged_flooded_events))
}

pub fn sort_by_duration(
Expand All @@ -306,7 +301,7 @@ mod qfunctions {
for event in sorted_events.drain(..) {
tagged_sorted_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_sorted_events));
Ok(DataType::List(tagged_sorted_events))
}

pub fn limit_events(
Expand All @@ -326,7 +321,7 @@ mod qfunctions {
for event in events.drain(0..limit) {
limited_tagged_events.push(DataType::Event(event));
}
return Ok(DataType::List(limited_tagged_events));
Ok(DataType::List(limited_tagged_events))
}

pub fn sort_by_timestamp(
Expand All @@ -345,7 +340,7 @@ mod qfunctions {
for event in sorted_events.drain(..) {
tagged_sorted_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_sorted_events));
Ok(DataType::List(tagged_sorted_events))
}

pub fn sum_durations(
Expand All @@ -362,9 +357,9 @@ mod qfunctions {
for event in events.drain(..) {
sum_durations = sum_durations + event.duration;
}
return Ok(DataType::Number(
Ok(DataType::Number(
(sum_durations.num_milliseconds() as f64) / 1000.0,
));
))
}

pub fn merge_events_by_keys(
Expand All @@ -382,7 +377,7 @@ mod qfunctions {
for event in merged_events.drain(..) {
merged_tagged_events.push(DataType::Event(event));
}
return Ok(DataType::List(merged_tagged_events));
Ok(DataType::List(merged_tagged_events))
}

pub fn chunk_events_by_key(
Expand All @@ -400,7 +395,7 @@ mod qfunctions {
for event in merged_events.drain(..) {
merged_tagged_events.push(DataType::Event(event));
}
return Ok(DataType::List(merged_tagged_events));
Ok(DataType::List(merged_tagged_events))
}

pub fn filter_keyvals(
Expand All @@ -419,7 +414,7 @@ mod qfunctions {
for event in filtered_events.drain(..) {
filtered_tagged_events.push(DataType::Event(event));
}
return Ok(DataType::List(filtered_tagged_events));
Ok(DataType::List(filtered_tagged_events))
}

pub fn filter_period_intersect(
Expand All @@ -437,7 +432,7 @@ mod qfunctions {
for event in filtered_events.drain(..) {
filtered_tagged_events.push(DataType::Event(event));
}
return Ok(DataType::List(filtered_tagged_events));
Ok(DataType::List(filtered_tagged_events))
}

pub fn split_url_events(
Expand All @@ -454,7 +449,7 @@ mod qfunctions {
aw_transform::split_url_event(&mut event);
tagged_split_url_events.push(DataType::Event(event));
}
return Ok(DataType::List(tagged_split_url_events));
Ok(DataType::List(tagged_split_url_events))
}

pub fn concat(
Expand All @@ -469,7 +464,7 @@ mod qfunctions {
event_list.push(DataType::Event(event));
}
}
return Ok(DataType::List(event_list));
Ok(DataType::List(event_list))
}
}

Expand All @@ -478,15 +473,15 @@ mod validate {
use aw_models::TimeInterval;
use std::collections::HashMap;

pub fn args_length(args: &Vec<DataType>, len: usize) -> Result<(), QueryError> {
pub fn args_length(args: &[DataType], len: usize) -> Result<(), QueryError> {
if args.len() != len {
return Err(QueryError::InvalidFunctionParameters(format!(
"Expected {} parameters in function, got {}",
len,
args.len()
)));
}
return Ok(());
Ok(())
}

pub fn get_timeinterval(env: &HashMap<&str, DataType>) -> Result<TimeInterval, QueryError> {
Expand Down
13 changes: 6 additions & 7 deletions aw-query/src/interpret.rs
Expand Up @@ -13,7 +13,7 @@ fn init_env<'a>(ti: &TimeInterval) -> HashMap<&'a str, DataType> {
let mut env = HashMap::new();
env.insert("TIMEINTERVAL", DataType::String(ti.to_string()));
functions::fill_env(&mut env);
return env;
env
}

pub fn interpret_prog<'a>(
Expand Down Expand Up @@ -52,11 +52,10 @@ fn interpret_expr<'a>(
))
}
},
DataType::List(l1) => match b_res {
DataType::List(l2) => {
let mut new_list = l1.clone();
new_list.append(&mut l2.clone());
DataType::List(new_list)
DataType::List(mut l1) => match b_res {
DataType::List(mut l2) => {
l1.append(&mut l2);
DataType::List(l1)
}
_ => {
return Err(QueryError::InvalidType(
Expand All @@ -66,7 +65,7 @@ fn interpret_expr<'a>(
},
DataType::String(s1) => match b_res {
DataType::String(s2) => {
let mut new_string = s1.clone();
let mut new_string = s1;
new_string.push_str(&s2);
DataType::String(new_string)
}
Expand Down
4 changes: 2 additions & 2 deletions aw-query/src/lexer.rs
Expand Up @@ -54,7 +54,7 @@ lexer! {
r#"False"# => (Token::Bool(false), text),

r#"\"([^\"]|(\\\"))*\""# => (
Token::String(text.to_owned()[1..text.len()-1].replace("\\\"", "\"").to_string()),
Token::String(text.to_owned()[1..text.len()-1].replace("\\\"", "\"")),
text
),
r#"[0-9]+[\.]?[0-9]*"# => {
Expand Down Expand Up @@ -111,7 +111,7 @@ pub struct Span {
fn span_in(s: &str, t: &str, l: usize) -> Span {
let lo = s.as_ptr() as usize - t.as_ptr() as usize;
Span {
lo: lo,
lo,
hi: lo + s.len(),
line: l,
}
Expand Down
3 changes: 2 additions & 1 deletion aw-query/src/lib.rs
Expand Up @@ -17,6 +17,7 @@ mod ast;
mod functions;
mod interpret;
mod lexer;
#[allow(clippy::match_single_binding, clippy::redundant_closure_call)]
mod parser;

pub use crate::datatype::DataType;
Expand Down Expand Up @@ -46,7 +47,7 @@ impl fmt::Display for QueryError {
}
}

pub fn query<'a>(code: &str, ti: &TimeInterval, ds: &Datastore) -> Result<DataType, QueryError> {
pub fn query(code: &str, ti: &TimeInterval, ds: &Datastore) -> Result<DataType, QueryError> {
let lexer = lexer::Lexer::new(code);
let program = match parser::parse(lexer) {
Ok(p) => p,
Expand Down

0 comments on commit 6f69b8b

Please sign in to comment.