a-blog cms PHP API Reference

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
string

buildDuplicateCheckSql()

重複 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
string

extractPrimaryKeyColumns()

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


        
On this page

Search results