Using extension function in a VIEW causes exception to be printed

Aperta
#265 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

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

Direzione di ricerca

Inizia esaminando litecli/completion_refresher.py e litecli/sqlexecute.py, in particolare l’aggiornamento in background e la query table_columns() menzionata nel traceback. Riproduci il problema con una vista SQLite che utilizza una funzione di estensione non disponibile per la connessione, oppure apri un database con una vista di questo tipo. Il lavoro è completato quando la CLI non stampa più un’eccezione durante l’aggiornamento del completamento e la vista rimane utilizzabile.

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

Descrizione

With current git:

.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:

  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:

$ 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 for testing.

Lingua principale
Python
Stelle
3.3k
Fork
95
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dbcli/litecli

Tutte le issue di dbcli/litecli

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.