dbcli / dbcli/litecli

Using extension function in a VIEW causes exception to be printed

Aperta
#265 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
3.3k
Fork
95
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python, sqlite
Ambito
cli, database
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
66/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.