|
2 | 2 |
|
3 | 3 | [](https://github.com/elixir-sqlite/ecto_sqlite3/actions)
|
4 | 4 |
|
5 |
| -An Ecto SQLite3 Adapter. |
| 5 | +An Ecto SQLite3 Adapter. Uses [Exqlite](https://github.com/elixir-sqlite/exqlite) as the driver to communicate with sqlite3. |
6 | 6 |
|
| 7 | +## Caveats and limitations |
7 | 8 |
|
8 |
| -## Caveats |
9 |
| - |
10 |
| -* Prepared statements are not cached. |
11 |
| -* Prepared statements are not immutable. You must be careful when manipulating |
12 |
| - statements and binding values to statements. Do not try to manipulate the |
13 |
| - statements concurrently. Keep it isolated to one process. |
14 |
| -* Adding a `CHECK` constraint is not supported by the Ecto adapter. This is due |
15 |
| - to how Ecto handles specifying constraints. In SQLite you must specify the |
16 |
| - `CHECK` on creation. |
17 |
| -* All native calls are run through the Dirty NIF scheduler. |
18 |
| -* Datetimes are stored without offsets. This is due to how SQLite3 handles date |
19 |
| - and times. If you would like to store a timezone, you will need to create a |
20 |
| - second column somewhere storing the timezone name and shifting it when you |
21 |
| - get it from the database. This is more reliable than storing the offset as |
22 |
| - `+03:00` as it does not respect daylight savings time. |
23 |
| - |
| 9 | +See [Limitations](https://hexdocs.pm/ecto_sqlite3/Ecto.Adapters.SQLite3.html#module-limitations) in Hexdocs. |
24 | 10 |
|
25 | 11 | ## Installation
|
26 | 12 |
|
27 | 13 | ```elixir
|
28 | 14 | defp deps do
|
29 |
| - {:ecto_sqlite3, "~> 0.5.0"} |
| 15 | + {:ecto_sqlite3, "~> 0.5.2"} |
30 | 16 | end
|
31 | 17 | ```
|
32 | 18 |
|
|
42 | 28 |
|
43 | 29 | Configure your repository similar to the following. If you want to know more
|
44 | 30 | about the possible options to pass the repository, checkout the documentation
|
45 |
| -for `SQLite3.Connection.connect/1`. It will have more information on what is |
46 |
| -configurable. |
| 31 | +for [`Ecto.Adapters.SQLite`](https://hexdocs.pm/ecto_sqlite3/). It will have more information on what is configurable. |
47 | 32 |
|
48 | 33 | ```elixir
|
49 | 34 | config :my_app,
|
50 | 35 | ecto_repos: [MyApp.Repo]
|
51 | 36 |
|
52 | 37 | config :my_app, MyApp.Repo,
|
53 | 38 | database: "path/to/my/database.db",
|
54 |
| - show_sensitive_data_on_connection_error: false, |
55 |
| - journal_mode: :wal, |
56 |
| - cache_size: -64000, |
57 |
| - temp_store: :memory, |
58 |
| - pool_size: 1 |
59 | 39 | ```
|
60 |
| - |
61 |
| - |
62 |
| -### Note |
63 |
| - |
64 |
| -* Pool size is set to `1` but can be increased to `4`. When set to `10` there |
65 |
| - was a lot of database busy errors. Currently this is a known issue and is |
66 |
| - being looked in to. |
67 |
| - |
68 |
| -* Cache size is a negative number because that is how SQLite3 defines the cache |
69 |
| - size in kilobytes. If you make it positive, that is the number of pages in |
70 |
| - memory to use. Both have their pros and cons. Check the documentation out for |
71 |
| - [SQLite3][pragma]. |
72 |
| - |
73 |
| -* Uses [Exqlite][exqlite] as the driver to communicate with sqlite3. |
74 |
| - |
75 |
| -## Contributing |
76 |
| - |
77 |
| -Feel free to check the project out and submit pull requests. |
78 |
| - |
79 |
| -[pragma]: <https://www.sqlite.org/pragma.html> |
80 |
| -[exqlite]: <https://github.com/warmwaffles/exqlite> |
0 commit comments