---
generated_at: 2026-03-01 20:45:00
metrics:
  claims_total: 160
  claims_with_evidence: 156
  claims_without_evidence: 4
confidence_derived: 0.975
---

# 根拠レポート：drizzle 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.975**
  - 根拠あり：156 / 160、根拠なし：4
- 優先レビュー（高）
  1. **C-90**：マイグレーション失敗時のロールバック動作の詳細な期待結果
  2. **C-122**：SQLインジェクション防止のエラーパターン網羅性
  3. **C-135-137**：スキーマ構築時の副作用テーブル生成の網羅性

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/drizzle/src/find.ts` - find関数の実装
- E-02: `packages/drizzle/src/findOne.ts` - findOne関数の実装
- E-03: `packages/drizzle/src/count.ts` - count関数の実装
- E-04: `packages/drizzle/src/deleteMany.ts` - deleteMany関数の実装
- E-05: `packages/drizzle/src/upsert.ts` - upsert関数の実装
- E-06: `packages/drizzle/src/updateMany.ts` - updateMany関数の実装
- E-07: `packages/drizzle/src/upsertRow/index.ts` - upsertRow関数の実装
- E-08: `packages/drizzle/src/upsertRow/shouldUseOptimizedUpsertRow.ts` - 最適化判定関数
- E-09: `packages/drizzle/src/upsertRow/handleUpsertError.ts` - エラーハンドリング関数
- E-10: `packages/drizzle/src/transactions/beginTransaction.ts` - beginTransaction関数の実装
- E-11: `packages/drizzle/src/transactions/commitTransaction.ts` - commitTransaction関数の実装
- E-12: `packages/drizzle/src/transactions/rollbackTransaction.ts` - rollbackTransaction関数の実装
- E-13: `packages/drizzle/src/utilities/getTransaction.ts` - getTransaction関数の実装
- E-14: `packages/drizzle/src/queries/buildQuery.ts` - buildQuery関数の実装
- E-15: `packages/drizzle/src/queries/parseParams.ts` - parseParams関数の実装
- E-16: `packages/drizzle/src/queries/sanitizeQueryValue.ts` - sanitizeQueryValue関数の実装
- E-17: `packages/drizzle/src/queries/buildOrderBy.ts` - buildOrderBy関数の実装
- E-18: `packages/drizzle/src/queries/selectDistinct.ts` - selectDistinct関数の実装
- E-19: `packages/drizzle/src/queries/getTableColumnFromPath.ts` - getTableColumnFromPath関数の実装
- E-20: `packages/drizzle/src/migrate.ts` - migrate関数の実装
- E-21: `packages/drizzle/src/migrateDown.ts` - migrateDown関数の実装
- E-22: `packages/drizzle/src/migrateReset.ts` - migrateReset関数の実装
- E-23: `packages/drizzle/src/migrateStatus.ts` - migrateStatus関数の実装
- E-24: `packages/drizzle/src/findGlobal.ts` - findGlobal関数の実装
- E-25: `packages/drizzle/src/findVersions.ts` - findVersions関数の実装
- E-26: `packages/drizzle/src/countVersions.ts` - countVersions関数の実装
- E-27: `packages/drizzle/src/deleteVersions.ts` - deleteVersions関数の実装
- E-28: `packages/drizzle/src/utilities/buildIndexName.ts` - buildIndexName関数の実装
- E-29: `packages/drizzle/src/utilities/buildForeignKeyName.ts` - buildForeignKeyName関数の実装
- E-30: `packages/drizzle/src/utilities/getCollectionIdType.ts` - getCollectionIdType関数の実装
- E-31: `packages/drizzle/src/utilities/isPolymorphicRelationship.ts` - isPolymorphicRelationship関数の実装
- E-32: `packages/drizzle/src/utilities/isValidStringID.ts` - isValidStringID関数の実装
- E-33: `packages/drizzle/src/utilities/escapeSQLValue.ts` - escapeSQLValue関数の実装
- E-34: `packages/drizzle/src/utilities/parseError.ts` - parseError関数の実装
- E-35: `packages/drizzle/src/transform/read/index.ts` - transform関数（読み取り）の実装
- E-36: `packages/drizzle/src/transform/write/index.ts` - transformForWrite関数の実装
- E-37: `packages/drizzle/src/schema/build.ts` - buildTable関数の実装
- E-38: `packages/drizzle/src/schema/traverseFields.ts` - traverseFields関数の実装
- E-39: `packages/drizzle/src/find/findMany.ts` - findMany関数の実装
- E-40: `packages/drizzle/src/utilities/migrationTableExists.ts` - migrationTableExists関数の実装
- E-41: `packages/drizzle/src/utilities/createBlocksMap.ts` - createBlocksMap関数の実装
- E-42: `packages/drizzle/src/utilities/createRelationshipMap.ts` - createPathMap関数の実装

## 3) Claims と根拠の対応（レビューの主戦場）

### CRUD操作（C-01〜C-33）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | find関数でコレクションからドキュメントを検索できる | E-01 | ○ |
| C-02 | ソート条件を指定して検索できる | E-01 | ○ |
| C-03 | ロケール指定でローカライズデータを取得できる | E-01 | ○ |
| C-04 | where条件を指定して検索できる | E-01, E-14 | ○ |
| C-05 | ページネーションが正しく動作する | E-01, E-39 | ○ |
| C-06 | limit=0で全件取得される | E-39 | ○ |
| C-07 | findOneで単一ドキュメントを取得できる | E-02 | ○ |
| C-08 | findOneでドキュメントが存在しない場合nullが返る | E-02 | ○ |
| C-09 | countでドキュメント数をカウントできる | E-03 | ○ |
| C-10 | countでwhere条件付きカウントできる | E-03, E-14 | ○ |
| C-11 | countで0件の場合0が返る | E-03 | ○ |
| C-12 | deleteManyで複数削除ができる | E-04 | ○ |
| C-13 | deleteManyでjoinを含むwhereでも削除できる | E-04 | ○ |
| C-14 | deleteManyで0件の場合エラーなく完了 | E-04 | ○ |
| C-15 | upsertで存在しない場合は作成される | E-05 | ○ |
| C-16 | upsertで存在する場合は更新される | E-05 | ○ |
| C-17 | updateManyで複数更新ができる | E-06 | ○ |
| C-18 | updateManyでreturning=falseでnullが返る | E-06 | ○ |
| C-19 | updateManyでlimit制限ができる | E-06 | ○ |
| C-20 | updateManyで0件の場合空配列が返る | E-06 | ○ |
| C-21 | upsertRowで新規レコード挿入 | E-07 | ○ |
| C-22 | upsertRowで既存レコード更新 | E-07 | ○ |
| C-23 | upsertRowでcreatedAt自動設定 | E-07 | ○ |
| C-24 | upsertRowでロケール付きデータ保存 | E-07 | ○ |
| C-25 | upsertRowでリレーションシップ保存 | E-07 | ○ |
| C-26 | upsertRowでブロックデータ保存 | E-07 | ○ |
| C-27 | upsertRowで配列データ保存 | E-07 | ○ |
| C-28 | upsertRowでignoreResult=trueの場合dataがそのまま返却 | E-07 | ○ |
| C-29 | upsertRowでignoreResult='idOnly'の場合IDのみ返却 | E-07 | ○ |
| C-30 | upsertRowで$push配列操作 | E-07 | ○ |
| C-31 | upsertRowで$remove配列操作 | E-07 | ○ |
| C-32 | shouldUseOptimizedUpsertRowで最適化判定 | E-08 | ○ |
| C-33 | handleUpsertErrorで一意制約違反エラー | E-09 | ○ |

### トランザクション（C-34〜C-45）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-34 | beginTransactionでトランザクション開始 | E-10 | ○ |
| C-35 | トランザクションオプションが適用される | E-10 | ○ |
| C-36 | 初期化中の場合は初期化完了を待つ | E-10 | ○ |
| C-37 | beginTransactionでエラー時に例外 | E-10 | ○ |
| C-38 | commitTransactionでコミット | E-11 | ○ |
| C-39 | 存在しないトランザクションIDで何もしない | E-11 | ○ |
| C-40 | Promise形式のIDでも動作 | E-11 | ○ |
| C-41 | rollbackTransactionでロールバック | E-12 | ○ |
| C-42 | rollbackで存在しないIDは無視 | E-12 | ○ |
| C-43 | getTransactionでトランザクションなしの場合adapter.drizzle | E-13 | ○ |
| C-44 | getTransactionで有効なIDがある場合そのdb | E-13 | ○ |
| C-45 | getTransactionでセッション削除済みの場合フォールバック | E-13 | ○ |

### クエリ構築（C-46〜C-85）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-46 | buildQueryでwhere条件からSQLを構築 | E-14 | ○ |
| C-47 | buildQueryでsortからorderByを構築 | E-14, E-17 | ○ |
| C-48 | buildQueryでselectFieldsにidカラムが含まれる | E-14 | ○ |
| C-49 | buildQueryで空where条件の場合undefinedが返る | E-14 | ○ |
| C-50 | parseParamsでAND条件をパース | E-15 | ○ |
| C-51 | parseParamsでOR条件をパース | E-15 | ○ |
| C-52 | parseParamsでequals演算子を処理 | E-15 | ○ |
| C-53 | parseParamsでnot_equals演算子を処理 | E-15 | ○ |
| C-54 | parseParamsでlike演算子でスペース分割 | E-15 | ○ |
| C-55 | parseParamsでin演算子を処理 | E-15 | ○ |
| C-56 | parseParamsでnot_in演算子を処理 | E-15 | ○ |
| C-57 | parseParamsでexists演算子を処理 | E-15 | ○ |
| C-58 | parseParamsでcontains演算子を処理 | E-15 | ○ |
| C-59 | parseParamsでnear演算子で空間検索 | E-15 | ○ |
| C-60 | parseParamsでwithin演算子で空間検索 | E-15 | ○ |
| C-61 | parseParamsでJSONネストパスを処理 | E-15 | ○ |
| C-62 | sanitizeQueryValueでcheckbox文字列'true'変換 | E-16 | ○ |
| C-63 | sanitizeQueryValueでcheckbox文字列'false'変換 | E-16 | ○ |
| C-64 | sanitizeQueryValueでnumber文字列を数値に変換 | E-16 | ○ |
| C-65 | sanitizeQueryValueでNaNの場合null | E-16 | ○ |
| C-66 | sanitizeQueryValueでdateをISO変換 | E-16 | ○ |
| C-67 | sanitizeQueryValueでdate配列をISO配列に変換 | E-16 | ○ |
| C-68 | sanitizeQueryValueで不正UUIDの場合null | E-16 | ○ |
| C-69 | sanitizeQueryValueでcontainsにワイルドカード追加 | E-16 | ○ |
| C-70 | sanitizeQueryValueでin/not_inでカンマ区切り配列化 | E-16 | ○ |
| C-71 | sanitizeQueryValueでポリモーフィックリレーション処理 | E-16 | ○ |
| C-72 | buildOrderByで降順ソート | E-17 | ○ |
| C-73 | buildOrderByで昇順ソート | E-17 | ○ |
| C-74 | buildOrderByで複数ソート条件 | E-17 | ○ |
| C-75 | buildOrderByでデフォルトソート適用 | E-17 | ○ |
| C-76 | buildOrderByでフォールバックソート追加 | E-17 | ○ |
| C-77 | selectDistinctでjoinsがある場合distinct実行 | E-18 | ○ |
| C-78 | selectDistinctでjoinsがない場合undefined | E-18 | ○ |
| C-79 | selectDistinctでforceRun=trueで強制実行 | E-18 | ○ |
| C-80 | selectDistinctでhasAggregatesの場合groupBy使用 | E-18 | ○ |
| C-81 | getTableColumnFromPathでidパス解決 | E-19 | ○ |
| C-82 | getTableColumnFromPathでネストパス解決 | E-19 | ○ |
| C-83 | getTableColumnFromPathで配列パス解決 | E-19 | ○ |
| C-84 | getTableColumnFromPathでローカライズパス解決 | E-19 | ○ |
| C-85 | getTableColumnFromPathでブロックパス解決 | E-19 | ○ |

### マイグレーション（C-86〜C-97）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-86 | migrateでマイグレーション実行 | E-20 | ○ |
| C-87 | migrateで実行済みスキップ | E-20 | ○ |
| C-88 | migrateで0件の場合何も実行しない | E-20 | ○ |
| C-89 | migrateで開発マイグレーション検出 | E-20 | ○ |
| C-90 | migrateでエラー時にロールバック | E-20 | △ |
| C-91 | migrateDownで最新バッチをロールバック | E-21 | ○ |
| C-92 | migrateDownで0件の場合何も実行しない | E-21 | ○ |
| C-93 | migrateDownでローカルファイル不在エラー | E-21 | ○ |
| C-94 | migrateResetで全マイグレーションロールバック | E-22 | ○ |
| C-95 | migrateResetで開発マイグレーション削除 | E-22 | ○ |
| C-96 | migrateStatusでステータス表示 | E-23 | ○ |
| C-97 | migrateStatusで0件の場合メッセージ表示 | E-23 | ○ |

### グローバル・バージョン（C-98〜C-105）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-98 | findGlobalでグローバル取得 | E-24 | ○ |
| C-99 | findGlobalでglobalType設定 | E-24 | ○ |
| C-100 | findGlobalで存在しない場合空オブジェクト | E-24 | ○ |
| C-101 | findVersionsでバージョン一覧取得 | E-25 | ○ |
| C-102 | countVersionsでバージョンカウント | E-26 | ○ |
| C-103 | deleteVersionsでコレクションバージョン削除 | E-27 | ○ |
| C-104 | deleteVersionsでグローバルバージョン削除 | E-27 | ○ |
| C-105 | deleteVersionsで引数エラー | E-27 | ○ |

### ユーティリティ（C-106〜C-124）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-106 | buildIndexNameでインデックス名生成 | E-28 | ○ |
| C-107 | buildIndexNameで60文字制限 | E-28 | ○ |
| C-108 | buildIndexNameで重複回避 | E-28 | ○ |
| C-109 | buildForeignKeyNameで外部キー名生成 | E-29 | ○ |
| C-110 | buildForeignKeyNameで重複回避 | E-29 | ○ |
| C-111 | getCollectionIdTypeでカスタムIDタイプ | E-30 | ○ |
| C-112 | getCollectionIdTypeでデフォルトIDタイプ | E-30 | ○ |
| C-113 | isPolymorphicRelationshipでtrue判定 | E-31 | ○ |
| C-114 | isPolymorphicRelationshipでfalse判定 | E-31 | ○ |
| C-115 | isValidStringIDで有効ID判定 | E-32 | ○ |
| C-116 | isValidStringIDで無効ID判定 | E-32 | ○ |
| C-117 | isValidStringIDで空文字列 | E-32 | ○ |
| C-118 | escapeSQLValueでnull処理 | E-33 | ○ |
| C-119 | escapeSQLValueで数値処理 | E-33 | ○ |
| C-120 | escapeSQLValueでboolean処理 | E-33 | ○ |
| C-121 | escapeSQLValueで文字列エスケープ | E-33 | ○ |
| C-122 | escapeSQLValueで不正文字エラー | E-33 | △ |
| C-123 | parseErrorでエラーフォーマット | E-34 | ○ |
| C-124 | parseErrorでhint追加 | E-34 | ○ |

### データ変換（C-125〜C-132）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-125 | transformでDrizzle出力をPayload形式に変換 | E-35 | ○ |
| C-126 | transformで_relsデータ展開 | E-35 | ○ |
| C-127 | transformで_textsデータ展開 | E-35 | ○ |
| C-128 | transformで_numbersデータ展開 | E-35 | ○ |
| C-129 | transformForWriteで書き込み形式に変換 | E-36 | ○ |
| C-130 | transformForWriteでローカライズデータ分離 | E-36 | ○ |
| C-131 | transformForWriteでリレーションシップ分離 | E-36 | ○ |
| C-132 | transformForWriteでブロック分離 | E-36 | ○ |

### スキーマ構築（C-133〜C-150）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-133 | buildTableでテーブルスキーマ構築 | E-37 | ○ |
| C-134 | buildTableでローカライズテーブル作成 | E-37 | ○ |
| C-135 | buildTableでリレーションシップテーブル作成 | E-37 | △ |
| C-136 | buildTableでtextsテーブル作成 | E-37 | △ |
| C-137 | buildTableでnumbersテーブル作成 | E-37 | ○ |
| C-138 | buildTableでタイムスタンプカラム追加 | E-37 | ○ |
| C-139 | traverseFieldsでtextフィールドをvarcharに | E-38 | ○ |
| C-140 | traverseFieldsでnumberフィールドをnumericに | E-38 | ○ |
| C-141 | traverseFieldsでcheckboxフィールドをbooleanに | E-38 | ○ |
| C-142 | traverseFieldsでdateフィールドをtimestampに | E-38 | ○ |
| C-143 | traverseFieldsでrichTextフィールドをjsonbに | E-38 | ○ |
| C-144 | traverseFieldsでarrayフィールドで別テーブル作成 | E-38 | ○ |
| C-145 | traverseFieldsでblocksフィールドでブロックテーブル作成 | E-38 | ○ |
| C-146 | traverseFieldsでselectフィールドでenum作成 | E-38 | ○ |
| C-147 | traverseFieldsでpointフィールドをgeometryに | E-38 | ○ |
| C-148 | traverseFieldsでインデックス作成 | E-38 | ○ |
| C-149 | traverseFieldsでユニーク制約作成 | E-38 | ○ |
| C-150 | traverseFieldsでnotNull制約追加 | E-38 | ○ |

### 検索・ページネーション（C-151〜C-160）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-151 | findManyでドキュメント一覧取得 | E-39 | ○ |
| C-152 | findManyでページネーション情報計算 | E-39 | ○ |
| C-153 | findManyで結果ソート | E-39 | ○ |
| C-154 | findManyで0件の場合空配列とメタ情報 | E-39 | ○ |
| C-155 | migrationTableExistsでPostgres確認 | E-40 | ○ |
| C-156 | migrationTableExistsでSQLite確認 | E-40 | ○ |
| C-157 | createBlocksMapでブロックデータをパスでグループ化 | E-41 | ○ |
| C-158 | createBlocksMapでブロックを_orderでソート | E-41 | ○ |
| C-159 | createPathMapでリレーションシップをパスでグループ化 | E-42 | ○ |
| C-160 | createPathMapで空配列の場合空オブジェクト | E-42 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-90 (マイグレーション失敗時ロールバック)**：process.exit(1)が呼ばれる前にトランザクションが確実にロールバックされるかの検証が必要
  - 候補：統合テスト / killTransaction関数の動作確認
- **C-122 (SQLインジェクション防止)**：現在のSAFE_STRING_REGEXパターンが全ての危険な入力をカバーしているか確認が必要
  - 候補：セキュリティテスト仕様書 / ペネトレーションテスト結果 / OWASPガイドライン
- **C-135-136 (スキーマ構築時の副作用テーブル)**：hasMany系フィールドの全パターンでテーブル生成が行われるかの網羅性確認
  - 候補：既存のスキーマテスト / フィールドタイプ別の生成パターンリスト

## 5) リスクフラグ（レビュー観点）
- **リスク2 (高)**：C-122 - SQLインジェクション防止機能はセキュリティクリティカルなため、追加検証推奨
- **リスク1 (中)**：C-90 - マイグレーション失敗時のデータ整合性に影響するため確認推奨
- **リスク1 (中)**：C-135-136 - スキーマ構築の網羅性は将来の機能追加時にリグレッションの原因となる可能性
- **リスク0 (低)**：その他のテストケースはソースコードから直接導出され、実装と整合性あり

## 6) レビュアーチェックリスト（最小）
- [ ] C-122のSQLインジェクション防止パターンが十分かセキュリティレビュー
- [ ] C-90のマイグレーション失敗シナリオで実際にロールバックされるか実機確認
- [ ] C-135-136のhasMany系フィールドパターンが網羅されているか確認
- [ ] 全体的なテストケース数（160件）がdrizzleパッケージの複雑さに対して適切か評価
- [ ] 優先度「高」のテストケースが実際のビジネスリスクと合致しているか確認
- [ ] 既存のテストファイル（isValidStringID.spec.ts）との重複・整合性確認
