1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace Atk4\Data\Persistence\Sql\Sqlite;
6:
7: use Doctrine\DBAL\Schema\ForeignKeyConstraint;
8: use Doctrine\DBAL\Schema\TableDiff;
9:
10: trait PlatformTrait
11: {
12: #[\Override]
13: public function getIdentifierQuoteCharacter(): string
14: {
15: return '`';
16: }
17:
18: #[\Override]
19: public function getAlterTableSQL(TableDiff $diff): array
20: {
21: // fix https://github.com/doctrine/dbal/pull/5501
22: $diff = clone $diff;
23: $diff->fromTable = clone $diff->fromTable;
24: foreach ($diff->fromTable->getForeignKeys() as $foreignKey) {
25: \Closure::bind(static function () use ($foreignKey) {
26: $foreignKey->_localColumnNames = $foreignKey->createIdentifierMap($foreignKey->getUnquotedLocalColumns());
27: }, null, ForeignKeyConstraint::class)();
28: }
29:
30: // fix no indexes, alter table drops and recreates the table newly, so indexes must be recreated as well
31: // https://github.com/doctrine/dbal/pull/5486#issuecomment-1184957078
32: $diff = clone $diff;
33: $diff->addedIndexes = array_merge($diff->addedIndexes, $diff->fromTable->getIndexes());
34:
35: return parent::getAlterTableSQL($diff);
36: }
37: }
38: