Skip to content

Commit c330935

Browse files
committed
Reflow documentation to around the 88-90 column
1 parent 97c9cb4 commit c330935

File tree

1 file changed

+86
-73
lines changed

1 file changed

+86
-73
lines changed

lib/ecto/adapters/sqlite3.ex

+86-73
Original file line numberDiff line numberDiff line change
@@ -13,59 +13,63 @@ defmodule Ecto.Adapters.SQLite3 do
1313
1414
* `:database` - The path to the database. In memory is allowed. You can use
1515
`:memory` or `":memory:"` to designate that.
16-
* `:default_transaction_mode` - one of `deferred` (default), `immediate`,
17-
or `exclusive`. If a mode is not specified in a call to `Repo.transaction/2`,
18-
this will be the default transaction mode.
19-
* `:journal_mode` - Sets the journal mode for the sqlite connection. Can be
20-
one of the following `:delete`, `:truncate`, `:persist`, `:memory`,
21-
`:wal`, or `:off`. Defaults to `:wal`.
22-
* `:temp_store` - Sets the storage used for temporary tables. Default is
23-
`:default`. Allowed values are `:default`, `:file`, `:memory`.
24-
* `:synchronous` - Can be `:extra`, `:full`, `:normal`, or `:off`. Defaults
25-
to `:normal`.
26-
* `:foreign_keys` - Sets if foreign key checks should be enforced or not.
27-
Can be `:on` or `:off`. Default is `:on`.
28-
* `:cache_size` - Sets the cache size to be used for the connection. This is
29-
an odd setting as a positive value is the number of pages in memory to use
30-
and a negative value is the size in kilobytes to use. Default is `-64000`.
31-
* `:cache_spill` - The cache_spill pragma enables or disables the ability of
32-
the pager to spill dirty cache pages to the database file in the middle of
33-
a transaction. By default it is `:on`, and for most applications, it
34-
should remain so.
16+
* `:default_transaction_mode` - one of `:deferred` (default), `:immediate`, or
17+
`:exclusive`. If a mode is not specified in a call to `Repo.transaction/2`, this
18+
will be the default transaction mode.
19+
* `:journal_mode` - Sets the journal mode for the sqlite connection. Can be one of
20+
the following `:delete`, `:truncate`, `:persist`, `:memory`, `:wal`, or `:off`.
21+
Defaults to `:wal`.
22+
* `:temp_store` - Sets the storage used for temporary tables. Default is `:default`.
23+
Allowed values are `:default`, `:file`, `:memory`.
24+
* `:synchronous` - Can be `:extra`, `:full`, `:normal`, or `:off`. Defaults to `:normal`.
25+
* `:foreign_keys` - Sets if foreign key checks should be enforced or not. Can be
26+
`:on` or `:off`. Default is `:on`.
27+
* `:cache_size` - Sets the cache size to be used for the connection. This is an odd
28+
setting as a positive value is the number of pages in memory to use and a negative
29+
value is the size in kilobytes to use. Default is `-64000`.
30+
* `:cache_spill` - The cache_spill pragma enables or disables the ability of the
31+
pager to spill dirty cache pages to the database file in the middle of a
32+
transaction. By default it is `:on`, and for most applications, it should remain
33+
so.
3534
* `:case_sensitive_like` - whether LIKE is case-sensitive or not. Can be
3635
`:off` or `:on`. Defaults to `:off`.
37-
* `:auto_vacuum` - Defaults to `:none`. Can be `:none`, `:full` or
38-
`:incremental`. Depending on the database size, `:incremental` may be
39-
beneficial.
36+
* `:auto_vacuum` - Defaults to `:none`. Can be `:none`, `:full` or `:incremental`.
37+
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.
42-
* `:secure_delete` - Defaults to `:off`. Can be `:off` or `:on`. If `:on`, it will cause SQLite3
43-
to overwrite records that were deleted with zeros.
44-
* `:wal_auto_check_point` - Sets the write-ahead log auto-checkpoint
45-
interval. Default is `1000`. Setting the auto-checkpoint size to zero or a
46-
negative value turns auto-checkpointing off.
40+
* `:secure_delete` - Defaults to `:off`. Can be `:off` or `:on`. If `:on`, it will
41+
cause SQLite3 to overwrite records that were deleted with zeros.
42+
* `:wal_auto_check_point` - Sets the write-ahead log auto-checkpoint interval.
43+
Default is `1000`. Setting the auto-checkpoint size to zero or a negative value
44+
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`.
50-
* `:binary_id_type` - Defaults to `:string`. Determines how binary IDs are stored in the database and the type of
51-
`:binary_id` columns. See the [section on binary ID types](#module-binary-id-types) for more details.
52-
* `:uuid_type` - Defaults to `:string`. Determines the type of `:uuid` columns. Possible values and
53-
column types are the same as for [binary IDs](#module-binary-id-types).
54-
* `:datetime_type` - Defaults to `:iso8601`. Determines how datetime fields are stored in the database.
55-
The allowed values are `:iso8601` and `:text_datetime`. `:iso8601` corresponds to a string of the form
56-
`YYYY-MM-DDThh:mm:ss` and `:text_datetime` corresponds to a string of the form `YYYY-MM-DD hh:mm:ss`
57-
* `:load_extensions` - list of paths identifying extensions to load. Defaults to []. The provided list will
58-
be merged with the global extensions list, set on :exqlite, :load_extensions. Be aware that the path should
59-
handle pointing to a library compiled for the current architecture. See `Exqlite.Connection.connect/1` for more.
48+
* `:binary_id_type` - Defaults to `:string`. Determines how binary IDs are stored in
49+
the database and the type of `:binary_id` columns. See the
50+
[section on binary ID types](#module-binary-id-types) for more details.
51+
* `:uuid_type` - Defaults to `:string`. Determines the type of `:uuid` columns.
52+
Possible values and column types are the same as for
53+
[binary IDs](#module-binary-id-types).
54+
* `:datetime_type` - Defaults to `:iso8601`. Determines how datetime fields are
55+
stored in the database. The allowed values are `:iso8601` and `:text_datetime`.
56+
`:iso8601` corresponds to a string of the form `YYYY-MM-DDThh:mm:ss` and
57+
`:text_datetime` corresponds to a string of the form `YYYY-MM-DD hh:mm:ss`
58+
* `:load_extensions` - list of paths identifying extensions to load. Defaults to `[]`.
59+
The provided list will be merged with the global extensions list, set on
60+
`:exqlite, :load_extensions`. Be aware that the path should handle pointing to a
61+
library compiled for the current architecture. See `Exqlite.Connection.connect/1`
62+
for more.
6063
6164
For more information about the options above, see [sqlite documentation][1]
6265
6366
### Differences between SQLite and Ecto SQLite defaults
6467
6568
For the most part, the defaults we provide above match the defaults that SQLite usually
66-
ships with. However, SQLite has conservative defaults due to its need to be strictly backwards
67-
compatible, so some of them do not necessarily match "best practices". Below are the defaults
68-
we provide above that differ from the normal SQLite defaults, along with rationale.
69+
ships with. However, SQLite has conservative defaults due to its need to be strictly
70+
backwards compatible, so some of them do not necessarily match "best practices". Below
71+
are the defaults we provide above that differ from the normal SQLite defaults, along
72+
with rationale.
6973
7074
* `:journal_mode` - we use `:wal`, as it is vastly superior
7175
for concurrent access. SQLite usually defaults to `:delete`.
@@ -87,16 +91,18 @@ defmodule Ecto.Adapters.SQLite3 do
8791
8892
### Binary ID types
8993
90-
The `:binary_id_type` configuration option allows configuring how `:binary_id` fields are stored in the database as
91-
well as the type of the column in which these IDs will be stored. The possible values are:
94+
The `:binary_id_type` configuration option allows configuring how `:binary_id` fields
95+
are stored in the database as well as the type of the column in which these IDs will
96+
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`.
9499
95100
The main differences between the two formats are as follows:
96-
* When stored as binary, UUIDs require much less space in the database. IDs stored as strings require 36 bytes each,
97-
while IDs stored as binary only require 16 bytes.
98-
* Because SQLite does not have a dedicated UUID type, most clients cannot represent UUIDs stored as binary in a human
99-
readable format. Therefore, IDs stored as strings may be easier to work with if manual manipulation is required.
101+
* When stored as binary, UUIDs require much less space in the database. IDs stored as
102+
strings require 36 bytes each, while IDs stored as binary only require 16 bytes.
103+
* Because SQLite does not have a dedicated UUID type, most clients cannot represent
104+
UUIDs stored as binary in a human readable format. Therefore, IDs stored as strings
105+
may be easier to work with if manual manipulation is required.
100106
101107
## Limitations and caveats
102108
@@ -116,24 +122,24 @@ defmodule Ecto.Adapters.SQLite3 do
116122
### Async Sandbox testing
117123
118124
The Ecto SQLite3 adapter does not support async tests when used with
119-
`Ecto.Adapters.SQL.Sandbox`. This is due to SQLite only allowing up one
120-
write transaction at a time, which often does not work with the Sandbox approach of
121-
wrapping each test in a transaction.
125+
`Ecto.Adapters.SQL.Sandbox`. This is due to SQLite only allowing up one write
126+
transaction at a time, which often does not work with the Sandbox approach of wrapping
127+
each test in a transaction.
122128
123129
### LIKE match on BLOB columns
124130
125-
We have the DSQLITE_LIKE_DOESNT_MATCH_BLOBS compile-time option set to true,
126-
as [recommended][3] by SQLite. This means you cannot do LIKE queries on BLOB columns.
131+
We have the DSQLITE_LIKE_DOESNT_MATCH_BLOBS compile-time option set to true, as
132+
[recommended][3] by SQLite. This means you cannot do LIKE queries on BLOB columns.
127133
128134
### Case sensitivity
129135
130136
Case sensitivity for `LIKE` is off by default, and controlled by the `:case_sensitive_like`
131137
option outlined above.
132138
133139
However, for equality comparison, case sensitivity is always _on_.
134-
If you want to make a column not be case sensitive, for email storage for example, you can
135-
make it case insensitive by using the [`COLLATE NOCASE`][6] option in SQLite. This is configured
136-
via the `:collate` option.
140+
If you want to make a column not be case sensitive, for email storage for example, you
141+
can make it case insensitive by using the [`COLLATE NOCASE`][6] option in SQLite. This
142+
is configured via the `:collate` option.
137143
138144
So instead of:
139145
@@ -145,33 +151,40 @@ defmodule Ecto.Adapters.SQLite3 do
145151
146152
### Check constraints
147153
148-
SQLite3 supports specifying check constraints on the table or on the column definition. We currently only
149-
support adding a check constraint via a column definition, since the table definition approach only
150-
works at table-creation time and cannot be added at table-alter time. You can see more information in
151-
the SQLite3 [CREATE TABLE documentation](https://sqlite.org/lang_createtable.html).
154+
SQLite3 supports specifying check constraints on the table or on the column definition.
155+
We currently only support adding a check constraint via a column definition, since the
156+
table definition approach only works at table-creation time and cannot be added at
157+
table-alter time. You can see more information in the SQLite3
158+
[CREATE TABLE documentation](https://sqlite.org/lang_createtable.html).
152159
153-
Because of this, you cannot add a constraint via the normal `Ecto.Migration.constraint/3` method, as that
154-
operates via ALTER TABLE ADD CONSTRAINT, and this type of ALTER TABLE operation SQLite3 does not support.
155-
You can however get the full functionality by adding a constraint at the column level, specifying the name
156-
and expression. Per the SQLite3 documentation, there is no _functional_ difference between a column or table constraint.
160+
Because of this, you cannot add a constraint via the normal `Ecto.Migration.constraint/3`
161+
method, as that operates via `ALTER TABLE ADD CONSTRAINT`, and this type of `ALTER TABLE`
162+
operation SQLite3 does not support. You can however get the full functionality by
163+
adding a constraint at the column level, specifying the name and expression. Per the
164+
SQLite3 documentation, there is no _functional_ difference between a column or table
165+
constraint.
157166
158167
Thus, adding a check constraint for a new column is as simple as:
159168
160169
add :email, :string, check: %{name: "test_constraint", expr: "email != '[email protected]'"}
161170
162171
### Handling foreign key constraints in changesets
163172
164-
Unfortunately, unlike other databases, SQLite3 does not provide the precise name of the constraint violated,
165-
but only the columns within that constraint (if it provides any information at all). Because of this, changeset
166-
functions like `Ecto.Changeset.foreign_key_constraint/3` may not work at all.
167-
168-
This is because the above functions depend on the Ecto Adapter returning the name of the violated constraint,
169-
which you annotate in your changeset so that Ecto can convert the constraint violation into the correct
170-
updated changeset when the constraint is hit during a `m:Ecto.Repo.update/2` or `m:Ecto.Repo.insert/2` operation.
171-
Since we cannot get the name of the violated constraint back from SQLite3 at `INSERT` or `UPDATE` time,
172-
there is no way to effectively use these changeset functions. This is a SQLite3 limitation.
173-
174-
See [this GitHub issue](https://github.com/elixir-sqlite/ecto_sqlite3/issues/42) for more details.
173+
Unfortunately, unlike other databases, SQLite3 does not provide the precise name of
174+
the constraint violated, but only the columns within that constraint (if it provides
175+
any information at all). Because of this, changeset functions like
176+
`Ecto.Changeset.foreign_key_constraint/3` may not work at all.
177+
178+
This is because the above functions depend on the Ecto Adapter returning the name of
179+
the violated constraint, which you annotate in your changeset so that Ecto can convert
180+
the constraint violation into the correct updated changeset when the constraint is hit
181+
during a `c:Ecto.Repo.update/2` or `c:Ecto.Repo.insert/2` operation. Since we cannot
182+
get the name of the violated constraint back from SQLite3 at `INSERT` or `UPDATE`
183+
time, there is no way to effectively use these changeset functions. This is a SQLite3
184+
limitation.
185+
186+
See [this GitHub issue](https://github.com/elixir-sqlite/ecto_sqlite3/issues/42) for
187+
more details.
175188
176189
### Schemaless queries
177190

0 commit comments

Comments
 (0)