Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

[jooq] Add DELETE LIMIT emulation via subquery

オープン
#217 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@Naifff がすでに取り組んでいます。

2026年10月9日 から。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
55/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
java
領域
backend, databases

調査の方向性

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-dialect version: 1.2.1
  • jOOQ: 3.19.x
  • YQL does not support DELETE ... LIMIT (confirmed)
主要言語
Java
スター
78
フォーク
24
平均マージ
3時間 32分
マージ済み PR(30日)
6

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ydb-platform/ydb-java-dialects のほかの issue

ydb-platform/ydb-java-dialects の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。