Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

NUMERIC reads: full digits arrive, the decode drops them

Đang mở
#826 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
52/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
database

Hướng nghiên cứu

Bắt đầu tại src/crate/client/http.py ở dòng 244 và tái hiện ví dụ NUMERIC với CrateDB 6.4.2. So sánh việc giải mã orjson hiện tại với stdlib json.loads bằng cách sử dụng parse_float=Decimal, sau đó xác định cách một tùy chọn kết nối nên cung cấp các lần đọc số chính xác trong khi vẫn giữ nguyên hành vi float hiện có; được xem là hoàn tất khi các chữ số được báo cáo được giữ lại và tùy chọn được bao phủ bằng việc kiểm tra.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

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.

Ngôn ngữ chính
Python
Star
85
Fork
34
Merge trung bình
3 ngày 1 giờ
Pull request đã merge (30 ngày)
4

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của crate/crate-python

Tất cả issue của crate/crate-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.