Convenience imports for Ecto-based QuackDB query modules.
Use this in modules that build DuckDB analytical, spatial, series, or full-text search Ecto queries and want the standard Ecto query DSL together with QuackDB's Ecto helper macros:
defmodule MyApp.Analytics do
use QuackDB.Ecto
def category_scores do
from event in "events",
group_by: event.category,
select: %{
category: event.category,
median_score: median(event.score),
fts_score: search_score("fts_main_events", event.id, ^"duckdb")
}
end
endThe macro imports:
Ecto.Query.QuackDB.Ecto.Analytics.QuackDB.Ecto.Spatial.QuackDB.Ecto.FTS.QuackDB.Ecto.Regex.QuackDB.Ecto.Text.QuackDB.Ecto.List.QuackDB.Ecto.Map.QuackDB.Ecto.Struct.QuackDB.Ecto.Series.QuackDB.Ecto.Star.QuackDB.Ecto.WindowFrames.
QuackDB.Ecto.Conditionals.case_when/1 is also imported for multi-branch
DuckDB CASE WHEN expressions using Elixir clause syntax.
Imports can be disabled individually. When spatial and text helpers are both
enabled, shared contains/2 dispatches obvious text calls to DuckDB
contains and spatial helper calls to ST_Contains. Ambiguous calls raise;
use contains_text/2 or st_contains/2 when intent is not obvious.
use QuackDB.Ecto, spatial: false
use QuackDB.Ecto, full_text_search: false
use QuackDB.Ecto, analytics: false
use QuackDB.Ecto, regex: false
use QuackDB.Ecto, text: false
use QuackDB.Ecto, list: false
use QuackDB.Ecto, map: false
use QuackDB.Ecto, struct: false
use QuackDB.Ecto, series: false
use QuackDB.Ecto, star: false
use QuackDB.Ecto, window_frames: false
use QuackDB.Ecto, query: false
Summary
Functions
Returns the sequence name QuackDB migrations use for a serial table column.
Functions
@spec column_sequence_name( module() | atom() | String.t() | {atom() | String.t(), atom() | String.t()} | {atom() | String.t(), module()}, atom() | String.t() ) :: String.t()
Returns the sequence name QuackDB migrations use for a serial table column.
QuackDB.Ecto.column_sequence_name("fragments", :id)
#=> "fragments_id_seq"
QuackDB.Ecto.column_sequence_name({"main", "fragments"}, :id)
#=> "main_fragments_id_seq"Schema modules and {source, schema} tuples use Ecto field-source metadata:
QuackDB.Ecto.column_sequence_name(FragmentRecord, :id)
QuackDB.Ecto.column_sequence_name({"tenant_fragments", FragmentRecord}, :id)