aws-samples / aws-samples/serverless-full-stack-webapp-starter-kit

bug(db): DSQL SQL バリデータが文書化された ALTER TABLE 許可リストを実装していない

Offen
#220 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug needs-triage
Vorherrschende Sprache
TypeScript
Sterne
229
Forks
45
Ø Merge
1 Min.
Gemergte PRs (30 T.)
4

Beschreibung

### キットのバージョン / コミット

dev/v3 @ e3a3954

### 期待される挙動

`packages/db/src/dsql-compat.ts`(生成時の `check-dsql-compat.ts` と実行時の `migrate.ts` の両方で使用される)は、[AGENTS.md](../AGENTS.md#database) に文書化された許可リストに従い、DSQL がサポートしない `ALTER TABLE` サブコマンドをすべて拒否すべきである:

> ALTER TABLE only supports: ADD COLUMN, RENAME COLUMN/TABLE/CONSTRAINT, SET SCHEMA, OWNER TO, and IDENTITY operations. Everything else […] requires table recreation.

### 実際の挙動

`packages/db/src/dsql-compat.ts:51-83` は、型変更・列削除・デフォルト・NOT NULL・制約削除、および制約付き ADD COLUMN のみを捕捉する拒否リスト(denylist)方式を使っている。許可リスト外だが拒否リストにも載っていない文は暗黙的に受理される。例:

- `ALTER TABLE "T" ADD CONSTRAINT "u" UNIQUE ("c");`
- `ALTER TABLE "T" ALTER COLUMN "c" SET STATISTICS 1;`

いずれもローカル生成、`pnpm -r run check:ci`、CI のドリフトチェックを通過し、マイグレータが DSQL に対して実行した時点で初めて失敗する。

### 問題が発生する条件

- 許可リスト外だが現状の拒否リストには載っていない `ALTER TABLE` サブコマンドを含む、手書きのマイグレーション
- Drizzle が生成する文はランナーが再整形するため該当しにくい。手書きの `.sql`(`--custom` 経由)がよりリスクの高い経路

### 再現手順

1. `ALTER TABLE "todo_items" ADD CONSTRAINT "unique_title" UNIQUE ("title");` を含むマイグレーションを追加する
2. `pnpm --filter @repo/db run generate` を実行 — 通過する
3. `pnpm -r run check:ci` を実行 — 通過する
4. デプロイ — 実行時にマイグレータが失敗する

### 分析と修正案(任意)

`validateStatement()` を `ALTER TABLE` サブコマンドの許可リスト(AGENTS.md に一致)として書き直しつつ、回帰カバレッジのために既存の拒否リストのテストを維持する。v3 差分レビュー(executor 06 の発見 F-DB-02)で発見。

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in packages/db/src/dsql-compat.ts, insbesondere bei validateStatement() und den Zeilen 51-83, und vergleiche anschließend die dokumentierten ALTER TABLE-Regeln in AGENTS.md#database. Prüfe, wie packages/db/src/check-dsql-compat.ts und migrate.ts den Validator verwenden, behalte die bestehenden denylist-Tests bei und führe pnpm --filter @repo/db run generate sowie pnpm -r run check:ci aus; fertig bedeutet, dass nicht unterstützte ALTER TABLE-Unterbefehle vor dem Deployment abgelehnt werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
sql, typescript
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
72/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.