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
8 changes: 0 additions & 8 deletions src/Db.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,6 @@ public function prepare(string $queryString, mixed $object = '\stdClass', array|
return $statement;
}

/** @param array<int, mixed>|null $params */
public function query(string $rawSql, array|null $params = null): static
{
$this->currentSql->setQuery($rawSql, $params);

return $this;
}

protected function executeStatement(mixed $object = '\stdClass', mixed $extra = null): PDOStatement
{
$statement = $this->prepare((string) $this->currentSql, $object, $extra);
Expand Down
48 changes: 25 additions & 23 deletions src/Mapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,17 @@
use function array_keys;
use function array_merge;
use function array_pop;
use function array_push;
use function array_reverse;
use function array_values;
use function class_exists;
use function count;
use function get_object_vars;
use function is_array;
use function is_numeric;
use function is_object;
use function is_scalar;
use function iterator_to_array;
use function preg_match;
use function preg_replace;
use function str_replace;

/** Maps objects to database operations */
Expand Down Expand Up @@ -211,12 +211,12 @@ protected function extractAndOperateMixins(Collection $collection, array $cols):
/**
* @param array<string, mixed> $columns
*
* @return array<string, mixed>
* @return array<int, array<int, mixed>>
*/
protected function guessCondition(array &$columns, Collection $collection): array
{
$primaryName = $this->getStyle()->identifier($collection->getName());
$condition = [$primaryName => $columns[$primaryName]];
$primaryName = $this->getStyle()->identifier($collection->getName());
$condition = [[$primaryName, '=', $columns[$primaryName]]];
unset($columns[$primaryName]);

return $condition;
Expand Down Expand Up @@ -261,8 +261,8 @@ protected function rawInsert(
$columns = $this->extractAndOperateMixins($collection, $columns);
$name = $collection->getName();
$isInserted = $this->db
->insertInto($name, $columns)
->values($columns)
->insertInto($name, array_keys($columns))
->values(array_values($columns))
->exec();

if ($entity !== null) {
Expand Down Expand Up @@ -372,7 +372,7 @@ protected function buildSelectStatement(Sql $sql, array $collections): Sql
}
}

return $sql->select($selectTable);
return $sql->select(...$selectTable);
}

/** @param array<string, Collection> $collections */
Expand All @@ -390,7 +390,7 @@ protected function buildTables(Sql $sql, array $collections): Sql
);
}

return $sql->where($conditions);
return empty($conditions) ? $sql : $sql->where($conditions);
}

/**
Expand All @@ -403,22 +403,17 @@ protected function parseConditions(array &$conditions, Collection $collection, s
$entity = $collection->getName();
$originalConditions = $collection->getCondition();
$parsedConditions = [];
$aliasedPk = $this->getStyle()->identifier($entity);
$aliasedPk = $alias . '.' . $aliasedPk;
$aliasedPk = $alias . '.' . $this->getStyle()->identifier($entity);

if (is_scalar($originalConditions)) {
$parsedConditions = [$aliasedPk => $originalConditions];
$parsedConditions[] = [$aliasedPk, '=', $originalConditions];
} elseif (is_array($originalConditions)) {
foreach ($originalConditions as $column => $value) {
if (is_numeric($column)) {
$parsedConditions[$column] = preg_replace(
'/' . $entity . '[.](\w+)/',
$alias . '.$1',
$value,
);
} else {
$parsedConditions[$alias . '.' . $column] = $value;
if (!empty($parsedConditions)) {
$parsedConditions[] = 'AND';
}

$parsedConditions[] = [$alias . '.' . $column, '=', $value];
}
Comment thread
alganet marked this conversation as resolved.
}

Expand Down Expand Up @@ -455,11 +450,18 @@ protected function parseCollection(

$parentAlias = $parent ? $aliases[$parent] : null;
$aliases[$entity] = $alias;
$conditions = $this->parseConditions(
$parsed = $this->parseConditions(
$conditions,
$collection,
$alias,
) ?: $conditions;
);
if (!empty($parsed)) {
if (!empty($conditions)) {
$conditions[] = 'AND';
}

array_push($conditions, ...$parsed);
}

//No parent collection means it's the first table in the query
if ($parentAlias === null) {
Expand Down Expand Up @@ -718,7 +720,7 @@ private function createStatement(
$query = $this->generateQuery($collection);

if ($withExtra instanceof Sql) {
$query->appendQuery($withExtra);
$query->concat($withExtra);
}

$statement = $this->db->prepare((string) $query, PDO::FETCH_NUM);
Expand Down
Loading
Loading