Ejemplo n.º 1
0
 /**
  * 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));
     }
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }
Ejemplo n.º 6
0
 /**
  * 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;
 }
Ejemplo n.º 8
0
 /**
  * @return void
  */
 public function ignoreSysLanguageUidOnQuery(\TYPO3\CMS\Extbase\Persistence\QueryInterface &$query)
 {
     $query->setQuerySettings($query->getQuerySettings()->setRespectSysLanguage(false));
 }
Ejemplo n.º 9
0
 /**
  * @param bool $bool
  */
 public function setIgnoreEnableFields($bool = TRUE)
 {
     $settings = $this->query->getQuerySettings();
     $settings->setIgnoreEnableFields($bool);
     $this->query->setQuerySettings($settings);
 }