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

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

Aperta
#220 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug needs-triage
Lingua principale
TypeScript
Stelle
229
Fork
45
Merge medio
1m
PR unite (30g)
4

Descrizione

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

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)で発見。

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da packages/db/src/dsql-compat.ts, in particolare da validateStatement() e dalle righe 51-83, poi confronta le regole documentate di ALTER TABLE in AGENTS.md#database. Verifica come packages/db/src/check-dsql-compat.ts e migrate.ts usano il validator, mantieni i test denylist esistenti ed esegui pnpm --filter @repo/db run generate e pnpm -r run check:ci; il risultato deve essere che i sottocomandi ALTER TABLE non supportati vengano rifiutati prima del deployment.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
sql, typescript
Ambito
databases
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
72/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.