Update namespaces

This commit is contained in:
2024-08-03 20:58:53 -04:00
parent e64ea2709c
commit 3944fab3f1
43 changed files with 422 additions and 232 deletions

View File

@ -0,0 +1,107 @@
<?php
namespace ProVM\Enforce\Database\Query;
use Exception;
use FilesystemIterator;
use ProVM\Concept\Database\Query;
class Builder implements Query\Builder
{
public function __construct(array $query_classes)
{
$this->setQueries($query_classes);
}
/**
* @throws Exception
*/
public static function getClasses(string $databaseType): array
{
$directories = new FilesystemIterator(__DIR__);
foreach ($directories as $directory) {
if (!$directory->isDir()) {
continue;
}
if (strtolower($directory->getBasename()) !== strtolower($databaseType)) {
continue;
}
$classes = [];
$files = new FilesystemIterator($directory->getPathname());
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
$base = $file->getBasename('.php');
$interface = "ProVM\\Concept\\Database\\Query\\{$base}";
$class = __NAMESPACE__ . "\\{$directory->getBasename()}\\{$base}";
$classes[$interface] = $class;
}
return $classes;
}
throw new Exception("Database type's classes not found");
}
protected array $query_classes;
protected function getQueries(): array
{
return $this->query_classes;
}
protected function get(string $query_interface): string
{
return $this->query_classes[$query_interface];
}
protected function addQuery(string $query_interface, string $query): Builder
{
$this->query_classes[$query_interface] = $query;
return $this;
}
protected function setQueries(array $queries): Builder
{
foreach ($queries as $interface => $query) {
$this->addQuery($interface, $query);
}
return $this;
}
protected function build(string $query_interface, ?array $args = null): Query
{
$class = $this->get($query_interface);
if ($args !== null) {
return new $class(...$args);
}
return new $class;
}
public function select(array|string $columns = '*'): Query\Select
{
return $this->build(Query\Select::class, compact('columns'));
}
public function insert(?string $table = null): Query\Insert
{
return $this->build(Query\Insert::class, compact('table'));
}
public function update(?string $table = null): Query\Update
{
return $this->build(Query\Update::class, compact('table'));
}
public function delete(?string $table = null): Query\Delete
{
return $this->build(Query\Delete::class, compact('table'));
}
public function create(?string $table = null): Query\Create
{
return $this->build(Query\Create::class, compact('table'));
}
public function truncate(?string $table = null): Query\Truncate
{
return $this->build(Query\Truncate::class, compact('table'));
}
public function drop(?string $table = null): Query\Drop
{
return $this->build(Query\Drop::class, compact('table'));
}
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Create extends Query\Create
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Delete extends Query\Delete
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Drop extends Query\Drop
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Insert extends Query\Insert
{
}

View File

@ -0,0 +1,58 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Select extends Query\Select
{
public function limit(int $limit, ?int $offset = null): Select
{
$this->setLimit($limit);
if ($offset !== null) {
$this->setOffset($offset);
}
return $this;
}
protected int $limit;
protected int $offset;
public function getLimit(): int
{
return $this->limit;
}
public function getOffset(): int
{
return $this->offset;
}
public function setLimit(int $limit): Select
{
$this->limit = $limit;
return $this;
}
public function setOffset(int $offset): Select
{
$this->offset = $offset;
return $this;
}
protected function getLimitString(): string
{
return (isset($this->limit)) ? " LIMIT {$this->getLimit()}{$this->getOffsetString()}" : '';
}
protected function getOffsetString(): string
{
return (isset($this->offset)) ? " OFFSET {$this->getOffset()}" : '';
}
public function build(): string
{
return parent::build();
/*$query = [
parent::build(),
$this->getLimitString()
];
return implode('', $query);*/
}
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Truncate extends Query\Truncate
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\MySQL;
use ProVM\Ideal\Database\Query;
class Update extends Query\Update
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Create extends Query\Create
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Delete extends Query\Delete
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Drop extends Query\Drop
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Insert extends Query\Insert
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Select extends Query\Select
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Truncate extends Query\Truncate
{
}

View File

@ -0,0 +1,8 @@
<?php
namespace ProVM\Enforce\Database\Query\PostgreSQL;
use ProVM\Ideal\Database\Query;
class Update extends Query\Update
{
}