Sender has no dateColumn() setter for DATE columns
还没有人认领这个 Issue。
评估
调研方向
从 Sender 现有的 byteColumn、charColumn、timestampColumn、ipv4Column、at 和 atNow 实现开始,以遵循既有的 setter 约定。使用毫秒和建议的 Instant 重载添加 DATE 支持,确认预期的亚毫秒行为,并验证 Java ingestion 能够写入 DATE 值,同时保留 null 行为。
由索引模型根据 Issue 内容生成。
描述
Summary
Sender has no dateColumn() setter, so a Java producer cannot write a DATE column — even though the server accepts DATE on QWP ingress and this client reads it back fine on egress.
Current status: documented as a limitation
The client documentation already concedes it — documentation/connect/clients/java.md:532:
DATE is accepted on ingress server-side but the Java client does not yet expose a
dateColumn()setter. All types are readable on the egress side.
Cross-client parity
DATE is the only type missing from Java's row-oriented ingestion API, and Java is the only QWP client missing DATE:
| Type | Rust Buffer |
C/C++ line_sender_buffer |
.NET | Java Sender |
Go QwpSender |
Python row() |
|---|---|---|---|---|---|---|
UUID |
✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
GEOHASH |
✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
LONG256 |
✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
CHAR |
✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
IPv4 |
✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
BINARY |
✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
DATE |
✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
Sibling implementations, all taking milliseconds since epoch:
- Rust —
column_date(name, millis: i64)andcolumn_date_opt(questdb-rs/src/ingress/buffer.rs:1393,:1418) - C —
line_sender_buffer_column_date(include/questdb/ingress/line_sender.h:1086) - Go —
DateColumn(name string, val time.Time) QwpSender(qwp_sender.go:61) - .NET —
ColumnDate(name, long millisSinceEpoch)
Suggested shape
Matching the existing setter conventions on Sender (byteColumn, charColumn, timestampColumn, ipv4Column, …):
Sender dateColumn(CharSequence name, long millisSinceEpoch);
Sender dateColumn(CharSequence name, Instant value);
The long overload mirrors the other clients' wire-level form; the Instant overload matches how timestampColumn(name, Instant) already reads at the call site. As with every other column, a null is written by omitting the setter before at() / atNow().
Worth confirming the intended truncation behaviour for the Instant overload, since DATE is millisecond-resolution and Instant is not — silently truncating sub-millisecond precision versus rejecting it is a deliberate choice, and the other clients sidestep it by only accepting millis (except Go, which takes a time.Time).
- 主要语言
- Java
- 星标
- 10
- 派生
- 6
- 平均合并
- 8 天 1 小时
- 30 天内合并 PR
- 3
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
questdb/java-questdb-client 的其他 Issue
-
bug QWP
难度 4/5 3-5 天 新手友好度 42/100
questdb/java-questdb-client#100 ·
-
bug
难度 3/5 1-2 天 新手友好度 68/100
-
bug
难度 4/5 3-5 天 新手友好度 48/100
-
bug
难度 3/5 1-2 天 新手友好度 58/100
questdb/java-questdb-client#18 · 1 条评论 ·
查看 questdb/java-questdb-client 的全部 Issue
相似的 Issue
-
area-deployment area-integrations triage:bot-seen
难度 2/5 半天 新手友好度 86/100
-
难度 2/5 1-3 小时 新手友好度 75/100
apache/flink-agents#1156 ·
-
area/connectors autoteam community connectors/source/shopify needs-triage team/use type/bug
难度 2/5 1-3 小时 新手友好度 84/100
-
难度 2/5 1-3 小时 新手友好度 70/100
-
难度 1/5 1 小时以内 新手友好度 85/100