diff --git a/incremental_transactions/tpcc/benches/byname.rs b/incremental_transactions/tpcc/benches/byname.rs index 26acc7937..7db6620c0 100644 --- a/incremental_transactions/tpcc/benches/byname.rs +++ b/incremental_transactions/tpcc/benches/byname.rs @@ -9,22 +9,53 @@ use dbsp::{ utils::{Tup10, Tup2}, }; use tpcc::{ - byname_sql::{self, Tup21}, - byname_sql_incremental, + byname_sql, byname_sql_constargs, byname_sql_constargs_inlined, byname_sql_incremental, + byname_sql_incremental_constargs, byname_sql_incremental_constargs_inlined, + byname_sql_incremental_constargs_inlined_minimized, datatypes::*, }; +#[derive(Clone, Copy, Debug)] +enum ByNameImplementation { + Plain, + PlainConstArgs, + PlainConstArgsInlined, + Incremental, + IncrementalConstArgs, + IncrementalConstArgsInlined, + IncrementalConstArgsInlinedMinimized, +} + +impl std::fmt::Display for ByNameImplementation { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ByNameImplementation::Plain => write!(f, "Plain"), + ByNameImplementation::PlainConstArgs => write!(f, "PlainConstArgs"), + ByNameImplementation::PlainConstArgsInlined => write!(f, "PlainConstArgsInlined"), + ByNameImplementation::Incremental => write!(f, "Incremental"), + ByNameImplementation::IncrementalConstArgs => write!(f, "IncrementalConstArgs"), + ByNameImplementation::IncrementalConstArgsInlined => { + write!(f, "IncrementalConstArgsInlined") + } + ByNameImplementation::IncrementalConstArgsInlinedMinimized => { + write!(f, "IncrementalConstArgsInlinedMinimized") + } + } + } +} + #[derive(Clone, Copy)] struct ExperimentInput { base_size: i32, updates_size: i32, + implementation: ByNameImplementation, } impl std::fmt::Display for ExperimentInput { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "Base Size={}, Updates Size={}", - self.base_size, self.updates_size + "{} Base Size={}, Updates Size={}", + self.implementation, self.base_size, self.updates_size ) } } @@ -33,19 +64,35 @@ fn byname(c: &mut Criterion) { let num_workers = 1; // Input the initial size of the customer relation and the number of updates let base_size = 3000; // Number of customers per district - let update_sizes = vec![1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + //let update_sizes = vec![0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + let update_sizes = vec![0, 1, 2, 4, 8, 16]; + let implementations = vec![ + ByNameImplementation::Plain, + ByNameImplementation::PlainConstArgs, + ByNameImplementation::PlainConstArgsInlined, + ByNameImplementation::Incremental, + ByNameImplementation::IncrementalConstArgs, + ByNameImplementation::IncrementalConstArgsInlined, + ]; let inputs: Vec<_> = update_sizes .into_iter() - .map(|updates_size| ExperimentInput { + //.zip(implementations.into_iter()) + .flat_map(|update_size| { + implementations + .iter() + .map(move |&implementation| (update_size, implementation)) + }) + .map(|(updates_size, implementation)| ExperimentInput { base_size, updates_size, + implementation, }) .collect(); let mut group = c.benchmark_group("Byname"); byname_plain(&mut group, inputs.clone(), num_workers); - byname_incremental(&mut group, inputs.clone(), num_workers); + //byname_incremental(&mut group, inputs.clone(), num_workers); group.finish(); } @@ -54,204 +101,11 @@ fn byname_plain( group: &mut BenchmarkGroup, inputs: Vec, num_workers: usize, -) { - for input in inputs { - group.throughput(criterion::Throughput::Elements(input.updates_size as u64)); - group.bench_with_input(BenchmarkId::new("Plain", input), &input, |b, input| { - /* - c_id INT, - c_d_id INT, - c_w_id INT, - c_first VARCHAR(16), - c_middle CHAR(2), - c_last VARCHAR(16), - */ - let c_d_id = 1; - let c_w_id = 1; - //let c_first = "first_name".to_string(); - let c_middle = "".to_string(); - let c_last = "last_name".to_string(); - let weight = 1; - - let base_vals: Vec< - Tup2, _>, - > = (0..input.base_size) - .into_iter() - .map(|i| { - ( - ( - Some(i), // c_id - Some(c_d_id), - Some(c_w_id), - Some(i.to_string()), // first name - Some(c_middle.clone()), - Some(c_last.clone()), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - weight, - ) - .into() - }) - .collect(); - - let update_vals: Vec< - Tup2, _>, - > = (0..input.updates_size) - .into_iter() - .map(|i| { - ( - ( - Some(i), // c_id - Some(c_d_id), - Some(c_w_id), - Some((input.base_size + i).to_string()), // first name - Some(c_middle.clone()), - Some(c_last.clone()), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - weight, - ) - .into() - }) - .collect(); - - let txn_id = 1; - let transaction_paramters: Tup10<_, _, _, _, _, _, _, _, _, _> = ( - Some(txn_id), - None, - None, - None, - Some(c_w_id), - Some(c_d_id), - Some(c_last), - None, - None, - None, - ) - .into(); - - // Create references to be passed into the benchmark - let base_vals = RefCell::new(base_vals); - let base_vals_mut_ref = base_vals.borrow_mut(); - let update_vals = RefCell::new(update_vals); - let update_vals_mut_ref = update_vals.borrow_mut(); - let transaction_paramters = RefCell::new(transaction_paramters); - let transaction_paramters_ref = transaction_paramters.borrow(); - - b.iter_batched( - || { - // Initialize a new circuit - let cconf = CircuitConfig::with_workers(num_workers); - let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); - let ( - _in_warehouse_static, - _in_warehouse, - _in_district_static, - _in_district_next_id, - _in_district_ytd, - in_customer, - in_transaction_parameters, - _out_cust_agg, - out_cust_med, - ) = handles; - - // Return the relevant handles and references to the data - ( - circuit, - in_customer, - in_transaction_parameters, - out_cust_med, - base_vals_mut_ref.clone(), - update_vals_mut_ref.clone(), - transaction_paramters_ref.clone(), - ) - }, - |( - mut circuit, - in_customer, - in_transaction_parameters, - out_cust_max_order_by, - mut base_vals, - mut update_vals, - transaction_paramters, - )| { - // Do the initial load - // Send the base data - in_customer.append(base_vals.as_mut()); - - // Send the transaction parameters - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Execute the circuit on these inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); - - // Repeat the initial input for the for the non-incremental circuit - in_customer.append(base_vals.as_mut()); - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Send the updates - in_customer.append(update_vals.as_mut()); - - // Execute the circuit on the updated inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); - }, - BatchSize::SmallInput, - ); - }); - } -} - -fn byname_incremental( - group: &mut BenchmarkGroup, - inputs: Vec, - num_workers: usize, ) { for input in inputs { group.throughput(criterion::Throughput::Elements(input.updates_size as u64)); group.bench_with_input( - BenchmarkId::new("Incremental", input), + BenchmarkId::new(format!("{}", input.implementation), input), &input, |b, input| { /* @@ -262,40 +116,15 @@ fn byname_incremental( c_middle CHAR(2), c_last VARCHAR(16), */ - let c_d_id = 1; - let c_w_id = 1; + let c_d_id = 43; + let c_w_id = 44; //let c_first = "first_name".to_string(); let c_middle = "".to_string(); - let c_last = "last_name".to_string(); + let c_last = "lastname".to_string(); let weight = 1; let base_vals: Vec< - Tup2< - byname_sql_incremental::Tup21< - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - >, - _, - >, + Tup2, _>, > = (0..input.base_size) .into_iter() .map(|i| { @@ -331,32 +160,7 @@ fn byname_incremental( .collect(); let update_vals: Vec< - Tup2< - byname_sql_incremental::Tup21< - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - _, - >, - _, - >, + Tup2, _>, > = (0..input.updates_size) .into_iter() .map(|i| { @@ -365,7 +169,7 @@ fn byname_incremental( Some(i), // c_id Some(c_d_id), Some(c_w_id), - Some((input.base_size + i).to_string()), + Some((input.base_size + i).to_string()), // first name Some(c_middle.clone()), Some(c_last.clone()), None, @@ -418,26 +222,161 @@ fn byname_incremental( || { // Initialize a new circuit let cconf = CircuitConfig::with_workers(num_workers); - //let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); - let (circuit, handles) = byname_sql_incremental::circuit(cconf).unwrap(); - let ( - _in_warehouse_static, - _in_warehouse, - _in_district_static, - _in_district_next_id, - _in_district_ytd, - in_customer, - in_transaction_parameters, - _out_cust_agg, - out_cust_max_order_by, - ) = handles; + + // Choose the implementation + let (circuit, (in_customer, in_transaction_parameters, out_cust_med)) = + match input.implementation { + ByNameImplementation::Plain => { + let (circuit, handles) = byname_sql::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::PlainConstArgs => { + let (circuit, handles) = + byname_sql_constargs::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::PlainConstArgsInlined => { + let (circuit, handles) = + byname_sql_constargs_inlined::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::Incremental => { + let (circuit, handles) = + byname_sql_incremental::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgs => { + let (circuit, handles) = + byname_sql_incremental_constargs::circuit(cconf).unwrap(); + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + _out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgsInlined => { + let (circuit, handles) = + byname_sql_incremental_constargs_inlined::circuit(cconf) + .unwrap(); + + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + ByNameImplementation::IncrementalConstArgsInlinedMinimized => { + let (circuit, handles) = + byname_sql_incremental_constargs_inlined_minimized::circuit(cconf) + .unwrap(); + + let ( + _in_warehouse_static, + _in_warehouse, + _in_district_static, + _in_district_next_id, + _in_district_ytd, + in_customer, + in_transaction_parameters, + //_out_cust_agg, + out_cust_med, + ) = handles; + + ( + circuit, + (in_customer, in_transaction_parameters, out_cust_med), + ) + } + }; // Return the relevant handles and references to the data ( circuit, in_customer, in_transaction_parameters, - out_cust_max_order_by, + out_cust_med, base_vals_mut_ref.clone(), update_vals_mut_ref.clone(), transaction_paramters_ref.clone(), @@ -452,11 +391,20 @@ fn byname_incremental( mut update_vals, transaction_paramters, )| { + // Do the initial load // Send the base data in_customer.append(base_vals.as_mut()); - // Send the transaction parameters - in_transaction_parameters.push(transaction_paramters.clone(), 1); + // Send the transaction parameters as needed + match input.implementation { + ByNameImplementation::Incremental | ByNameImplementation::Plain => { + in_transaction_parameters.push(transaction_paramters.clone(), 1); + } + ByNameImplementation::PlainConstArgs + | ByNameImplementation::PlainConstArgsInlined + | ByNameImplementation::IncrementalConstArgs + | ByNameImplementation::IncrementalConstArgsInlined => {} + } // Execute the circuit on these inputs circuit.step().unwrap(); @@ -467,21 +415,29 @@ fn byname_incremental( let result: Vec<_> = out.iter().collect(); black_box(result); - // Repeat the initial input for the for the non-incremental circuit - in_customer.append(base_vals.as_mut()); - in_transaction_parameters.push(transaction_paramters.clone(), 1); - - // Send the updates - in_customer.append(update_vals.as_mut()); - - // Execute the circuit on the updated inputs - circuit.step().unwrap(); - - // Get output - let out = out_cust_max_order_by.consolidate(); - - let result: Vec<_> = out.iter().collect(); - black_box(result); + if update_vals.len() > 0 { + // Repeat the initial input for the for the non-incremental circuit + match input.implementation { + ByNameImplementation::Plain => { + in_customer.append(base_vals.as_mut()); + in_transaction_parameters + .push(transaction_paramters.clone(), 1); + } + _ => {} + } + + // Send the updates + in_customer.append(update_vals.as_mut()); + + // Execute the circuit on the updated inputs + circuit.step().unwrap(); + + // Get output + let out = out_cust_max_order_by.consolidate(); + + let result: Vec<_> = out.iter().collect(); + black_box(result); + } }, BatchSize::SmallInput, ); @@ -494,7 +450,6 @@ fn byname_incremental( criterion_group! { name = benches; config = Criterion::default().measurement_time(std::time::Duration::from_secs(30)); - //targets = byname_plain, byname_incremental targets = byname } criterion_main!(benches); diff --git a/incremental_transactions/tpcc/benches/byname_max.rs b/incremental_transactions/tpcc/benches/byname_max.rs index da2d361b6..c610ea5ed 100644 --- a/incremental_transactions/tpcc/benches/byname_max.rs +++ b/incremental_transactions/tpcc/benches/byname_max.rs @@ -33,7 +33,7 @@ fn byname(c: &mut Criterion) { let num_workers = 1; // Input the initial size of the customer relation and the number of updates let base_size = 3000; // Number of customers per district - let update_sizes = vec![1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; + let update_sizes = vec![0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512]; let inputs: Vec<_> = update_sizes .into_iter() .map(|updates_size| ExperimentInput { diff --git a/incremental_transactions/tpcc/generate_dbsp.sh b/incremental_transactions/tpcc/generate_dbsp.sh index f62538393..921148126 100755 --- a/incremental_transactions/tpcc/generate_dbsp.sh +++ b/incremental_transactions/tpcc/generate_dbsp.sh @@ -40,6 +40,11 @@ compile() { # Concatenate the schema and payment files on the fly and hand to the compiler args="--alltables --handles ${DO_INCREMENTAL}" ${SQL_COMPILER} <(cat "${SCHEMA}" "${VIEWS_FILE}") ${args} -o ${OUTPUT} + # Check if the compiler failed and exit + if [ $? -ne 0 ]; then + echo "Compilation failed" + exit 1 + fi # Remove the allocator code from the output remove_allocator "${OUTPUT}" @@ -64,9 +69,14 @@ compile() { # compile "${THIS_ABS_DIR}/sql/payment.sql" "${THIS_ABS_DIR}/src/payment_sql.rs" 0 1 # compile "${THIS_ABS_DIR}/sql/payment.sql" "${THIS_ABS_DIR}/src/payment_sql_incremental.rs" 1 1 -compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql.rs" 0 1 -compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental.rs" 1 1 -compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql.rs" 0 1 -compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql_incremental.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs.sql" "${THIS_ABS_DIR}/src/byname_sql_constargs.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined.sql" "${THIS_ABS_DIR}/src/byname_sql_constargs_inlined.rs" 0 1 +compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined_minimized.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs_inlined_minimized.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_constargs_inlined.sql" "${THIS_ABS_DIR}/src/byname_sql_incremental_constargs_inlined.rs" 1 1 +#compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql.rs" 0 1 +#compile "${THIS_ABS_DIR}/sql/byname_max.sql" "${THIS_ABS_DIR}/src/byname_max_sql_incremental.rs" 1 1 #compile "${THIS_ABS_DIR}/sql/warehouse_ytd.sql" "${THIS_ABS_DIR}/src/warehouse_ytd_sql.rs" 0 1 #compile "${THIS_ABS_DIR}/sql/warehouse_ytd.sql" "${THIS_ABS_DIR}/src/warehouse_ytd_sql_incremental.rs" 1 1 diff --git a/incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png new file mode 100644 index 000000000..337a3dea7 Binary files /dev/null and b/incremental_transactions/tpcc/graphs/byname_sql_constargs.rs.png differ diff --git a/incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png new file mode 100644 index 000000000..0e676127b Binary files /dev/null and b/incremental_transactions/tpcc/graphs/byname_sql_constargs_inlined.rs.png differ diff --git a/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs.rs.png new file mode 100644 index 000000000..5641b463b Binary files /dev/null and b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs.rs.png differ diff --git a/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined.rs.png new file mode 100644 index 000000000..fd7aa39e3 Binary files /dev/null and b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined.rs.png differ diff --git a/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png new file mode 100644 index 000000000..649577d50 Binary files /dev/null and b/incremental_transactions/tpcc/graphs/byname_sql_incremental_constargs_inlined_minimized.rs.png differ diff --git a/incremental_transactions/tpcc/handles/byname_sql_constargs.rs.handles.txt b/incremental_transactions/tpcc/handles/byname_sql_constargs.rs.handles.txt new file mode 100644 index 000000000..dd896a8b7 --- /dev/null +++ b/incremental_transactions/tpcc/handles/byname_sql_constargs.rs.handles.txt @@ -0,0 +1 @@ +(in_warehouse_static, in_warehouse, in_district_static, in_district_next_id, in_district_ytd, in_customer, in_transaction_parameters, out_cust_agg, out_cust_byname) diff --git a/incremental_transactions/tpcc/handles/byname_sql_constargs_inlined.rs.handles.txt b/incremental_transactions/tpcc/handles/byname_sql_constargs_inlined.rs.handles.txt new file mode 100644 index 000000000..be9fbc6a5 --- /dev/null +++ b/incremental_transactions/tpcc/handles/byname_sql_constargs_inlined.rs.handles.txt @@ -0,0 +1 @@ +(in_warehouse_static, in_warehouse, in_district_static, in_district_next_id, in_district_ytd, in_customer, in_transaction_parameters, out_cust_byname_inlined) diff --git a/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs.rs.handles.txt b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs.rs.handles.txt new file mode 100644 index 000000000..dd896a8b7 --- /dev/null +++ b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs.rs.handles.txt @@ -0,0 +1 @@ +(in_warehouse_static, in_warehouse, in_district_static, in_district_next_id, in_district_ytd, in_customer, in_transaction_parameters, out_cust_agg, out_cust_byname) diff --git a/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined.rs.handles.txt b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined.rs.handles.txt new file mode 100644 index 000000000..be9fbc6a5 --- /dev/null +++ b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined.rs.handles.txt @@ -0,0 +1 @@ +(in_warehouse_static, in_warehouse, in_district_static, in_district_next_id, in_district_ytd, in_customer, in_transaction_parameters, out_cust_byname_inlined) diff --git a/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined_minimized.rs.handles.txt b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined_minimized.rs.handles.txt new file mode 100644 index 000000000..e54e9da0c --- /dev/null +++ b/incremental_transactions/tpcc/handles/byname_sql_incremental_constargs_inlined_minimized.rs.handles.txt @@ -0,0 +1 @@ +(in_warehouse_static, in_warehouse, in_district_static, in_district_next_id, in_district_ytd, in_customer, in_transaction_parameters, out_cust_byname_inlined_minimized, out_cust_byname_inlined) diff --git a/incremental_transactions/tpcc/sql/byname_constargs.sql b/incremental_transactions/tpcc/sql/byname_constargs.sql new file mode 100644 index 000000000..ad224b031 --- /dev/null +++ b/incremental_transactions/tpcc/sql/byname_constargs.sql @@ -0,0 +1,17 @@ +CREATE VIEW cust_agg AS +SELECT ARRAY_AGG((c_id + c_w_id + c_d_id) ORDER BY c_first) AS cust_array +FROM (SELECT c.c_id, c.c_w_id, c.c_d_id, c.c_first + FROM customer AS c + WHERE c.c_last = 'lastname' + AND c.c_d_id = 43 + AND c.c_w_id = 44 + ORDER BY c_first); + +CREATE VIEW cust_byname AS +SELECT c.c_first, c.c_middle, c.c_id, + c.c_street_1, c.c_street_2, c.c_city, c.c_state, c.c_zip, + c.c_phone, c.c_credit, c.c_credit_lim, + c.c_discount, c.c_balance, c.c_since +FROM customer as c, + cust_agg as a +WHERE (c.c_id + c.c_w_id + c.c_d_id) = a.cust_array[(ARRAY_LENGTH(a.cust_array) / 2) + 1]; \ No newline at end of file diff --git a/incremental_transactions/tpcc/sql/byname_constargs_inlined.sql b/incremental_transactions/tpcc/sql/byname_constargs_inlined.sql new file mode 100644 index 000000000..67965277a --- /dev/null +++ b/incremental_transactions/tpcc/sql/byname_constargs_inlined.sql @@ -0,0 +1,14 @@ +CREATE VIEW cust_byname_inlined AS +SELECT c.c_first, c.c_middle, c.c_id, + c.c_street_1, c.c_street_2, c.c_city, c.c_state, c.c_zip, + c.c_phone, c.c_credit, c.c_credit_lim, + c.c_discount, c.c_balance, c.c_since +FROM customer as c, + (SELECT ARRAY_AGG((c_id + c_w_id + c_d_id) ORDER BY c_first) AS cust_array +FROM (SELECT c.c_id, c.c_w_id, c.c_d_id, c.c_first + FROM customer AS c + WHERE c.c_last = 'lastname' + AND c.c_d_id = 43 + AND c.c_w_id = 44 + ORDER BY c_first)) as a +WHERE (c.c_id + c.c_w_id + c.c_d_id) = a.cust_array[(ARRAY_LENGTH(a.cust_array) / 2) + 1]; \ No newline at end of file diff --git a/incremental_transactions/tpcc/sql/byname_constargs_inlined_minimized.sql b/incremental_transactions/tpcc/sql/byname_constargs_inlined_minimized.sql new file mode 100644 index 000000000..3bb78abaf --- /dev/null +++ b/incremental_transactions/tpcc/sql/byname_constargs_inlined_minimized.sql @@ -0,0 +1,25 @@ +CREATE VIEW cust_byname_inlined_minimized AS +SELECT a.cust_array[(ARRAY_LENGTH(a.cust_array) / 2) + 1] FROM +(SELECT ARRAY_AGG((c_first) ORDER BY c_first) AS cust_array +FROM (SELECT c.c_id, c.c_w_id, c.c_d_id, c.c_first + FROM customer AS c + WHERE c.c_last = 'lastname' + AND c.c_d_id = 43 + AND c.c_w_id = 44 + ORDER BY c_first)) as a + +--CREATE VIEW cust_byname_inlined AS +/* SELECT c.c_first, c.c_middle, c.c_id, + c.c_street_1, c.c_street_2, c.c_city, c.c_state, c.c_zip, + c.c_phone, c.c_credit, c.c_credit_lim, + c.c_discount, c.c_balance, c.c_since +FROM customer as c, + (SELECT ARRAY_AGG((c_id + c_w_id + c_d_id) ORDER BY c_first) AS cust_array +FROM (SELECT c.c_id, c.c_w_id, c.c_d_id, c.c_first + FROM customer AS c + WHERE c.c_last = 'lastname' + AND c.c_d_id = 43 + AND c.c_w_id = 44 + ORDER BY c_first)) as a +WHERE (c.c_id + c.c_w_id + c.c_d_id) = a.cust_array[(ARRAY_LENGTH(a.cust_array) / 2) + 1]; + */ \ No newline at end of file diff --git a/incremental_transactions/tpcc/sql/stock_level.sql b/incremental_transactions/tpcc/sql/stock_level.sql new file mode 100644 index 000000000..d6e330546 --- /dev/null +++ b/incremental_transactions/tpcc/sql/stock_level.sql @@ -0,0 +1,24 @@ +/* +EXEC SQL SELECT d_next_o_id INTO :o_id +FROM district +WHERE d_w_id=:w_id AND d_id=:d_id; +EXEC SQL SELECT COUNT(DISTINCT (s_i_id)) INTO :stock_count +FROM order_line, stock +WHERE ol_w_id=:w_id AND +ol_d_id=:d_id AND ol_o_id<:o_id AND +ol_o_id>=:o_id-20 AND s_w_id=:w_id AND +s_i_id=ol_i_id AND s_quantity < :threshold; +*/ + + +SELECT d_next_o_id AS o_id_max, d_next_o_id-20 AS o_id_min +FROM district +WHERE d_w_id=:w_id AND d_id=:d_id; + +CREATE VIEW stock_level_district AS +SELECT COUNT(DISTINCT (s_i_id)) AS stock_count +FROM order_line, stock +WHERE ol_w_id=44 AND -- set warehouse here +ol_d_id=43 AND ol_o_id=o_id_min AND s_w_id=44 AND -- set warehouse here +s_i_id=ol_i_id AND s_quantity < 100; -- set threshold here \ No newline at end of file diff --git a/incremental_transactions/tpcc/src/byname_sql.rs b/incremental_transactions/tpcc/src/byname_sql.rs index f300da257..275b8f042 100644 --- a/incremental_transactions/tpcc/src/byname_sql.rs +++ b/incremental_transactions/tpcc/src/byname_sql.rs @@ -6,91 +6,66 @@ #![allow(unused_variables)] #![allow(unused_mut)] #![allow(unconditional_panic)] - #![allow(non_camel_case_types)] -#[cfg(test)] -use hashing::*; +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; use dbsp::{ - algebra::{ZSet, MulByRef, F32, F64, Semigroup, SemigroupValue, ZRingValue, - UnimplementedSemigroup, DefaultSemigroup, HasZero, AddByRef, NegByRef, - AddAssignByRef, + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, }, circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, operator::{ - Generator, - FilterMap, - Fold, - time_series::{RelRange, RelOffset, OrdPartitionedIndexedZSet}, - MaxSemigroup, - MinSemigroup, - CmpFunc, + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, }, - OrdIndexedZSet, OrdZSet, - TypedBox, utils::*, - zset, - indexed_zset, - DBWeight, - DBData, - DBSPHandle, - Error, - Runtime, - NumEntries, - MapHandle, ZSetHandle, OutputHandle, - dynamic::{DynData,DynDataTyped}, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, }; use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; use size_of::*; -use ::serde::{Deserialize,Serialize}; -use compare::{Compare, Extract}; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; use std::{ collections::BTreeMap, convert::identity, - ops::Neg, fmt::{Debug, Formatter, Result as FmtResult}, - path::Path, marker::PhantomData, + ops::Neg, + path::Path, }; -use core::cmp::Ordering; -use rust_decimal::Decimal; -use dbsp::declare_tuples; -use json::*; -use sqllib::{ - *, - array::*, - casts::*, - binary::*, - geopoint::*, - timestamp::*, - interval::*, - string::*, - operators::*, - aggregates::*, -}; -use sqlvalue::*; -#[cfg(test)] -use readers::*; -#[cfg(test)] -use sqlx::{AnyConnection, any::AnyRow, Row}; - - #[derive(Clone)] pub struct Semigroup1(PhantomData<(T0, TS0)>); -impl Semigroup> for Semigroup1 +impl Semigroup> for Semigroup1 where - TS0: Semigroup + TS0: Semigroup, { - fn combine(left: &Tup1, right:&Tup1) -> Tup1 { - Tup1::new( - TS0::combine(&left.0, &right.0), - ) + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) } } -declare_tuples! { +/* declare_tuples! { Tup21, Tup22, Tup14, @@ -104,16 +79,120 @@ sqlvalue::to_sql_row_impl! { Tup21, Tup22, Tup14, -} - - -pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, OutputHandle>>>>, OutputHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>>, )), Error> { +} */ +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) // DBSPSourceMultisetOperator 49 // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) - let (stream49, handle49) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) // DBSPSourceMultisetOperator 67 @@ -123,98 +202,454 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 143 // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream143, handle143) = circuit.add_input_zset::, Option, Option>>(); + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 166 // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream166, handle166) = circuit.add_input_zset::, Option, Option>>(); + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) // DBSPSourceMultisetOperator 279 // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) - let (stream279, handle279) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) // DBSPSourceMultisetOperator 337 // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) - let (stream337, handle337) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 405 - let stream405: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.filter(move |t_1: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), (*t_1).5.is_none())) - }); + let stream405: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), + (*t_1).5.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 430 - let stream430: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.filter(move |t_2: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), (*t_2).6.is_none())) - }); + let stream430: Stream< + _, + WSet< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.filter( + move |t_2: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), + (*t_2).6.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 672 - let stream672: Stream<_, IndexedWSet, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream405.map_index(move |t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_3).5.clone(), 16, false), cast_to_i32_i32N((*t_3).1), cast_to_i32_i32N((*t_3).2)), Tup21::new((*t_3).0, (*t_3).1, (*t_3).2, (*t_3).3.clone(), (*t_3).4.clone(), (*t_3).5.clone(), (*t_3).6.clone(), (*t_3).7.clone(), (*t_3).8.clone(), (*t_3).9.clone(), (*t_3).10.clone(), (*t_3).11.clone(), (*t_3).12, (*t_3).13.clone(), (*t_3).14.clone(), (*t_3).15.clone(), (*t_3).16.clone(), (*t_3).17.clone(), (*t_3).18, (*t_3).19, (*t_3).20.clone()), ) - }); + let stream672: Stream< + _, + IndexedWSet< + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream405.map_index( + move |t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_3).5.clone(), 16, false), + cast_to_i32_i32N((*t_3).1), + cast_to_i32_i32N((*t_3).2), + ), + Tup21::new( + (*t_3).0, + (*t_3).1, + (*t_3).2, + (*t_3).3.clone(), + (*t_3).4.clone(), + (*t_3).5.clone(), + (*t_3).6.clone(), + (*t_3).7.clone(), + (*t_3).8.clone(), + (*t_3).9.clone(), + (*t_3).10.clone(), + (*t_3).11.clone(), + (*t_3).12, + (*t_3).13.clone(), + (*t_3).14.clone(), + (*t_3).15.clone(), + (*t_3).16.clone(), + (*t_3).17.clone(), + (*t_3).18, + (*t_3).19, + (*t_3).20.clone(), + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 717 - let stream717: Stream<_, IndexedWSet, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream430.map_index(move |t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_4).6.clone(), 16, false), cast_to_i32_i32N((*t_4).5), cast_to_i32_i32N((*t_4).4)), Tup10::new((*t_4).0, (*t_4).1, (*t_4).2, (*t_4).3, (*t_4).4, (*t_4).5, (*t_4).6.clone(), (*t_4).7.clone(), (*t_4).8, (*t_4).9), ) - }); + let stream717: Stream< + _, + IndexedWSet< + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream430.map_index( + move |t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_4).6.clone(), 16, false), + cast_to_i32_i32N((*t_4).5), + cast_to_i32_i32N((*t_4).4), + ), + Tup10::new( + (*t_4).0, + (*t_4).1, + (*t_4).2, + (*t_4).3, + (*t_4).4, + (*t_4).5, + (*t_4).6.clone(), + (*t_4).7.clone(), + (*t_4).8, + (*t_4).9, + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPStreamJoinOperator 3078(801) - let stream3078: Stream<_, WSet, Option>>> = stream672.stream_join(&stream717, move |t_5: &Tup3, t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup2, Option> { - Tup2::new(plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), (*t_3).3.clone().clone()) - }); + let stream3078: Stream<_, WSet, Option>>> = stream672.stream_join( + &stream717, + move |t_5: &Tup3, + t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), + (*t_3).3.clone().clone(), + ) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapIndexOperator 3080(862) - let stream3080: Stream<_, IndexedWSet, Option>>> = stream3078.map_index(move |t_8: &Tup2, Option>, | -> + let stream3080: Stream<_, IndexedWSet, Option>>> = stream3078.map_index(move |t_8: &Tup2, Option>, | -> (Tup0, Tup2, Option>, ) { (Tup0::new(), Tup2::new((*t_8).0, (*t_8).1.clone()), ) }); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPStreamAggregateOperator 14148(867) - let stream14148: Stream<_, IndexedWSet>>>> = stream3080.stream_aggregate(Fold::<_, _, Semigroup1>, ConcatSemigroup>>>, _, _>::with_output(Tup1::new(vec!( - )), move |t_32: &mut Tup1>>, t_9: &Tup2, Option>, t_34: Weight, | { - (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) - }, move |t_33: Tup1>>, | -> - Tup1>> { - Tup1::new(t_33.0) - })); + let stream14148: Stream<_, IndexedWSet>>>> = + stream3080.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_32: &mut Tup1>>, + t_9: &Tup2, Option>, + t_34: Weight| { + (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) + }, + move |t_33: Tup1>>| -> Tup1>> { Tup1::new(t_33.0) }, + )); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 14150(884) - let stream14150: Stream<_, WSet>>>> = stream14148.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new((*t_11.1).0.clone()) - }); + let stream14150: Stream<_, WSet>>>> = stream14148.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_11.1).0.clone()) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 14155(897) - let stream14155: Stream<_, WSet>>>> = stream14148.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new(vec!( - )) - }); + let stream14155: Stream<_, WSet>>>> = stream14148.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPNegateOperator 14160(900) let stream14160: Stream<_, WSet>>>> = stream14155.neg(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) - let stream906 = circuit.add_source(Generator::new(|| if Runtime::worker_index() == 0 {zset!( - Tup1::new(vec!( - )) => 1, - )} else {zset!( - )})); + let stream906 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPSumOperator 14162(910) - let stream14162: Stream<_, WSet>>>> = stream906.sum([&stream14160, &stream14150]); + let stream14162: Stream<_, WSet>>>> = + stream906.sum([&stream14160, &stream14150]); // CREATE VIEW `CUST_AGG` AS // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` @@ -227,46 +662,566 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.map_index(move |t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup21::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone()), ) - }); + let stream1201: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + ), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPMapIndexOperator 14166(1218) - let stream14166: Stream<_, IndexedWSet>>>> = stream14162.map_index(move |t_14: &Tup1>>, | -> - (Tup0, Tup1>>, ) { - (Tup0::new(), Tup1::new((*t_14).0.clone()), ) - }); + let stream14166: Stream<_, IndexedWSet>>>> = stream14162 + .map_index( + move |t_14: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_14).0.clone())) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPStreamJoinOperator 14170(1228) - let stream14170: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream1201.stream_join(&stream14166, move |t_16: &Tup0, t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_14: &Tup1>>, | -> - Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>> { - Tup22::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone(), (*t_14).0.clone()) - }); + let stream14170: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1201.stream_join( + &stream14166, + move |t_16: &Tup0, + t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_14: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + (*t_14).0.clone(), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPFilterOperator 14175(1230) - let stream14175: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14170.filter(move |t_15: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - bool { - wrap_bool(eq_i32N_i32N(plus_i32N_i32N(plus_i32N_i32N((*t_15).0, (*t_15).2), (*t_15).1), index__N_((*t_15).21.clone(), cast_to_u_i32(plus_i32_i32(div_i32_i32(cardinality((*t_15).21.clone()), 2i32), 1i32)) - 1))) - }); + let stream14175: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14170.filter( + move |t_15: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_15).0, (*t_15).2), (*t_15).1), + index__N_( + (*t_15).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_15).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 14178(1498) - let stream14178: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14175.map_index(move |t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - (Tup0, Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, ) { - (Tup0::new(), Tup22::new((*t_18).0, (*t_18).1, (*t_18).2, (*t_18).3.clone(), (*t_18).4.clone(), (*t_18).5.clone(), (*t_18).6.clone(), (*t_18).7.clone(), (*t_18).8.clone(), (*t_18).9.clone(), (*t_18).10.clone(), (*t_18).11.clone(), (*t_18).12, (*t_18).13.clone(), (*t_18).14.clone(), (*t_18).15.clone(), (*t_18).16.clone(), (*t_18).17.clone(), (*t_18).18, (*t_18).19, (*t_18).20.clone(), (*t_18).21.clone()), ) - }); + let stream14178: Stream< + _, + IndexedWSet< + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14175.map_index( + move |t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> ( + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + ) { + ( + Tup0::new(), + Tup22::new( + (*t_18).0, + (*t_18).1, + (*t_18).2, + (*t_18).3.clone(), + (*t_18).4.clone(), + (*t_18).5.clone(), + (*t_18).6.clone(), + (*t_18).7.clone(), + (*t_18).8.clone(), + (*t_18).9.clone(), + (*t_18).10.clone(), + (*t_18).11.clone(), + (*t_18).12, + (*t_18).13.clone(), + (*t_18).14.clone(), + (*t_18).15.clone(), + (*t_18).16.clone(), + (*t_18).17.clone(), + (*t_18).18, + (*t_18).19, + (*t_18).20.clone(), + (*t_18).21.clone(), + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 1543 - let stream1543: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.map_index(move |t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup10::new((*t_19).0, (*t_19).1, (*t_19).2, (*t_19).3, (*t_19).4, (*t_19).5, (*t_19).6.clone(), (*t_19).7.clone(), (*t_19).8, (*t_19).9), ) - }); + let stream1543: Stream< + _, + IndexedWSet< + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.map_index( + move |t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup10::new( + (*t_19).0, + (*t_19).1, + (*t_19).2, + (*t_19).3, + (*t_19).4, + (*t_19).5, + (*t_19).6.clone(), + (*t_19).7.clone(), + (*t_19).8, + (*t_19).9, + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPStreamJoinOperator 14182(1668) - let stream14182: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream14178.stream_join(&stream1543, move |t_21: &Tup0, t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup14, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option> { - Tup14::new((*t_18).3.clone().clone(), (*t_18).4.clone().clone(), (*t_18).0, (*t_18).6.clone().clone(), (*t_18).7.clone().clone(), (*t_18).8.clone().clone(), (*t_18).9.clone().clone(), (*t_18).10.clone().clone(), (*t_18).11.clone().clone(), (*t_18).13.clone().clone(), (*t_18).14.clone().clone(), (*t_18).15.clone().clone(), (*t_18).16.clone().clone(), (*t_18).12) - }); + let stream14182: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream14178.stream_join( + &stream1543, + move |t_21: &Tup0, + t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_18).3.clone().clone(), + (*t_18).4.clone().clone(), + (*t_18).0, + (*t_18).6.clone().clone(), + (*t_18).7.clone().clone(), + (*t_18).8.clone().clone(), + (*t_18).9.clone().clone(), + (*t_18).10.clone().clone(), + (*t_18).11.clone().clone(), + (*t_18).13.clone().clone(), + (*t_18).14.clone().clone(), + (*t_18).15.clone().clone(), + (*t_18).16.clone().clone(), + (*t_18).12, + ) + }, + ); // CREATE VIEW `CUST_BYNAME` AS // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` // FROM `schema`.`CUSTOMER` AS `C`, @@ -276,9 +1231,17 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#60:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 416 + let stream416: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#62:LogicalProject.(input=LogicalFilter#60,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 475 + let stream475: Stream<_, WSet, Option>>> = stream416.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 536 + let stream536: Stream<_, IndexedWSet, Option>>> = stream475.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPStreamAggregateOperator 5043(541) + let stream5043: Stream<_, IndexedWSet>>>> = + stream536.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 5045(558) + let stream5045: Stream<_, WSet>>>> = stream5043.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 5050(571) + let stream5050: Stream<_, WSet>>>> = stream5043.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 5055(574) + let stream5055: Stream<_, WSet>>>> = stream5050.neg(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 5057(584) + let stream5057: Stream<_, WSet>>>> = + stream580.sum([&stream5055, &stream5045]); + // CREATE VIEW `CUST_AGG` AS + // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0` + // DBSPSinkOperator 5059(598) + let handle5059 = stream5057.output(); + + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 875 + let stream875: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 5061(892) + let stream5061: Stream<_, IndexedWSet>>>> = stream5057 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPStreamJoinOperator 5065(902) + let stream5065: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream875.stream_join( + &stream5061, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPFilterOperator 5070(904) + let stream5070: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream5065.filter( + move |t_10: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_10).0, (*t_10).2), (*t_10).1), + index__N_( + (*t_10).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_10).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); + // rel#134:LogicalProject.(input=LogicalJoin#132,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 5073(1010) + let stream5073: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream5070.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // `schema`.`CUST_AGG` AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 5076(1050) + let handle5076 = stream5073.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle5059, + handle5076, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs b/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs new file mode 100644 index 000000000..11d221381 --- /dev/null +++ b/incremental_transactions/tpcc/src/byname_sql_constargs_inlined.rs @@ -0,0 +1,815 @@ +// Automatically-generated file +#![allow(dead_code)] +#![allow(non_snake_case)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(unused_variables)] +#![allow(unused_mut)] +#![allow(unconditional_panic)] +#![allow(non_camel_case_types)] + +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; +use dbsp::{ + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, + }, + circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, + operator::{ + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, + }, + utils::*, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, +}; +use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; +use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; +use size_of::*; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; +use std::{ + collections::BTreeMap, + convert::identity, + fmt::{Debug, Formatter, Result as FmtResult}, + marker::PhantomData, + ops::Neg, + path::Path, +}; + +#[derive(Clone)] +pub struct Semigroup1(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#110:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 416 + let stream416: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#112:LogicalProject.(input=LogicalFilter#110,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 475 + let stream475: Stream<_, WSet, Option>>> = stream416.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 536 + let stream536: Stream<_, IndexedWSet, Option>>> = stream475.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPStreamAggregateOperator 4942(541) + let stream4942: Stream<_, IndexedWSet>>>> = + stream536.stream_aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4944(558) + let stream4944: Stream<_, WSet>>>> = stream4942.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4949(571) + let stream4949: Stream<_, WSet>>>> = stream4942.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4954(574) + let stream4954: Stream<_, WSet>>>> = stream4949.neg(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4956(584) + let stream4956: Stream<_, WSet>>>> = + stream580.sum([&stream4954, &stream4944]); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 861 + let stream861: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4958(878) + let stream4958: Stream<_, IndexedWSet>>>> = stream4956 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPStreamJoinOperator 4962(888) + let stream4962: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream861.stream_join( + &stream4958, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > { + Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPFilterOperator 4967(890) + let stream4967: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream4962.filter( + move |t_10: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> bool { + wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*t_10).0, (*t_10).2), (*t_10).1), + index__N_( + (*t_10).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*t_10).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) + }, + ); + // rel#118:LogicalProject.(input=LogicalJoin#116,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4970(996) + let stream4970: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4967.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME_INLINED` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // (SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0`) AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4973(1036) + let handle4973 = stream4970.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4973, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_incremental.rs b/incremental_transactions/tpcc/src/byname_sql_incremental.rs index 108da885b..c74bfdc4e 100644 --- a/incremental_transactions/tpcc/src/byname_sql_incremental.rs +++ b/incremental_transactions/tpcc/src/byname_sql_incremental.rs @@ -6,91 +6,67 @@ #![allow(unused_variables)] #![allow(unused_mut)] #![allow(unconditional_panic)] - #![allow(non_camel_case_types)] -#[cfg(test)] -use hashing::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; use dbsp::{ - algebra::{ZSet, MulByRef, F32, F64, Semigroup, SemigroupValue, ZRingValue, - UnimplementedSemigroup, DefaultSemigroup, HasZero, AddByRef, NegByRef, - AddAssignByRef, + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, }, circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, operator::{ - Generator, - FilterMap, - Fold, - time_series::{RelRange, RelOffset, OrdPartitionedIndexedZSet}, - MaxSemigroup, - MinSemigroup, - CmpFunc, + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, }, - OrdIndexedZSet, OrdZSet, - TypedBox, utils::*, - zset, - indexed_zset, - DBWeight, - DBData, - DBSPHandle, - Error, - Runtime, - NumEntries, - MapHandle, ZSetHandle, OutputHandle, - dynamic::{DynData,DynDataTyped}, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, }; use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; use size_of::*; -use ::serde::{Deserialize,Serialize}; -use compare::{Compare, Extract}; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; use std::{ collections::BTreeMap, convert::identity, - ops::Neg, fmt::{Debug, Formatter, Result as FmtResult}, - path::Path, marker::PhantomData, + ops::Neg, + path::Path, }; -use core::cmp::Ordering; -use rust_decimal::Decimal; -use dbsp::declare_tuples; -use json::*; -use sqllib::{ - *, - array::*, - casts::*, - binary::*, - geopoint::*, - timestamp::*, - interval::*, - string::*, - operators::*, - aggregates::*, -}; -use sqlvalue::*; -#[cfg(test)] -use readers::*; -#[cfg(test)] -use sqlx::{AnyConnection, any::AnyRow, Row}; - - #[derive(Clone)] pub struct Semigroup1(PhantomData<(T0, TS0)>); -impl Semigroup> for Semigroup1 +impl Semigroup> for Semigroup1 where - TS0: Semigroup + TS0: Semigroup, { - fn combine(left: &Tup1, right:&Tup1) -> Tup1 { - Tup1::new( - TS0::combine(&left.0, &right.0), - ) + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) } } -declare_tuples! { + +use crate::datatypes::*; +/* declare_tuples! { Tup21, Tup22, Tup14, @@ -104,16 +80,120 @@ sqlvalue::to_sql_row_impl! { Tup21, Tup22, Tup14, -} - - -pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option>>, OutputHandle>>>>, OutputHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>>, )), Error> { +} */ +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) // DBSPSourceMultisetOperator 49 // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) - let (stream49, handle49) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) // DBSPSourceMultisetOperator 67 @@ -123,101 +203,457 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 143 // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream143, handle143) = circuit.add_input_zset::, Option, Option>>(); + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) // DBSPSourceMultisetOperator 166 // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) - let (stream166, handle166) = circuit.add_input_zset::, Option, Option>>(); + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) // DBSPSourceMultisetOperator 279 // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) - let (stream279, handle279) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) // DBSPSourceMultisetOperator 337 // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) - let (stream337, handle337) = circuit.add_input_zset::, Option, Option, Option, Option, Option, Option, Option, Option, Option>>(); + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 1858(1771) - let stream1858: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.filter(move |t_1: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), (*t_1).5.is_none())) - }); + let stream1858: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_1).1.is_none(), (*t_1).2.is_none()), + (*t_1).5.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPFilterOperator 1863(1774) - let stream1863: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.filter(move |t_2: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - bool { - (!or_b_b(or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), (*t_2).6.is_none())) - }); + let stream1863: Stream< + _, + WSet< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.filter( + move |t_2: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + (!or_b_b( + or_b_b((*t_2).4.is_none(), (*t_2).5.is_none()), + (*t_2).6.is_none(), + )) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 1868(1777) - let stream1868: Stream<_, IndexedWSet, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream1858.map_index(move |t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_3).5.clone(), 16, false), cast_to_i32_i32N((*t_3).1), cast_to_i32_i32N((*t_3).2)), Tup21::new((*t_3).0, (*t_3).1, (*t_3).2, (*t_3).3.clone(), (*t_3).4.clone(), (*t_3).5.clone(), (*t_3).6.clone(), (*t_3).7.clone(), (*t_3).8.clone(), (*t_3).9.clone(), (*t_3).10.clone(), (*t_3).11.clone(), (*t_3).12, (*t_3).13.clone(), (*t_3).14.clone(), (*t_3).15.clone(), (*t_3).16.clone(), (*t_3).17.clone(), (*t_3).18, (*t_3).19, (*t_3).20.clone()), ) - }); + let stream1868: Stream< + _, + IndexedWSet< + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream1858.map_index( + move |t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_3).5.clone(), 16, false), + cast_to_i32_i32N((*t_3).1), + cast_to_i32_i32N((*t_3).2), + ), + Tup21::new( + (*t_3).0, + (*t_3).1, + (*t_3).2, + (*t_3).3.clone(), + (*t_3).4.clone(), + (*t_3).5.clone(), + (*t_3).6.clone(), + (*t_3).7.clone(), + (*t_3).8.clone(), + (*t_3).9.clone(), + (*t_3).10.clone(), + (*t_3).11.clone(), + (*t_3).12, + (*t_3).13.clone(), + (*t_3).14.clone(), + (*t_3).15.clone(), + (*t_3).16.clone(), + (*t_3).17.clone(), + (*t_3).18, + (*t_3).19, + (*t_3).20.clone(), + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPMapIndexOperator 1874(1781) - let stream1874: Stream<_, IndexedWSet, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream1863.map_index(move |t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup3, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup3::new(cast_to_s_sN((*t_4).6.clone(), 16, false), cast_to_i32_i32N((*t_4).5), cast_to_i32_i32N((*t_4).4)), Tup10::new((*t_4).0, (*t_4).1, (*t_4).2, (*t_4).3, (*t_4).4, (*t_4).5, (*t_4).6.clone(), (*t_4).7.clone(), (*t_4).8, (*t_4).9), ) - }); + let stream1874: Stream< + _, + IndexedWSet< + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream1863.map_index( + move |t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup3, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup3::new( + cast_to_s_sN((*t_4).6.clone(), 16, false), + cast_to_i32_i32N((*t_4).5), + cast_to_i32_i32N((*t_4).4), + ), + Tup10::new( + (*t_4).0, + (*t_4).1, + (*t_4).2, + (*t_4).3, + (*t_4).4, + (*t_4).5, + (*t_4).6.clone(), + (*t_4).7.clone(), + (*t_4).8, + (*t_4).9, + ), + ) + }, + ); // rel#83:LogicalJoin.(left=LogicalTableScan#1,right=LogicalTableScan#3,condition=AND(=($5, $27), =($1, $26), =($2, $25)),joinType=inner) // DBSPJoinOperator 3427(1787) - let stream3427: Stream<_, WSet, Option>>> = stream1868.join(&stream1874, move |t_5: &Tup3, t_3: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_4: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup2, Option> { - Tup2::new(plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), (*t_3).3.clone().clone()) - }); + let stream3427: Stream<_, WSet, Option>>> = stream1868.join( + &stream1874, + move |t_5: &Tup3, + t_3: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_4: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32N(plus_i32N_i32N((*t_3).0, (*t_3).2), (*t_3).1), + (*t_3).3.clone().clone(), + ) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapIndexOperator 3429(1790) - let stream3429: Stream<_, IndexedWSet, Option>>> = stream3427.map_index(move |t_8: &Tup2, Option>, | -> + let stream3429: Stream<_, IndexedWSet, Option>>> = stream3427.map_index(move |t_8: &Tup2, Option>, | -> (Tup0, Tup2, Option>, ) { (Tup0::new(), Tup2::new((*t_8).0, (*t_8).1.clone()), ) }); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPAggregateOperator 13452(1794) - let stream13452: Stream<_, IndexedWSet>>>> = stream3429.aggregate(Fold::<_, _, Semigroup1>, ConcatSemigroup>>>, _, _>::with_output(Tup1::new(vec!( - )), move |t_32: &mut Tup1>>, t_9: &Tup2, Option>, t_34: Weight, | { - (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) - }, move |t_33: Tup1>>, | -> - Tup1>> { - Tup1::new(t_33.0) - })); + let stream13452: Stream<_, IndexedWSet>>>> = + stream3429.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_32: &mut Tup1>>, + t_9: &Tup2, Option>, + t_34: Weight| { + (*t_32) = Tup1::new(array_agg(&mut (*t_32).0, (*t_9).0, t_34, false)) + }, + move |t_33: Tup1>>| -> Tup1>> { Tup1::new(t_33.0) }, + )); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 13454(1796) - let stream13454: Stream<_, WSet>>>> = stream13452.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new((*t_11.1).0.clone()) - }); + let stream13454: Stream<_, WSet>>>> = stream13452.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_11.1).0.clone()) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPMapOperator 13459(1801) - let stream13459: Stream<_, WSet>>>> = stream13452.map(move |t_11: (&Tup0, &Tup1>>, ), | -> - Tup1>> { - Tup1::new(vec!( - )) - }); + let stream13459: Stream<_, WSet>>>> = stream13452.map( + move |t_11: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPNegateOperator 13464(1804) let stream13464: Stream<_, WSet>>>> = stream13459.neg(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) - let stream906 = circuit.add_source(Generator::new(|| if Runtime::worker_index() == 0 {zset!( - Tup1::new(vec!( - )) => 1, - )} else {zset!( - )})); + let stream906 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPDifferentiateOperator 1915(906) let stream1915: Stream<_, WSet>>>> = stream906.differentiate(); // rel#87:LogicalAggregate.(input=LogicalProject#85,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) // DBSPSumOperator 13466(1806) - let stream13466: Stream<_, WSet>>>> = stream1915.sum([&stream13464, &stream13454]); + let stream13466: Stream<_, WSet>>>> = + stream1915.sum([&stream13464, &stream13454]); // CREATE VIEW `CUST_AGG` AS // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` @@ -230,45 +666,562 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream279.map_index(move |t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup21::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone()), ) - }); + let stream1934: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + ), + ) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPMapIndexOperator 13470(1823) - let stream13470: Stream<_, IndexedWSet>>>> = stream13466.map_index(move |t_14: &Tup1>>, | -> - (Tup0, Tup1>>, ) { - (Tup0::new(), Tup1::new((*t_14).0.clone()), ) - }); + let stream13470: Stream<_, IndexedWSet>>>> = stream13466 + .map_index( + move |t_14: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_14).0.clone())) + }, + ); // rel#186:LogicalJoin.(left=LogicalTableScan#90,right=LogicalTableScan#92,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) // DBSPJoinFilterMap 14116(1829) - let stream14116: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream1934.join_flatmap(&stream13470, move |t_16: &Tup0, t_13: &Tup21, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>, t_14: &Tup1>>, | -> - Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>> { - let tmp: Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>> = Tup22::new((*t_13).0, (*t_13).1, (*t_13).2, (*t_13).3.clone(), (*t_13).4.clone(), (*t_13).5.clone(), (*t_13).6.clone(), (*t_13).7.clone(), (*t_13).8.clone(), (*t_13).9.clone(), (*t_13).10.clone(), (*t_13).11.clone(), (*t_13).12, (*t_13).13.clone(), (*t_13).14.clone(), (*t_13).15.clone(), (*t_13).16.clone(), (*t_13).17.clone(), (*t_13).18, (*t_13).19, (*t_13).20.clone(), (*t_14).0.clone()); - (if wrap_bool(eq_i32N_i32N(plus_i32N_i32N(plus_i32N_i32N((*&tmp).0, (*&tmp).2), (*&tmp).1), index__N_((*&tmp).21.clone(), cast_to_u_i32(plus_i32_i32(div_i32_i32(cardinality((*&tmp).21.clone()), 2i32), 1i32)) - 1))) { - Some(tmp) - } else { - None::, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>> - }) - }); + let stream14116: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1934.join_flatmap( + &stream13470, + move |t_16: &Tup0, + t_13: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_14: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_13).0, + (*t_13).1, + (*t_13).2, + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).5.clone(), + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).12, + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).17.clone(), + (*t_13).18, + (*t_13).19, + (*t_13).20.clone(), + (*t_14).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N((*&tmp).0, (*&tmp).2), (*&tmp).1), + index__N_( + (*&tmp).21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality((*&tmp).21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 14194(1832) - let stream14194: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>>> = stream14116.map_index(move |t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, | -> - (Tup0, Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, ) { - (Tup0::new(), Tup22::new((*t_18).0, (*t_18).1, (*t_18).2, (*t_18).3.clone(), (*t_18).4.clone(), (*t_18).5.clone(), (*t_18).6.clone(), (*t_18).7.clone(), (*t_18).8.clone(), (*t_18).9.clone(), (*t_18).10.clone(), (*t_18).11.clone(), (*t_18).12, (*t_18).13.clone(), (*t_18).14.clone(), (*t_18).15.clone(), (*t_18).16.clone(), (*t_18).17.clone(), (*t_18).18, (*t_18).19, (*t_18).20.clone(), (*t_18).21.clone()), ) - }); + let stream14194: Stream< + _, + IndexedWSet< + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream14116.map_index( + move |t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> ( + Tup0, + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + ) { + ( + Tup0::new(), + Tup22::new( + (*t_18).0, + (*t_18).1, + (*t_18).2, + (*t_18).3.clone(), + (*t_18).4.clone(), + (*t_18).5.clone(), + (*t_18).6.clone(), + (*t_18).7.clone(), + (*t_18).8.clone(), + (*t_18).9.clone(), + (*t_18).10.clone(), + (*t_18).11.clone(), + (*t_18).12, + (*t_18).13.clone(), + (*t_18).14.clone(), + (*t_18).15.clone(), + (*t_18).16.clone(), + (*t_18).17.clone(), + (*t_18).18, + (*t_18).19, + (*t_18).20.clone(), + (*t_18).21.clone(), + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPMapIndexOperator 1961(1836) - let stream1961: Stream<_, IndexedWSet, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream337.map_index(move |t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - (Tup0, Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, ) { - (Tup0::new(), Tup10::new((*t_19).0, (*t_19).1, (*t_19).2, (*t_19).3, (*t_19).4, (*t_19).5, (*t_19).6.clone(), (*t_19).7.clone(), (*t_19).8, (*t_19).9), ) - }); + let stream1961: Stream< + _, + IndexedWSet< + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream337.map_index( + move |t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup10::new( + (*t_19).0, + (*t_19).1, + (*t_19).2, + (*t_19).3, + (*t_19).4, + (*t_19).5, + (*t_19).6.clone(), + (*t_19).7.clone(), + (*t_19).8, + (*t_19).9, + ), + ) + }, + ); // rel#189:LogicalJoin.(left=LogicalJoin#186,right=LogicalTableScan#96,condition=true,joinType=inner) // DBSPJoinOperator 14302(1842) - let stream14302: Stream<_, WSet, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option>>> = stream14194.join(&stream1961, move |t_21: &Tup0, t_18: &Tup22, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Vec>>, t_19: &Tup10, Option, Option, Option, Option, Option, Option, Option, Option, Option>, | -> - Tup14, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option, Option> { - Tup14::new((*t_18).3.clone().clone(), (*t_18).4.clone().clone(), (*t_18).0, (*t_18).6.clone().clone(), (*t_18).7.clone().clone(), (*t_18).8.clone().clone(), (*t_18).9.clone().clone(), (*t_18).10.clone().clone(), (*t_18).11.clone().clone(), (*t_18).13.clone().clone(), (*t_18).14.clone().clone(), (*t_18).15.clone().clone(), (*t_18).16.clone().clone(), (*t_18).12) - }); + let stream14302: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream14194.join( + &stream1961, + move |t_21: &Tup0, + t_18: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + t_19: &Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_18).3.clone().clone(), + (*t_18).4.clone().clone(), + (*t_18).0, + (*t_18).6.clone().clone(), + (*t_18).7.clone().clone(), + (*t_18).8.clone().clone(), + (*t_18).9.clone().clone(), + (*t_18).10.clone().clone(), + (*t_18).11.clone().clone(), + (*t_18).13.clone().clone(), + (*t_18).14.clone().clone(), + (*t_18).15.clone().clone(), + (*t_18).16.clone().clone(), + (*t_18).12, + ) + }, + ); // CREATE VIEW `CUST_BYNAME` AS // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` // FROM `schema`.`CUSTOMER` AS `C`, @@ -278,9 +1231,17 @@ pub fn circuit(cconf: CircuitConfig) -> Result<(DBSPHandle, (ZSetHandle(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle>>>>, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#60:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 1171(1107) + let stream1171: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#62:LogicalProject.(input=LogicalFilter#60,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 1176(1110) + let stream1176: Stream<_, WSet, Option>>> = stream1171.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 1181(1113) + let stream1181: Stream<_, IndexedWSet, Option>>> = stream1176.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPAggregateOperator 4700(1117) + let stream4700: Stream<_, IndexedWSet>>>> = + stream1181.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4702(1119) + let stream4702: Stream<_, WSet>>>> = stream4700.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4707(1124) + let stream4707: Stream<_, WSet>>>> = stream4700.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4712(1127) + let stream4712: Stream<_, WSet>>>> = stream4707.neg(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPDifferentiateOperator 1207(580) + let stream1207: Stream<_, WSet>>>> = stream580.differentiate(); + // rel#64:LogicalAggregate.(input=LogicalProject#62,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4714(1129) + let stream4714: Stream<_, WSet>>>> = + stream1207.sum([&stream4712, &stream4702]); + // CREATE VIEW `CUST_AGG` AS + // SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0` + // DBSPSinkOperator 4716(598) + let handle4716 = stream4714.output(); + + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 1226(1142) + let stream1226: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4718(1146) + let stream4718: Stream<_, IndexedWSet>>>> = stream4714 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#132:LogicalJoin.(left=LogicalTableScan#67,right=LogicalTableScan#69,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPJoinFlatmapOperator 4722(1152) + let stream4722: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1226.join_flatmap( + &stream4718, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N(tmp.0, tmp.2), tmp.1), + index__N_( + tmp.21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality(tmp.21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); + // rel#134:LogicalProject.(input=LogicalJoin#132,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4724(1155) + let stream4724: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4722.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // `schema`.`CUST_AGG` AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4727(1050) + let handle4727 = stream4724.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4716, + handle4727, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs b/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs new file mode 100644 index 000000000..0082d77f6 --- /dev/null +++ b/incremental_transactions/tpcc/src/byname_sql_incremental_constargs_inlined.rs @@ -0,0 +1,814 @@ +// Automatically-generated file +#![allow(dead_code)] +#![allow(non_snake_case)] +#![allow(unused_imports)] +#![allow(unused_parens)] +#![allow(unused_variables)] +#![allow(unused_mut)] +#![allow(unconditional_panic)] +#![allow(non_camel_case_types)] + +use crate::datatypes::*; +use ::serde::{Deserialize, Serialize}; +use compare::{Compare, Extract}; +use core::cmp::Ordering; +use dbsp::declare_tuples; +use dbsp::{ + algebra::{ + AddAssignByRef, AddByRef, DefaultSemigroup, HasZero, MulByRef, NegByRef, Semigroup, + SemigroupValue, UnimplementedSemigroup, ZRingValue, ZSet, F32, F64, + }, + circuit::{checkpointer::Checkpoint, Circuit, CircuitConfig, Stream}, + dynamic::{DynData, DynDataTyped}, + indexed_zset, + operator::{ + time_series::{OrdPartitionedIndexedZSet, RelOffset, RelRange}, + CmpFunc, FilterMap, Fold, Generator, MaxSemigroup, MinSemigroup, + }, + utils::*, + zset, DBData, DBSPHandle, DBWeight, Error, MapHandle, NumEntries, OrdIndexedZSet, OrdZSet, + OutputHandle, Runtime, TypedBox, ZSetHandle, +}; +use dbsp_adapters::Catalog; +#[cfg(test)] +use hashing::*; +use json::*; +use pipeline_types::{deserialize_table_record, serialize_table_record}; +#[cfg(test)] +use readers::*; +use rust_decimal::Decimal; +use size_of::*; +use sqllib::{ + aggregates::*, array::*, binary::*, casts::*, geopoint::*, interval::*, operators::*, + string::*, timestamp::*, *, +}; +use sqlvalue::*; +#[cfg(test)] +use sqlx::{any::AnyRow, AnyConnection, Row}; +use std::{ + collections::BTreeMap, + convert::identity, + fmt::{Debug, Formatter, Result as FmtResult}, + marker::PhantomData, + ops::Neg, + path::Path, +}; + +#[derive(Clone)] +pub struct Semigroup1(PhantomData<(T0, TS0)>); + +impl Semigroup> for Semigroup1 +where + TS0: Semigroup, +{ + fn combine(left: &Tup1, right: &Tup1) -> Tup1 { + Tup1::new(TS0::combine(&left.0, &right.0)) + } +} +/* declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!(Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20); +pipeline_types::deserialize_without_context!(Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21); +pipeline_types::deserialize_without_context!(Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} */ + +pub fn circuit( + cconf: CircuitConfig, +) -> Result< + ( + DBSPHandle, + ( + ZSetHandle< + Tup8< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option>>, + ZSetHandle< + Tup9< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle, Option, Option>>, + ZSetHandle, Option, Option>>, + ZSetHandle< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + ZSetHandle< + Tup10< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + OutputHandle< + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + >, + ), + ), + Error, +> { + let (circuit, streams) = Runtime::init_circuit(cconf, |circuit| { + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + // DBSPSourceMultisetOperator 49 + // CREATE TABLE `WAREHOUSE_STATIC` (`W_ID` INTEGER PRIMARY KEY, `W_NAME` VARCHAR(10), `W_STREET_1` VARCHAR(20), `W_STREET_2` VARCHAR(20), `W_CITY` VARCHAR(20), `W_STATE` CHAR(2), `W_ZIP` CHAR(9), `W_TAX` DECIMAL(4, 4)) + let (stream49, handle49) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + // DBSPSourceMultisetOperator 67 + // CREATE TABLE `WAREHOUSE` (`W_ID` INTEGER PRIMARY KEY, `W_YTD` DECIMAL(12, 2)) + let (stream67, handle67) = circuit.add_input_zset::, Option>>(); + + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 120 + // CREATE TABLE `DISTRICT_STATIC` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NAME` VARCHAR(10), `D_STREET_1` VARCHAR(20), `D_STREET_2` VARCHAR(20), `D_CITY` VARCHAR(20), `D_STATE` CHAR(2), `D_ZIP` CHAR(9), `D_TAX` DECIMAL(4, 4), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream120, handle120) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 143 + // CREATE TABLE `DISTRICT_NEXT_ID` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_NEXT_O_ID` INTEGER, PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream143, handle143) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + // DBSPSourceMultisetOperator 166 + // CREATE TABLE `DISTRICT_YTD` (`D_ID` INTEGER, `D_W_ID` INTEGER, `D_YTD` DECIMAL(12, 2), PRIMARY KEY (`D_W_ID`, `D_ID`)) + let (stream166, handle166) = + circuit.add_input_zset::, Option, Option>>(); + + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + // DBSPSourceMultisetOperator 279 + // CREATE TABLE `CUSTOMER` (`C_ID` INTEGER, `C_D_ID` INTEGER, `C_W_ID` INTEGER, `C_FIRST` VARCHAR(16), `C_MIDDLE` CHAR(2), `C_LAST` VARCHAR(16), `C_STREET_1` VARCHAR(20), `C_STREET_2` VARCHAR(20), `C_CITY` VARCHAR(20), `C_STATE` CHAR(2), `C_ZIP` CHAR(9), `C_PHONE` CHAR(16), `C_SINCE` TIMESTAMP, `C_CREDIT` CHAR(2), `C_CREDIT_LIM` DECIMAL(12, 2), `C_DISCOUNT` DECIMAL(4, 4), `C_BALANCE` DECIMAL(12, 2), `C_YTD_PAYMENT` DECIMAL(12, 2), `C_PAYMENT_CNT` INTEGER, `C_DELIVERY_CNT` INTEGER, `C_DATA` VARCHAR(500), PRIMARY KEY (`C_W_ID`, `C_D_ID`, `C_ID`)) + let (stream279, handle279) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + // DBSPSourceMultisetOperator 337 + // CREATE TABLE `TRANSACTION_PARAMETERS` (`TXN_ID` INTEGER PRIMARY KEY, `W_ID` INTEGER, `D_ID` INTEGER, `C_ID` INTEGER, `C_W_ID` INTEGER, `C_D_ID` INTEGER, `C_LAST` VARCHAR(16), `H_AMOUNT` DECIMAL(5, 2), `H_DATE` TIMESTAMP, `DATETIME_` TIMESTAMP) + let (stream337, handle337) = circuit.add_input_zset::, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >>(); + + // rel#110:LogicalFilter.(input=LogicalTableScan#1,condition=AND(=(CAST($5):VARCHAR(20), 'lastname'), =($1, 43), =($2, 44))) + // DBSPFilterOperator 1137(1084) + let stream1137: Stream< + _, + WSet< + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.filter( + move |t_1: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> bool { + wrap_bool(and_bN_bN( + and_bN_bN( + eq_sN_s( + cast_to_sN_sN((*t_1).5.clone(), 20, false), + String::from("lastname"), + ), + eq_i32N_i32((*t_1).1, 43i32), + ), + eq_i32N_i32((*t_1).2, 44i32), + )) + }, + ); + // rel#112:LogicalProject.(input=LogicalFilter#110,exprs=[+(+($0, 44), 43), $3]) + // DBSPMapOperator 1142(1087) + let stream1142: Stream<_, WSet, Option>>> = stream1137.map( + move |t_2: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> Tup2, Option> { + Tup2::new( + plus_i32N_i32(plus_i32N_i32((*t_2).0, 44i32), 43i32), + (*t_2).3.clone(), + ) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapIndexOperator 1147(1090) + let stream1147: Stream<_, IndexedWSet, Option>>> = stream1142.map_index(move |t_3: &Tup2, Option>, | -> + (Tup0, Tup2, Option>, ) { + (Tup0::new(), Tup2::new((*t_3).0, (*t_3).1.clone()), ) + }); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPAggregateOperator 4596(1094) + let stream4596: Stream<_, IndexedWSet>>>> = + stream1147.aggregate(Fold::< + _, + _, + Semigroup1>, ConcatSemigroup>>>, + _, + _, + >::with_output( + Tup1::new(vec![]), + move |t_22: &mut Tup1>>, + t_4: &Tup2, Option>, + t_24: Weight| { + (*t_22) = Tup1::new(array_agg(&mut (*t_22).0, (*t_4).0, t_24, false)) + }, + move |t_23: Tup1>>| -> Tup1>> { Tup1::new(t_23.0) }, + )); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4598(1096) + let stream4598: Stream<_, WSet>>>> = stream4596.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new((*t_6.1).0.clone()) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPMapOperator 4603(1101) + let stream4603: Stream<_, WSet>>>> = stream4596.map( + move |t_6: (&Tup0, &Tup1>>)| -> Tup1>> { + Tup1::new(vec![]) + }, + ); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPNegateOperator 4608(1104) + let stream4608: Stream<_, WSet>>>> = stream4603.neg(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + let stream580 = circuit.add_source(Generator::new(|| { + if Runtime::worker_index() == 0 { + zset!( + Tup1::new(vec!( + )) => 1, + ) + } else { + zset!() + } + })); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPDifferentiateOperator 1173(580) + let stream1173: Stream<_, WSet>>>> = stream580.differentiate(); + // rel#114:LogicalAggregate.(input=LogicalProject#112,group={},CUST_ARRAY=ARRAY_AGG($0) WITHIN GROUP ([1])) + // DBSPSumOperator 4610(1106) + let stream4610: Stream<_, WSet>>>> = + stream1173.sum([&stream4608, &stream4598]); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 1181(1108) + let stream1181: Stream< + _, + IndexedWSet< + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream279.map_index( + move |t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >| + -> ( + Tup0, + Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + ) { + ( + Tup0::new(), + Tup21::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + ), + ) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPMapIndexOperator 4612(1112) + let stream4612: Stream<_, IndexedWSet>>>> = stream4610 + .map_index( + move |t_9: &Tup1>>| -> (Tup0, Tup1>>) { + (Tup0::new(), Tup1::new((*t_9).0.clone())) + }, + ); + // rel#116:LogicalJoin.(left=LogicalTableScan#1,right=LogicalAggregate#114,condition==(+(+($0, $2), $1), ITEM($21, +(/(ARRAY_LENGTH($21), 2), 1))),joinType=inner) + // DBSPJoinFlatmapOperator 4616(1118) + let stream4616: Stream< + _, + WSet< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + >, + > = stream1181.join_flatmap( + &stream4612, + move |t_11: &Tup0, + t_8: &Tup21< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + t_9: &Tup1>>| + -> Option< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > { + let tmp: Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + > = Tup22::new( + (*t_8).0, + (*t_8).1, + (*t_8).2, + (*t_8).3.clone(), + (*t_8).4.clone(), + (*t_8).5.clone(), + (*t_8).6.clone(), + (*t_8).7.clone(), + (*t_8).8.clone(), + (*t_8).9.clone(), + (*t_8).10.clone(), + (*t_8).11.clone(), + (*t_8).12, + (*t_8).13.clone(), + (*t_8).14.clone(), + (*t_8).15.clone(), + (*t_8).16.clone(), + (*t_8).17.clone(), + (*t_8).18, + (*t_8).19, + (*t_8).20.clone(), + (*t_9).0.clone(), + ); + (if wrap_bool(eq_i32N_i32N( + plus_i32N_i32N(plus_i32N_i32N(tmp.0, tmp.2), tmp.1), + index__N_( + tmp.21.clone(), + cast_to_u_i32(plus_i32_i32( + div_i32_i32(cardinality(tmp.21.clone()), 2i32), + 1i32, + )) - 1, + ), + )) { + Some(tmp) + } else { + None::< + Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >, + > + }) + }, + ); + // rel#118:LogicalProject.(input=LogicalJoin#116,exprs=[$3, $4, $0, $6, $7, $8, $9, $10, $11, $13, $14, $15, $16, $12]) + // DBSPMapOperator 4618(1121) + let stream4618: Stream< + _, + WSet< + Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + >, + >, + > = stream4616.map( + move |t_13: &Tup22< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Vec>, + >| + -> Tup14< + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + Option, + > { + Tup14::new( + (*t_13).3.clone(), + (*t_13).4.clone(), + (*t_13).0, + (*t_13).6.clone(), + (*t_13).7.clone(), + (*t_13).8.clone(), + (*t_13).9.clone(), + (*t_13).10.clone(), + (*t_13).11.clone(), + (*t_13).13.clone(), + (*t_13).14.clone(), + (*t_13).15.clone(), + (*t_13).16.clone(), + (*t_13).12, + ) + }, + ); + // CREATE VIEW `CUST_BYNAME_INLINED` AS + // SELECT `C`.`C_FIRST`, `C`.`C_MIDDLE`, `C`.`C_ID`, `C`.`C_STREET_1`, `C`.`C_STREET_2`, `C`.`C_CITY`, `C`.`C_STATE`, `C`.`C_ZIP`, `C`.`C_PHONE`, `C`.`C_CREDIT`, `C`.`C_CREDIT_LIM`, `C`.`C_DISCOUNT`, `C`.`C_BALANCE`, `C`.`C_SINCE` + // FROM `schema`.`CUSTOMER` AS `C`, + // (SELECT ARRAY_AGG(`EXPR$0`.`C_ID` + `EXPR$0`.`C_W_ID` + `EXPR$0`.`C_D_ID` ORDER BY `EXPR$0`.`C_FIRST`) AS `CUST_ARRAY` + // FROM (SELECT `C`.`C_ID`, `C`.`C_W_ID`, `C`.`C_D_ID`, `C`.`C_FIRST` + // FROM `schema`.`CUSTOMER` AS `C` + // WHERE `C`.`C_LAST` = 'lastname' AND `C`.`C_D_ID` = 43 AND `C`.`C_W_ID` = 44 + // ORDER BY `C_FIRST`) AS `EXPR$0`) AS `A` + // WHERE `C`.`C_ID` + `C`.`C_W_ID` + `C`.`C_D_ID` = `A`.`CUST_ARRAY`[ARRAY_LENGTH(`A`.`CUST_ARRAY`) / 2 + 1] + // DBSPSinkOperator 4621(1036) + let handle4621 = stream4618.output(); + + Ok(( + handle49, handle67, handle120, handle143, handle166, handle279, handle337, handle4621, + )) + })?; + Ok((circuit, streams)) +} diff --git a/incremental_transactions/tpcc/src/datatypes.rs b/incremental_transactions/tpcc/src/datatypes.rs new file mode 100644 index 000000000..7112f8a24 --- /dev/null +++ b/incremental_transactions/tpcc/src/datatypes.rs @@ -0,0 +1,28 @@ +#![allow(non_snake_case)] + +use dbsp::declare_tuples; +use sqlvalue::*; + +declare_tuples! { + Tup21, + Tup22, + Tup14, +} + +pipeline_types::deserialize_without_context!( + Tup21, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, + T19, T20 +); +pipeline_types::deserialize_without_context!( + Tup22, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, + T19, T20, T21 +); +pipeline_types::deserialize_without_context!( + Tup14, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 +); + +sqlvalue::to_sql_row_impl! { + Tup21, + Tup22, + Tup14, +} diff --git a/incremental_transactions/tpcc/src/lib.rs b/incremental_transactions/tpcc/src/lib.rs index 4c37cf959..ff5da0091 100644 --- a/incremental_transactions/tpcc/src/lib.rs +++ b/incremental_transactions/tpcc/src/lib.rs @@ -1,5 +1,13 @@ +pub mod byname_max_sql; +pub mod byname_max_sql_incremental; pub mod byname_sql; +pub mod byname_sql_constargs; +pub mod byname_sql_constargs_inlined; pub mod byname_sql_incremental; +pub mod byname_sql_incremental_constargs; +pub mod byname_sql_incremental_constargs_inlined; +pub mod byname_sql_incremental_constargs_inlined_minimized; +pub mod datatypes; pub mod payment_sql; pub mod payment_sql_incremental; @@ -79,36 +87,6 @@ mod test { out_cust_agg, out_cust_byname, ) = handles; - in_customer.push( - ( - Some(1), - Some(43), - Some(44), - Some("Alice"), - None, - Some("Public"), - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - ) - .into(), - 1, - ); - circuit.step().unwrap(); } - - fn customer(id: i32, w_id: i32, }