From 46d985a113e50795816adffe6b9efb0f20ca7fc0 Mon Sep 17 00:00:00 2001 From: joocer Date: Wed, 29 May 2024 19:48:47 +0100 Subject: [PATCH 1/3] #1698 --- opteryx/functions/string_functions.py | 8 ++--- .../strategies/predicate_pushdown.py | 29 ++++++++++++++++--- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/opteryx/functions/string_functions.py b/opteryx/functions/string_functions.py index 6fbedb1f3..671b5990b 100644 --- a/opteryx/functions/string_functions.py +++ b/opteryx/functions/string_functions.py @@ -234,12 +234,12 @@ def concat_ws(separator, list_values): return result -def starts_w(arr, test): - return compute.starts_with(arr, test[0]) +def starts_w(arr, test, ignore_case=[False]): + return compute.starts_with(arr, test[0], ignore_case=ignore_case[0]) -def ends_w(arr, test): - return compute.ends_with(arr, test[0]) +def ends_w(arr, test, ignore_case=[False]): + return compute.ends_with(arr, test[0], ignore_case=ignore_case[0]) def substring( diff --git a/opteryx/planner/cost_based_optimizer/strategies/predicate_pushdown.py b/opteryx/planner/cost_based_optimizer/strategies/predicate_pushdown.py index 9175fdb17..f304a1a43 100644 --- a/opteryx/planner/cost_based_optimizer/strategies/predicate_pushdown.py +++ b/opteryx/planner/cost_based_optimizer/strategies/predicate_pushdown.py @@ -68,7 +68,8 @@ def _rewrite_predicate(predicate): ): predicate.value = LIKE_REWRITES[predicate.value] return predicate - if predicate.value == "Like" and predicate.right.value: + if predicate.value in {"Like", "ILike"} and predicate.right.value: + ignore_case = predicate.value == "ILike" # Rewrite LIKEs as STARTS_WITH if ( predicate.right.node_type == NodeType.LITERAL @@ -79,7 +80,15 @@ def _rewrite_predicate(predicate): predicate.right.value = predicate.right.value[:-1] predicate.node_type = NodeType.FUNCTION predicate.value = "STARTS_WITH" - predicate.parameters = [predicate.left, predicate.right] + predicate.parameters = [ + predicate.left, + predicate.right, + Node( + node_type=NodeType.LITERAL, + type=OrsoTypes.BOOLEAN, + value=ignore_case, + ), + ] return predicate # Rewrite LIKEs as ENDS_WITH if ( @@ -91,7 +100,15 @@ def _rewrite_predicate(predicate): predicate.right.value = predicate.right.value[1:] predicate.node_type = NodeType.FUNCTION predicate.value = "ENDS_WITH" - predicate.parameters = [predicate.left, predicate.right] + predicate.parameters = [ + predicate.left, + predicate.right, + Node( + node_type=NodeType.LITERAL, + type=OrsoTypes.BOOLEAN, + value=ignore_case, + ), + ] return predicate if ( predicate.right.node_type == NodeType.LITERAL @@ -106,7 +123,11 @@ def _rewrite_predicate(predicate): predicate.parameters = [ predicate.left, predicate.right, - Node(node_type=NodeType.LITERAL, type=OrsoTypes.BOOLEAN, value=False), + Node( + node_type=NodeType.LITERAL, + type=OrsoTypes.BOOLEAN, + value=ignore_case, + ), ] return predicate if predicate.value in IN_REWRITES: From 991e263e2290f70d636e5662204ce5f82e0788a6 Mon Sep 17 00:00:00 2001 From: XB500 Date: Wed, 29 May 2024 18:49:14 +0000 Subject: [PATCH 2/3] Opteryx Version 0.16.0-alpha.536 --- opteryx/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opteryx/__version__.py b/opteryx/__version__.py index b82e6c300..a27a85ee9 100644 --- a/opteryx/__version__.py +++ b/opteryx/__version__.py @@ -1,4 +1,4 @@ -__build__ = 534 +__build__ = 536 # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From b7a39ade19170980581401c9bd36ef83e3e529c7 Mon Sep 17 00:00:00 2001 From: XB500 Date: Wed, 29 May 2024 18:51:11 +0000 Subject: [PATCH 3/3] Opteryx Version 0.16.0-alpha.537 --- opteryx/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opteryx/__version__.py b/opteryx/__version__.py index a27a85ee9..9cfb2b040 100644 --- a/opteryx/__version__.py +++ b/opteryx/__version__.py @@ -1,4 +1,4 @@ -__build__ = 536 +__build__ = 537 # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License.