impl. sqlsrv and fix 64bit bugs

This commit is contained in:
Dennis Eichhorn 2020-10-11 15:37:20 +02:00
parent b2415446a1
commit d1e8a0800f
6 changed files with 70 additions and 46 deletions

View File

@ -17,8 +17,8 @@ namespace phpOMS\DataStorage\Database\Connection;
use phpOMS\DataStorage\Database\DatabaseStatus;
use phpOMS\DataStorage\Database\DatabaseType;
use phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException;
use phpOMS\DataStorage\Database\Query\Grammar\MysqlGrammar;
use phpOMS\DataStorage\Database\Schema\Grammar\MysqlGrammar as MysqlSchemaGrammar;
use phpOMS\DataStorage\Database\Query\Grammar\SqlServerGrammar;
use phpOMS\DataStorage\Database\Schema\Grammar\SqlServerGrammar as SqlServerSchemaGrammar;
/**
* Database handler.
@ -45,8 +45,8 @@ final class SqlServerConnection extends ConnectionAbstract
public function __construct(array $dbdata)
{
$this->type = DatabaseType::SQLSRV;
$this->grammar = new MysqlGrammar();
$this->schemaGrammar = new MysqlSchemaGrammar();
$this->grammar = new SqlServerGrammar();
$this->schemaGrammar = new SqlServerSchemaGrammar();
$this->dbdata = $dbdata;
}
@ -79,6 +79,7 @@ final class SqlServerConnection extends ConnectionAbstract
} catch (\PDOException $e) {
$this->con = null;
$this->status = DatabaseStatus::MISSING_DATABASE;
throw new InvalidConnectionConfigException((string) \json_encode($this->dbdata));
} finally {
$this->dbdata['password'] = '****';
}

View File

@ -24,7 +24,7 @@ use phpOMS\DataStorage\Database\Query\Builder;
* @link https://orange-management.org
* @since 1.0.0
*/
class MicrosoftGrammar extends Grammar
class SqlServerGrammar extends Grammar
{
/**
* Compile random.

View File

@ -4,6 +4,7 @@
\ini_set('display_errors', '1');
\ini_set('display_startup_errors', '1');
\error_reporting(\E_ALL);
setlocale(LC_ALL, 'en_US.UTF-8');
if (\is_file('vendor/autoload.php')) {
include_once 'vendor/autoload.php';
@ -168,54 +169,54 @@ $CONFIG = [
'admin' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
'insert' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
'select' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
'update' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
'delete' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
'schema' => [
'db' => 'mssql', /* db type */
'host' => '127.0.0.1', /* db host address */
'port' => '5432', /* db host port */
'login' => 'postgres', /* db login name */
'password' => 'root', /* db login password */
'port' => '1433', /* db host port */
'login' => 'sa', /* db login name */
'password' => 'R00troot', /* db login password */
'database' => 'oms', /* db name */
'weight' => 1000, /* db table prefix */
],
@ -273,23 +274,44 @@ $CONFIG = [
];
// Reset database
$db = new \PDO($CONFIG['db']['core']['masters']['admin']['db'] . ':host=' .
$CONFIG['db']['core']['masters']['admin']['host'],
$CONFIG['db']['core']['masters']['admin']['login'],
$CONFIG['db']['core']['masters']['admin']['password']
);
$db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']);
$db->exec('CREATE DATABASE IF NOT EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']);
$db = null;
try {
$db = new \PDO($CONFIG['db']['core']['masters']['admin']['db'] . ':host=' .
$CONFIG['db']['core']['masters']['admin']['host'],
$CONFIG['db']['core']['masters']['admin']['login'],
$CONFIG['db']['core']['masters']['admin']['password']
);
$db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']);
$db->exec('CREATE DATABASE IF NOT EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']);
$db = null;
} catch (\Throwable $t) {
echo "\nCouldn't connect to MYSQL DB\n";
}
$db = new \PDO($CONFIG['db']['core']['postgresql']['admin']['db'] . ':host=' .
$CONFIG['db']['core']['postgresql']['admin']['host'],
$CONFIG['db']['core']['postgresql']['admin']['login'],
$CONFIG['db']['core']['postgresql']['admin']['password']
);
$db->exec('DROP DATABASE ' . $CONFIG['db']['core']['postgresql']['admin']['database']);
$db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['postgresql']['admin']['database']);
$db = null;
try {
$db = new \PDO($CONFIG['db']['core']['postgresql']['admin']['db'] . ':host=' .
$CONFIG['db']['core']['postgresql']['admin']['host'],
$CONFIG['db']['core']['postgresql']['admin']['login'],
$CONFIG['db']['core']['postgresql']['admin']['password']
);
$db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['postgresql']['admin']['database']);
$db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['postgresql']['admin']['database']);
$db = null;
} catch (\Throwable $t) {
echo "\nCouldn't connect to POSTGRESQL DB\n";
}
try {
$db = new \PDO($CONFIG['db']['core']['mssql']['admin']['db'] . ':host=' .
$CONFIG['db']['core']['mssql']['admin']['host'],
$CONFIG['db']['core']['mssql']['admin']['login'],
$CONFIG['db']['core']['mssql']['admin']['password']
);
$db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['mssql']['admin']['database']);
$db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['mssql']['admin']['database']);
$db = null;
} catch (\Throwable $t) {
echo "\nCouldn't connect to MSSQL DB\n";
}
$httpSession = new HttpSession();
$GLOBALS['session'] = $httpSession;

View File

@ -75,6 +75,7 @@ class SqlServerConnectionTest extends \PHPUnit\Framework\TestCase
$db = $GLOBALS['CONFIG']['db']['core']['mssql']['admin'];
unset($db['host']);
$ssql = new SqlServerConnection($db);
$ssql->connect();
self::assertEquals(DatabaseStatus::FAILURE, $ssql->getStatus());
}

View File

@ -14,19 +14,19 @@ declare(strict_types=1);
namespace phpOMS\tests\DataStorage\Database\Query\Grammar;
use phpOMS\DataStorage\Database\Query\Grammar\MicrosoftGrammar;
use phpOMS\DataStorage\Database\Query\Grammar\SqlServerGrammar;
/**
* @internal
*/
class MicrosoftGrammarTest extends \PHPUnit\Framework\TestCase
class SqlServerGrammarTest extends \PHPUnit\Framework\TestCase
{
/**
* @covers phpOMS\DataStorage\Database\Query\Grammar\MicrosoftGrammar
* @covers phpOMS\DataStorage\Database\Query\Grammar\SqlServerGrammar
* @group framework
*/
public function testDefault() : void
{
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new MicrosoftGrammar());
self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new SqlServerGrammar());
}
}

View File

@ -34,15 +34,15 @@ class DateTimeTest extends \PHPUnit\Framework\TestCase
$dateMin = new \DateTime();
$dateMax = new \DateTime();
$min = \mt_rand(0, \PHP_INT_MAX - 2);
$max = \mt_rand($min + 1, \PHP_INT_MAX);
$min = \mt_rand(0, (int) (2147483647 / 2));
$max = \mt_rand($min + 10, 2147483647);
$dateMin->setTimestamp($min);
$dateMax->setTimestamp($max);
$rng = DateTime::generateDateTime($dateMin, $dateMax);
if (!($rng->getTimestamp() >= $min && $rng->getTimestamp() <= $max)) {
if ($rng->getTimestamp() < $min || $rng->getTimestamp() > $max) {
self::assertTrue(false);
}
}