1111
1212use Closure ;
1313use OCP \DB \ISchemaWrapper ;
14+ use OCP \DB \QueryBuilder \IQueryBuilder ;
1415use OCP \IDBConnection ;
1516use OCP \Migration \IOutput ;
1617use OCP \Migration \SimpleMigrationStep ;
1718
1819/**
1920 * Migrate the photosSourceFolder user config to photosSourceFolders
2021 */
21- class Version30000Date20240417075404 extends SimpleMigrationStep {
22+ class Version30000Date20240417075405 extends SimpleMigrationStep {
2223 public function __construct (
2324 private IDBConnection $ db ,
2425 ) {
@@ -36,13 +37,26 @@ public function postSchemaChange(IOutput $output, Closure $schemaClosure, array
3637 ->where ($ select ->expr ()->eq ('appid ' , $ select ->expr ()->literal ('photos ' )))
3738 ->andWhere ($ select ->expr ()->eq ('configkey ' , $ select ->expr ()->literal ('photosSourceFolders ' )));
3839
40+ $ result = $ select ->executeQuery ();
41+ $ alreadyMigrated = array_map (static fn (array $ row ) => $ row ['userid ' ], $ result ->fetchAll ());
42+ $ result ->closeCursor ();
43+
3944 // Remove old entries for users who already have the new one
4045 $ delete = $ this ->db ->getQueryBuilder ();
4146 $ delete ->delete ('preferences ' )
4247 ->where ($ delete ->expr ()->eq ('appid ' , $ delete ->expr ()->literal ('photos ' )))
4348 ->andWhere ($ delete ->expr ()->eq ('configkey ' , $ delete ->expr ()->literal ('photosSourceFolder ' )))
44- ->andWhere ($ delete ->expr ()->in ('userid ' , $ delete ->createFunction ($ select ->getSQL ())))
45- ->executeStatement ();
49+ ->andWhere ($ delete ->expr ()->in (
50+ 'userid ' ,
51+ $ delete ->createParameter ('chunk ' ),
52+ IQueryBuilder::PARAM_STR
53+ ));
54+
55+ $ chunks = array_chunk ($ alreadyMigrated , 1000 );
56+ foreach ($ chunks as $ chunk ) {
57+ $ delete ->setParameter ('chunk ' , $ chunk , IQueryBuilder::PARAM_STR_ARRAY );
58+ $ delete ->executeStatement ();
59+ }
4660
4761 // Update remaining old entries to new ones
4862 $ update = $ this ->db ->getQueryBuilder ();
0 commit comments