[jooq] Add DELETE LIMIT emulation via subquery
メンテナーはふだん 1 日以内に返信
@Naifff がすでに取り組んでいます。
2026年10月9日 から。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
調査の方向性
YdbDSLContextImpl.deleteQuery() と org.jooq.impl にある既存の UpsertReplaceQueryImpl パターンから始め、提供されている delete(...).limit(n) の reproducer を実行します。単一キーと複合キーをカバーするために table.getPrimaryKey().getFields() を使用し、生成された YQL がキーのサブクエリを使用していることを確認します。主キーがない場合は、説明的なエラーが生成される必要があります。
索引モデルが issue の本文から書いたものです。
説明
Problem
When using jOOQ's delete(...).limit(n) with the YDB dialect, the generated SQL is:
DELETE FROM `test` LIMIT $jp1
YQL does not support the LIMIT clause on DELETE statements, so this fails with:
Status{code = GENERIC_ERROR(code=400080), issues = [19:3 - 19:3: extraneous input 'limit' expecting {<EOF>, ';'} (S_ERROR)]}
Reproducer
dsl.delete(TEST).limit(10).execute();
// → DELETE FROM `test` LIMIT $jp1 (GENERIC_ERROR)
Expected behavior
The dialect should emulate DELETE LIMIT n by rewriting it as a subquery using the table's primary key:
DELETE FROM `test` WHERE `key` IN (SELECT `key` FROM `test` LIMIT $jp1)
For composite PKs:
DELETE FROM `episodes`
WHERE (`series_id`, `season_id`, `episode_id`) IN (
SELECT `series_id`, `season_id`, `episode_id`
FROM `episodes`
LIMIT $jp1
)
Implementation notes
jOOQ already has a similar emulation tracked in jOOQ/jOOQ#7839 for other databases that lack native DELETE LIMIT support.
For this dialect the natural place is a custom DeleteQuery implementation in org.jooq.impl (mirroring the existing UpsertReplaceQueryImpl pattern), wired in via YdbDSLContextImpl.deleteQuery(). The PK fields are available through table.getPrimaryKey().getFields() when the table is code-generated. When PK is unavailable the implementation should throw a descriptive error.
Environment
jooq-ydb-dialectversion: 1.2.1- jOOQ: 3.19.x
- YQL does not support
DELETE ... LIMIT(confirmed)
- 主要言語
- Java
- スター
- 78
- フォーク
- 24
- 平均マージ
- 3時間 32分
- マージ済み PR(30日)
- 6
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ydb-platform/ydb-java-dialects のほかの issue
-
[BUG]: #hibernate-v6 UnsupportedOperationException: YDB does not support FOR UPDATE statement再び着手できるかも @KirillKurdyukov が 402 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンbug
ydb-platform/ydb-java-dialects#194 · コメント 1 件 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
feat: Support adding @YdbType annotation to method parameters対応中かも @KirillKurdyukov が 612 日前に担当しました。 オープンpending-design
ydb-platform/ydb-java-dialects#173 · コメント 10 件 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
student-projects
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
ydb-platform/ydb-java-dialects#170 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
feat: Jimmer ORM対応中かも @Rinoyt が 167 日前に担当しました。 オープンstudent-projects
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
ydb-platform/ydb-java-dialects#160 ·
メンテナーはふだん 1 日以内に返信
-
feat: SLO Hibernate再び着手できるかも @KirillKurdyukov が 780 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
ydb-platform/ydb-java-dialects#147 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
ydb-platform/ydb-java-dialects の issue をすべて見る
似ている issue
-
enhancement Improvement
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
zowe/zowe-client-java-sdk#647 ·
-
NullPointerException when a `DeserializationProblemHandler` returns `null` for `byte[]` (single value unwrapped) and `char[]` elements対応中かも @Marti2203 が今日担当しました。 オープン
難易度 2/5 半日 初心者へのやさしさ 88/100
FasterXML/jackson-databind#6300 ·
メンテナーはふだん 1 日以内に返信
-
content good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 95/100
cpinitiative/usaco-guide#6699 ·
メンテナーはふだん 1 日以内に返信
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンtype: bug
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
carlos-emr/carlos#4933 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/rocketmq-dashboard#6925 ·
メンテナーはふだん 3 日以内に返信