adriangb commented on code in PR #12978:
URL: https://github.com/apache/datafusion/pull/12978#discussion_r1819467665


##########
datafusion/core/src/physical_optimizer/pruning.rs:
##########
@@ -1648,22 +1649,46 @@ fn build_like_match(
             let s = unpack_string(lit.value())?;
             return Ok(s);
         }
-        plan_err!("LIKE expression must be a string literal")
+        plan_err!("Unexpected LIKE expression: {expr:?}")
     }
 
-    // I *think* that ILIKE could be handled by making the min lowercase and 
max uppercase
-    // but that requires building the physical expressions that call lower() 
and upper()
+    /// Try and increment the the string's bytes from right to left, returning 
when the result
+    /// is a valid UTF8 string. Returns `None` when it can't increment any 
byte.
+    /// Vendored from 
https://github.com/apache/arrow-rs/blob/56525efbd5f37b89d1b56aa51709cab9f81bc89e/parquet/src/column/writer/mod.rs#L1432-L1448
+    fn increment_utf8(data: &str) -> Result<String> {
+        let mut data = data.as_bytes().to_vec();
+        for idx in (0..data.len()).rev() {
+            let original = data[idx];
+            let (byte, overflow) = original.overflowing_add(1);
+            if !overflow {
+                data[idx] = byte;
+                if let Ok(res) = str::from_utf8(&data) {
+                    return Ok(res.to_string())
+                }
+                data[idx] = original;
+            }
+        }
+
+        return plan_err!("Could not increment UTF8 string");

Review Comment:
   okay done. it will still fall back to unhandled_hook, I'm not sure what 
other behavior you'd want it to do, use the original prefix without 
incremeneting (I think that would be correct but I'm not 100% sure)?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to