[TASK] Remove prepared query option from Extbase Query Settings 08/49408/7
authorBenni Mack <benni@typo3.org>
Sat, 6 Aug 2016 14:27:31 +0000 (16:27 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Mon, 8 Aug 2016 14:07:28 +0000 (16:07 +0200)
The option inside the QuerySettings is removed, as all queries
are handled via Doctrine DBAL in the future. The parameters
are automatically built as prepared statements anyway, and optimized
by the Database abstraction.

The implementation methods are marked as deprecated to allow
extensions to run with TYPO3 v7 and TYPO3 v8, even though the option
has no effect in the TYPO3 Database queries anymore.

Resolves: #77432
Releases: master
Change-Id: Iae2a00faf6aacdc518a3c623d07597aef33c8567
Reviewed-on: https://review.typo3.org/49408
Reviewed-by: Daniel Goerz <ervaude@gmail.com>
Tested-by: Bamboo TYPO3com <info@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-77432-ExtbasePreparedStatementQueryOption.rst [new file with mode: 0644]
typo3/sysext/extbase/Classes/Persistence/Generic/QuerySettingsInterface.php
typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
typo3/sysext/extbase/Classes/Persistence/Generic/Typo3QuerySettings.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-77432-ExtbasePreparedStatementQueryOption.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-77432-ExtbasePreparedStatementQueryOption.rst
new file mode 100644 (file)
index 0000000..2f95cb8
--- /dev/null
@@ -0,0 +1,39 @@
+==============================================================
+Deprecation: #77432 - Extbase: Prepared Statement Query Option
+==============================================================
+
+Description
+===========
+
+The option to use prepared statements within the Extbase persistence has been removed. The method
+``getUsePreparedStatement()`` has been removed from the ``QuerySettingsInterface``, as the database
+abstraction layer will take care of prepared statements automatically.
+
+The implementation of the following properties within ``Typo3QuerySettings`` has been marked as
+deprecated:
+
+* ``getUsePreparedStatement()``
+* ``usePreparedStatement()``
+
+The protected property ``usePreparedStatement`` has been marked as deprecated as well.
+
+
+Impact
+======
+
+Calling one of the methods above within the ``QuerySettings`` object within the extbase persistence
+will trigger a deprecation notice warning.
+
+
+Affected Installations
+======================
+
+Any TYPO3 instance with an extbase extension using custom query settings using the
+``usePreparedStatement()`` option.
+
+
+Migration
+=========
+
+Remove any calls to the methods within the extensions' code, as the TYPO3 abstraction layer will
+handle them automatically.
\ No newline at end of file
index 72f0dd8..e6349fd 100644 (file)
@@ -167,9 +167,4 @@ interface QuerySettingsInterface
      * @return bool
      */
     public function getUseQueryCache();
-
-    /**
-     * @return bool
-     */
-    public function getUsePreparedStatement();
 }
index dd439ef..e48d753 100644 (file)
@@ -370,7 +370,8 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface
         if ($statement instanceof Qom\Statement) {
             $rows = $this->getObjectDataByRawQuery($statement);
         } else {
-            $rows = $this->getRowsByStatementParts($query);
+            list($statementParts) = $this->getStatementParts($query);
+            $rows = $this->getRowsFromDatabase($statementParts);
         }
 
         $rows = $this->doLanguageAndWorkspaceOverlay($query->getSource(), $rows, $query->getQuerySettings());
@@ -407,25 +408,6 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface
         );
     }
 
-    /**
-     * 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;
-    }
-
     /**
      * Fetches the rows directly from the database, not using prepared statement
      *
@@ -448,32 +430,6 @@ class Typo3DbBackend implements BackendInterface, SingletonInterface
         return $rows;
     }
 
-    /**
-     * Fetches the rows from the database, using prepared statement
-     *
-     * @param array $statementParts
-     * @param array $parameters
-     * @return array the result
-     */
-    protected function getRowsFromPreparedDatabase(array $statementParts, array $parameters)
-    {
-        $queryCommandParameters = $this->createQueryCommandParametersFromStatementParts($statementParts);
-        $preparedStatement = $this->databaseHandle->prepare_SELECTquery(
-            $queryCommandParameters['selectFields'],
-            $queryCommandParameters['fromTable'],
-            $queryCommandParameters['whereClause'],
-            '',
-            $queryCommandParameters['orderBy'],
-            $queryCommandParameters['limit']
-        );
-
-        $preparedStatement->execute($parameters);
-        $rows = $preparedStatement->fetchAll();
-
-        $preparedStatement->free();
-        return $rows;
-    }
-
     /**
      * Returns the object data using a custom statement
      *
index e74f034..69497f9 100644 (file)
@@ -94,6 +94,7 @@ class Typo3QuerySettings implements QuerySettingsInterface
      * Flag whether the query should use a prepared statement
      *
      * @var bool
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 9, this option is handled automatically now in the database abstraction
      */
     protected $usePreparedStatement = false;
 
@@ -340,18 +341,22 @@ class Typo3QuerySettings implements QuerySettingsInterface
     /**
      * @param bool $usePreparedStatement
      * @return QuerySettingsInterface
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 9, this option is handled automatically now in the database abstraction
      */
     public function usePreparedStatement($usePreparedStatement)
     {
+        GeneralUtility::logDeprecatedFunction();
         $this->usePreparedStatement = $usePreparedStatement;
         return $this;
     }
 
     /**
      * @return bool
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 9, this option is handled automatically now in the database abstraction
      */
     public function getUsePreparedStatement()
     {
+        GeneralUtility::logDeprecatedFunction();
         return (bool)$this->usePreparedStatement;
     }