dbcli / dbcli/litecli

Using extension function in a VIEW causes exception to be printed

Ouverte
#265 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
3.3k
Forks
95
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

With current git:
```sql
.load ./crypto -- included in popular sqlean extension for sqlite

CREATE TABLE products (
product_id INTEGER PRIMARY KEY,
product_name TEXT NOT NULL
);

INSERT INTO products (product_name) VALUES ('Wireless Mouse');

CREATE VIEW v_hashed_product_id AS
SELECT
hex(crypto_blake3(product_id))
FROM products;
```

Running this in the REPL prints out this exception:
```python
File "site-packages/litecli/completion_refresher.py", line 85, in _bg_refresh
refresher(completer, executor)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "site-packages/litecli/completion_refresher.py", line 128, in refresh_tables
table_cols = list(executor.table_columns())
File "site-packages/litecli/sqlexecute.py", line 197, in table_columns
cur.execute(self.table_columns_query)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such function: crypto_blake3
```
but the view is created and works as expected.

Furthermore, existing and then opening the db in litecli also prints this exception:
```text
$ litecli ./my.db
File "site-packages/litecli/completion_refresher.py", line 85, in _bg_refresh
refresher(completer, executor)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "site-packages/litecli/completion_refresher.py", line 128, in refresh_tables
table_cols = list(executor.table_columns())
File "site-packages/litecli/sqlexecute.py", line 197, in table_columns
cur.execute(self.table_columns_query)
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such function: crypto_blake3
my.db>
```

Here's a link to sqlean [binaries](https://github.com/nalgeon/sqlean/releases/latest) for testing.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Start by examining `litecli/completion_refresher.py` and `litecli/sqlexecute.py`, especially the background refresh and `table_columns()` query mentioned in the traceback. Reproduce with a SQLite view that uses an extension function unavailable to the connection, or open a database with such a view. Done means the CLI no longer prints an exception during completion refresh while the view remains usable.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python, sqlite
Domaine
cli, database
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
66/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.