From 683a0753a18beb0e23d9fa6438ac6ad29fce6804 Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Thu, 4 Jul 2024 21:23:35 +0200 Subject: [PATCH 1/6] Fix issue with constant filters --- nemo-physical/src/tabular/operations/filter.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nemo-physical/src/tabular/operations/filter.rs b/nemo-physical/src/tabular/operations/filter.rs index 2b18bdcd7..3e9ec63d7 100644 --- a/nemo-physical/src/tabular/operations/filter.rs +++ b/nemo-physical/src/tabular/operations/filter.rs @@ -125,7 +125,8 @@ impl GeneratorFilter { } } - unreachable!("Filter must only use markers from the table.") + // Compute constant columns in the first column + table[0] } /// Helper function that takes a list of boolean [Filter]s From 7cb869e8fba733eebcf2f08963d85b919a56c420 Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Thu, 4 Jul 2024 21:23:46 +0200 Subject: [PATCH 2/6] Add test case for issue 500 --- .../planning_engine/constants_filter/run.rls | 11 +++++++++++ .../planning_engine/constants_filter/run/equal.csv | 0 2 files changed, 11 insertions(+) create mode 100644 resources/testcases/regression/planning_engine/constants_filter/run.rls create mode 100644 resources/testcases/regression/planning_engine/constants_filter/run/equal.csv diff --git a/resources/testcases/regression/planning_engine/constants_filter/run.rls b/resources/testcases/regression/planning_engine/constants_filter/run.rls new file mode 100644 index 000000000..f8bc84022 --- /dev/null +++ b/resources/testcases/regression/planning_engine/constants_filter/run.rls @@ -0,0 +1,11 @@ +%%% Test related to +%%% https://github.com/knowsys/nemo/issues/500 +%%% +%%% A panic was caused by having a filter consisting of constants + +pair(1, 2) . +pair(3, 3) . + +equal(?x) :- pair(?x, ?y), c = d . + +@export equal :- csv {} . \ No newline at end of file diff --git a/resources/testcases/regression/planning_engine/constants_filter/run/equal.csv b/resources/testcases/regression/planning_engine/constants_filter/run/equal.csv new file mode 100644 index 000000000..e69de29bb From 0d43c9bb716d62619006dfef71e22dcdad9009d4 Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Fri, 5 Jul 2024 16:10:19 +0200 Subject: [PATCH 3/6] Implement comment --- nemo-physical/src/tabular/operations/filter.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/nemo-physical/src/tabular/operations/filter.rs b/nemo-physical/src/tabular/operations/filter.rs index 3e9ec63d7..6a65f9301 100644 --- a/nemo-physical/src/tabular/operations/filter.rs +++ b/nemo-physical/src/tabular/operations/filter.rs @@ -117,16 +117,20 @@ impl GeneratorFilter { /// Helper function that finds the [OperationColumnMarker] used in the given [Filter] /// that appears closest to the end of the given [OperationTable]. - fn find_last_reference(table: &OperationTable, filter: &Filter) -> OperationColumnMarker { + /// + /// Returns `None` if the given filter does not use any values as input. + fn find_last_reference( + table: &OperationTable, + filter: &Filter, + ) -> Option { let references = filter.references(); for marker in table.iter().rev() { if references.contains(marker) { - return *marker; + return Some(*marker); } } - // Compute constant columns in the first column - table[0] + None } /// Helper function that takes a list of boolean [Filter]s @@ -140,7 +144,7 @@ impl GeneratorFilter { let mut grouped_filters = HashMap::>::new(); for filter in filters { - let marker = Self::find_last_reference(input, filter); + let marker = Self::find_last_reference(input, filter).unwrap_or(input[0].clone()); grouped_filters.entry(marker).or_default().push(filter); } From 84456e9e0ba7fea5309d055fd49a2c02bd7cf565 Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Fri, 5 Jul 2024 16:23:08 +0200 Subject: [PATCH 4/6] Remove .clone() --- nemo-physical/src/tabular/operations/filter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nemo-physical/src/tabular/operations/filter.rs b/nemo-physical/src/tabular/operations/filter.rs index 6a65f9301..eb50ac6a1 100644 --- a/nemo-physical/src/tabular/operations/filter.rs +++ b/nemo-physical/src/tabular/operations/filter.rs @@ -144,7 +144,7 @@ impl GeneratorFilter { let mut grouped_filters = HashMap::>::new(); for filter in filters { - let marker = Self::find_last_reference(input, filter).unwrap_or(input[0].clone()); + let marker = Self::find_last_reference(input, filter).unwrap_or(input[0]); grouped_filters.entry(marker).or_default().push(filter); } From 5f109544a35263fdc4929f50b6d05fc4b926ce64 Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Mon, 8 Jul 2024 09:43:51 +0200 Subject: [PATCH 5/6] Increase maximum type length --- nemo/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/nemo/src/lib.rs b/nemo/src/lib.rs index 593c1ad89..c9cf59b70 100644 --- a/nemo/src/lib.rs +++ b/nemo/src/lib.rs @@ -1,5 +1,6 @@ //! A fast in-memory rule engine +#![type_length_limit = "40000000"] #![deny( missing_debug_implementations, missing_copy_implementations, From 699874d2fc75473d730b31c8553fbbce8f17b2cb Mon Sep 17 00:00:00 2001 From: Alex Ivliev Date: Mon, 8 Jul 2024 09:50:33 +0200 Subject: [PATCH 6/6] Increase maximum type length even further --- nemo/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nemo/src/lib.rs b/nemo/src/lib.rs index c9cf59b70..246ab7f6c 100644 --- a/nemo/src/lib.rs +++ b/nemo/src/lib.rs @@ -1,6 +1,6 @@ //! A fast in-memory rule engine -#![type_length_limit = "40000000"] +#![type_length_limit = "5000000000"] #![deny( missing_debug_implementations, missing_copy_implementations,