LeanMapper\Result::buildUnionStrategySql PHP Method

buildUnionStrategySql() private method

private buildUnionStrategySql ( array $ids, string $table, string $viaColumn, Filtering $filtering = null ) : mixed
$ids array
$table string
$viaColumn string
$filtering Filtering
return mixed
    private function buildUnionStrategySql(array $ids, $table, $viaColumn, Filtering $filtering = null)
    {
        $isAlias = $this->isAlias($viaColumn);
        if ($isAlias) {
            $viaColumn = $this->trimAlias($viaColumn);
        }
        foreach ($ids as $id) {
            $statement = $this->createTableSelection($table, [$id]);
            if ($isAlias) {
                $statement->where('%n = ?', $viaColumn, $id);
            } else {
                $statement->where('%n.%n = ?', $table, $viaColumn, $id);
            }
            if ($filtering !== null) {
                $this->applyFiltering($statement, $filtering);
            }
            if (isset($mainStatement)) {
                $mainStatement->union($statement);
            } else {
                $mainStatement = $statement;
            }
        }
        $sql = (string) $mainStatement;
        $driver = $this->connection->getDriver();
        // now we have to fix wrongly generated SQL by dibi...
        if ($driver instanceof DibiSqlite3Driver) {
            $sql = preg_replace('#(?<=UNION )\\((SELECT.*?)\\)(?= UNION|$)#', '$1', $sql);
            // (...) UNION (...) to ... UNION ...
        } else {
            $sql = preg_replace('#^(SELECT.*?)(?= UNION)#', '($1)', $sql);
            // ... UNION (...) to (...) UNION (...)
        }
        return $sql;
    }