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

DuckDB LIST/ARRAY expression helpers for Ecto queries.

The macros map directly to DuckDB list functions and are useful for querying
`LIST` columns or Ecto `{:array, type}` fields backed by DuckDB lists.

# `append`
*macro* 

Builds `list_append(list, value)`.

# `concat`
*macro* 

Builds `list_concat(left, right)`.

# `contains`
*macro* 

Builds `list_contains(list, value)`.

# `contains_list`
*macro* 

Alias for `contains/2` that avoids shared `contains/2` import ambiguity.

# `distinct`
*macro* 

Builds `list_distinct(list)`.

# `extract`
*macro* 

Builds `list_extract(list, index)`. DuckDB list indexes are 1-based.

# `has_all`
*macro* 

Builds `list_has_all(left, right)`.

# `has_any`
*macro* 

Builds `list_has_any(left, right)`.

# `intersect_list`
*macro* 

Builds `list_intersect(left, right)`. Named to avoid Ecto `intersect/2` import ambiguity.

# `list_filter`
*macro* 

Builds `list_filter(list, lambda x : ...)`.

# `list_length`
*macro* 

Builds `len(list)`. Named to avoid `Kernel.length/1` import ambiguity.

# `list_reduce`
*macro* 

Builds `list_reduce(list, lambda acc, x : ...)`.

# `list_reduce`
*macro* 

Builds `list_reduce(list, lambda acc, x : ..., initial_value)`.

# `list_transform`
*macro* 

Builds `list_transform(list, lambda x : ...)`.

# `position`
*macro* 

Builds `list_position(list, value)`.

# `prepend`
*macro* 

Builds `list_prepend(value, list)`.

# `reverse_sort`
*macro* 

Builds `list_reverse_sort(list)`.

# `slice`
*macro* 

Builds `list_slice(list, begin, end)`.

# `slice`
*macro* 

Builds `list_slice(list, begin, end, step)`.

# `sort`
*macro* 

Builds `list_sort(list)`.

# `unique`
*macro* 

Builds `list_unique(list)`.

# `unnest`
*macro* 

Builds `unnest(list)`.

---

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