Skip to content

Commit 6f69b8b

Browse files
aw-query: Fix clippy issues
Removes quite a few clones as well, some queries might become significantly faster now
1 parent 96bbb0e commit 6f69b8b

File tree

6 files changed

+59
-65
lines changed

6 files changed

+59
-65
lines changed

aw-query/src/datatype.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ pub enum DataType {
2727
Function(String, functions::QueryFn),
2828
}
2929

30+
#[allow(clippy::trivially_copy_pass_by_ref)]
3031
fn serialize_function<S>(
31-
_element: &String,
32+
_element: &str,
3233
_fun: &functions::QueryFn,
3334
_serializer: S,
3435
) -> Result<S::Ok, S::Error>
@@ -132,7 +133,7 @@ impl TryFrom<&DataType> for Vec<String> {
132133
let s: String = (&string).try_into()?;
133134
strings.push(s);
134135
}
135-
return Ok(strings);
136+
Ok(strings)
136137
}
137138
}
138139

@@ -152,7 +153,7 @@ impl TryFrom<&DataType> for Vec<Event> {
152153
}
153154
}
154155
}
155-
return Ok(events);
156+
Ok(events)
156157
}
157158
}
158159

@@ -184,7 +185,7 @@ impl TryFrom<&DataType> for Vec<(String, Rule)> {
184185
}
185186
}
186187
}
187-
return Ok(lists);
188+
Ok(lists)
188189
}
189190
}
190191

@@ -216,7 +217,7 @@ impl TryFrom<&DataType> for Vec<(Vec<String>, Rule)> {
216217
}
217218
}
218219
}
219-
return Ok(lists);
220+
Ok(lists)
220221
}
221222
}
222223

@@ -255,7 +256,7 @@ impl TryFrom<&DataType> for Value {
255256
for value in tagged_values.drain(..) {
256257
values.push((&value).try_into()?);
257258
}
258-
return Ok(Value::Array(values));
259+
Ok(Value::Array(values))
259260
}
260261
ref invalid_type => Err(QueryError::InvalidFunctionParameters(format!(
261262
"Query2 support for parsing values is limited, does not support parsing {:?}",
@@ -273,7 +274,7 @@ impl TryFrom<&DataType> for Vec<Value> {
273274
for value in tagged_values.drain(..) {
274275
values.push((&value).try_into()?);
275276
}
276-
return Ok(values);
277+
Ok(values)
277278
}
278279
}
279280

@@ -307,7 +308,7 @@ impl TryFrom<&DataType> for Rule {
307308
}
308309
};
309310
if rtype == "none" {
310-
return Ok(Self::None);
311+
Ok(Self::None)
311312
} else if rtype == "regex" {
312313
let regex_val = match obj.get("regex") {
313314
Some(regex_val) => regex_val,
@@ -346,12 +347,12 @@ impl TryFrom<&DataType> for Rule {
346347
)))
347348
}
348349
};
349-
return Ok(Self::Regex(regex_rule));
350+
Ok(Self::Regex(regex_rule))
350351
} else {
351-
return Err(QueryError::InvalidFunctionParameters(format!(
352+
Err(QueryError::InvalidFunctionParameters(format!(
352353
"Unknown rule type '{}'",
353354
rtype
354-
)));
355+
)))
355356
}
356357
}
357358
}

aw-query/src/functions.rs

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ mod qfunctions {
108108
use super::validate;
109109
use crate::DataType;
110110
use crate::QueryError;
111-
use aw_transform;
112111

113112
pub fn print(
114113
args: Vec<DataType>,
@@ -118,7 +117,7 @@ mod qfunctions {
118117
for arg in args {
119118
info!("{:?}", arg);
120119
}
121-
return Ok(DataType::None());
120+
Ok(DataType::None())
122121
}
123122

124123
pub fn query_bucket(
@@ -133,8 +132,8 @@ mod qfunctions {
133132

134133
let events = match ds.get_events(
135134
bucket_id.as_str(),
136-
Some(interval.start().clone()),
137-
Some(interval.end().clone()),
135+
Some(*interval.start()),
136+
Some(*interval.end()),
138137
None,
139138
) {
140139
Ok(events) => events,
@@ -149,7 +148,7 @@ mod qfunctions {
149148
for event in events {
150149
ret.push(DataType::Event(event));
151150
}
152-
return Ok(DataType::List(ret));
151+
Ok(DataType::List(ret))
153152
}
154153

155154
pub fn query_bucket_names(
@@ -171,7 +170,7 @@ mod qfunctions {
171170
for bucketname in buckets.keys() {
172171
bucketnames.push(DataType::String(bucketname.to_string()));
173172
}
174-
return Ok(DataType::List(bucketnames));
173+
Ok(DataType::List(bucketnames))
175174
}
176175

177176
pub fn find_bucket(
@@ -199,7 +198,7 @@ mod qfunctions {
199198
)))
200199
}
201200
};
202-
return Ok(DataType::String(bucketname));
201+
Ok(DataType::String(bucketname))
203202
}
204203

205204
pub fn contains(
@@ -210,9 +209,7 @@ mod qfunctions {
210209
// typecheck
211210
validate::args_length(&args, 2)?;
212211
match args[0] {
213-
DataType::List(ref list) => {
214-
return Ok(DataType::Bool(list.contains(&args[1])));
215-
}
212+
DataType::List(ref list) => Ok(DataType::Bool(list.contains(&args[1]))),
216213
DataType::Dict(ref dict) => {
217214
let s = match &args[1] {
218215
DataType::String(s) => s.to_string(),
@@ -223,14 +220,12 @@ mod qfunctions {
223220
)))
224221
}
225222
};
226-
return Ok(DataType::Bool(dict.contains_key(&s)));
227-
}
228-
_ => {
229-
return Err(QueryError::InvalidFunctionParameters(format!(
230-
"function contains got first argument {:?}, expected type List or Dict",
231-
args[0]
232-
)))
223+
Ok(DataType::Bool(dict.contains_key(&s)))
233224
}
225+
_ => Err(QueryError::InvalidFunctionParameters(format!(
226+
"function contains got first argument {:?}, expected type List or Dict",
227+
args[0]
228+
))),
234229
}
235230
}
236231

@@ -249,7 +244,7 @@ mod qfunctions {
249244
for event in flooded_events.drain(..) {
250245
tagged_flooded_events.push(DataType::Event(event));
251246
}
252-
return Ok(DataType::List(tagged_flooded_events));
247+
Ok(DataType::List(tagged_flooded_events))
253248
}
254249

255250
pub fn categorize(
@@ -268,7 +263,7 @@ mod qfunctions {
268263
for event in flooded_events.drain(..) {
269264
tagged_flooded_events.push(DataType::Event(event));
270265
}
271-
return Ok(DataType::List(tagged_flooded_events));
266+
Ok(DataType::List(tagged_flooded_events))
272267
}
273268

274269
pub fn tag(
@@ -287,7 +282,7 @@ mod qfunctions {
287282
for event in flooded_events.drain(..) {
288283
tagged_flooded_events.push(DataType::Event(event));
289284
}
290-
return Ok(DataType::List(tagged_flooded_events));
285+
Ok(DataType::List(tagged_flooded_events))
291286
}
292287

293288
pub fn sort_by_duration(
@@ -306,7 +301,7 @@ mod qfunctions {
306301
for event in sorted_events.drain(..) {
307302
tagged_sorted_events.push(DataType::Event(event));
308303
}
309-
return Ok(DataType::List(tagged_sorted_events));
304+
Ok(DataType::List(tagged_sorted_events))
310305
}
311306

312307
pub fn limit_events(
@@ -326,7 +321,7 @@ mod qfunctions {
326321
for event in events.drain(0..limit) {
327322
limited_tagged_events.push(DataType::Event(event));
328323
}
329-
return Ok(DataType::List(limited_tagged_events));
324+
Ok(DataType::List(limited_tagged_events))
330325
}
331326

332327
pub fn sort_by_timestamp(
@@ -345,7 +340,7 @@ mod qfunctions {
345340
for event in sorted_events.drain(..) {
346341
tagged_sorted_events.push(DataType::Event(event));
347342
}
348-
return Ok(DataType::List(tagged_sorted_events));
343+
Ok(DataType::List(tagged_sorted_events))
349344
}
350345

351346
pub fn sum_durations(
@@ -362,9 +357,9 @@ mod qfunctions {
362357
for event in events.drain(..) {
363358
sum_durations = sum_durations + event.duration;
364359
}
365-
return Ok(DataType::Number(
360+
Ok(DataType::Number(
366361
(sum_durations.num_milliseconds() as f64) / 1000.0,
367-
));
362+
))
368363
}
369364

370365
pub fn merge_events_by_keys(
@@ -382,7 +377,7 @@ mod qfunctions {
382377
for event in merged_events.drain(..) {
383378
merged_tagged_events.push(DataType::Event(event));
384379
}
385-
return Ok(DataType::List(merged_tagged_events));
380+
Ok(DataType::List(merged_tagged_events))
386381
}
387382

388383
pub fn chunk_events_by_key(
@@ -400,7 +395,7 @@ mod qfunctions {
400395
for event in merged_events.drain(..) {
401396
merged_tagged_events.push(DataType::Event(event));
402397
}
403-
return Ok(DataType::List(merged_tagged_events));
398+
Ok(DataType::List(merged_tagged_events))
404399
}
405400

406401
pub fn filter_keyvals(
@@ -419,7 +414,7 @@ mod qfunctions {
419414
for event in filtered_events.drain(..) {
420415
filtered_tagged_events.push(DataType::Event(event));
421416
}
422-
return Ok(DataType::List(filtered_tagged_events));
417+
Ok(DataType::List(filtered_tagged_events))
423418
}
424419

425420
pub fn filter_period_intersect(
@@ -437,7 +432,7 @@ mod qfunctions {
437432
for event in filtered_events.drain(..) {
438433
filtered_tagged_events.push(DataType::Event(event));
439434
}
440-
return Ok(DataType::List(filtered_tagged_events));
435+
Ok(DataType::List(filtered_tagged_events))
441436
}
442437

443438
pub fn split_url_events(
@@ -454,7 +449,7 @@ mod qfunctions {
454449
aw_transform::split_url_event(&mut event);
455450
tagged_split_url_events.push(DataType::Event(event));
456451
}
457-
return Ok(DataType::List(tagged_split_url_events));
452+
Ok(DataType::List(tagged_split_url_events))
458453
}
459454

460455
pub fn concat(
@@ -469,7 +464,7 @@ mod qfunctions {
469464
event_list.push(DataType::Event(event));
470465
}
471466
}
472-
return Ok(DataType::List(event_list));
467+
Ok(DataType::List(event_list))
473468
}
474469
}
475470

@@ -478,15 +473,15 @@ mod validate {
478473
use aw_models::TimeInterval;
479474
use std::collections::HashMap;
480475

481-
pub fn args_length(args: &Vec<DataType>, len: usize) -> Result<(), QueryError> {
476+
pub fn args_length(args: &[DataType], len: usize) -> Result<(), QueryError> {
482477
if args.len() != len {
483478
return Err(QueryError::InvalidFunctionParameters(format!(
484479
"Expected {} parameters in function, got {}",
485480
len,
486481
args.len()
487482
)));
488483
}
489-
return Ok(());
484+
Ok(())
490485
}
491486

492487
pub fn get_timeinterval(env: &HashMap<&str, DataType>) -> Result<TimeInterval, QueryError> {

aw-query/src/interpret.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ fn init_env<'a>(ti: &TimeInterval) -> HashMap<&'a str, DataType> {
1313
let mut env = HashMap::new();
1414
env.insert("TIMEINTERVAL", DataType::String(ti.to_string()));
1515
functions::fill_env(&mut env);
16-
return env;
16+
env
1717
}
1818

1919
pub fn interpret_prog<'a>(
@@ -52,11 +52,10 @@ fn interpret_expr<'a>(
5252
))
5353
}
5454
},
55-
DataType::List(l1) => match b_res {
56-
DataType::List(l2) => {
57-
let mut new_list = l1.clone();
58-
new_list.append(&mut l2.clone());
59-
DataType::List(new_list)
55+
DataType::List(mut l1) => match b_res {
56+
DataType::List(mut l2) => {
57+
l1.append(&mut l2);
58+
DataType::List(l1)
6059
}
6160
_ => {
6261
return Err(QueryError::InvalidType(
@@ -66,7 +65,7 @@ fn interpret_expr<'a>(
6665
},
6766
DataType::String(s1) => match b_res {
6867
DataType::String(s2) => {
69-
let mut new_string = s1.clone();
68+
let mut new_string = s1;
7069
new_string.push_str(&s2);
7170
DataType::String(new_string)
7271
}

aw-query/src/lexer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ lexer! {
5454
r#"False"# => (Token::Bool(false), text),
5555

5656
r#"\"([^\"]|(\\\"))*\""# => (
57-
Token::String(text.to_owned()[1..text.len()-1].replace("\\\"", "\"").to_string()),
57+
Token::String(text.to_owned()[1..text.len()-1].replace("\\\"", "\"")),
5858
text
5959
),
6060
r#"[0-9]+[\.]?[0-9]*"# => {
@@ -111,7 +111,7 @@ pub struct Span {
111111
fn span_in(s: &str, t: &str, l: usize) -> Span {
112112
let lo = s.as_ptr() as usize - t.as_ptr() as usize;
113113
Span {
114-
lo: lo,
114+
lo,
115115
hi: lo + s.len(),
116116
line: l,
117117
}

aw-query/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ mod ast;
1717
mod functions;
1818
mod interpret;
1919
mod lexer;
20+
#[allow(clippy::match_single_binding, clippy::redundant_closure_call)]
2021
mod parser;
2122

2223
pub use crate::datatype::DataType;
@@ -46,7 +47,7 @@ impl fmt::Display for QueryError {
4647
}
4748
}
4849

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

0 commit comments

Comments
 (0)