/** * @test */ public function getFirstResultDelegatesToConcreteQueryBuilder() { $this->concreteQueryBuilder->getFirstResult()->shouldBeCalled()->willReturn(1); $this->subject->getFirstResult(); }
/** * Helper to transform a QueryBuilder object into a queryParts array that can be used * with exec_SELECT_queryArray * * @param \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder * @return array * @throws \RuntimeException */ protected function getQueryArray(QueryBuilder $queryBuilder) { $fromClauses = []; $knownAliases = []; $queryParts = []; // Loop through all FROM clauses foreach ($queryBuilder->getQueryPart('from') as $from) { if ($from['alias'] === null) { $tableSql = $from['table']; $tableReference = $from['table']; } else { $tableSql = $from['table'] . ' ' . $from['alias']; $tableReference = $from['alias']; } $knownAliases[$tableReference] = true; $fromClauses[$tableReference] = $tableSql . $this->getQueryArrayJoinHelper($tableReference, $queryBuilder->getQueryPart('join'), $knownAliases); } $queryParts['SELECT'] = implode(', ', $queryBuilder->getQueryPart('select')); $queryParts['FROM'] = implode(', ', $fromClauses); $queryParts['WHERE'] = (string) $queryBuilder->getQueryPart('where') ?: ''; $queryParts['GROUPBY'] = implode(', ', $queryBuilder->getQueryPart('groupBy')); $queryParts['ORDERBY'] = implode(', ', $queryBuilder->getQueryPart('orderBy')); if ($queryBuilder->getFirstResult() > 0) { $queryParts['LIMIT'] = $queryBuilder->getFirstResult() . ',' . $queryBuilder->getMaxResults(); } elseif ($queryBuilder->getMaxResults() > 0) { $queryParts['LIMIT'] = $queryBuilder->getMaxResults(); } return $queryParts; }