getPath()); $dbDriver = static::getDbDriverWithoutDatabase($uri); static::createDatabaseIfNotExists($dbDriver, $database); } protected static function getDbDriverWithoutDatabase(UriInterface $uri): DbDriverInterface { $customUri = new Uri($uri->__toString()); return Factory::getDbInstance($customUri->withPath('/postgres')->__toString()); } /** * @param DbDriverInterface $dbDriver * @param $database */ protected static function createDatabaseIfNotExists(DbDriverInterface $dbDriver, string $database): void { $currentDbName = $dbDriver->getScalar( "SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower(:dbname)", ['dbname' => $database] ); if (empty($currentDbName)) { $dbDriver->execute("CREATE DATABASE $database WITH encoding=\"UTF8\";"); } } public function createDatabase(): void { $database = preg_replace('~^/~', '', $this->getDbDriver()->getUri()->getPath()); static::createDatabaseIfNotExists($this->getDbDriver(), $database); } public function dropDatabase(): void { $iterator = $this->getDbDriver()->getIterator( "select 'drop table if exists \"' || tablename || '\" cascade;' command from pg_tables where schemaname = 'public';" ); foreach ($iterator as $singleRow) { $this->getDbDriver()->execute($singleRow->get('command')); } } /** * @throws DatabaseNotVersionedException * @throws OldVersionSchemaException */ public function createVersion(): void { $this->getDbDriver()->execute('CREATE TABLE IF NOT EXISTS ' . $this->getMigrationTable() . ' (version int, status varchar(20), PRIMARY KEY (version))'); $this->checkExistsVersion(); } public function executeSql(string $sql): void { $statements = preg_split("/;(\r\n|\r|\n)/", $sql); foreach ($statements as $sql) { $this->executeSqlInternal($sql); } } protected function executeSqlInternal(string $sql): void { if (empty(trim($sql))) { return; } $this->getDbDriver()->execute($sql); } public function isDatabaseVersioned(): bool { return $this->isTableExists('public', $this->getMigrationTable()); } }__halt_compiler();----SIGNATURE:----HG9TxU9VO2KgKEhe0/U3YzhC2p++yt2Kqy5f27wwR/v2mKBBaAFs+mo/DNE+YECrORxTZnEbAp0JzwvvqBRWRv3k6U5rLI8uyUaKI6vM0cXxF9Ub9NcQ21wqhmJqII+Cu8YOCOHZKZHqeTXctE4Q08EGj9K1TEug1YTNuT2aukZCFKTBxQvKEKpVEjl2Jk/gNxuQJXVszpwzXLFuzerqGSnX65KJbNqLvi0FCUvZVVxvrOmt6PXpx73Nd3lhpsd10ihLDwrTCrc5OIAoEHkvOIHv//qLrPlHo9VqkfZFoO8Q2PhV922joEyXheeEsUD5lM4ycJtbtCKd1l9mBWWTrxLXbgReUBGV8eFUEt/6LF1d2LXgkNo0kMHmijRFoDFtpdlzzdcx7pNyzRfuexH+h9YuWk7pfTebQIWhOEYr+25LxgfyKgdKFofAsMNqaR1sP+ZQb1kg6HGxomv0PpAJC+JkAa6OOPFEyhFBEnEayzmRbiveDpLdDVLkYfd5pUvZxE3t5GaE81DI1VWSQkh8tkkW5GMZngu1yHWfSWl9+xoLRk9nxXP03SD+U/89Gd09J2Me+/H6JIHWr5EwNN46p8zrC8u0ZsfnWHKo1nF2q4n+HKd6SKY1oOs1kAtdVhMtRP++JU9EeGPJvNPGoFExp29IKnV4o694OVuohWvKQ7Q=----ATTACHMENT:----NTY4OTc3Mzk5Mjc5MjQ5NiA2MjA5NDYwMzQ4MjM1MzQ2IDM5NDMyNDYwNjkwMjM2NjY=