first commit

This commit is contained in:
2026-02-07 15:54:21 +03:00
commit 74964c74f3
51 changed files with 3701 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
<?php
declare(strict_types=1);
namespace andrewkydev\Database;
use andrewkydev\Database\Config\DatabaseConfigLoader;
use andrewkydev\Database\Connection\ConnectionManager;
use andrewkydev\Database\Migration\MigrationManager;
use andrewkydev\Database\ORM\EntityManager;
use andrewkydev\Database\Query\QueryRunner;
use andrewkydev\Database\Schema\SchemaManager;
use pocketmine\plugin\PluginBase;
final class Loader extends PluginBase {
private ?DatabaseApi $api = null;
public function onEnable(): void {
$this->saveDefaultConfig();
$config = DatabaseConfigLoader::load($this->getConfig());
$this->assertExtensions($config->driver);
$connections = new ConnectionManager($config);
$schema = new SchemaManager($connections, $config);
$query = new QueryRunner($connections, $config);
$orm = new EntityManager($connections, $config);
$orm->cache()->attachPlugin($this, $orm);
$migrations = new MigrationManager($schema, $query, $config);
$this->api = new DatabaseApi($schema, $query, $orm, $connections, $config, $migrations);
DatabaseProvider::set($this->api);
}
public function onDisable(): void {
if ($this->api !== null) {
$this->api->close();
}
DatabaseProvider::set(null);
$this->api = null;
}
private function assertExtensions(string $driver): void {
if (!extension_loaded('pdo')) {
throw new \RuntimeException('PDO extension is required');
}
if ($driver === 'mysql' && !extension_loaded('pdo_mysql')) {
throw new \RuntimeException('pdo_mysql extension is required for MySQL');
}
if ($driver === 'postgres' && !extension_loaded('pdo_pgsql')) {
throw new \RuntimeException('pdo_pgsql extension is required for PostgreSQL');
}
}
}