QuackDB.SQL.Fragment (quackdb v0.5.13)

Copy Markdown View Source

Reusable SQL fragments shared by QuackDB statement builders.

This module intentionally builds small, composable iodata fragments rather than introducing another statement-level DSL. Public DML/DDL helpers can reuse these fragments while keeping the number of top-level insert/update APIs small.

Summary

Functions

Quotes a table alias.

Renders expression AS alias.

Quotes a column identifier.

Renders a comma-separated column list.

Renders a conflict target such as (id, name), including trailing space.

Renders an optional parenthesized insert column list.

Renders a simple joined table clause.

Renders supported ON CONFLICT clauses.

Renders an optional ORDER BY clause for window expressions.

Renders a parenthesized window partition column list.

Quotes a qualified column reference such as source.id.

Renders a comma-separated qualified column list.

Renders equality between two qualified columns.

Renders IS NOT DISTINCT FROM between two qualified columns.

Renders RETURNING ... for a non-empty column list.

Renders a row_number() OVER (...) AS alias expression.

Builds a small SELECT query fragment.

Renders * for an empty select list, otherwise a column list.

Quotes a table name, optionally with a schema/prefix tuple.

Combines queries with UNION or UNION ALL, with optional ordering.

Renders an optional WHERE clause from raw predicate iodata.

Types

alias_name()

@type alias_name() :: atom() | String.t()

column()

@type column() :: atom() | String.t()

nulls_order()

@type nulls_order() :: :first | :last

order_direction()

@type order_direction() :: :asc | :desc

order_expression()

@type order_expression() ::
  column()
  | {column(), order_direction()}
  | {column(), order_direction(), keyword()}

table()

@type table() ::
  atom() | String.t() | {atom() | String.t() | nil, atom() | String.t()}

Functions

alias_name(name)

@spec alias_name(alias_name()) :: iodata()

Quotes a table alias.

as(expression, alias_name)

@spec as(iodata(), column()) :: iodata()

Renders expression AS alias.

column(name)

@spec column(column()) :: iodata()

Quotes a column identifier.

column_list(columns)

@spec column_list([column()]) :: iodata()

Renders a comma-separated column list.

conflict_target(targets)

@spec conflict_target([column()]) :: iodata()

Renders a conflict target such as (id, name), including trailing space.

insert_columns(columns)

@spec insert_columns([column()]) :: iodata()

Renders an optional parenthesized insert column list.

join(kind, joined_table, options)

@spec join(:inner | :left, table(), keyword()) :: iodata()

Renders a simple joined table clause.

on_conflict(arg1)

@spec on_conflict(:raise | :nothing | {:nothing, [column()]}) :: iodata()

Renders supported ON CONFLICT clauses.

order_by(expressions)

@spec order_by([order_expression()]) :: iodata()

Renders an optional ORDER BY clause for window expressions.

partition_by(columns)

@spec partition_by([column()]) :: iodata()

Renders a parenthesized window partition column list.

qualified_column(table_alias, column)

@spec qualified_column(alias_name(), column()) :: iodata()

Quotes a qualified column reference such as source.id.

qualified_column_list(columns, table_alias)

@spec qualified_column_list([column()], alias_name()) :: iodata()

Renders a comma-separated qualified column list.

qualified_equality(left_alias, left_column, right_alias, right_column)

@spec qualified_equality(alias_name(), column(), alias_name(), column()) :: iodata()

Renders equality between two qualified columns.

qualified_not_distinct(left_alias, left_column, right_alias, right_column)

@spec qualified_not_distinct(alias_name(), column(), alias_name(), column()) ::
  iodata()

Renders IS NOT DISTINCT FROM between two qualified columns.

returning(columns)

@spec returning([column()]) :: iodata()

Renders RETURNING ... for a non-empty column list.

row_number_over(options)

@spec row_number_over(keyword()) :: iodata()

Renders a row_number() OVER (...) AS alias expression.

select(projections, options \\ [])

@spec select(
  [iodata()],
  keyword()
) :: iodata()

Builds a small SELECT query fragment.

select_columns(columns)

@spec select_columns([column()]) :: iodata()

Renders * for an empty select list, otherwise a column list.

table(name)

@spec table(table()) :: iodata()

Quotes a table name, optionally with a schema/prefix tuple.

union(queries, options \\ [])

@spec union(
  [iodata()],
  keyword()
) :: iodata()

Combines queries with UNION or UNION ALL, with optional ordering.

where(predicate)

@spec where(nil | iodata()) :: iodata()

Renders an optional WHERE clause from raw predicate iodata.