connectors

This commit is contained in:
Dariusz Jaski 2021-03-07 01:15:16 +01:00
parent 9204f70e50
commit 54113fffc0
13 changed files with 105 additions and 39 deletions

View File

@ -9,7 +9,7 @@ use Fufle\ORM\Model as BaseModel;
class Job extends BaseModel {
public int $id;
public float $budget;
public static function QueryModel() {
public static function SetQueryModel() {
return new JobQuery( static::class );
}

View File

@ -7,6 +7,6 @@ use Fufle\ORM\Query as BaseQuery;
class JobQuery extends BaseQuery implements IJobQuery {
public function GetLast10(): string {
return "select * from jobs order by id desc limit 10";
return "SELECT * from jobs order by id desc limit 10";
}
}

View File

@ -1,32 +0,0 @@
<?php
namespace Fufle\Database;
use PDO;
use Fufle\Database\QueryData;
class ConnectionManager {
private static $connection;
public static function connect(string $connectionString) {
self::$connection = new PDO($connectionString);
}
public static function Query(string $query, array|object $params = [], string $output = 'stdObject') {
$data = new QueryData($query, $params);
$data->normalize();
$stmt = self::$connection->prepare($data->query);
$stmt->execute($data->params);
$stmt->setFetchMode(PDO::FETCH_CLASS, $output);
return $stmt->fetch();
}
public static function QueryAll(string $query, array|object $params = [], string $output = 'stdObject') {
$data = new QueryData($query, $params);
$data->normalize();
$stmt = self::$connection->prepare($data->query);
$stmt->execute($data->params);
$stmt->setFetchMode(PDO::FETCH_CLASS, $output);
return $stmt->fetchAll();
}
}

View File

@ -0,0 +1,52 @@
<?php
namespace Fufle\ORM\Database;
use PDO;
use Fufle\ORM\Database\QueryData;
use Fufle\ORM\Database\Connectors\IConnector;
class ConnectionManager {
private static $connection;
private static $connectors = [];
private static string $connectionString;
private static Credentials $credentials;
public static function RegisterConnector(IConnector $connector) {
self::$connectors[] = $connector;
}
public static function Connect(string $driver, $host, $port = null, $database = null, $user = null, $password = null) {
foreach (self::$connectors as $c) {
if ($c->driverEquals($driver)) {
$credentials = new Credentials($host, $port, $database, $user, $password);
self::$connectionString = $c->getConnectionString($credentials);
self::ConnectWithString(self::$connectionString);
return;
}
}
throw new Exception('Driver not found');
}
public static function ConnectWithString(string $connectionString) {
self::$connection = new PDO($connectionString);
}
public static function Query(string $query, array|object $params = [], string $output = 'stdObject') {
$data = new QueryData($query, $params);
$data->normalize();
$stmt = self::$connection->prepare($data->query);
$stmt->execute($data->params);
$stmt->setFetchMode(PDO::FETCH_CLASS, $output);
return $stmt->fetch();
}
public static function QueryAll(string $query, array|object $params = [], string $output = 'stdObject') {
$data = new QueryData($query, $params);
$data->normalize();
$stmt = self::$connection->prepare($data->query);
$stmt->execute($data->params);
$stmt->setFetchMode(PDO::FETCH_CLASS, $output);
return $stmt->fetchAll();
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace Fufle\ORM\Database\Connectors;
use Fufle\ORM\Database\Credentials;
class IConnector {
public function getConnectionString(Credentials $credentials);
}

View File

@ -0,0 +1,11 @@
<?php
namespace Fufle\ORM\Database\Connectors;
use Fufle\ORM\Database\Credentials;
class PostgresConnector implements IConnector {
public function getConnectionString(Credentials $credentials) {
return "";
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace Fufle\ORM\Database;
class Credentials {
public function __construct(
public string $host,
public int $port = null,
public string $database = null,
public string $user = null,
public string $password = null) {
}
}

View File

@ -1,6 +1,6 @@
<?php
namespace Fufle\Database;
namespace Fufle\ORM\Database;
class QueryData {
public function __construct(

View File

@ -24,7 +24,7 @@ abstract class Model {
protected static function QueryModel() {
if (self::$query === null && self::class !== static::class) {
self::$query = static::QueryModel();
self::$query = static::SetQueryModel();
}
return self::$query;
}
@ -59,4 +59,6 @@ abstract class Model {
$params,
get_called_class());
}
abstract public static function SetQueryModel(): IQuery;
}

View File

@ -1,7 +1,7 @@
<?php
namespace Fufle\ORM;
class Query {
class Query implements IQuery {
protected string $table;
protected string $primaryKey;

View File

@ -4,8 +4,17 @@ require_once __DIR__ . '/../vendor/autoload.php';
use Fufle\Demo\Model\Job;
use Fufle\Database\ConnectionManager;
$dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123';
ConnectionManager::Connect($dns);
//$dns = 'pgsql:host=localhost;port=5432;dbname=dynamic;user=dynamic;password=password123';
$params = [
'pgsql',
'localhost',
5432,
'dynamic_dev',
'dynamic',
'password123',
];
ConnectionManager::RegisterConnector(new PostgresConnector());
ConnectionManager::Connect(...$params);
echo "
";