‪TYPO3CMS  ‪main
SqlReader.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\EventDispatcher\EventDispatcherInterface;
22 use TYPO3\CMS\Core\Package\PackageManager;
23 
31 {
35  protected ‪$eventDispatcher;
36 
40  protected ‪$packageManager;
41 
45  public function ‪__construct(EventDispatcherInterface ‪$eventDispatcher, PackageManager ‪$packageManager)
46  {
47  $this->eventDispatcher = ‪$eventDispatcher;
48  $this->packageManager = ‪$packageManager;
49  }
50 
57  public function ‪getTablesDefinitionString(bool $withStatic = false): string
58  {
59  $sqlString = [];
60 
61  // Find all ext_tables.sql of loaded extensions
62  foreach ($this->packageManager->getActivePackages() as $package) {
63  $packagePath = $package->getPackagePath();
64  if (@file_exists($packagePath . 'ext_tables.sql')) {
65  $sqlString[] = (string)file_get_contents($packagePath . 'ext_tables.sql');
66  }
67  if ($withStatic && @file_exists($packagePath . 'ext_tables_static+adt.sql')) {
68  $sqlString[] = (string)file_get_contents($packagePath . 'ext_tables_static+adt.sql');
69  }
70  }
71 
72  $event = $this->eventDispatcher->dispatch(new ‪AlterTableDefinitionStatementsEvent($sqlString));
73  $sqlString = $event->getSqlData();
74 
75  return implode(LF . LF, $sqlString);
76  }
77 
87  public function ‪getStatementArray(string $dumpContent, string $queryRegex = null): array
88  {
89  $statementArray = [];
90  $statementArrayPointer = 0;
91  $isInMultilineComment = false;
92  foreach (explode(LF, $dumpContent) as $lineContent) {
93  $lineContent = trim($lineContent);
94 
95  // Skip empty lines and comments
96  if ($lineContent === ''
97  || $lineContent[0] === '#'
98  || str_starts_with($lineContent, '--')
99  || str_starts_with($lineContent, '/*')
100  || str_ends_with($lineContent, '*/')
101  || $isInMultilineComment
102  ) {
103  // skip c style multiline comments
104  if (str_starts_with($lineContent, '/*') && !str_ends_with($lineContent, '*/')) {
105  $isInMultilineComment = true;
106  }
107  if (str_ends_with($lineContent, '*/')) {
108  $isInMultilineComment = false;
109  }
110  continue;
111  }
112 
113  $statementArray[$statementArrayPointer] = ($statementArray[$statementArrayPointer] ?? '') . $lineContent;
114 
115  if (str_ends_with($lineContent, ';')) {
116  $statement = trim($statementArray[$statementArrayPointer]);
117  if (!$statement || ($queryRegex && !preg_match('/' . $queryRegex . '/i', $statement))) {
118  unset($statementArray[$statementArrayPointer]);
119  }
120  $statementArrayPointer++;
121  } else {
122  $statementArray[$statementArrayPointer] .= ' ';
123  }
124  }
125 
126  return $statementArray;
127  }
128 
132  public function ‪getInsertStatementArray(string $dumpContent): array
133  {
134  return $this->‪getStatementArray($dumpContent, '^INSERT');
135  }
136 
140  public function ‪getCreateTableStatementArray(string $dumpContent): array
141  {
142  return $this->‪getStatementArray($dumpContent, '^CREATE TABLE');
143  }
144 }
‪TYPO3\CMS\Core\Database\Schema\SqlReader\$packageManager
‪PackageManager $packageManager
Definition: SqlReader.php:38
‪TYPO3\CMS\Core\Database\Schema
Definition: ColumnDiff.php:18
‪TYPO3\CMS\Core\Database\Schema\SqlReader
Definition: SqlReader.php:31
‪TYPO3\CMS\Core\Database\Schema\SqlReader\getStatementArray
‪array getStatementArray(string $dumpContent, string $queryRegex=null)
Definition: SqlReader.php:85
‪TYPO3\CMS\Core\Database\Schema\SqlReader\$eventDispatcher
‪EventDispatcherInterface $eventDispatcher
Definition: SqlReader.php:34
‪TYPO3\CMS\Core\Database\Schema\SqlReader\getInsertStatementArray
‪getInsertStatementArray(string $dumpContent)
Definition: SqlReader.php:130
‪TYPO3\CMS\Core\Database\Schema\SqlReader\__construct
‪__construct(EventDispatcherInterface $eventDispatcher, PackageManager $packageManager)
Definition: SqlReader.php:43
‪TYPO3\CMS\Core\Database\Event\AlterTableDefinitionStatementsEvent
Definition: AlterTableDefinitionStatementsEvent.php:25
‪TYPO3\CMS\Core\Database\Schema\SqlReader\getTablesDefinitionString
‪string getTablesDefinitionString(bool $withStatic=false)
Definition: SqlReader.php:55
‪TYPO3\CMS\Core\Database\Schema\SqlReader\getCreateTableStatementArray
‪getCreateTableStatementArray(string $dumpContent)
Definition: SqlReader.php:138