From d1e8a0800f2276936eee9df4ac44cd4e127b25bc Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 11 Oct 2020 15:37:20 +0200 Subject: [PATCH] impl. sqlsrv and fix 64bit bugs --- .../Connection/SqlServerConnection.php | 9 +- ...rosoftGrammar.php => SqlServerGrammar.php} | 2 +- tests/Bootstrap.php | 90 ++++++++++++------- .../Connection/SqlServerConnectionTest.php | 1 + ...ammarTest.php => SqlServerGrammarTest.php} | 8 +- tests/Utils/RnG/DateTimeTest.php | 6 +- 6 files changed, 70 insertions(+), 46 deletions(-) rename DataStorage/Database/Query/Grammar/{MicrosoftGrammar.php => SqlServerGrammar.php} (96%) rename tests/DataStorage/Database/Query/Grammar/{MicrosoftGrammarTest.php => SqlServerGrammarTest.php} (65%) diff --git a/DataStorage/Database/Connection/SqlServerConnection.php b/DataStorage/Database/Connection/SqlServerConnection.php index a81aa29f7..382069f8d 100644 --- a/DataStorage/Database/Connection/SqlServerConnection.php +++ b/DataStorage/Database/Connection/SqlServerConnection.php @@ -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'] = '****'; } diff --git a/DataStorage/Database/Query/Grammar/MicrosoftGrammar.php b/DataStorage/Database/Query/Grammar/SqlServerGrammar.php similarity index 96% rename from DataStorage/Database/Query/Grammar/MicrosoftGrammar.php rename to DataStorage/Database/Query/Grammar/SqlServerGrammar.php index d12a64afa..3f61d5b5b 100644 --- a/DataStorage/Database/Query/Grammar/MicrosoftGrammar.php +++ b/DataStorage/Database/Query/Grammar/SqlServerGrammar.php @@ -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. diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index acdd66e94..19c6a65a3 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -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; diff --git a/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php b/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php index 2f26336c3..9c9cb0de3 100644 --- a/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php +++ b/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php @@ -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()); } diff --git a/tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/SqlServerGrammarTest.php similarity index 65% rename from tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php rename to tests/DataStorage/Database/Query/Grammar/SqlServerGrammarTest.php index 1ccdc9011..8c1a92281 100644 --- a/tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php +++ b/tests/DataStorage/Database/Query/Grammar/SqlServerGrammarTest.php @@ -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()); } } diff --git a/tests/Utils/RnG/DateTimeTest.php b/tests/Utils/RnG/DateTimeTest.php index c0d6d877c..9023292d3 100644 --- a/tests/Utils/RnG/DateTimeTest.php +++ b/tests/Utils/RnG/DateTimeTest.php @@ -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); } }