# Database Usage

**Requirements**

Currently, only SQLite is supported. [SQLite](https://www.sqlite.org/) operates using a local `.db` file for data storage and retrieval, as opposed to a server-based database.

To view the tables, you'll need SQLite installed. However, to begin, you can simply create an empty `.db` file using the `touch` command. For example:

Copy

Copy

```
touch run_tests.db
```

**Running with an external DB**

You can run Cover Agent using the `--log-db-path` option. For example:

Copy

Copy

```
cover-agent \
  --source-file-path "templated_tests/python_fastapi/app.py" \
  --test-file-path "templated_tests/python_fastapi/test_app.py" \
  --code-coverage-report-path "templated_tests/python_fastapi/coverage.xml" \
  --test-command "pytest --cov=. --cov-report=xml --cov-report=term" \
  --test-command-dir "templated_tests/python_fastapi" \
  --coverage-type "cobertura" \
  --desired-coverage 70 \
  --max-iterations 10 \
  --log-db-path "run_tests.db"
```

Cover Agent will create a table called `unit_test_generation_attempts` within the database.

**Integration Tests**

Run the integration test suite and provide the local `.db` file to each Docker container.

Copy

Copy

```
LOG_DB_PATH="<full_path_to_root_folder>/run_tests.db" tests_integration/test_all.sh
```

**Observing the test data**

View the test results using either an external database viewer or the basic SQLite command-line tool.

Copy

Copy

```
sqlite3 run_tests.db
```

After executing some tests, a table named `unit_test_generation_attempts` will be created.

Copy

Copy

```
sqlite> .tables
unit_test_generation_attempts
```

To get the definition of the table run:

Copy

Copy

```
sqlite> PRAGMA table_info(unit_test_generation_attempts);
0|id|INTEGER|1||1
1|run_time|DATETIME|0||0
2|status|VARCHAR|0||0
3|reason|TEXT|0||0
4|exit_code|INTEGER|0||0
5|stderr|TEXT|0||0
6|stdout|TEXT|0||0
7|test_code|TEXT|0||0
8|imports|TEXT|0||0
```

To display all test results run the query:

Copy

Copy

```
select * from unit_test_generation_attempts;
```

This query may be easier to view outside of the CLI.

You can also filter the results to show only failed tests, for example:

Copy

Copy

```
sqlite> select * from unit_test_generation_attempts where status = "FAIL";
```
