-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
481 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# Ide's | ||
.idea | ||
.vscode | ||
.settings/ | ||
.classpath | ||
.project | ||
nbproject |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) . ')'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
Oops, something went wrong.