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:----ONh1t8IrHEi+7HAeCezYIarsejEwBj0ZMuV+36l4QGIE5sqsWVWFVMtjAE63WAgrUweAm0QJOfVZgg1G62AVKREEsziVvL52FvU3od/cziQUGJLGSlodDugUijTRjhKMHDXfel+Ca4UENgV6QD4PQ0Wv683FBLi9jvaaFXoh8lFE6dFTX/pHVgk87h76MAf0tbOD261paChMJBTLY49JDrDCKpxfgeERmQKJo/hVv/opS7gKqDhXYSux6cKkjivAH7wrwmtvJTdF5o4oOACfjeDBeuyc1yd51hkAJr9CHEfktp0kJ5xZMJGQuBaoTRlHsmb8KHULxwXGgSLCk+igk0JI+Dk3l53I+NL4HEBQ3Nn8ps0n6JjYxdFXtNVewVfiYpyrj3xkmPYLj1Mxf18aa+cehTCPIXQ0ys0Uol+2d3EkdGKAivCiqzUArA020bQ9nPyJGukQ2WP3gHU7f/TDMyDsNYWaVEvayFHT2bhKVfa4iwIJiCWxgSZBED4dTv5Jz9boWUj7qxNoSwp9z8DRMXiENoTuP/w20FoUUqg8/irG+6DJ3ltXqa+wPK3dtc09bxBBO2cS5+hVjILoj2o/ujIj7JdUSvrQ4OibWHHYHnrbnxRdiMxAynL4Gn+bLk5VXxY6cLNtCeM3qN83HWqfg+kjz0dUC+dBbPhIg0VFPP8=----ATTACHMENT:----NjA2MDI2NjE2MTkxNTA5NyA2OTU3NzEwOTA2NTEyMjM0IDIwNjkxNzU5NzcwOTQwMDk=