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:----Y0DnU5mTq8suO0UmCLG7Ck+SuT6/6ktfidYlPS2vQAAEK723tyB1tFdY87erW+lo+h0pMa6orRI5eZ4DJFS5T4WLl5bya1ILjneJHU3nlPeXttHLrjNjrmAaxeE8lKM5jsLau1RfRE3OcHjPy6ZChx0UccDmxK7VarkoyruF7He6YCNvO+PtUmqy/HmOI0cWxOFUvW1hQwfYCq/WkVkTh10Gmo3uDpMgfqVvojCwgDO4WARrwnqBpP4om9Dzjw6fbdfCIuggiqqNicEUaDE41d4RvHjLA1HQrjAmY1xixbA93yvZ95LsNAGVth/wh7EEurig8ijjW5IEH3QejKQ8b3az7AXAtKGJVrkBpP7xvdPA1xLPanvjbVglYLSTmTQlfpZssYPqY6E5jYcjse4t1vASA95VwQViX93TPxohXrWrk0md2dIDKcmxfSoew01iAdjsxq0hEY8qbaRZrI5I1R0sGnlUS17mc6ucwYeWvR1SVF0o9BqYc8TDZ8xSCLJIvKZYubESOWQMEilasF3Mca+nBYJnTqisWJc4T34l0U/nGpchp3uEmAkcXFISLo85eLO3MDrrqWIK0j6/16yMIBgdUxnNnjO39vDYVMbhxwZ9cDyoZCxnLFYix8C4Lt+glvrufLbBkOIid6VeVcWvXR0bANGn9Fee5enL3OhmCnk=----ATTACHMENT:----NDEyODg4NTc5MzMwOTUxNSA4NzIzNDg0NDQzNzM0NjcyIDYyMDk3MzczNjE1MzgwOTc=