Lotus.SQL.OptionalClause (Lotus v0.16.5)

Copy Markdown View Source

Processes [[...]] optional clause syntax in SQL queries.

Clauses wrapped in double brackets are stripped entirely when the enclosed variables have no value, making them optional. When all variables inside a block have values, the brackets are removed and the content is kept.

Example

SELECT * FROM users
WHERE 1=1
  [[AND "name" ILIKE '%' || {{name}} || '%']]
  [[AND "status" = {{status}}]]

If name has no value, the first [[...]] block is removed entirely. If status has a value, the second block becomes AND "status" = {{status}}.

Summary

Functions

Returns a MapSet of variable names that appear inside [[...]] blocks.

Processes optional clauses in SQL. Removes [[...]] blocks where any enclosed variable has no value. Keeps content (without brackets) when all variables have values.

Strips [[ and ]] brackets from the string, keeping the inner content.

Functions

extract_optional_variable_names(sql)

@spec extract_optional_variable_names(String.t()) :: MapSet.t()

Returns a MapSet of variable names that appear inside [[...]] blocks.

process(sql, supplied_vars)

@spec process(String.t(), map()) :: String.t()

Processes optional clauses in SQL. Removes [[...]] blocks where any enclosed variable has no value. Keeps content (without brackets) when all variables have values.

A variable is considered to have "no value" when it is missing from supplied_vars, is nil, or is "".

strip_brackets(content)

@spec strip_brackets(String.t()) :: String.t()

Strips [[ and ]] brackets from the string, keeping the inner content.

Unlike process/2, this does not evaluate variables — it unconditionally removes all bracket pairs. Useful for preparing SQL for validation where all optional clauses should be included.

Examples

iex> Lotus.SQL.OptionalClause.strip_brackets("WHERE 1=1 [[AND status = 'active']]")
"WHERE 1=1 AND status = 'active'"