This repository has been archived on 2025-06-02. You can view files and clone it, but cannot push or open issues or pull requests.
nulib/php/src/db/mysql/MysqlStorage.php

66 lines
1.5 KiB
PHP

<?php
namespace nulib\db\mysql;
use nulib\cl;
use nulib\db\CapacitorChannel;
use nulib\db\CapacitorStorage;
/**
* Class MysqlStorage
*/
class MysqlStorage extends CapacitorStorage {
function __construct($mysql) {
$this->db = Mysql::with($mysql);
}
protected Mysql $db;
function db(): Mysql {
return $this->db;
}
const PRIMARY_KEY_DEFINITION = [
"id_" => "integer primary key auto_increment",
];
protected function tableExists(string $tableName): bool {
$db = $this->db;
$found = $db->get([
"select table_name from information_schema.tables",
"where" => [
"table_schema" => $db->getDbname(),
"table_name" => $tableName,
],
]);
return $found !== null;
}
const METADATA_COLS = [
"name" => "varchar(64) not null primary key",
"value" => "varchar(255)",
];
function _getMigration(CapacitorChannel $channel): _mysqlMigration {
$migrations = cl::merge([
"0init" => [$this->_createSql($channel)],
], $channel->getMigration());
return new _mysqlMigration($migrations, $channel->getName());
}
const CHANNELS_COLS = [
"name" => "varchar(255) not null primary key",
"table_name" => "varchar(64)",
"class_name" => "varchar(255)",
];
protected function _addToChannelsSql(CapacitorChannel $channel): array {
return cl::merge(parent::_addToChannelsSql($channel), [
"suffix" => "on duplicate key update name = name",
]);
}
function close(): void {
$this->db->close();
}
}