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

cursor.description's type_code is always None, even though col_types is already available internally

Đang mở
#837 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ó
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
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
database, databases

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

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.