Skip to content

Support ILIKE in the expression evaluator - #3

Closed
rishitesh wants to merge 2 commits into
rapidsai:mainfrom
rishitesh:feature/ilike-support
Closed

Support ILIKE in the expression evaluator#3
rishitesh wants to merge 2 commits into
rapidsai:mainfrom
rishitesh:feature/ilike-support

Conversation

@rishitesh

@rishitesh rishitesh commented Jul 11, 2026

Copy link
Copy Markdown

Closes #2.

ILIKE was already parsed (from_substrait.cpp sets ignore_case on like_expression, and it round-trips through RPC serialization), but evaluate_expressions threw "Unsupported scalar function" when evaluating it.

Changes

  • src/executor/eval.cpp: in the like case, when ignore_case() is set, lowercase the input column, the pattern, and the escape character with cudf::strings::to_lower, then reuse the existing LIKE paths (gqe::like shift-and kernel and the cudf::strings::like fallback). Pattern and escape char are lowered through the same cuDF kernel as the column so their case mappings agree, including for non-ASCII input. % and _ have no case, so the pattern structure is preserved.
  • test/executor/eval_expressions_test.cpp: 6 new tests — basic mixed-case matching, _/% wildcards, nullable input, escape characters, UTF-8 (Ärger), and a control test that plain LIKE remains case-sensitive. All run through both execution paths via the existing parameterized suite (filter_use_like_shift_and false/true).

Testing

On an L4 (sm_89), Release build:

  • ctest -R eval_expressions passes; the 12 new parameterized cases all pass.
  • Full ctest shows no regressions vs main (the cupti_test NVTX case and memory_resource failures reproduce identically on unmodified main in my container environment).
  • End-to-end through gqe_node_manager + gqe-cli: ILIKE queries against a mixed-case Parquet table return the expected rows, cross-checked against a Python reference.

One note from e2e testing: patterns not anchored by % (e.g. ILIKE 'w_dget') return incorrect results on the shift-and path — but this reproduces with plain LIKE on main as well, so it's a pre-existing kernel issue rather than something introduced here — filed as #4 with the repro and root cause.

jamxia155 and others added 2 commits July 1, 2026 08:10
ILIKE was parsed but not evaluated. Lowercase the input column,
pattern, and escape char with cudf::strings::to_lower, then reuse
the existing LIKE paths. Add tests for both execution paths.

Signed-off-by: Rishitesh Mishra <rishi80.mishra@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEA] Support ILIKE (case-insensitive LIKE) in the expression evaluator

2 participants