Skip to content

Commit

Permalink
1 Db Query is born
Browse files Browse the repository at this point in the history
  • Loading branch information
enduro44 committed Sep 12, 2020
1 parent dbedb0f commit 45dab2f
Show file tree
Hide file tree
Showing 15 changed files with 481 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Ide's
.idea
.vscode
.settings/
.classpath
.project
nbproject
30 changes: 30 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "clean-bandits/db-query",
"description": "Simple PHP OOP library for creating database queries",
"keywords": [
"php",
"oop",
"db",
"query",
"dal"
],
"homepage": "https://github.com/CleanBandits/DbQuery",
"license": "MIT",
"authors": [
{
"name": "Clean Bandits"
}
],
"require": {
"php": "^7.2"
},
"minimum-stability": "stable",
"autoload": {
"psr-4": {
"CleanBandits\\DbQuery\\": "src/"
},
"files": [
"src/I18n/format.php"
]
}
}
49 changes: 49 additions & 0 deletions src/DbQuery.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php


namespace CleanBandits\DbQuery;

use CleanBandits\DbQuery\Filters\Filter;
use CleanBandits\DbQuery\Order\Order;
use CleanBandits\DbQuery\Page\Page;


class DbQuery
{
/**
* @var Order|null
*/
private $order;

/**
* @var Page|null
*/
private $page;

/**
* @var Filter|null
*/
private $filters;

public function __construct(?Order $order = null, ?Page $page = null, ?Filter $filters = null)
{
$this->order = $order;
$this->page = $page;
$this->filters = $filters;
}

public function order(): ?Order
{
return $this->order;
}

public function page(): ?Page
{
return $this->page;
}

public function filters(): ?Filter
{
return $this->filters;
}
}
53 changes: 53 additions & 0 deletions src/DbQueryBuilder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php


namespace CleanBandits\DbQuery;


use CleanBandits\DbQuery\Filters\DbFilters;

class DbQueryBuilder
{
/**
* @var DbOrder
*/
private $order;

/**
* @var DbPage
*/
private $page;

/**
* @var DbFilters
*/
private $filters;


public function order(DbOrder $order): self
{
$this->order = $order;
return $this;
}

public function filters(DbFilters $filters): self
{
$this->filters = $filters;
return $this;
}

public function page(DbPage $page): self
{
$this->page = $page;
return $this;
}

public function query(): DbQuery
{
return new DbQuery(
isset($this->order) ? $this->order : null,
isset($this->page) ? $this->page : null,
isset($this->filters) ? $this->filters : null
);
}
}
117 changes: 117 additions & 0 deletions src/filters/DbFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?php

namespace CleanBandits\DbQuery\Filters;

class DbFilter implements Filter
{

/**
* @var string
*/
protected $column;

/**
* @var array|int|string
*/
protected $value;

/**
* @var string
*/
protected $type;

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @param string $type
*/
private function __construct(string $column, $value, string $type)
{
$this->column = $column;
$this->value = $value;
$this->type = $type;
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructLike(string $column, $value): self
{
return new self($column, $value, DbFilterType::Like);
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructNotLike(string $column, $value): self
{
return new self($column, $value, DbFilterType::NotLike);
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructEquals(string $column, $value): self
{
return new self($column, $value, DbFilterType::Equals);
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructNotEquals(string $column, $value): self
{
return new self($column, $value, DbFilterType::NotEquals);
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructIn(string $column, $value): self
{
return new self($column, $value, DbFilterType::In);
}

/**
* DbFilter constructor.
* @param string $column
* @param string|int|array $value
* @return DbFilter
*/
public static function constructNotIn(string $column, $value): self
{
return new self($column, $value, DbFilterType::NotEquals);
}

public function sql(): string
{
return $this->column() . ' ' . $this->type . ' (' . $this->value() . ')';
}

protected function column(): string
{
return $this->column;
}

protected function value()
{
return $this->value;
}
}

15 changes: 15 additions & 0 deletions src/filters/DbFilterType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php


namespace CleanBandits\DbQuery\Filters;


class DbFilterType
{
const Like = 'LIKE';
const NotLike = 'NOT LIKE';
const Equals = '=';
const NotEquals = '!=';
const In = 'IN';
const NotIn = 'NOT IN';
}
32 changes: 32 additions & 0 deletions src/filters/DbFilters.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace CleanBandits\DbQuery\Filters;


class DbFilters implements Filter
{
/**
* @var DbFiltersGroup
*/
private $filtersGroup;

public function __construct(DbFiltersGroup $filtersGroup)
{
$this->filtersGroup = $filtersGroup;
}

public static function constructFromGroup(DbFiltersGroup $filtersGroup): self
{
return new self($filtersGroup);
}

public static function constructFromFilter(Filter $dbFilter): self
{
return new self(DbFiltersGroup::constructAndGroup([$dbFilter]));
}

public function sql(): string
{
return $this->filtersGroup->sql();
}
}
55 changes: 55 additions & 0 deletions src/filters/DbFiltersGroup.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php


namespace CleanBandits\DbQuery\Filters;


class DbFiltersGroup implements Filter
{
/**
* @var DbFiltersGroup[]|Filter[]
*/
private $filters;

/**
* @var string
*/
private $join;

/**
* DbFiltersGroup constructor.
* @param Filter[]|DbFiltersGroup[] $filters
* @param string $join
*/
private function __construct(array $filters, string $join)
{
$this->filters = $filters;
$this->join = $join;
}

/**
* @param Filter[]|DbFiltersGroup[] $filters
* @return DbFiltersGroup
*/
public static function constructAndGroup(array $filters): self
{
return new self($filters, 'AND');
}

/**
* @param Filter[]|DbFiltersGroup[] $filters
* @return DbFiltersGroup
*/
public static function constructOrGroup(array $filters): self
{
return new self($filters, 'OR');
}

public function sql(): string
{
$filters = array_map(function (Filter $filter) {
return $filter->sql();
}, $this->filters);
return '(' . implode(' ' . $this->join . ' ', $filters) . ')';
}
}
12 changes: 12 additions & 0 deletions src/filters/EmptyDbFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

namespace CleanBandits\DbQuery\Filters;


class EmptyDbFilter implements Filter
{
public function sql(): string
{
return '1';
}
}
8 changes: 8 additions & 0 deletions src/filters/Filter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace CleanBandits\DbQuery\Filters;

interface Filter
{
public function sql(): string;
}
Loading

0 comments on commit 45dab2f

Please sign in to comment.