Skip to content

Commit

Permalink
Columns moved to separated trait
Browse files Browse the repository at this point in the history
  • Loading branch information
misantron committed Jan 22, 2018
1 parent 9b14d57 commit 0124444
Show file tree
Hide file tree
Showing 14 changed files with 350 additions and 62 deletions.
2 changes: 1 addition & 1 deletion src/Query/Delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public function __construct(\PDO $pdo, string $table)
public function __toString(): string
{
$query = 'DELETE FROM ' . $this->table;
$query .= $this->filters->notEmpty() ? ' WHERE ' . (string)$this->filters : '';
$query .= $this->buildFilters();

return $query;
}
Expand Down
27 changes: 7 additions & 20 deletions src/Query/Insert.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@
namespace MediaTech\Query\Query;


use MediaTech\Query\Query\Mixin\Columns;
use MediaTech\Query\Query\Mixin\Selectable;

/**
* Class Insert
* @package MediaTech\Query\Query
*
* @method Insert columns($items)
*/
class Insert extends Query
class Insert extends Query implements Selectable
{
/**
* @var array
*/
private $columns;
use Columns;

/**
* @var array
Expand All @@ -24,21 +26,6 @@ class Insert extends Query
*/
private $rowSet;

/**
* @param array|string $items
* @return Insert
*/
public function columns($items): Insert
{
if (empty($items)) {
throw new \InvalidArgumentException('Column list is empty');
}

$this->columns = $this->parseList($items);

return $this;
}

/**
* @param array $items
* @return Insert
Expand Down
41 changes: 41 additions & 0 deletions src/Query/Mixin/Columns.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace MediaTech\Query\Query\Mixin;


/**
* Trait Columns
* @package MediaTech\Query\Query\Mixin
*
* @method array parseList($items)
*/
trait Columns
{
/**
* @var array
*/
private $columns = [];

/**
* @param array|string $items
* @return Selectable
*/
public function columns($items)
{
$this->assertColumnsEmpty($items);

$this->columns = $this->parseList($items);

return $this;
}

/**
* @param array|string $items
*/
private function assertColumnsEmpty($items)
{
if (empty($items)) {
throw new \InvalidArgumentException('Column list is empty');
}
}
}
18 changes: 9 additions & 9 deletions src/Query/Mixin/DataFetching.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ trait DataFetching
*/
public function fetchAllObject(string $className): array
{
$this->validateFetch();
$this->assertStatementCreated();

return $this->statement->fetchAll(\PDO::FETCH_CLASS, $className);
}
Expand All @@ -28,7 +28,7 @@ public function fetchAllObject(string $className): array
*/
public function fetchOneObject(string $className)
{
$this->validateFetch();
$this->assertStatementCreated();

$response = $this->statement->fetchObject($className);

Expand All @@ -41,7 +41,7 @@ public function fetchOneObject(string $className)
*/
public function fetchCallback(callable $callback): array
{
$this->validateFetch();
$this->assertStatementCreated();

return $this->statement->fetchAll(\PDO::FETCH_FUNC, $callback);
}
Expand All @@ -51,7 +51,7 @@ public function fetchCallback(callable $callback): array
*/
public function fetchAllAssoc(): array
{
$this->validateFetch();
$this->assertStatementCreated();

return $this->statement->fetchAll(\PDO::FETCH_ASSOC);
}
Expand All @@ -61,7 +61,7 @@ public function fetchAllAssoc(): array
*/
public function fetchOneAssoc()
{
$this->validateFetch();
$this->assertStatementCreated();

$response = $this->statement->fetch(\PDO::FETCH_ASSOC);

Expand All @@ -73,7 +73,7 @@ public function fetchOneAssoc()
*/
public function fetchKeyValue(): array
{
$this->validateFetch();
$this->assertStatementCreated();

return $this->statement->fetchAll(\PDO::FETCH_KEY_PAIR);
}
Expand All @@ -83,7 +83,7 @@ public function fetchKeyValue(): array
*/
public function fetchAllColumn(): array
{
$this->validateFetch();
$this->assertStatementCreated();

return $this->statement->fetchAll(\PDO::FETCH_COLUMN);
}
Expand All @@ -93,7 +93,7 @@ public function fetchAllColumn(): array
*/
public function fetchColumn()
{
$this->validateFetch();
$this->assertStatementCreated();

$response = $this->statement->fetchColumn();

Expand All @@ -103,7 +103,7 @@ public function fetchColumn()
/**
* @throws \RuntimeException
*/
private function validateFetch()
private function assertStatementCreated()
{
if (!$this->statement instanceof \PDOStatement) {
throw new \RuntimeException('Data fetch error: query must be executed before fetch data');
Expand Down
91 changes: 91 additions & 0 deletions src/Query/Mixin/Filter/ArrayCompare.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use MediaTech\Query\Query\Condition\ArrayContainsCondition;
use MediaTech\Query\Query\Condition\InArrayCondition;
use MediaTech\Query\Query\Condition\InCondition;
use MediaTech\Query\Query\Mixin\Filterable;

/**
* Trait ArrayCompare
Expand All @@ -15,11 +16,23 @@
*/
trait ArrayCompare
{
/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function in(string $column, array $values)
{
return $this->andIn($column, $values);
}

/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function andIn(string $column, array $values)
{
$this->filters->append(
Expand All @@ -28,6 +41,12 @@ public function andIn(string $column, array $values)
return $this;
}

/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function orIn(string $column, array $values)
{
$this->filters->append(
Expand All @@ -36,11 +55,23 @@ public function orIn(string $column, array $values)
return $this;
}

/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function notIn(string $column, array $values)
{
return $this->andNotIn($column, $values);
}

/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function andNotIn(string $column, array $values)
{
$this->filters->append(
Expand All @@ -49,6 +80,12 @@ public function andNotIn(string $column, array $values)
return $this;
}

/**
* @param string $column
* @param array $values
*
* @return Filterable
*/
public function orNotIn(string $column, array $values)
{
$this->filters->append(
Expand All @@ -57,11 +94,23 @@ public function orNotIn(string $column, array $values)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function inArray(string $column, $value)
{
return $this->andInArray($column, $value);
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function andInArray(string $column, $value)
{
$this->filters->append(
Expand All @@ -70,6 +119,12 @@ public function andInArray(string $column, $value)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function orInArray(string $column, $value)
{
$this->filters->append(
Expand All @@ -78,11 +133,23 @@ public function orInArray(string $column, $value)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function notInArray(string $column, $value)
{
return $this->andNotInArray($column, $value);
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function andNotInArray(string $column, $value)
{
$this->filters->append(
Expand All @@ -91,6 +158,12 @@ public function andNotInArray(string $column, $value)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function orNotInArray(string $column, $value)
{
$this->filters->append(
Expand All @@ -99,11 +172,23 @@ public function orNotInArray(string $column, $value)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function arrayContains(string $column, array $values)
{
return $this->andArrayContains($column, $values);
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function andArrayContains(string $column, array $values)
{
$this->filters->append(
Expand All @@ -112,6 +197,12 @@ public function andArrayContains(string $column, array $values)
return $this;
}

/**
* @param string $column
* @param mixed $value
*
* @return Filterable
*/
public function orArrayContains(string $column, array $values)
{
$this->filters->append(
Expand Down
2 changes: 1 addition & 1 deletion src/Query/Mixin/Filter/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ private function __construct(string $condition, string $conjunction, bool $group
* @param Stringable|string $condition
* @param string $conjunction
* @param bool $group
* @return static
* @return Filter
*/
public static function create($condition, string $conjunction = '', bool $group = false)
{
Expand Down

0 comments on commit 0124444

Please sign in to comment.