. */ namespace SP\Tests; use Exception; use PDO; use SP\Storage\Database\DatabaseConnectionData; use SP\Storage\Database\DatabaseException; /** * Trait DatabaseUtil * * @package SP\Tests */ class DatabaseUtil { /** * @param string $user * @param string $pass * @param string $database * @param string $host * * @throws DatabaseException */ public static function createUser( string $user, string $pass, string $database, string $host ): void { $query = 'GRANT ALL PRIVILEGES ON `%s`.* TO \'%s\'@\'%s\' IDENTIFIED BY \'%s\''; $conn = self::getConnection(); $conn->exec(sprintf($query, $database, $user, SELF_IP_ADDRESS, $pass)); // Long hostname returned on Travis CI if (getenv('TRAVIS') === false) { $conn->exec(sprintf($query, $database, $user, SELF_HOSTNAME, $pass)); } $conn->exec(sprintf($query, $database, $user, $host, $pass)); } /** * @return PDO * @throws DatabaseException */ public static function getConnection(): PDO { $data = (new DatabaseConnectionData()) ->setDbHost(getenv('DB_SERVER')) ->setDbUser(getenv('DB_USER')) ->setDbPass(getenv('DB_PASS')); return getDbHandler($data)->getConnectionSimple(); } /** * @param string $user * @param string $host */ public static function dropUser(string $user, string $host): void { try { self::getConnection() ->exec(sprintf('DROP USER \'%s\'@\'%s\'', $user, $host)); } catch (Exception $e) { processException($e); } } /** * @param string $database * * @throws DatabaseException */ public static function dropDatabase(string $database): void { self::getConnection() ->exec(sprintf('DROP DATABASE IF EXISTS `%s`', $database)); } /** * @param string $database * * @throws DatabaseException */ public static function createDatabase(string $database): void { self::getConnection() ->exec(sprintf('CREATE DATABASE `%s`', $database)); } }