#[macro_use]
extern crate lazy_static;
mod utils;
use datafusion_expr::{expr, Expr};
use rstest::rstest;
use rstest_reuse::{self, *};
use serde_json::json;
use utils::{check_dataframe_query, dialect_names, make_connection, TOKIO_RUNTIME};
use vegafusion_common::data::table::VegaFusionTable;
use vegafusion_sql::dataframe::SqlDataFrame;
#[cfg(test)]
mod test_simple_fold {
use crate::*;
use vegafusion_common::column::flat_col;
#[apply(dialect_names)]
async fn test(dialect_name: &str) {
println!("{dialect_name}");
let (conn, evaluable) = TOKIO_RUNTIME.block_on(make_connection(dialect_name));
let table = VegaFusionTable::from_json(&json!([
{"country": "USA", "gold": 10, "silver": 20},
{"country": "Canada", "gold": 7, "silver": 26}
]))
.unwrap();
let df = SqlDataFrame::from_values(&table, conn, Default::default()).unwrap();
let df_result = df
.fold(
&[
"gold".to_string(),
"silver".to_string(),
"bogus".to_string(),
],
"value",
"key",
None,
)
.await;
let df_result = if let Ok(df) = df_result {
df.sort(
vec![
Expr::Sort(expr::Sort {
expr: Box::new(flat_col("country")),
asc: true,
nulls_first: true,
}),
Expr::Sort(expr::Sort {
expr: Box::new(flat_col("key")),
asc: true,
nulls_first: true,
}),
],
None,
)
.await
} else {
df_result
};
check_dataframe_query(df_result, "fold", "simple_fold", dialect_name, evaluable);
}
#[test]
fn test_marker() {} }
#[cfg(test)]
mod test_ordered_fold {
use crate::*;
use vegafusion_common::column::flat_col;
#[apply(dialect_names)]
async fn test(dialect_name: &str) {
println!("{dialect_name}");
let (conn, evaluable) = TOKIO_RUNTIME.block_on(make_connection(dialect_name));
let table = VegaFusionTable::from_json(&json!([
{"_order": 1, "country": "USA", "gold": 10, "silver": 20},
{"_order": 2, "country": "Canada", "gold": 7, "silver": 26}
]))
.unwrap();
let df = SqlDataFrame::from_values(&table, conn, Default::default()).unwrap();
let df_result = df
.fold(
&[
"gold".to_string(),
"silver".to_string(),
"bogus".to_string(),
],
"value",
"key",
Some("_order"),
)
.await;
let df_result = if let Ok(df) = df_result {
df.sort(
vec![Expr::Sort(expr::Sort {
expr: Box::new(flat_col("_order")),
asc: true,
nulls_first: true,
})],
None,
)
.await
} else {
df_result
};
check_dataframe_query(df_result, "fold", "ordered_fold", dialect_name, evaluable);
}
#[test]
fn test_marker() {} }