@@ -43,24 +43,34 @@ public function getName(): string {
4343
4444 public function run (IOutput $ output ): void {
4545 try {
46- $ subQuery = $ this ->db ->getQueryBuilder ();
47- $ subQuery ->selectAlias ($ subQuery ->func ()->min ('id ' ), 'id ' )
46+ $ selectQuery = $ this ->db ->getQueryBuilder ();
47+ $ selectQuery ->selectAlias ($ selectQuery ->func ()->min ('id ' ), 'min_id ' )
48+ ->select ('file_id ' , 'user_id ' , 'x ' , 'y ' , 'height ' , 'width ' )
4849 ->from ('recognize_face_detections ' )
4950 ->groupBy ('file_id ' , 'user_id ' , 'x ' , 'y ' , 'height ' , 'width ' );
5051
51- if ($ this ->db ->getDatabaseProvider () === IDBConnection::PLATFORM_MYSQL ) {
52- $ secondSubQuery = $ this ->db ->getQueryBuilder ();
53- $ secondSubQuery ->select ('id ' )->from ($ secondSubQuery ->createFunction ('( ' . $ subQuery ->getSQL () .') ' ), 'x ' );
54- $ sql = $ secondSubQuery ->getSQL ();
55- } else {
56- $ sql = $ subQuery ->getSQL ();
57- }
52+ $ result = $ selectQuery ->executeQuery ();
5853
59- $ qb = $ this ->db ->getQueryBuilder ();
60- $ qb ->delete ('recognize_face_detections ' )
61- ->where ($ qb ->expr ()->notIn ('id ' , $ qb ->createFunction ('( ' . $ sql .') ' )));
54+ $ deleteQuery = $ this ->db ->getQueryBuilder ();
55+ $ deleteQuery ->delete ('recognize_face_detections ' )
56+ ->where ($ deleteQuery ->expr ()->neq ('id ' , $ deleteQuery ->createParameter ('min_id ' )))
57+ ->andWhere ($ deleteQuery ->expr ()->eq ('file_id ' , $ deleteQuery ->createParameter ('file_id ' )))
58+ ->andWhere ($ deleteQuery ->expr ()->eq ('user_id ' , $ deleteQuery ->createParameter ('user_id ' )))
59+ ->andWhere ($ deleteQuery ->expr ()->eq ('x ' , $ deleteQuery ->createParameter ('x ' )))
60+ ->andWhere ($ deleteQuery ->expr ()->eq ('y ' , $ deleteQuery ->createParameter ('y ' )))
61+ ->andWhere ($ deleteQuery ->expr ()->eq ('height ' , $ deleteQuery ->createParameter ('height ' )))
62+ ->andWhere ($ deleteQuery ->expr ()->eq ('width ' , $ deleteQuery ->createParameter ('width ' )));
6263
63- $ qb ->executeStatement ();
64+ while ($ row = $ result ->fetch ()) {
65+ $ deleteQuery ->setParameter ('min_id ' , $ row ['min_id ' ]);
66+ $ deleteQuery ->setParameter ('file_id ' , $ row ['file_id ' ]);
67+ $ deleteQuery ->setParameter ('user_id ' , $ row ['user_id ' ]);
68+ $ deleteQuery ->setParameter ('x ' , $ row ['x ' ]);
69+ $ deleteQuery ->setParameter ('y ' , $ row ['y ' ]);
70+ $ deleteQuery ->setParameter ('height ' , $ row ['height ' ]);
71+ $ deleteQuery ->setParameter ('width ' , $ row ['width ' ]);
72+ $ deleteQuery ->executeStatement ();
73+ }
6474 } catch (\Throwable $ e ) {
6575 $ output ->warning ('Failed to automatically remove duplicate face detections for recognize. ' );
6676 $ this ->logger ->error ('Failed to automatically remove duplicate face detections ' , ['exception ' => $ e ]);
0 commit comments