ducky/query

Query execution and result handling.

Values

pub fn query(
  conn: connection.Connection,
  sql: String,
) -> Result(types.DataFrame, error.Error)

Executes a SQL query and returns structured results.

The query runs on a dirty scheduler to avoid blocking the BEAM. Large result sets are streamed to prevent memory exhaustion.

Examples

query(conn, "SELECT id, name FROM users WHERE active = true")
// => Ok(DataFrame(columns: ["id", "name"], rows: [...]))
pub fn query_params(
  conn: connection.Connection,
  sql: String,
  params: List(types.Value),
) -> Result(types.DataFrame, error.Error)

Executes a parameterized SQL query with bound parameters to prevent SQL injection.

Examples

query_params(conn, "SELECT * FROM users WHERE id = ? AND age > ?", [
  types.Integer(42),
  types.Integer(18),
])
// => Ok(DataFrame(...))

Security

Always use this function when including user input in queries:

// UNSAFE - SQL injection risk
query(conn, "SELECT * FROM users WHERE name = '" <> user_input <> "'")

// SAFE - parameters are properly escaped
query_params(conn, "SELECT * FROM users WHERE name = ?", [types.Text(user_input)])
Search Document