lib/php/libsdk/SDK/Build/PGO/Server/MariaDB.php (100 lines of code) (raw):
<?php
namespace SDK\Build\PGO\Server;
use SDK\Build\PGO\Interfaces\Server\DB;
use SDK\Build\PGO\Abstracts\Server;
use SDK\Build\PGO\Config as PGOConfig;
use SDK\{Exception, FileOps};
use SDK\Build\PGO\Tool\PackageWorkman;
class MariaDB extends Server implements DB
{
use FileOps;
protected $conf;
protected $base;
protected $name = "MariaDB";
public function __construct(PGOConfig $conf)
{
$this->conf = $conf;
$this->base = $conf->getSrvDir(strtolower($this->name));
}
protected function setupDist()
{
/* pass */
}
public function prepareInit(PackageWorkman $pw, bool $force = false) : void
{
$url = $this->conf->getSectionItem($this->name, "pkg_url");
$pw->fetchAndUnzip($url, "mariadb.zip", $this->conf->getSrvDir(), "mariadb", $force);
}
public function init() : void
{
echo "Initializing " . $this->name . ".\n";
$this->setupDist();
$this->up();
$this->down(true);
echo $this->name . " initialization done.\n";
}
public function up() : void
{
echo "Starting " . $this->name . ".\n";
$cwd = getcwd();
chdir($this->base);
$port = $this->conf->getSectionItem($this->name, "port");
//$h = popen("start /b .\\bin\\mysqld.exe --port=$port >nul 2>&1", "r");
$h = popen("start /b .\\bin\\mysqld.exe --port=$port 2>&1", "r");
if (!is_resource($h)) {
chdir($cwd);
throw new Exception("Failed to start MariaDB.");
}
sleep(3);
while (!feof($h)) {
echo fread($h, 1024);
}
pclose($h);
chdir($cwd);
echo $this->name . " started.\n";
}
public function down(bool $force = false) : void
{
echo "Stopping " . $this->name . ".\n";
$cwd = getcwd();
chdir($this->base);
$user = $this->conf->getSectionItem($this->name, "user");
$pass = $this->conf->getSectionItem($this->name, "pass");
$host = $this->conf->getSectionItem($this->name, "host");
$port = $this->conf->getSectionItem($this->name, "port");
$cmd = sprintf(".\\bin\\mysqladmin.exe --host=$host --port=$port -u $user %s--shutdown_timeout=0 shutdown", ($pass ? "-p$pass " : ""));
exec($cmd);
if ($force) {
sleep(1);
exec("taskkill /f /im mysqld.exe >nul 2>&1");
}
chdir($cwd);
echo $this->name . " stopped.\n";
}
public function query(string $s, string $db = NULL) : void
{
$ret = NULL;
$cwd = getcwd();
chdir($this->base);
$user = $this->conf->getSectionItem($this->name, "user");
$pass = $this->conf->getSectionItem($this->name, "pass");
$host = $this->conf->getSectionItem($this->name, "host");
$port = $this->conf->getSectionItem($this->name, "port");
$pass_arg = $pass ? "-p$pass " : "";
$db_arg = $db ? "-D $db" : "";
shell_exec(".\\bin\\mysql.exe -u $user $pass_arg -h $host -P $port $db_arg -e \"$s\"");
//var_dump($this->base, getcwd(), ".\\bin\\mysql.exe -u $user $pass_arg -h $host -P $port -e \"$s\"");
chdir($cwd);
}
public function import(string $path, string $db = NULL) : void
{
$ret = NULL;
$cwd = getcwd();
chdir($this->base);
$user = $this->conf->getSectionItem($this->name, "user");
$pass = $this->conf->getSectionItem($this->name, "pass");
$host = $this->conf->getSectionItem($this->name, "host");
$port = $this->conf->getSectionItem($this->name, "port");
$pass_arg = $pass ? "-p$pass " : "";
$db_arg = $db ? "-D $db" : "";
shell_exec(".\\bin\\mysql.exe -u $user $pass_arg -h $host -P $port $db_arg < \"$path\"");
chdir($cwd);
}
}