Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .php-cs-fixer.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
$rules = [
'@PSR12' => true,
'array_syntax' => ['syntax' => 'short'],
'ordered_imports' => ['sort_algorithm' => 'alpha'],
'ordered_imports' => ['sort_algorithm' => 'alpha', 'imports_order' => ['const', 'class', 'function']],
'global_namespace_import' => ['import_classes' => true, 'import_constants' => false, 'import_functions' => true],
'no_unused_imports' => true,
'not_operator_with_successor_space' => true,
'trailing_comma_in_multiline' => true,
Expand Down
7 changes: 5 additions & 2 deletions src/Database/Clause.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
use Phenix\Database\Constants\SQL;
use Phenix\Util\Arr;

use function is_array;

abstract class Clause implements Builder
{
use HasWhereClause;
Expand Down Expand Up @@ -47,6 +49,7 @@ protected function whereSubquery(
LogicalOperators $logicalConnector = LogicalOperators::AND
): void {
$builder = new Subquery();
$builder->select(['*']);

$subquery($builder);

Expand All @@ -65,7 +68,7 @@ protected function pushWhereWithArgs(
array|string|int $value,
LogicalOperators $logicalConnector = LogicalOperators::AND
): void {
$placeholders = \is_array($value)
$placeholders = is_array($value)
? array_fill(0, count($value), SQL::PLACEHOLDER->value)
: SQL::PLACEHOLDER->value;

Expand All @@ -90,7 +93,7 @@ protected function prepareClauses(array $clauses): array
return match (true) {
$value instanceof Operators => $value->value,
$value instanceof LogicalOperators => $value->value,
\is_array($value) => '(' . Arr::implodeDeeply($value, ', ') . ')',
is_array($value) => '(' . Arr::implodeDeeply($value, ', ') . ')',
default => $value,
};
}, $clause);
Expand Down
26 changes: 18 additions & 8 deletions src/Database/Concerns/Query/BuildsQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
use Phenix\Database\Value;
use Phenix\Util\Arr;

use function array_is_list;
use function array_keys;
use function array_unique;
use function array_values;
use function ksort;

trait BuildsQuery
{
public function table(string $table): self
Expand All @@ -29,6 +35,7 @@ public function from(Closure|string $table): self
{
if ($table instanceof Closure) {
$builder = new Subquery();
$builder->selectAllColumns();

$table($builder);

Expand Down Expand Up @@ -93,6 +100,7 @@ public function upsert(array $values, array $columns): self
public function insertFrom(Closure $subquery, array $columns, bool $ignore = false): self
{
$builder = new Subquery();
$builder->selectAllColumns();

$subquery($builder);

Expand Down Expand Up @@ -197,7 +205,7 @@ public function count(string $column = '*'): self

public function exists(): self
{
$this->action = Actions::SELECT_EXISTS;
$this->action = Actions::EXISTS;

$this->columns = [Operators::EXISTS->value];

Expand All @@ -206,7 +214,7 @@ public function exists(): self

public function doesntExist(): self
{
$this->action = Actions::SELECT_EXISTS;
$this->action = Actions::EXISTS;

$this->columns = [Operators::NOT_EXISTS->value];

Expand All @@ -220,7 +228,7 @@ public function toSql(): array
{
$sql = match ($this->action) {
Actions::SELECT => $this->buildSelectQuery(),
Actions::SELECT_EXISTS => $this->buildSelectExistsQuery(),
Actions::EXISTS => $this->buildExistsQuery(),
Actions::INSERT => $this->buildInsertSentence(),
Actions::UPDATE => $this->buildUpdateSentence(),
Actions::DELETE => $this->buildDeleteSentence(),
Expand All @@ -234,6 +242,8 @@ public function toSql(): array

protected function buildSelectQuery(): string
{
$this->columns = empty($this->columns) ? ['*'] : $this->columns;

$query = [
'SELECT',
$this->prepareColumns($this->columns),
Expand Down Expand Up @@ -271,7 +281,7 @@ protected function buildSelectQuery(): string
return Arr::implodeDeeply($query);
}

protected function buildSelectExistsQuery(): string
protected function buildExistsQuery(): string
{
$query = ['SELECT'];
$query[] = $this->columns[0];
Expand All @@ -290,19 +300,19 @@ protected function buildSelectExistsQuery(): string

private function prepareDataToInsert(array $data): void
{
if (\array_is_list($data)) {
if (array_is_list($data)) {
foreach ($data as $record) {
$this->prepareDataToInsert($record);
}

return;
}

\ksort($data);
ksort($data);

$this->columns = \array_unique([...$this->columns, ...\array_keys($data)]);
$this->columns = array_unique([...$this->columns, ...array_keys($data)]);

$this->arguments = \array_merge($this->arguments, \array_values($data));
$this->arguments = \array_merge($this->arguments, array_values($data));

$this->values[] = array_fill(0, count($data), SQL::PLACEHOLDER->value);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Database/Console/Rollback.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
* Get Target from Date
*
* @param string $date The date to convert to a target.
* @throws \InvalidArgumentException
* @throws InvalidArgumentException
* @return string The target
*/
public function getTargetFromDate(string $date): string
Expand Down
2 changes: 1 addition & 1 deletion src/Database/Constants/Actions.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
enum Actions
{
case SELECT;
case SELECT_EXISTS;
case EXISTS;
case INSERT;
case UPDATE;
case DELETE;
Expand Down
21 changes: 16 additions & 5 deletions src/Database/QueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@
use Phenix\Data\Collection;
use Phenix\Database\Concerns\Query\BuildsQuery;
use Phenix\Database\Concerns\Query\HasJoinClause;
use Phenix\Database\Constants\Actions;
use Phenix\Database\Constants\Connections;

use function is_string;

class QueryBuilder extends QueryBase
{
use BuildsQuery {
Expand All @@ -41,7 +44,7 @@ public function __construct()

public function connection(ConnectionPool|string $connection): self
{
if (\is_string($connection)) {
if (is_string($connection)) {
$connection = App::make(Connections::name($connection));
}

Expand All @@ -55,6 +58,8 @@ public function connection(ConnectionPool|string $connection): self
*/
public function get(): Collection
{
$this->action = Actions::SELECT;

[$dml, $params] = $this->toSql();

$result = $this->connection->prepare($dml)
Expand All @@ -74,13 +79,17 @@ public function get(): Collection
*/
public function first(): array
{
$this->action = Actions::SELECT;

$this->limit(1);

return $this->get()->first();
}

public function paginate(Http $uri, int $defaultPage = 1, int $defaultPerPage = 15): Paginator
{
$this->action = Actions::SELECT;

$query = Query::fromUri($uri);

$currentPage = filter_var($query->get('page') ?? $defaultPage, FILTER_SANITIZE_NUMBER_INT);
Expand All @@ -100,6 +109,8 @@ public function paginate(Http $uri, int $defaultPage = 1, int $defaultPerPage =

public function count(string $column = '*'): int
{
$this->action = Actions::SELECT;

$this->countRows($column);

[$dml, $params] = $this->toSql();
Expand All @@ -115,12 +126,10 @@ public function count(string $column = '*'): int

public function insert(array $data): bool
{
$this->insertRows($data);

[$dml, $params] = $this->toSql();
[$dml, $params] = $this->insertRows($data)->toSql();

try {
$this->connection->prepare($dml)->execute($params)->fetchRow();
$this->connection->prepare($dml)->execute($params);

return true;
} catch (QueryError|TransactionError) {
Expand All @@ -130,6 +139,8 @@ public function insert(array $data): bool

public function exists(): bool
{
$this->action = Actions::EXISTS;

$this->existsRows();

[$dml, $params] = $this->toSql();
Expand Down
11 changes: 11 additions & 0 deletions src/Database/QueryGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Closure;
use Phenix\Database\Concerns\Query\BuildsQuery;
use Phenix\Database\Concerns\Query\HasJoinClause;
use Phenix\Database\Constants\Actions;

class QueryGenerator extends QueryBase
{
Expand Down Expand Up @@ -55,26 +56,36 @@ public function delete(): array

public function count(string $column = '*'): array
{
$this->action = Actions::SELECT;

return $this->countRows($column)->toSql();
}

public function exists(): array
{
$this->action = Actions::EXISTS;

return $this->existsRows()->toSql();
}

public function doesntExist(): array
{
$this->action = Actions::EXISTS;

return $this->doesntExistRows()->toSql();
}

public function get(): array
{
$this->action = Actions::SELECT;

return $this->toSql();
}

public function first(): array
{
$this->action = Actions::SELECT;

return $this->limit(1)->toSql();
}
}
3 changes: 1 addition & 2 deletions src/Filesystem/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,10 @@

use Amp\File\File as FileHandler;
use Amp\File\Filesystem;
use Phenix\Contracts\Filesystem\File as FileContract;

use function Amp\File\filesystem;

use Phenix\Contracts\Filesystem\File as FileContract;

class File implements FileContract
{
private Filesystem $driver;
Expand Down
2 changes: 1 addition & 1 deletion src/Http/Response.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public function plain(string $content, int $status = HttpStatus::OK): ServerResp
/**
* @param array<string|int, array|string|int|bool> $content
*/
public function json(Arrayable|array $content, int $status = HttpStatus::OK): ServerResponse
public function json(Arrayable|array $content = [], int $status = HttpStatus::OK): ServerResponse
{
if ($content instanceof Arrayable) {
$content = $content->toArray();
Expand Down
4 changes: 3 additions & 1 deletion src/Routing/Route.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
use Phenix\Constants\HttpMethods;
use Phenix\Contracts\Arrayable;

use function is_array;

class Route implements Arrayable
{
private array $collection;
Expand Down Expand Up @@ -126,7 +128,7 @@ private function addRoute(HttpMethods $method, string $path, Closure|array $hand
*/
private function callable(Closure|array $handler): ClosureRequestHandler
{
if (\is_array($handler)) {
if (is_array($handler)) {
[$controller, $method] = $handler;

$controller = App::make($controller);
Expand Down
10 changes: 7 additions & 3 deletions src/Util/Arr.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

namespace Phenix\Util;

use function array_filter;
use function implode;
use function is_array;

class Arr
{
/**
Expand All @@ -13,14 +17,14 @@ class Arr
*/
public static function implodeDeeply(array $data, string $separator = ' '): string
{
$data = \array_filter($data, function ($value): bool {
$data = array_filter($data, function ($value): bool {
return ! empty($value) || $value === 0;
});

$data = array_map(function ($value) {
return \is_array($value) ? self::implodeDeeply($value) : $value;
return is_array($value) ? self::implodeDeeply($value) : $value;
}, $data);

return \implode($separator, $data);
return implode($separator, $data);
}
}
13 changes: 9 additions & 4 deletions src/Util/Directory.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

namespace Phenix\Util;

use function array_merge;
use function file_exists;
use function glob;
use function is_dir;

class Directory
{
/**
Expand All @@ -12,16 +17,16 @@ class Directory
public static function all(string $path): array
{
$paths = [];
$files = \glob($path . '/*');
$files = glob($path . '/*');

foreach ($files as $file) {
if (\is_dir($file)) {
$paths = \array_merge($paths, self::all($file));
if (is_dir($file)) {
$paths = array_merge($paths, self::all($file));

continue;
}

if (\file_exists($file)) {
if (file_exists($file)) {
$paths[] = $file;
}
}
Expand Down
Loading