[TASK] Deprecate TYPO3\CMS\Core\Database\PdoHelper 79/57379/2
authorChristian Kuhn <lolli@schwarzbu.ch>
Tue, 26 Jun 2018 17:55:18 +0000 (19:55 +0200)
committerFrank Naegler <frank.naegler@typo3.org>
Tue, 26 Jun 2018 19:25:08 +0000 (21:25 +0200)
The PdoHelper class with its single method importSql() has
been added for the Pdo cache backend which is also still
the only usage of that helper class.
With the migration to doctrine, that class feels misplaced
and obsolete. The code is moved over as protected method
into Pdo cache backend directly and the PdoHelper class
is marked as deprecated.

Resolves: #85394
Releases: master
Change-Id: I4a22bd193caefced3cc601b2c1cf79f12961981d
Reviewed-on: https://review.typo3.org/57379
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
typo3/sysext/core/Classes/Cache/Backend/PdoBackend.php
typo3/sysext/core/Classes/Database/PdoHelper.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85394-ClassCoreDatabasePdoHelperDeprecated.rst [new file with mode: 0644]

index 3ad8446..64f740b 100644 (file)
@@ -17,7 +17,6 @@ namespace TYPO3\CMS\Core\Cache\Backend;
 use TYPO3\CMS\Core\Cache\Exception;
 use TYPO3\CMS\Core\Cache\Exception\InvalidDataException;
 use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
-use TYPO3\CMS\Core\Database\PdoHelper;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
@@ -273,7 +272,7 @@ class PdoBackend extends AbstractBackend implements TaggableBackendInterface
     protected function createCacheTables()
     {
         try {
-            PdoHelper::importSql(
+            $this->importSql(
                 $this->databaseHandle,
                 $this->pdoDriver,
                 ExtensionManagementUtility::extPath('core') .
@@ -283,4 +282,32 @@ class PdoBackend extends AbstractBackend implements TaggableBackendInterface
             throw new \RuntimeException('Could not create cache tables with DSN "' . $this->dataSourceName . '". PDO error: ' . $e->getMessage(), 1259576985);
         }
     }
+
+    /**
+     * Pumps the SQL into the database. Use for DDL only.
+     *
+     * Important: key definitions with length specifiers (needed for MySQL) must
+     * be given as "field"(xyz) - no space between double quote and parenthesis -
+     * so they can be removed automatically.
+     *
+     * @param \PDO $databaseHandle
+     * @param string $pdoDriver
+     * @param string $pathAndFilename
+     */
+    protected function importSql(\PDO $databaseHandle, string $pdoDriver, string $pathAndFilename): void
+    {
+        $sql = file($pathAndFilename, FILE_IGNORE_NEW_LINES & FILE_SKIP_EMPTY_LINES);
+        // Remove MySQL style key length delimiters (yuck!) if we are not setting up a MySQL db
+        if (substr($pdoDriver, 0, 5) !== 'mysql') {
+            $sql = preg_replace('/"\\([0-9]+\\)/', '"', $sql);
+        }
+        $statement = '';
+        foreach ($sql as $line) {
+            $statement .= ' ' . trim($line);
+            if (substr($statement, -1) === ';') {
+                $databaseHandle->exec($statement);
+                $statement = '';
+            }
+        }
+    }
 }
index 35e1abf..2e53a1f 100644 (file)
@@ -16,6 +16,8 @@ namespace TYPO3\CMS\Core\Database;
 
 /**
  * A helper class for handling PDO databases
+ *
+ * @deprecated and will be removed in TYPO3 v10.0
  */
 class PdoHelper
 {
@@ -29,9 +31,11 @@ class PdoHelper
      * @param \PDO $databaseHandle
      * @param string $pdoDriver
      * @param string $pathAndFilename
+     * @deprecated and will be removed in TYPO3 v10.0
      */
     public static function importSql(\PDO $databaseHandle, $pdoDriver, $pathAndFilename)
     {
+        trigger_error('Class will be removed in TYPO3 v10', E_USER_DEPRECATED);
         $sql = file($pathAndFilename, FILE_IGNORE_NEW_LINES & FILE_SKIP_EMPTY_LINES);
         // Remove MySQL style key length delimiters (yuck!) if we are not setting up a MySQL db
         if (substr($pdoDriver, 0, 5) !== 'mysql') {
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85394-ClassCoreDatabasePdoHelperDeprecated.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85394-ClassCoreDatabasePdoHelperDeprecated.rst
new file mode 100644 (file)
index 0000000..d54b0ff
--- /dev/null
@@ -0,0 +1,35 @@
+.. include:: ../../Includes.txt
+
+==============================================================
+Deprecation: #85394 - Class Core\Database\PdoHelper deprecated
+==============================================================
+
+See :issue:`85394`
+
+Description
+===========
+
+The PHP class :php:`TYPO3\CMS\Core\Database\PdoHelper` and its static method
+:php:`importSql()` has bee deprecated.
+
+
+Impact
+======
+
+Using the method triggers a deprecation log entry, the class will be removed in version 10.
+
+
+Affected Installations
+======================
+
+Instances with extensions calling :php:`TYPO3\CMS\Core\Database\PdoHelper::importSql()`.
+The extension scanner will find affected extensions.
+
+
+Migration
+=========
+
+The method has been of limited use from an extension point of view. If needed by an extension,
+the method should be copied over into extension code.
+
+.. index:: Database, PHP-API, FullyScanned
\ No newline at end of file