-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()}.