Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions crates/cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ impl ResultHandler {
ExpressionResult::Log(query_res) => {
println!("{}", to_table(query_res)?);
}
ExpressionResult::Sum(query_res) => {
println!("{}", to_table(query_res)?);
}
}
}

Expand Down
6 changes: 6 additions & 0 deletions crates/cli/src/repl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,12 @@ impl Repl {
queue!(stdout(), MoveToNextLine(1), Print(line.cyan())).unwrap();
});
}
ExpressionResult::Sum(query_res) => {
let table = to_table(query_res)?;
table.to_string().split("\n").for_each(|line| {
queue!(stdout(), MoveToNextLine(1), Print(line.green())).unwrap();
});
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion crates/core/src/common/logs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@ impl TryFrom<Pair<'_, Rule>> for LogFilter {
match pair.as_rule() {
Rule::address_filter_type => extract_value(pair, |s| {
Ok(LogFilter::EmitterAddress(Address::parse_checksummed(
Address::to_checksum(&Address::from_str(s)?, None), None,
Address::to_checksum(&Address::from_str(s)?, None),
None,
)?))
}),
Rule::blockrange_filter => parse_block_range(pair),
Expand Down
14 changes: 14 additions & 0 deletions crates/core/src/common/query_result.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,20 @@ pub enum ExpressionResult {
Transaction(Vec<TransactionQueryRes>),
#[serde(rename = "log")]
Log(Vec<LogQueryRes>),
#[serde(rename = "sum")]
Sum(Vec<SumQueryRes>),
}

#[serde_with::skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone)]
pub struct SumQueryRes {
pub sum: Option<U256>,
}

impl Default for SumQueryRes {
fn default() -> Self {
Self { sum: None }
}
}

// TODO: should this be replaced with Alloy's Block?
Expand Down
2 changes: 2 additions & 0 deletions crates/core/src/common/serializer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ pub(crate) fn dump_results(result: &ExpressionResult, dump: &Dump) -> Result<(),
ExpressionResult::Block(blocks) => serialize_csv(blocks)?,
ExpressionResult::Transaction(txs) => serialize_csv(txs)?,
ExpressionResult::Log(logs) => serialize_csv(logs)?,
ExpressionResult::Sum(sums) => serialize_csv(sums)?,
};

std::fs::write(dump.path(), content)?;
Expand Down Expand Up @@ -59,6 +60,7 @@ fn serialize_parquet(result: &ExpressionResult) -> Result<Vec<u8>, Box<dyn Error
create_parquet_schema_and_data(transactions)?
}
ExpressionResult::Log(logs) => create_parquet_schema_and_data(logs)?,
ExpressionResult::Sum(sums) => create_parquet_schema_and_data(sums)?,
};

let batch = RecordBatch::try_new(Arc::new(schema), data)?;
Expand Down
12 changes: 12 additions & 0 deletions crates/core/src/common/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ use pest::iterators::Pairs;
#[derive(Debug, PartialEq)]
pub enum Expression {
Get(GetExpression),
Sum(SumExpression),
}

#[derive(Debug, PartialEq)]
pub struct SumExpression {
pub query: GetExpression,
}

impl SumExpression {
fn new(query: GetExpression) -> Self {
Self { query }
}
}

#[derive(Debug, PartialEq)]
Expand Down
Loading