Extracts variable-to-column bindings from SQL queries.
Parses SQL queries to determine which table.column each {{variable}} binds to.
Uses regex-based heuristics (not full SQL parsing) for simplicity and performance.
Handles 95% of common query patterns.
Supported Patterns
- Explicit:
WHERE users.id = {{user_id}} - Implicit:
WHERE id = {{user_id}}(resolves table from FROM clause) - Multiple vars:
WHERE users.id = {{id}} AND users.email = {{email}} - Aliased tables:
WHERE u.id = {{id}}(resolves alias 'u' to 'users')
Limitations
- Does not handle subqueries or complex JOINs perfectly
- Assumes first table in FROM clause for implicit bindings
- Best-effort heuristics, not a full SQL parser
Usage
sql = "SELECT * FROM users WHERE users.id = {{user_id}}"
VariableResolver.resolve_variables(sql)
# => [%{variable: "user_id", table: "users", column: "id"}]
Summary
Functions
Extract variable bindings from SQL statement.
Types
Functions
@spec resolve_variables(sql :: String.t()) :: [variable_binding()]
Extract variable bindings from SQL statement.
Returns list of bindings for each variable found in the query.
Examples
# Explicit binding
resolve_variables("SELECT * FROM users WHERE users.id = {{user_id}}")
# => [%{variable: "user_id", table: "users", column: "id"}]
# Implicit binding
resolve_variables("SELECT * FROM users WHERE id = {{user_id}}")
# => [%{variable: "user_id", table: "users", column: "id"}]
# With alias
resolve_variables("SELECT * FROM users u WHERE u.id = {{user_id}}")
# => [%{variable: "user_id", table: "users", column: "id"}]