@@ -26,9 +26,17 @@ final class Version1000Date20250929161325 extends SimpleMigrationStep {
2626 public function changeSchema (IOutput $ output , Closure $ schemaClosure , array $ options ): ?ISchemaWrapper {
2727 $ schema = $ schemaClosure ();
2828
29- // TODO: Add mapping table for class names
3029 // TODO: Check indexes
3130
31+ $ mappingTable = $ schema ->createTable ('sharing_classmap ' );
32+ $ mappingTable ->addColumn ('class_id ' , Types::INTEGER , [
33+ 'autoincrement ' => true ,
34+ 'notnull ' => true ,
35+ ]);
36+ $ mappingTable ->addColumn ('class_name ' , Types::STRING , ['length ' => 64 ]);
37+ $ mappingTable ->setPrimaryKey (['class_id ' ]);
38+ $ mappingTable ->addUniqueIndex (['class_name ' ]);
39+
3240 $ shareTable = $ schema ->createTable ('sharing_share ' );
3341 $ shareTable ->addColumn ('id ' , Types::BIGINT );
3442 $ shareTable ->addColumn ('owner_user_id ' , Types::STRING , ['length ' => 64 ]);
@@ -39,38 +47,42 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt
3947
4048 $ sourcesTable = $ schema ->createTable ('sharing_share_sources ' );
4149 $ sourcesTable ->addColumn ('share_id ' , Types::BIGINT );
42- $ sourcesTable ->addColumn ('source_class ' , Types::STRING , [ ' length ' => 64 ] );
50+ $ sourcesTable ->addColumn ('source_class_id ' , Types::INTEGER );
4351 $ sourcesTable ->addColumn ('source_value ' , Types::STRING , ['length ' => 255 ]);
44- $ sourcesTable ->setPrimaryKey (['share_id ' , 'source_class ' , 'source_value ' ]);
52+ $ sourcesTable ->setPrimaryKey (['share_id ' , 'source_class_id ' , 'source_value ' ]);
4553 $ sourcesTable ->addForeignKeyConstraint ($ shareTable ->getName (), ['share_id ' ], ['id ' ], ['onDelete ' => 'CASCADE ' ]);
54+ $ sourcesTable ->addForeignKeyConstraint ($ mappingTable ->getName (), ['source_class_id ' ], ['class_id ' ]);
4655
4756 // TODO: Add possibility to mask permissions for recipients. For reshares the user may only mask permissions for their child recipients, not their self recipients
4857 $ recipientsTable = $ schema ->createTable ('sharing_share_recipients ' );
4958 $ recipientsTable ->addColumn ('share_id ' , Types::BIGINT );
50- $ recipientsTable ->addColumn ('recipient_class ' , Types::STRING , [ ' length ' => 64 ] );
59+ $ recipientsTable ->addColumn ('recipient_class_id ' , Types::INTEGER );
5160 $ recipientsTable ->addColumn ('recipient_value ' , Types::STRING , ['length ' => 255 ]);
5261 $ recipientsTable ->addColumn ('recipient_instance ' , Types::STRING , ['length ' => 128 , 'notnull ' => false ]);
5362 $ recipientsTable ->addColumn ('recipient_secret ' , Types::STRING , ['length ' => 32 ]);
5463 $ recipientsTable ->addColumn ('initiator_user_id ' , Types::STRING , ['length ' => 64 ]);
5564 $ recipientsTable ->addColumn ('initiator_instance ' , Types::STRING , ['length ' => 128 , 'notnull ' => false ]);
56- $ recipientsTable ->setPrimaryKey (['share_id ' , 'recipient_class ' , 'recipient_value ' ]);
65+ $ recipientsTable ->setPrimaryKey (['share_id ' , 'recipient_class_id ' , 'recipient_value ' ]);
5766 $ recipientsTable ->addForeignKeyConstraint ($ shareTable ->getName (), ['share_id ' ], ['id ' ], ['onDelete ' => 'CASCADE ' ]);
5867 // TODO: Maybe needs composite index with share_id
5968 $ recipientsTable ->addUniqueIndex (['recipient_secret ' ]);
69+ $ recipientsTable ->addForeignKeyConstraint ($ mappingTable ->getName (), ['recipient_class_id ' ], ['class_id ' ]);
6070
6171 $ propertiesTable = $ schema ->createTable ('sharing_share_properties ' );
6272 $ propertiesTable ->addColumn ('share_id ' , Types::BIGINT );
63- $ propertiesTable ->addColumn ('property_class ' , Types::STRING , [ ' length ' => 64 ] );
73+ $ propertiesTable ->addColumn ('property_class_id ' , Types::INTEGER );
6474 $ propertiesTable ->addColumn ('property_value ' , Types::STRING , ['length ' => 1000 , 'notnull ' => false ]);
65- $ propertiesTable ->setPrimaryKey (['share_id ' , 'property_class ' ]);
75+ $ propertiesTable ->setPrimaryKey (['share_id ' , 'property_class_id ' ]);
6676 $ propertiesTable ->addForeignKeyConstraint ($ shareTable ->getName (), ['share_id ' ], ['id ' ], ['onDelete ' => 'CASCADE ' ]);
77+ $ propertiesTable ->addForeignKeyConstraint ($ mappingTable ->getName (), ['property_class_id ' ], ['class_id ' ]);
6778
6879 $ permissionsTable = $ schema ->createTable ('sharing_share_permissions ' );
6980 $ permissionsTable ->addColumn ('share_id ' , Types::BIGINT );
70- $ permissionsTable ->addColumn ('permission_class ' , Types::STRING , [ ' length ' => 64 ] );
81+ $ permissionsTable ->addColumn ('permission_class_id ' , Types::INTEGER );
7182 $ permissionsTable ->addColumn ('permission_enabled ' , Types::BOOLEAN );
72- $ permissionsTable ->setPrimaryKey (['share_id ' , 'permission_class ' ]);
83+ $ permissionsTable ->setPrimaryKey (['share_id ' , 'permission_class_id ' ]);
7384 $ permissionsTable ->addForeignKeyConstraint ($ shareTable ->getName (), ['share_id ' ], ['id ' ], ['onDelete ' => 'CASCADE ' ]);
85+ $ permissionsTable ->addForeignKeyConstraint ($ mappingTable ->getName (), ['permission_class_id ' ], ['class_id ' ]);
7486
7587 return $ schema ;
7688 }
0 commit comments