···13131414 * `:database` - The path to the database. In memory is allowed. You can use
1515 `:memory` or `":memory:"` to designate that.
1616- * `:default_transaction_mode` - one of `deferred` (default), `immediate`,
1717- or `exclusive`. If a mode is not specified in a call to `Repo.transaction/2`,
1818- this will be the default transaction mode.
1919- * `:journal_mode` - Sets the journal mode for the sqlite connection. Can be
2020- one of the following `:delete`, `:truncate`, `:persist`, `:memory`,
2121- `:wal`, or `:off`. Defaults to `:wal`.
2222- * `:temp_store` - Sets the storage used for temporary tables. Default is
2323- `:default`. Allowed values are `:default`, `:file`, `:memory`.
2424- * `:synchronous` - Can be `:extra`, `:full`, `:normal`, or `:off`. Defaults
2525- to `:normal`.
2626- * `:foreign_keys` - Sets if foreign key checks should be enforced or not.
2727- Can be `:on` or `:off`. Default is `:on`.
2828- * `:cache_size` - Sets the cache size to be used for the connection. This is
2929- an odd setting as a positive value is the number of pages in memory to use
3030- and a negative value is the size in kilobytes to use. Default is `-64000`.
3131- * `:cache_spill` - The cache_spill pragma enables or disables the ability of
3232- the pager to spill dirty cache pages to the database file in the middle of
3333- a transaction. By default it is `:on`, and for most applications, it
3434- should remain so.
1616+ * `:default_transaction_mode` - one of `:deferred` (default), `:immediate`, or
1717+ `:exclusive`. If a mode is not specified in a call to `Repo.transaction/2`, this
1818+ will be the default transaction mode.
1919+ * `:journal_mode` - Sets the journal mode for the sqlite connection. Can be one of
2020+ the following `:delete`, `:truncate`, `:persist`, `:memory`, `:wal`, or `:off`.
2121+ Defaults to `:wal`.
2222+ * `:temp_store` - Sets the storage used for temporary tables. Default is `:default`.
2323+ Allowed values are `:default`, `:file`, `:memory`.
2424+ * `:synchronous` - Can be `:extra`, `:full`, `:normal`, or `:off`. Defaults to `:normal`.
2525+ * `:foreign_keys` - Sets if foreign key checks should be enforced or not. Can be
2626+ `:on` or `:off`. Default is `:on`.
2727+ * `:cache_size` - Sets the cache size to be used for the connection. This is an odd
2828+ setting as a positive value is the number of pages in memory to use and a negative
2929+ value is the size in kilobytes to use. Default is `-64000`.
3030+ * `:cache_spill` - The cache_spill pragma enables or disables the ability of the
3131+ pager to spill dirty cache pages to the database file in the middle of a
3232+ transaction. By default it is `:on`, and for most applications, it should remain
3333+ so.
3534 * `:case_sensitive_like` - whether LIKE is case-sensitive or not. Can be
3635 `:off` or `:on`. Defaults to `:off`.
3737- * `:auto_vacuum` - Defaults to `:none`. Can be `:none`, `:full` or
3838- `:incremental`. Depending on the database size, `:incremental` may be
3939- beneficial.
3636+ * `:auto_vacuum` - Defaults to `:none`. Can be `:none`, `:full` or `:incremental`.
3737+ Depending on the database size, `:incremental` may be beneficial.
4038 * `:locking_mode` - Defaults to `:normal`. Allowed values are `:normal` or
4139 `:exclusive`. See [sqlite documentation][1] for more information.
4242- * `:secure_delete` - Defaults to `:off`. Can be `:off` or `:on`. If `:on`, it will cause SQLite3
4343- to overwrite records that were deleted with zeros.
4444- * `:wal_auto_check_point` - Sets the write-ahead log auto-checkpoint
4545- interval. Default is `1000`. Setting the auto-checkpoint size to zero or a
4646- negative value turns auto-checkpointing off.
4040+ * `:secure_delete` - Defaults to `:off`. Can be `:off` or `:on`. If `:on`, it will
4141+ cause SQLite3 to overwrite records that were deleted with zeros.
4242+ * `:wal_auto_check_point` - Sets the write-ahead log auto-checkpoint interval.
4343+ Default is `1000`. Setting the auto-checkpoint size to zero or a negative value
4444+ turns auto-checkpointing off.
4745 * `:busy_timeout` - Sets the busy timeout in milliseconds for a connection.
4846 Default is `2000`.
4947 * `:pool_size` - the size of the connection pool. Defaults to `5`.
5050- * `:binary_id_type` - Defaults to `:string`. Determines how binary IDs are stored in the database and the type of
5151- `:binary_id` columns. See the [section on binary ID types](#module-binary-id-types) for more details.
5252- * `:uuid_type` - Defaults to `:string`. Determines the type of `:uuid` columns. Possible values and
5353- column types are the same as for [binary IDs](#module-binary-id-types).
5454- * `:datetime_type` - Defaults to `:iso8601`. Determines how datetime fields are stored in the database.
5555- The allowed values are `:iso8601` and `:text_datetime`. `:iso8601` corresponds to a string of the form
5656- `YYYY-MM-DDThh:mm:ss` and `:text_datetime` corresponds to a string of the form `YYYY-MM-DD hh:mm:ss`
5757- * `:load_extensions` - list of paths identifying extensions to load. Defaults to []. The provided list will
5858- be merged with the global extensions list, set on :exqlite, :load_extensions. Be aware that the path should
5959- handle pointing to a library compiled for the current architecture. See `Exqlite.Connection.connect/1` for more.
4848+ * `:binary_id_type` - Defaults to `:string`. Determines how binary IDs are stored in
4949+ the database and the type of `:binary_id` columns. See the
5050+ [section on binary ID types](#module-binary-id-types) for more details.
5151+ * `:uuid_type` - Defaults to `:string`. Determines the type of `:uuid` columns.
5252+ Possible values and column types are the same as for
5353+ [binary IDs](#module-binary-id-types).
5454+ * `:datetime_type` - Defaults to `:iso8601`. Determines how datetime fields are
5555+ stored in the database. The allowed values are `:iso8601` and `:text_datetime`.
5656+ `:iso8601` corresponds to a string of the form `YYYY-MM-DDThh:mm:ss` and
5757+ `:text_datetime` corresponds to a string of the form `YYYY-MM-DD hh:mm:ss`
5858+ * `:load_extensions` - list of paths identifying extensions to load. Defaults to `[]`.
5959+ The provided list will be merged with the global extensions list, set on
6060+ `:exqlite, :load_extensions`. Be aware that the path should handle pointing to a
6161+ library compiled for the current architecture. See `Exqlite.Connection.connect/1`
6262+ for more.
60636164 For more information about the options above, see [sqlite documentation][1]
62656366 ### Differences between SQLite and Ecto SQLite defaults
64676568 For the most part, the defaults we provide above match the defaults that SQLite usually
6666- ships with. However, SQLite has conservative defaults due to its need to be strictly backwards
6767- compatible, so some of them do not necessarily match "best practices". Below are the defaults
6868- we provide above that differ from the normal SQLite defaults, along with rationale.
6969+ ships with. However, SQLite has conservative defaults due to its need to be strictly
7070+ backwards compatible, so some of them do not necessarily match "best practices". Below
7171+ are the defaults we provide above that differ from the normal SQLite defaults, along
7272+ with rationale.
69737074 * `:journal_mode` - we use `:wal`, as it is vastly superior
7175 for concurrent access. SQLite usually defaults to `:delete`.
···87918892 ### Binary ID types
89939090- The `:binary_id_type` configuration option allows configuring how `:binary_id` fields are stored in the database as
9191- well as the type of the column in which these IDs will be stored. The possible values are:
9494+ The `:binary_id_type` configuration option allows configuring how `:binary_id` fields
9595+ are stored in the database as well as the type of the column in which these IDs will
9696+ be stored. The possible values are:
9297 * `:string` (default): IDs are stored as strings, and the type of the column is `TEXT`.
9398 * `:binary`: IDs are stored in their raw binary form, and the type of the column is `BLOB`.
949995100 The main differences between the two formats are as follows:
9696- * When stored as binary, UUIDs require much less space in the database. IDs stored as strings require 36 bytes each,
9797- while IDs stored as binary only require 16 bytes.
9898- * Because SQLite does not have a dedicated UUID type, most clients cannot represent UUIDs stored as binary in a human
9999- readable format. Therefore, IDs stored as strings may be easier to work with if manual manipulation is required.
101101+ * When stored as binary, UUIDs require much less space in the database. IDs stored as
102102+ strings require 36 bytes each, while IDs stored as binary only require 16 bytes.
103103+ * Because SQLite does not have a dedicated UUID type, most clients cannot represent
104104+ UUIDs stored as binary in a human readable format. Therefore, IDs stored as strings
105105+ may be easier to work with if manual manipulation is required.
100106101107 ## Limitations and caveats
102108···116122 ### Async Sandbox testing
117123118124 The Ecto SQLite3 adapter does not support async tests when used with
119119- `Ecto.Adapters.SQL.Sandbox`. This is due to SQLite only allowing up one
120120- write transaction at a time, which often does not work with the Sandbox approach of
121121- wrapping each test in a transaction.
125125+ `Ecto.Adapters.SQL.Sandbox`. This is due to SQLite only allowing up one write
126126+ transaction at a time, which often does not work with the Sandbox approach of wrapping
127127+ each test in a transaction.
122128123129 ### LIKE match on BLOB columns
124130125125- We have the DSQLITE_LIKE_DOESNT_MATCH_BLOBS compile-time option set to true,
126126- as [recommended][3] by SQLite. This means you cannot do LIKE queries on BLOB columns.
131131+ We have the DSQLITE_LIKE_DOESNT_MATCH_BLOBS compile-time option set to true, as
132132+ [recommended][3] by SQLite. This means you cannot do LIKE queries on BLOB columns.
127133128134 ### Case sensitivity
129135···131137 option outlined above.
132138133139 However, for equality comparison, case sensitivity is always _on_.
134134- If you want to make a column not be case sensitive, for email storage for example, you can
135135- make it case insensitive by using the [`COLLATE NOCASE`][6] option in SQLite. This is configured
136136- via the `:collate` option.
140140+ If you want to make a column not be case sensitive, for email storage for example, you
141141+ can make it case insensitive by using the [`COLLATE NOCASE`][6] option in SQLite. This
142142+ is configured via the `:collate` option.
137143138144 So instead of:
139145···145151146152 ### Check constraints
147153148148- SQLite3 supports specifying check constraints on the table or on the column definition. We currently only
149149- support adding a check constraint via a column definition, since the table definition approach only
150150- works at table-creation time and cannot be added at table-alter time. You can see more information in
151151- the SQLite3 [CREATE TABLE documentation](https://sqlite.org/lang_createtable.html).
154154+ SQLite3 supports specifying check constraints on the table or on the column definition.
155155+ We currently only support adding a check constraint via a column definition, since the
156156+ table definition approach only works at table-creation time and cannot be added at
157157+ table-alter time. You can see more information in the SQLite3
158158+ [CREATE TABLE documentation](https://sqlite.org/lang_createtable.html).
152159153153- Because of this, you cannot add a constraint via the normal `Ecto.Migration.constraint/3` method, as that
154154- operates via ALTER TABLE ADD CONSTRAINT, and this type of ALTER TABLE operation SQLite3 does not support.
155155- You can however get the full functionality by adding a constraint at the column level, specifying the name
156156- and expression. Per the SQLite3 documentation, there is no _functional_ difference between a column or table constraint.
160160+ Because of this, you cannot add a constraint via the normal `Ecto.Migration.constraint/3`
161161+ method, as that operates via `ALTER TABLE ADD CONSTRAINT`, and this type of `ALTER TABLE`
162162+ operation SQLite3 does not support. You can however get the full functionality by
163163+ adding a constraint at the column level, specifying the name and expression. Per the
164164+ SQLite3 documentation, there is no _functional_ difference between a column or table
165165+ constraint.
157166158167 Thus, adding a check constraint for a new column is as simple as:
159168···161170162171 ### Handling foreign key constraints in changesets
163172164164- Unfortunately, unlike other databases, SQLite3 does not provide the precise name of the constraint violated,
165165- but only the columns within that constraint (if it provides any information at all). Because of this, changeset
166166- functions like `Ecto.Changeset.foreign_key_constraint/3` may not work at all.
173173+ Unfortunately, unlike other databases, SQLite3 does not provide the precise name of
174174+ the constraint violated, but only the columns within that constraint (if it provides
175175+ any information at all). Because of this, changeset functions like
176176+ `Ecto.Changeset.foreign_key_constraint/3` may not work at all.
167177168168- This is because the above functions depend on the Ecto Adapter returning the name of the violated constraint,
169169- which you annotate in your changeset so that Ecto can convert the constraint violation into the correct
170170- updated changeset when the constraint is hit during a `m:Ecto.Repo.update/2` or `m:Ecto.Repo.insert/2` operation.
171171- Since we cannot get the name of the violated constraint back from SQLite3 at `INSERT` or `UPDATE` time,
172172- there is no way to effectively use these changeset functions. This is a SQLite3 limitation.
178178+ This is because the above functions depend on the Ecto Adapter returning the name of
179179+ the violated constraint, which you annotate in your changeset so that Ecto can convert
180180+ the constraint violation into the correct updated changeset when the constraint is hit
181181+ during a `c:Ecto.Repo.update/2` or `c:Ecto.Repo.insert/2` operation. Since we cannot
182182+ get the name of the violated constraint back from SQLite3 at `INSERT` or `UPDATE`
183183+ time, there is no way to effectively use these changeset functions. This is a SQLite3
184184+ limitation.
173185174174- See [this GitHub issue](https://github.com/elixir-sqlite/ecto_sqlite3/issues/42) for more details.
186186+ See [this GitHub issue](https://github.com/elixir-sqlite/ecto_sqlite3/issues/42) for
187187+ more details.
175188176189 ### Schemaless queries
177190