# `Selecto.Builder.Sql.Select`

SELECT-expression compiler for Selecto query AST values.

This module normalizes selector terms (fields, literals, functions, CASE,
subqueries, JSON/array helpers, and custom SQL fragments) into iodata SQL
fragments alongside required joins and bind parameters.

# `build`

# `build`

# `build`

# `build_udf`

# `prep_selector`

Process field selectors with various formats:

Custom SQL support:
  {:custom_sql, sql_template, field_mappings} - safely handle custom column SQL with field validation

Standard formats:

  "field" # - plain old field from one of the tables
  {:field, field } #- same as above disamg for predicate second+ position
  {:literal, "value"} #- for literal values
  {:literal, 1.0}
  {:literal, 1}
  {:literal, datetime} etc
  {:func, SELECTOR}
  {:count, *} (for count(*))
  {:func, SELECTOR, SELECTOR}
  {:func, SELECTOR, SELECTOR, SELECTOR} #...
  {:extract, part, SELECTOR}
  {:case, [PREDICATE, SELECTOR, ..., :else, SELECTOR]}
  {:coalese, [SELECTOR, SELECTOR, ...]}
  {:greatest, [SELECTOR, SELECTOR, ...]}
  {:least, [SELECTOR, SELECTOR, ...]}
  {:nullif, [SELECTOR, LITERAL_SELECTOR]} #LITERAL_SELECTOR means naked value treated as lit not field
  {:subquery, [SELECTOR, SELECTOR, ...], PREDICATE}

# `prep_selector`

---

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