# `QuackDB.Ecto.Text`
[🔗](https://github.com/elixir-vibe/quackdb/blob/main/lib/quack_db/ecto/text.ex#L2)

DuckDB text-expression helpers for Ecto queries.

    import Ecto.Query
    import QuackDB.Ecto.Text

    from event in "events",
      where: contains(event.name, "duck") and starts_with(event.kind, "bird"),
      select: %{
        second_part: split_part(event.name, "-", 2),
        tags: string_split(event.tags, ",")
      }

`contains_text/2` emits the same DuckDB `contains(?, ?)` call as
`contains/2`. It is useful with `use QuackDB.Ecto`, where shared
`contains/2` may dispatch between text and spatial predicates.

# `contains`
*macro* 

# `contains`
*macro* 

Literal text containment with an explicit case-sensitivity option.

    contains(event.name, ^search, case_sensitive: false)

With `case_sensitive: false`, both operands are lowercased by DuckDB before
matching. This is not full Unicode case folding. Wildcards remain literal;
an empty search matches and NULL operands produce NULL. Options must be a
literal keyword list with a boolean `:case_sensitive` value.

# `contains_text`
*macro* 

# `ends_with`
*macro* 

# `prefix`
*macro* 

# `split_part`
*macro* 

# `starts_with`
*macro* 

# `string_split`
*macro* 

# `string_split_regex`
*macro* 

# `string_split_regex`
*macro* 

# `suffix`
*macro* 

---

*Consult [api-reference.md](api-reference.md) for complete listing*
