if Code.ensure_loaded?(Ecto.Query.API) do defmodule QuackDB.Ecto.Struct do @moduledoc """ DuckDB STRUCT expression helpers for Ecto queries. Natural names are available when importing this module directly. With `use QuackDB.Ecto`, ambiguous names such as `contains/2`, `extract/2`, `values/1`, `position/2`, and `concat/2` are excluded; use the explicit aliases instead. """ @doc "Builds `struct_extract(struct, field_or_index)`." defmacro extract(struct, field_or_index) do quote do fragment("struct_extract(?, ?)", unquote(struct), unquote(field_or_index)) end end @doc "Builds `struct_extract(struct, field_or_index)`." defmacro struct_extract(struct, field_or_index) do quote do fragment("struct_extract(?, ?)", unquote(struct), unquote(field_or_index)) end end @doc "Builds `struct_extract_at(struct, index)`." defmacro extract_at(struct, index) do quote do fragment("struct_extract_at(?, ?)", unquote(struct), unquote(index)) end end @doc "Builds `struct_extract_at(struct, index)`." defmacro struct_extract_at(struct, index) do quote do fragment("struct_extract_at(?, ?)", unquote(struct), unquote(index)) end end @doc "Builds `struct_contains(struct, value)`." defmacro contains(struct, value) do quote do fragment("struct_contains(?, ?)", unquote(struct), unquote(value)) end end @doc "Builds `struct_contains(struct, value)`." defmacro contains_struct(struct, value) do quote do fragment("struct_contains(?, ?)", unquote(struct), unquote(value)) end end @doc "Builds `struct_position(struct, value)`." defmacro position(struct, value) do quote do fragment("struct_position(?, ?)", unquote(struct), unquote(value)) end end @doc "Builds `struct_position(struct, value)`." defmacro struct_position(struct, value) do quote do fragment("struct_position(?, ?)", unquote(struct), unquote(value)) end end @doc "Builds `struct_values(struct)`." defmacro values(struct) do quote do fragment("struct_values(?)", unquote(struct)) end end @doc "Builds `struct_values(struct)`." defmacro struct_values(struct) do quote do fragment("struct_values(?)", unquote(struct)) end end @doc "Builds `struct_concat(left, right)`." defmacro concat(left, right) do quote do fragment("struct_concat(?, ?)", unquote(left), unquote(right)) end end @doc "Builds `struct_concat(left, right)`." defmacro struct_concat(left, right) do quote do fragment("struct_concat(?, ?)", unquote(left), unquote(right)) end end end end