parent
254cc88a42
commit
01d0138f43
@ -0,0 +1,88 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* @author Robert Strutts |
||||
* @copyright (c) 2026, Robert Strutts |
||||
* @license MIT |
||||
*/ |
||||
|
||||
namespace IOcornerstone\Framework\Database; |
||||
|
||||
/** |
||||
* Description of BuildSQL |
||||
* |
||||
* @author Robert Strutts |
||||
*/ |
||||
class BuildSQL |
||||
{ |
||||
|
||||
/** |
||||
* Generate CREATE TABLE SQL from an existing MySQL table. |
||||
*/ |
||||
public function generateCreateTable(\PDO $pdo, string $table): string |
||||
{ |
||||
$sql = " |
||||
SELECT |
||||
COLUMN_NAME, |
||||
COLUMN_TYPE, |
||||
IS_NULLABLE, |
||||
COLUMN_DEFAULT, |
||||
EXTRA, |
||||
COLUMN_KEY, |
||||
COLUMN_COMMENT |
||||
FROM INFORMATION_SCHEMA.COLUMNS |
||||
WHERE TABLE_SCHEMA = DATABASE() |
||||
AND TABLE_NAME = ? |
||||
ORDER BY ORDINAL_POSITION |
||||
"; |
||||
|
||||
$stmt = $pdo->prepare($sql); |
||||
$stmt->execute([$table]); |
||||
|
||||
$columns = []; |
||||
$primary = []; |
||||
|
||||
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { |
||||
$line = '`' . $row['COLUMN_NAME'] . '` ' . $row['COLUMN_TYPE']; |
||||
|
||||
if ($row['IS_NULLABLE'] === 'NO') { |
||||
$line .= ' NOT NULL'; |
||||
} |
||||
|
||||
if ($row['COLUMN_DEFAULT'] !== null) { |
||||
$default = $row['COLUMN_DEFAULT']; |
||||
|
||||
if (strtoupper($default) === 'CURRENT_TIMESTAMP') { |
||||
$line .= ' DEFAULT CURRENT_TIMESTAMP'; |
||||
} else { |
||||
$line .= ' DEFAULT ' . $pdo->quote($default); |
||||
} |
||||
} |
||||
|
||||
if (!empty($row['EXTRA'])) { |
||||
$line .= ' ' . strtoupper($row['EXTRA']); |
||||
} |
||||
|
||||
if (!empty($row['COLUMN_COMMENT'])) { |
||||
$line .= ' COMMENT ' . $pdo->quote($row['COLUMN_COMMENT']); |
||||
} |
||||
|
||||
$columns[] = $line; |
||||
|
||||
if ($row['COLUMN_KEY'] === 'PRI') { |
||||
$primary[] = '`' . $row['COLUMN_NAME'] . '`'; |
||||
} |
||||
} |
||||
|
||||
if (!empty($primary)) { |
||||
$columns[] = 'PRIMARY KEY (' . implode(', ', $primary) . ')'; |
||||
} |
||||
|
||||
return "CREATE TABLE IF NOT EXISTS `{$table}` (\n " |
||||
. implode(",\n ", $columns) |
||||
. "\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue