Skip to content

Commit c423321

Browse files
WIP: aw-query: Test make variables get consumed
Previously they were cloned on each reference
1 parent 132370b commit c423321

File tree

8 files changed

+39
-19
lines changed

8 files changed

+39
-19
lines changed

Makefile

+7
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,10 @@ install:
4747
# Install systemd user service
4848
mkdir -p $(DESTDIR)$(PREFIX)/lib/systemd/user
4949
install -m 644 aw-server.service $(DESTDIR)$(PREFIX)/lib/systemd/user/aw-server.service
50+
51+
coverage:
52+
export CARGO_INCREMENTAL=0
53+
export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
54+
export RUSTDOCFLAGS="-Cpanic=abort"
55+
cargo build --verbose $(cargoflag)
56+
cargo test --verbose $(cargoflag)

aw-query/benches/benchmark.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ mod query_benchmarks {
7070
}
7171
//
7272
let mut event_list = Vec::new();
73-
for i in 0..3000 {
73+
for i in 0..30000 {
7474
let e = Event {
7575
id: None,
7676
timestamp: chrono::Utc::now() + Duration::seconds(i),

aw-query/src/ast.rs

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub enum Expr_ {
2424
Equal(Box<Expr>, Box<Expr>),
2525

2626
Var(String),
27+
VarRef(String),
2728
Assign(String, Box<Expr>),
2829
Function(String, Box<Expr>),
2930
If(Vec<(Box<Expr>, Vec<Expr>)>),

aw-query/src/interpret.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,17 @@ fn interpret_expr(
182182
env.insert(var, val);
183183
Ok(DataType::None())
184184
}
185-
// FIXME: avoid clone, it's slow
186-
Var(var) => match env.get(&var) {
187-
Some(v) => Ok(v.clone()),
185+
Var(var) => match env.remove(&var) {
186+
Some(v) => Ok(v),
188187
None => Err(QueryError::VariableNotDefined(var.to_string())),
189188
},
189+
VarRef(var) => {
190+
// TODO: Remove clone
191+
match env.get(&var) {
192+
Some(v) => Ok(v.clone()),
193+
None => Err(QueryError::VariableNotDefined(var.to_string())),
194+
}
195+
}
190196
Bool(lit) => Ok(DataType::Bool(lit)),
191197
Number(lit) => Ok(DataType::Number(lit)),
192198
String(litstr) => Ok(DataType::String(litstr.to_string())),

aw-query/src/lexer.rs

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub enum Token {
1313
Number(f64),
1414
String(String),
1515
Plus,
16+
Ampersand,
1617
Minus,
1718
Star,
1819
Slash,
@@ -69,6 +70,7 @@ lexer! {
6970

7071
r#"=="# => (Token::Equals, text),
7172
r#"="# => (Token::Assign, text),
73+
r#"\&"# => (Token::Ampersand, text),
7274
r#"\+"# => (Token::Plus, text),
7375
r#"-"# => (Token::Minus, text),
7476
r#"\*"# => (Token::Star, text),

aw-query/src/parser.rs

+4
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ parser! {
246246
span: span!(),
247247
node: Expr_::Var(v),
248248
},
249+
Ampersand Ident(v) => Expr {
250+
span: span!(),
251+
node: Expr_::VarRef(v),
252+
},
249253
Bool(b) => Expr {
250254
span: span!(),
251255
node: Expr_::Bool(b),

aw-query/tests/query.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ mod query_tests {
232232
let code = String::from(
233233
"
234234
a=True; n=1;
235-
if a { n=2; }
235+
if &a { n=2; }
236236
return n;",
237237
);
238238
match aw_query::query(&code, &interval, &ds).unwrap() {
@@ -269,8 +269,8 @@ mod query_tests {
269269
let code = String::from(
270270
"
271271
a=False; b=True; n=1;
272-
if a { n=2; }
273-
elif b { n=3; }
272+
if &a { n=2; }
273+
elif &b { n=3; }
274274
return n;",
275275
);
276276
match aw_query::query(&code, &interval, &ds).unwrap() {
@@ -282,8 +282,8 @@ mod query_tests {
282282
let code = String::from(
283283
"
284284
a=False; b=True; n=1;
285-
if a { n=2; }
286-
elif a { n=3; }
285+
if &a { n=2; }
286+
elif &a { n=3; }
287287
else { n=4; }
288288
return n;",
289289
);
@@ -296,7 +296,7 @@ mod query_tests {
296296
let code = String::from(
297297
"
298298
a=True; n=1;
299-
if a { if a { n = 2; } }
299+
if &a { if &a { n = 2; } }
300300
return n;",
301301
);
302302
match aw_query::query(&code, &interval, &ds).unwrap() {
@@ -359,16 +359,16 @@ mod query_tests {
359359
events = concat(events, query_bucket("{}"));
360360
events = categorize(events, [[["test"], {{ "type": "regex", "regex": "value$" }}], [["test", "testing"], {{ "type": "regex", "regex": "value$" }}]]);
361361
events = tag(events, [["testtag", {{ "type": "regex", "regex": "test$" }}], ["another testtag", {{ "type": "regex", "regex": "test-pat$" }}]]);
362-
total_duration = sum_durations(events);
362+
total_duration = sum_durations(&events);
363363
bucketnames = query_bucket_names();
364364
print("test", "test2");
365-
url_events = split_url_events (events);
366-
filtered_events = filter_period_intersect(events, events);
367-
filtered_events = filter_keyvals(events, "$category", [["Uncategorized"]]);
368-
filtered_events = filter_keyvals_regex(events, "key", "regex");
369-
chunked_events = chunk_events_by_key(events, "key");
370-
merged_events = merge_events_by_keys(events, ["key"]);
371-
return merged_events;"#,
365+
events = split_url_events (events);
366+
events = filter_period_intersect(&events, &events);
367+
events = filter_keyvals(events, "$category", [["Uncategorized"]]);
368+
events = filter_keyvals_regex(events, "key", "regex");
369+
events = chunk_events_by_key(events, "key");
370+
events = merge_events_by_keys(events, ["key"]);
371+
return events;"#,
372372
"testid", "testid"
373373
);
374374
match aw_query::query(&code, &interval, &ds).unwrap() {

aw-webui

0 commit comments

Comments
 (0)