NUMERIC reads: full digits arrive, the decode drops them
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
Inizia in src/crate/client/http.py alla riga 244 e riproduci l’esempio NUMERIC con CrateDB 6.4.2. Confronta la decodifica attuale di orjson con stdlib json.loads usando parse_float=Decimal, quindi determina come un’opzione di connessione dovrebbe esporre letture numeriche esatte preservando il comportamento esistente di float; il lavoro è completato quando le cifre riportate vengono mantenute e l’opzione è coperta dalla verifica.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The read-side follow-up promised in crate/sqlalchemy-cratedb#300, with the measurement #652 was missing. As @matriv said there, the full number reaches the client; the digits are dropped by this driver's decode.
On CrateDB 6.4.2, with 1.234567890123456789012345 stored in a NUMERIC(38, 24) column, the raw /_sql response carries every digit:
{"cols":["n"],"rows":[[1.234567890123456789012345]],"rowcount":1,"duration":105.078}
cursor.fetchone()[0] on the same query returns 1.2345678901234567, a float. The response is decoded with orjson.loads (http.py line 244), which parses every JSON number to a float64 and has no parse_float hook; stdlib json.loads(raw, parse_float=Decimal) on those bytes returns Decimal('1.234567890123456789012345').
Writes are already exact, since Decimal goes out as a string (#751). A stdlib decode with parse_float=Decimal would make reads match, but it changes the returned type for every float column and gives up orjson's speed, so it likely wants to be a connection option rather than the default.
- Lingua principale
- Python
- Stelle
- 85
- Fork
- 34
- Merge medio
- 3g 1h
- PR unite (30g)
- 4
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di crate/crate-python
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
crate/crate-python#794 · 2 commenti ·
-
enhancement
crate/crate-python#833 · 1 assegnatario ·
-
Add async/asyncio support Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
crate/crate-python#820 · 1 commento ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
crate/crate-python#751 · 7 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
crate/crate-python#729 · 1 commento ·
Tutte le issue di crate/crate-python
Issue simili
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
canonical/paas-charm#368 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
tech debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
addition to tracking list Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
StevenBlack/hosts#3256 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
qualcomm/qai-appbuilder#275 ·