/** * sets query storage page(s) * * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface &$query * @param array|integer|string $storagePages * @return void */ protected function setQueryStoragePages(QueryInterface &$query, $storagePages = NULL) { $query->getQuerySettings()->setRespectStoragePage(TRUE); if (is_string($storagePages)) { if ($storagePages == "all") { $query->getQuerySettings()->setRespectStoragePage(FALSE); } elseif (strpos($storagePages, ",") !== false) { $query->getQuerySettings()->setStoragePageIds(explode(",", $storagePages)); } } elseif (is_array($storagePages)) { $setStoragePages = []; foreach ($storagePages as $storagePage) { if (is_numeric($storagePage)) { $setStoragePages[] = $storagePage; } } if (count($setStoragePages)) { $query->getQuerySettings()->setStoragePageIds($setStoragePages); } } elseif (is_numeric($storagePages)) { $query->getQuerySettings()->setStoragePageIds(array($storagePages)); } }
/** * Determines whether to use prepared statement or not and returns the rows from the corresponding method * * @param QueryInterface $query * @return array */ protected function getRowsByStatementParts(QueryInterface $query) { if ($query->getQuerySettings()->getUsePreparedStatement()) { list($statementParts, $parameters) = $this->getStatementParts($query, FALSE); $rows = $this->getRowsFromPreparedDatabase($statementParts, $parameters); } else { list($statementParts) = $this->getStatementParts($query); $rows = $this->getRowsFromDatabase($statementParts); } return $rows; }
/** * Parses the query and returns the SQL statement parts. * * @param QueryInterface $query The query * @return array The SQL statement parts */ public function parseQuery(QueryInterface $query) { $sql = array(); $sql['keywords'] = array(); $sql['tables'] = array(); $sql['unions'] = array(); $sql['fields'] = array(); $sql['where'] = array(); $sql['additionalWhereClause'] = array(); $sql['orderings'] = array(); $sql['limit'] = (int) $query->getLimit() ?: NULL; $sql['offset'] = (int) $query->getOffset() ?: NULL; $source = $query->getSource(); $this->parseSource($source, $sql); $this->parseConstraint($query->getConstraint(), $source, $sql); $this->parseOrderings($query->getOrderings(), $source, $sql); $tableNames = array_unique(array_keys($sql['tables'] + $sql['unions'])); foreach ($tableNames as $tableName) { if (is_string($tableName) && !empty($tableName)) { $this->addAdditionalWhereClause($query->getQuerySettings(), $tableName, $sql); } } return $sql; }
/** * Parses the query and returns the SQL statement parts. * * @param QueryInterface $query The query * @param array &$parameters * @return array The SQL statement parts */ public function parseQuery(QueryInterface $query, array &$parameters) { $statementParts = array(); $statementParts['keywords'] = array(); $statementParts['tables'] = array(); $statementParts['unions'] = array(); $statementParts['fields'] = array(); $statementParts['where'] = array(); $statementParts['additionalWhereClause'] = array(); $statementParts['orderings'] = array(); $statementParts['limit'] = array(); $source = $query->getSource(); $this->parseSource($source, $statementParts); $this->parseConstraint($query->getConstraint(), $source, $statementParts, $parameters); $this->parseOrderings($query->getOrderings(), $source, $statementParts); $this->parseLimitAndOffset($query->getLimit(), $query->getOffset(), $statementParts); $tableNames = array_unique(array_keys($statementParts['tables'] + $statementParts['unions'])); foreach ($tableNames as $tableNameOrAlias) { if (is_string($tableNameOrAlias) && strlen($tableNameOrAlias) > 0) { $this->addAdditionalWhereClause($query->getQuerySettings(), $tableNameOrAlias, $statementParts); } } return $statementParts; }
/** * Returns the result of the query based on the given displaymode set in demand * * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query The query * @param \DERHANSEN\SfBanners\Domain\Model\BannerDemand $demand The demand * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface */ protected function getResult(QueryInterface $query, BannerDemand $demand) { $result = array(); // Do not respect syslanguage since we search for uids - @see forge #47192 $query->getQuerySettings()->setRespectSysLanguage(false); switch ($demand->getDisplayMode()) { case 'all': $result = $query->execute(); break; case 'allRandom': $result = $this->objectManager->get('DERHANSEN\\SfBanners\\Persistence\\RandomQueryResult', $query); break; case 'random': $rows = $query->execute()->count(); $rowNumber = mt_rand(0, max(0, $rows - 1)); $result = $query->setOffset($rowNumber)->setLimit(1)->execute(); break; default: break; } return $result; }
/** * add TYPO3 Constraints for all tables to the queryBuilder * * @param QueryInterface $query * @return void */ protected function addTypo3Constraints(QueryInterface $query) { foreach ($this->tableAliasMap as $tableAlias => $tableName) { $additionalWhereClauses = $this->getAdditionalWhereClause($query->getQuerySettings(), $tableName, $tableAlias); $statement = $this->getVisibilityConstraintStatement($query->getQuerySettings(), $tableName, $tableAlias); if ($statement !== '') { $additionalWhereClauses[] = $statement; } if (!empty($additionalWhereClauses)) { if (in_array($tableAlias, $this->unionTableAliasCache, true)) { $this->queryBuilder->andWhere($this->queryBuilder->expr()->orX($this->queryBuilder->expr()->andX(...$additionalWhereClauses), $this->queryBuilder->expr()->isNull($tableAlias . '.uid'))); } else { $this->queryBuilder->andWhere(...$additionalWhereClauses); } } } }
/** * Parses the query and returns the SQL statement parts. * * @param QueryInterface $query The query * @return array The SQL statement parts */ public function parseQuery(QueryInterface $query) { $this->tablePropertyMap = array(); $sql = array(); $sql['keywords'] = array(); $sql['tables'] = array(); $sql['unions'] = array(); $sql['fields'] = array(); $sql['where'] = array(); $sql['additionalWhereClause'] = array(); $sql['orderings'] = array(); $sql['limit'] = (int) $query->getLimit() ?: null; $sql['offset'] = (int) $query->getOffset() ?: null; $sql['tableAliasMap'] = array(); $source = $query->getSource(); $this->parseSource($source, $sql); $this->parseConstraint($query->getConstraint(), $source, $sql); $this->parseOrderings($query->getOrderings(), $source, $sql); foreach ($sql['tableAliasMap'] as $tableAlias => $tableName) { $additionalWhereClause = $this->getAdditionalWhereClause($query->getQuerySettings(), $tableName, $tableAlias); if ($additionalWhereClause !== '') { $additionalWhereClause = $this->addNullConditionToStatementIfRequired($sql, $additionalWhereClause, $tableAlias); $sql['additionalWhereClause'][] = $additionalWhereClause; } } return $sql; }
/** * @return void */ public function ignoreSysLanguageUidOnQuery(\TYPO3\CMS\Extbase\Persistence\QueryInterface &$query) { $query->setQuerySettings($query->getQuerySettings()->setRespectSysLanguage(false)); }
/** * @param bool $bool */ public function setIgnoreEnableFields($bool = TRUE) { $settings = $this->query->getQuerySettings(); $settings->setIgnoreEnableFields($bool); $this->query->setQuerySettings($settings); }