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

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

Abierto
#220 2 comentarios 0 reacciones 0 asignados Ver en GitHub
bug needs-triage
Lenguaje dominante
TypeScript
Estrellas
229
Forks
45
Merge medio
1 min
PR fusionados (30 d)
4

Descripción

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

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

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Empieza en packages/db/src/dsql-compat.ts, especialmente en validateStatement() y en las líneas 51-83, y después compara las reglas documentadas de ALTER TABLE en AGENTS.md#database. Comprueba cómo packages/db/src/check-dsql-compat.ts y migrate.ts usan el validador, conserva las pruebas existentes de denylist y ejecuta pnpm --filter @repo/db run generate junto con pnpm -r run check:ci; el resultado debe ser que los subcomandos de ALTER TABLE no compatibles se rechacen antes del despliegue.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
sql, typescript
Área
databases
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Tranquilo
Claridad
Bien especificado
Aptitud para principiantes
72/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.