cursor.description's type_code is always None, even though col_types is already available internally
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 72/100
Hướng nghiên cứu
Read src/crate/client/cursor.py's Cursor.description property and the type definitions and _resolve() helper in src/crate/client/converter.py. Check how col_types is populated and how existing cursor tests cover description; add coverage for the type_code value when column types are available. Done means the public description exposes each column's type code without requiring a configured Converter.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
`Cursor.description` (PEP 249) always returns `None` for every field after the column name, including `type_code`:
https://github.com/crate/crate-python/blob/main/src/crate/client/cursor.py
```python
@property
def description(self):
if self._closed:
return None
description = []
for col in self._result["cols"]:
description.append((col, None, None, None, None, None, None))
return tuple(description)
```
This isn't because the driver doesn't have the type information. `self._result["col_types"]` is already populated from the same HTTP response (CrateDB's HTTP SQL interface column types) and is already used internally, e.g. in `Cursor._convert_rows()`:
```python
def _convert_rows(self):
if not ("col_types" in self._result and self._result["col_types"]):
raise ValueError(...)
types = self.result["col_types"]
converters = [self.converter.get(type) for type in types]
...
```
and `converter.py` already has a complete, documented mapping from these wire type codes to a `DataType` enum (`TIMESTAMP_WITH_TZ = 11`, `TIMESTAMP_WITHOUT_TZ = 15`, etc.) — so the information isn't missing, it's just not propagated into the public `description` property.
Why this matters
`type_code` is part of the standard DB-API 2.0 `description` contract (PEP 249). A consumer that only has a `Cursor` object (e.g. a driver-agnostic tool built against SQLAlchemy's cursor/dialect layer, or any generic DB-API client) has no supported way to find out a column's CrateDB type without either enabling a `Converter` (which changes value representation, not just exposing the type) or reaching into the private `cursor._result["col_types"]` attribute directly, which isn't part of the public API and could change without notice.
We actually hit this downstream in Apache Superset: `CrateEngineSpec.fetch_data()` has to read `cursor._result.get("col_types", [])` directly to tell timestamp columns apart from plain numeric ones, specifically because `cursor.description`'s `type_code` is always `None`:
https://github.com/apache/superset/blob/master/superset/db_engine_specs/crate.py#L98-L123
Suggested fix
In `Cursor.description`, populate the `type_code` slot (index 1 of the 7-tuple) from `self._result["col_types"]` (resolved through the existing `DataType` enum / `_resolve()` helper in `converter.py`) instead of hardcoding `None`, when `col_types` is available. This would bring `description` in line with the PEP 249 contract without needing a `Converter` to be configured, and let consumers stop reaching into `cursor._result` directly.
Environment
- crate-python: current `main` (same code present going back through recent tags)
- Verified by reading `src/crate/client/cursor.py` and `src/crate/client/converter.py` directly, cross-checked against the CrateDB HTTP SQL docs' column-types table.
- Ngôn ngữ chính
- Python
- Star
- 85
- Fork
- 35
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 2
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của crate/crate-python
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
crate/crate-python#794 · 2 bình luận ·
-
Allow `connect()` (again) while the server is not respondingCó thể đã có người làm @florinutz đã nhận 19 ngày trước. Đang mởenhancement
crate/crate-python#833 · 1 người được giao ·
-
NUMERIC reads: full digits arrive, the decode drops themCó thể đã có người làm @aminghadersohi đã nhận 11 ngày trước. Đang mởbug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
crate/crate-python#826 · 1 bình luận ·
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
crate/crate-python#751 · 7 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
crate/crate-python#729 · 1 bình luận ·
Tất cả issue của crate/crate-python
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
-
Harmony OPeNDAP SubSetter (HOSS) Geographic LARC_CLOUD PREFIRE_SAT2_AUX-SAT R01 production
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
nasa/harmony-autotester#245 ·
-
[FEATURE] - Add UTVD supportĐang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Deltares/imod-python#1928 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
feature
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100