MagicStack / MagicStack/asyncpg
Support typed prepared statements
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 8.1k
- Fork
- 468
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
While datatypes are optional in prepared statements, not using them can results in type errors such as
```
function sum(text) does not exist
```
This is easily reproducible in any PSQL client
```SQL
PREPARE my_query AS
SELECT SUM(CASE WHEN v = 'A' THEN $1 ELSE $2 END)
FROM (VALUES ('A'), ('B')) as q0(v);
-- ERROR: function sum(text) does not exist
```
But when I specify the types, it works
```SQL
PREPARE my_query(int, int) AS
SELECT SUM(CASE WHEN v = 'A' THEN $1 ELSE $2 END)
FROM (VALUES ('A'), ('B')) as q0(v);
EXECUTE my_query(1,0);
-- 1
DEALLOCATE my_query;
```
asyncpg currently does not include types, which causes me to run into the `sum(text)` error. I'd expect it to either include types, or allow me to specify the types somehow.
Workaround:
Include a cast expression.
i.e.: `$1::int` or `CAST($1 AS INT)`
Full example
```sql
PREPARE my_query AS
SELECT SUM(CASE WHEN v = 'A' THEN $1::int ELSE $2::int END)
FROM (VALUES ('A'), ('B')) as q0(v);
```
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện các ví dụ về prepared statement trong PostgreSQL thông qua asyncpg và kiểm tra cách các kiểu tham số được xử lý. Công việc được xem là hoàn tất khi lỗi SUM(text) đã báo cáo được giải quyết bằng cách hỗ trợ prepared statement có kiểu hoặc cung cấp cách để bên gọi chỉ định kiểu tham số, kèm theo coverage cho truy vấn được hiển thị.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- postgresql, python
- Lĩnh vực
- databases
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100