Skip to content

Commit

Permalink
Implemented retrieval of query parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
PeeHaa committed Apr 3, 2019
1 parent 9e6db97 commit b41807c
Show file tree
Hide file tree
Showing 14 changed files with 141 additions and 6 deletions.
11 changes: 6 additions & 5 deletions examples/postgres-pool.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
$connection = new Connection($postgresPool);

$query = $connection
->insert('users')
->value('column1', 1)
->value('column2', 1)
->getQuery()
->select('column1')
->from('table1')
->join('table2', 'table2.id = table1.id')
->where('column1 not in (?)', [1, 2])
;

var_dump($query);
var_dump($query->getQuery());
var_dump($query->getParameters());
10 changes: 9 additions & 1 deletion src/QueryBuilder/Column/Value.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Value implements Column
private $alias;

/**
* @param int|string|mixed[] $value
* @param int|string|mixed[]|null $value
*/
public function __construct(QuoteStyle $quoteStyle, $value, ?string $alias = null)
{
Expand All @@ -31,6 +31,14 @@ public function getTable(): ?string
}

public function getName(): string
{
return (string) $this->value;
}

/**
* @return int|string|mixed[]|null
*/
public function getValue()
{
return $this->value;
}
Expand Down
16 changes: 16 additions & 0 deletions src/QueryBuilder/Condition/AndCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace HarmonyIO\Dbal\QueryBuilder\Condition;

use HarmonyIO\Dbal\QueryBuilder\Column\Field;

final class AndCondition implements Condition
{
/** @var Condition[] */
Expand All @@ -22,4 +24,18 @@ public function toSql(): string

return '(' . implode(' AND ', $conditionsSql) . ')';
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
$parameters = [];

foreach ($this->conditions as $condition) {
$parameters = array_merge($parameters, $condition->getParameters());
}

return $parameters;
}
}
14 changes: 14 additions & 0 deletions src/QueryBuilder/Condition/Collection.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,18 @@ public function getConditions(): array
{
return $this->conditions;
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
$parameters = [];

foreach ($this->conditions as $condition) {
$parameters = array_merge($parameters, $condition->getParameters());
}

return $parameters;
}
}
4 changes: 4 additions & 0 deletions src/QueryBuilder/Condition/Condition.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@

interface Condition extends QueryPart
{
/**
* @return mixed[]
*/
public function getParameters(): array;
}
8 changes: 8 additions & 0 deletions src/QueryBuilder/Condition/InCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,12 @@ private function setToSql(): string

return sprintf('(%s)', implode(', ', $placeHolders));
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
return array_values($this->set);
}
}
15 changes: 15 additions & 0 deletions src/QueryBuilder/Condition/MatchingCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace HarmonyIO\Dbal\QueryBuilder\Condition;

use HarmonyIO\Dbal\QueryBuilder\Column\Column;
use HarmonyIO\Dbal\QueryBuilder\Column\Field;
use HarmonyIO\Dbal\QueryBuilder\Column\Value;

final class MatchingCondition implements Condition
Expand Down Expand Up @@ -42,4 +43,18 @@ private function valueToSql($value): string

return '?';
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
if ($this->rightValue instanceof Field) {
return [];
}

return [
$this->rightValue->getValue(),
];
}
}
8 changes: 8 additions & 0 deletions src/QueryBuilder/Condition/NotInCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,12 @@ private function setToSql(): string

return sprintf('(%s)', implode(', ', $placeHolders));
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
return array_values($this->set);
}
}
8 changes: 8 additions & 0 deletions src/QueryBuilder/Condition/NotNullCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ public function toSql(): string
{
return $this->field->toSql() . ' IS NOT NULL';
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
return [];
}
}
8 changes: 8 additions & 0 deletions src/QueryBuilder/Condition/NullCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ public function toSql(): string
{
return $this->field->toSql() . ' IS NULL';
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
return [];
}
}
14 changes: 14 additions & 0 deletions src/QueryBuilder/Condition/OrCondition.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,18 @@ public function toSql(): string

return '(' . implode(' OR ', $conditionsSql) . ')';
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
$parameters = [];

foreach ($this->conditions as $condition) {
$parameters = array_merge($parameters, $condition->getParameters());
}

return $parameters;
}
}
3 changes: 3 additions & 0 deletions src/QueryBuilder/Factory/Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ public function __construct(QuoteStyle $quoteStyle)
$this->quoteStyle = $quoteStyle;
}

/**
* @param int|string|mixed[]|null $parameter
*/
public function buildFromString(string $string): Column
{
$pattern = '~^(?:(?:(?P<function>[^\s]+)\s*\(\s*(?:(?P<table1>[^\s\(\)]+)(?:\.))?(?P<column1>[^\s\(\)]+)\s*\))|(?:(?P<table2>[^\s\(\)]+)(?:\.))?(?P<column2>[^\s\(\)]+))(?:\s+as\s+(?P<alias>.+))?$~ix';
Expand Down
8 changes: 8 additions & 0 deletions src/QueryBuilder/Join/Join.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,12 @@ public function toSql(): string
{
return $this->type->getValue() . ' ' . $this->joinedTable->toSql() . ' ON ' . $this->condition->toSql();
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
return $this->condition->getParameters();
}
}
20 changes: 20 additions & 0 deletions src/QueryBuilder/Statement/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,24 @@ public function getQuery(): string

return 'SELECT ' . $this->fieldSet->toSql() . $from . $joins . $condition . $orders . $limit . $offset;
}

/**
* @return mixed[]
*/
public function getParameters(): array
{
$parameters = [];

if ($this->condition !== null) {
$parameters = array_merge($parameters, $this->condition->getParameters());
}

if ($this->joins) {
foreach ($this->joins as $join) {
$parameters = array_merge($parameters, $join->getParameters());
}
}

return $parameters;
}
}

0 comments on commit b41807c

Please sign in to comment.