Sqlitex.Statement

Provides an interface for working with sqlite prepared statements.

Care should be taken when using prepared statements directly - they are not immutable objects like most things in Elixir. Sharing a statement between different processes can cause problems if the processes accidentally interleave operations on the statement. It’s a good idea to create different statements per process, or to wrap the statements up in a GenServer to prevent interleaving operations.

Example

iex(2)> {:ok, db} = Sqlitex.open(":memory:")
iex(3)> Sqlitex.query(db, "CREATE TABLE data (id, name);")
[]
iex(6)> {:ok, statement} = Sqlitex.Statement.prepare(db, "INSERT INTO data VALUES (?, ?);")
iex(7)> Sqlitex.Statement.bind_values(statement, [1, "hello"])
iex(8)> Sqlitex.Statement.exec(statement)
:ok
iex(9)> {:ok, statement} = Sqlitex.Statement.prepare(db, "SELECT * FROM data;")
iex(10)> Sqlitex.Statement.fetch_all(statement)
[[id: 1, name: "hello"]]
iex(11)> Sqlitex.close(db)
:ok

Summary

bind_values!(statement, values)

Same as bind_values/2 but raises a Sqlitex.Statement.BindValuesError on error

bind_values(statement, values)

Binds values to a Sqlitex.Statement

exec!(statement)

Same as exec/1 but raises a Sqlitex.Statement.ExecError on error

exec(statement)

Runs a statement that returns no results

fetch_all!(statement, into \\ [])

Same as fetch_all/2 but raises a Sqlitex.Statement.FetchAllError on error

fetch_all(statement, into \\ [])

Fetches all rows using a statement

prepare!(db, sql)

Same as prepare/2 but raises a Sqlitex.Statement.PrepareError on error

prepare(db, sql)

Prepare a Sqlitex.Statement

time_to_string(arg1)

Functions

bind_values(statement, values)

Binds values to a Sqlitex.Statement

Parameters

  • statement - The statement to bind values into.
  • values - A list of values to bind into the statement.

Returns

  • {:ok, statement} on success
  • See :esqlite3.prepare for errors.

Value transformations

Some values will be transformed before insertion into the database.

  • nil - Converted to :undefined
  • true - Converted to 1
  • false - Converted to 0
  • datetime - Converted into a string. See datetime_to_string
  • %Decimal - Converted into a number.
bind_values!(statement, values)

Same as bind_values/2 but raises a Sqlitex.Statement.BindValuesError on error.

Returns the statement otherwise.

exec(statement)

Runs a statement that returns no results.

Should be called after the statement has been bound.

Parameters

  • statement - The statement to run.

Returns

  • :ok
  • {:error, error}
exec!(statement)

Same as exec/1 but raises a Sqlitex.Statement.ExecError on error.

Returns :ok otherwise.

fetch_all(statement, into \\ [])

Fetches all rows using a statement.

Should be called after the statement has been bound.

Parameters

  • statement - The statement to run.
  • into - The collection to put the results into. Defaults to an empty list.

Returns

  • {:ok, results}
  • {:error, error}
fetch_all!(statement, into \\ [])

Same as fetch_all/2 but raises a Sqlitex.Statement.FetchAllError on error.

Returns the results otherwise.

prepare(db, sql)

Prepare a Sqlitex.Statement

Parameters

  • db - The database to prepare the statement for.
  • sql - The SQL of the statement to prepare.

Returns

  • {:ok, statement} on success
  • See :esqlite3.prepare for errors.
prepare!(db, sql)

Same as prepare/2 but raises a Sqlitex.Statement.PrepareError on error.

Returns a new statement otherwise.

time_to_string(arg1)