diff --git a/app/etc/di.xml b/app/etc/di.xml
index d4651499e6fce..d8908814960f6 100644
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -1555,6 +1555,7 @@
- Magento\Framework\Setup\Declaration\Schema\Operations\ModifyColumn
- Magento\Framework\Setup\Declaration\Schema\Operations\AddColumn
- Magento\Framework\Setup\Declaration\Schema\Operations\DropElement
+ - Magento\Framework\Setup\Declaration\Schema\Operations\DropIndex
- Magento\Framework\Setup\Declaration\Schema\Operations\AddComplexElement
- Magento\Framework\Setup\Declaration\Schema\Operations\ModifyTable
diff --git a/lib/internal/Magento/Framework/Setup/Declaration/Schema/Diff/DiffManager.php b/lib/internal/Magento/Framework/Setup/Declaration/Schema/Diff/DiffManager.php
index af1a35542603e..4b65d9b27bc38 100644
--- a/lib/internal/Magento/Framework/Setup/Declaration/Schema/Diff/DiffManager.php
+++ b/lib/internal/Magento/Framework/Setup/Declaration/Schema/Diff/DiffManager.php
@@ -10,11 +10,13 @@
use Magento\Framework\Setup\Declaration\Schema\Dto\Column;
use Magento\Framework\Setup\Declaration\Schema\Dto\Constraints\Reference;
use Magento\Framework\Setup\Declaration\Schema\Dto\ElementInterface;
+use Magento\Framework\Setup\Declaration\Schema\Dto\Index;
use Magento\Framework\Setup\Declaration\Schema\Dto\Table;
use Magento\Framework\Setup\Declaration\Schema\Operations\AddColumn;
use Magento\Framework\Setup\Declaration\Schema\Operations\AddComplexElement;
use Magento\Framework\Setup\Declaration\Schema\Operations\CreateTable;
use Magento\Framework\Setup\Declaration\Schema\Operations\DropElement;
+use Magento\Framework\Setup\Declaration\Schema\Operations\DropIndex;
use Magento\Framework\Setup\Declaration\Schema\Operations\DropReference;
use Magento\Framework\Setup\Declaration\Schema\Operations\DropTable;
use Magento\Framework\Setup\Declaration\Schema\Operations\ModifyColumn;
@@ -107,6 +109,8 @@ public function registerRemoval(
$diff->register($generatedElement, DropReference::OPERATION_NAME, $generatedElement);
} elseif ($generatedElement instanceof Table) {
$diff->register($generatedElement, DropTable::OPERATION_NAME, $generatedElement);
+ } elseif ($generatedElement instanceof Index) {
+ $diff->register($generatedElement, DropIndex::OPERATION_NAME, $generatedElement);
} else {
$diff->register($generatedElement, DropElement::OPERATION_NAME, $generatedElement);
}
diff --git a/lib/internal/Magento/Framework/Setup/Declaration/Schema/Operations/DropIndex.php b/lib/internal/Magento/Framework/Setup/Declaration/Schema/Operations/DropIndex.php
new file mode 100644
index 0000000000000..37488378b3f82
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/Declaration/Schema/Operations/DropIndex.php
@@ -0,0 +1,79 @@
+dbSchemaWriter = $dbSchemaWriter;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getOperationName()
+ {
+ return self::OPERATION_NAME;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function isOperationDestructive()
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function doOperation(ElementHistory $elementHistory)
+ {
+ /**
+ * @var TableElementInterface | ElementInterface $element
+ */
+ $element = $elementHistory->getNew();
+
+ return [
+ $this->dbSchemaWriter->dropElement(
+ $element->getTable()->getResource(),
+ $element->getName(),
+ $element->getTable()->getName(),
+ $element->getType()
+ )
+ ];
+ }
+}
diff --git a/lib/internal/Magento/Framework/Setup/Test/Unit/Declaration/Schema/Diff/DiffManagerTest.php b/lib/internal/Magento/Framework/Setup/Test/Unit/Declaration/Schema/Diff/DiffManagerTest.php
index 016aff1bfe7c8..edd1e2b071384 100644
--- a/lib/internal/Magento/Framework/Setup/Test/Unit/Declaration/Schema/Diff/DiffManagerTest.php
+++ b/lib/internal/Magento/Framework/Setup/Test/Unit/Declaration/Schema/Diff/DiffManagerTest.php
@@ -116,7 +116,7 @@ public function testRegisterIndexModification()
$generatedIndex = new Index('index_type', 'index', $table, [$column], 'hash', 'index_type');
$diff->expects(self::exactly(2))
->method('register')
- ->withConsecutive([$generatedIndex, 'drop_element', $generatedIndex], [$index, 'add_complex_element']);
+ ->withConsecutive([$generatedIndex, 'drop_index', $generatedIndex], [$index, 'add_complex_element']);
$this->model->registerModification($diff, $index, $generatedIndex);
}