Packages

SQL query builder core for Gleam

Current section

Files

Jump to
galchemy src galchemy@ast@expression.erl
Raw

src/galchemy@ast@expression.erl

-module(galchemy@ast@expression).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\galchemy\\ast\\expression.gleam").
-export_type([select_item/0, sql_value/0, comparison_op/0, predicate/0, order_direction/0, order/0, unary_operator/0, binary_operator/0, window_definition/0, join_kind/0, source/0, join/0, set_operation_kind/0, set_operation/0, cte/0, select_query/0, expression/0]).
-type select_item() :: {select_item,
expression(),
gleam@option:option(binary())}.
-type sql_value() :: {text, binary()} |
{int, integer()} |
{float, float()} |
{bool, boolean()} |
{bytea, bitstring()} |
{uuid, binary()} |
{numeric, binary()} |
{json, binary()} |
{jsonb, binary()} |
{enum, binary(), binary()} |
{array, list(sql_value())} |
{timestamp, gleam@time@timestamp:timestamp()} |
{date, gleam@time@calendar:date()} |
{time_of_day, gleam@time@calendar:time_of_day()} |
null.
-type comparison_op() :: eq | neq | gt | gte | lt | lte.
-type predicate() :: {comparison, expression(), comparison_op(), expression()} |
{'and', predicate(), predicate()} |
{'or', predicate(), predicate()} |
{'not', predicate()} |
{in_list, expression(), list(expression())} |
{in_subquery, expression(), select_query()} |
{is_null, expression()} |
{is_not_null, expression()} |
{like, expression(), expression()} |
{ilike, expression(), expression()}.
-type order_direction() :: asc | desc.
-type order() :: {order, expression(), order_direction()}.
-type unary_operator() :: negate.
-type binary_operator() :: add | subtract | multiply | divide | concat.
-type window_definition() :: {window_definition,
list(expression()),
list(order())}.
-type join_kind() :: inner_join | left_join.
-type source() :: {table_source, galchemy@ast@schema:table()} |
{derived_source, select_query(), binary()}.
-type join() :: {join, join_kind(), source(), predicate()}.
-type set_operation_kind() :: union | union_all.
-type set_operation() :: {set_operation, set_operation_kind(), select_query()}.
-type cte() :: {cte, binary(), select_query()}.
-type select_query() :: {select_query,
list(cte()),
list(select_item()),
gleam@option:option(source()),
list(join()),
gleam@option:option(predicate()),
list(expression()),
gleam@option:option(predicate()),
list(set_operation()),
list(order()),
gleam@option:option(integer()),
gleam@option:option(integer()),
boolean()}.
-type expression() :: {column_expr, galchemy@ast@schema:column_meta()} |
{value_expr, sql_value()} |
star_expr |
{function_expr, binary(), list(expression())} |
{unary_op_expr, unary_operator(), expression()} |
{binary_op_expr, expression(), binary_operator(), expression()} |
{window_expr, expression(), window_definition()} |
{subquery_expr, select_query()}.