# Ecto SQLite3 Adapter

[![Build Status](](
[![Hex Package](](
[![Hex Docs](](

An Ecto SQLite3 Adapter. Uses [Exqlite](
as the driver to communicate with sqlite3.

## Caveats and limitations

See [Limitations](
in Hexdocs.

## Installation

defp deps do
    {:ecto_sqlite3, "~> 0.9.0"}

## Usage

Define your repo similar to this.

defmodule MyApp.Repo do
  use Ecto.Repo, otp_app: :my_app, adapter: Ecto.Adapters.SQLite3

Configure your repository similar to the following. If you want to know more
about the possible options to pass the repository, checkout the documentation
for [`Ecto.Adapters.SQLite`]( It will have
more information on what is configurable.

config :my_app,
  ecto_repos: [MyApp.Repo]

config :my_app, MyApp.Repo,
  database: "path/to/my/database.db",

## Database Encryption

As of version 0.9, `exqlite` supports loading database engines at runtime rather than compiling `sqlite3.c` itself.
This can be used to support database level encryption via alternate engines such as [SQLCipher](
or the [Official SEE extension]( Once you have either of those projects installed
on your system, use the following environment variables during compilation:

# tell exqlite that we wish to use some other sqlite installation. this will prevent sqlite3.c and friends from compiling

# Tell exqlite where to find the `sqlite3.h` file
export EXQLITE_SYSTEM_CFLAGS=-I/usr/local/include/sqlcipher

# tell exqlite which sqlite implementation to use
export EXQLITE_SYSTEM_LDFLAGS=-L/usr/local/lib -lsqlcipher

Once you have `exqlite` configured, you can use the `:key` option in the database config to enable encryption:

config :my_app, MyApp.Repo,
  database: "path/to/my/encrypted-database.db",
  key: "super-secret'

## Benchmarks

We have some benchmarks comparing it against the `MySQL` and `Postgres` adapters.

You can read more about those at [bench/](bench/

## Running Tests

Running unit tests

mix test

Runing integration tests