PrimaryKey
in package
シーケンス採番テーブルの PRIMARY KEY を「ID カラム単体」へ張り替えるための、 副作用を持たない SQL 組み立て・判定ロジック。
実際の DDL 実行・DB 接続・ログ出力は呼び出し側(Rule)が担い、本クラスは純粋関数のみを提供する。 これにより、トランザクションでロールバックできない DDL の挙動を直接実行せずに Unit テストで検証できる。
テーブル名・カラム名はいずれも呼び出し側が内部定数(DB_PREFIX + 固定名)として渡す前提であり、 ユーザー入力は含まない。
Table of Contents
Methods
- buildConvertSql() : string
- PRIMARY KEY を対象 ID カラム単体へ張り替える ALTER 文を組み立てる。 既存 PRIMARY KEY を持つテーブルは DROP してから ADD し、持たないテーブル(rule 等)は ADD のみ行う。
- buildDuplicateCheckSql() : string
- 重複 ID 検出用の SELECT を組み立てる。 1 件でも返れば「重複あり」と判断する想定(HAVING COUNT(*) > 1, LIMIT 1)。
- extractPrimaryKeyColumns() : array<int, string>
- SHOW KEYS / SHOW INDEX の結果行から、PRIMARY KEY を構成するカラムを Seq_in_index 昇順で取り出す。
- isAlreadyConverted() : bool
- すでに PRIMARY KEY が対象 ID カラム単体になっている(=移行済み)かどうか。
Methods
buildConvertSql()
PRIMARY KEY を対象 ID カラム単体へ張り替える ALTER 文を組み立てる。 既存 PRIMARY KEY を持つテーブルは DROP してから ADD し、持たないテーブル(rule 等)は ADD のみ行う。
public
buildConvertSql(string $table, string $idColumn, bool $hasExistingPrimaryKey) : string
DB::query が連想配列を受け付けるのは v3.2 以降のため、アップデート処理から使えるよう 文字列 SQL を返す(識別子は内部定数のみでユーザー入力を含まない)。
Parameters
- $table : string
-
プレフィックス済みテーブル名
- $idColumn : string
-
対象 ID カラム名
- $hasExistingPrimaryKey : bool
-
既存の PRIMARY KEY を持つか
Return values
stringbuildDuplicateCheckSql()
重複 ID 検出用の SELECT を組み立てる。 1 件でも返れば「重複あり」と判断する想定(HAVING COUNT(*) > 1, LIMIT 1)。
public
buildDuplicateCheckSql(string $table, string $idColumn) : string
DB::query が連想配列を受け付けるのは v3.2 以降のため、アップデート処理から使えるよう 文字列 SQL を返す(識別子は内部定数のみでユーザー入力を含まない)。
Parameters
- $table : string
-
プレフィックス済みテーブル名
- $idColumn : string
-
対象 ID カラム名
Return values
stringextractPrimaryKeyColumns()
SHOW KEYS / SHOW INDEX の結果行から、PRIMARY KEY を構成するカラムを Seq_in_index 昇順で取り出す。
public
extractPrimaryKeyColumns(array<string|int, mixed> $showKeysRows) : array<int, string>
Parameters
- $showKeysRows : array<string|int, mixed>
-
SHOW INDEX FROM
tableの結果行
Return values
array<int, string> —PRIMARY KEY を構成するカラム名(順序つき)。PRIMARY KEY が無ければ空配列
isAlreadyConverted()
すでに PRIMARY KEY が対象 ID カラム単体になっている(=移行済み)かどうか。
public
isAlreadyConverted(array<int, string> $primaryKeyColumns, string $idColumn) : bool
Parameters
- $primaryKeyColumns : array<int, string>
-
現在の PRIMARY KEY 構成カラム
- $idColumn : string
-
対象 ID カラム名
Return values
bool —移行済みなら true