[TASK] Deprecate TYPO3\CMS\Core\Database\PdoHelper
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Cache / Backend / PdoBackend.php
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 = '';
+            }
+        }
+    }
 }