Skip to content

Commit

Permalink
fix: improve logic for ensuring join columns are selected for partiti…
Browse files Browse the repository at this point in the history
…oned queries

Signed-off-by: Robin Appelman <[email protected]>
  • Loading branch information
icewind1991 authored and backportbot[bot] committed Dec 12, 2024
1 parent f333fbb commit 68db21f
Showing 1 changed file with 21 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,33 @@ public function selectAlias($select, $alias) {
*
* This is mainly used to ensure that the returned rows from both sides of a partition contains the columns of the join predicate
*
* @param string $column
* @param string|IQueryFunction $column
* @return void
*/
private function ensureSelect(string|IQueryFunction $column, ?string $alias = null): void {
$checkColumn = $alias ?: $column;
if (str_contains($checkColumn, '.')) {
[, $checkColumn] = explode('.', $checkColumn);
[$table, $checkColumn] = explode('.', $checkColumn);
$partition = $this->getPartition($table);
} else {
$partition = null;
}
foreach ($this->selects as $select) {
if ($select['select'] === $checkColumn || $select['select'] === '*' || str_ends_with($select['select'], '.' . $checkColumn)) {
$select = $select['select'];
if (!is_string($select)) {
continue;
}

if (str_contains($select, '.')) {
[$table, $select] = explode('.', $select);
$selectPartition = $this->getPartition($table);
} else {
$selectPartition = null;
}
if (
($select === $checkColumn || $select === '*') &&
$selectPartition === $partition
) {
return;
}
}
Expand Down Expand Up @@ -287,6 +304,7 @@ private function flattenPredicates(array $predicates): array {

/**
* Split an array of predicates (WHERE query parts) by the partition they reference
*
* @param array $predicates
* @return array<string, array>
*/
Expand Down

0 comments on commit 68db21f

Please sign in to comment.