From 0d500a94a6dccb5049f622f6a28899e7a0b05095 Mon Sep 17 00:00:00 2001 From: Yasser Latreche Date: Fri, 25 Oct 2024 14:40:12 +0200 Subject: [PATCH 1/3] Add modulus operation --- datafusion/substrait/src/logical_plan/consumer.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datafusion/substrait/src/logical_plan/consumer.rs b/datafusion/substrait/src/logical_plan/consumer.rs index f2756bb06d1eb..bc6357b9f3721 100644 --- a/datafusion/substrait/src/logical_plan/consumer.rs +++ b/datafusion/substrait/src/logical_plan/consumer.rs @@ -108,6 +108,7 @@ pub fn name_to_op(name: &str) -> Option { "multiply" => Some(Operator::Multiply), "divide" => Some(Operator::Divide), "mod" => Some(Operator::Modulo), + "modulus" => Some(Operator::Modulo), "and" => Some(Operator::And), "or" => Some(Operator::Or), "is_distinct_from" => Some(Operator::IsDistinctFrom), From 853fa034c003053d19ff17eee8e4d94c8444b99e Mon Sep 17 00:00:00 2001 From: Yasser Latreche Date: Sat, 26 Oct 2024 11:26:37 +0200 Subject: [PATCH 2/3] change the producer to output `modulus` instead of `mod` for `modulo` operation --- datafusion/substrait/src/logical_plan/producer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/substrait/src/logical_plan/producer.rs b/datafusion/substrait/src/logical_plan/producer.rs index ee04749f5e6b4..46b81e32afbad 100644 --- a/datafusion/substrait/src/logical_plan/producer.rs +++ b/datafusion/substrait/src/logical_plan/producer.rs @@ -676,7 +676,7 @@ pub fn operator_to_name(op: Operator) -> &'static str { Operator::Minus => "subtract", Operator::Multiply => "multiply", Operator::Divide => "divide", - Operator::Modulo => "mod", + Operator::Modulo => "modulus", Operator::And => "and", Operator::Or => "or", Operator::IsDistinctFrom => "is_distinct_from", From 766dacae7f47f165bfe73f8ea5a086f99a8f19dc Mon Sep 17 00:00:00 2001 From: Yasser Latreche Date: Sat, 26 Oct 2024 22:21:38 +0200 Subject: [PATCH 3/3] Add a roundtrip test case for modulus --- datafusion/substrait/tests/cases/roundtrip_logical_plan.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs b/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs index 083a589fce267..c7aab6925ea44 100644 --- a/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs +++ b/datafusion/substrait/tests/cases/roundtrip_logical_plan.rs @@ -568,6 +568,11 @@ async fn roundtrip_ilike() -> Result<()> { roundtrip("SELECT f FROM data WHERE f ILIKE 'a%b'").await } +#[tokio::test] +async fn roundtrip_modulus() -> Result<()> { + roundtrip("SELECT a%3 from data").await +} + #[tokio::test] async fn roundtrip_not() -> Result<()> { roundtrip("SELECT * FROM data WHERE NOT d").await