[digiKam-users] No thumbnails in people view

omame daniele+digikam at valeriani.uk
Tue May 19 08:52:34 BST 2020


Thanks Gilles. Thanks to your hint, I was able to solve this. I think there
is a chance for an improvement in digikam. Here's what I've done.

After starting digikam in debug mode, this is what I get when selecting any
name in the people view:

>digikam.general: Using  4  CPU core to run threads
>digikam.general: Action Thread run  1  new jobs
>digikam.database: " ( ( (ImageTagProperties.tagid=? OR
ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
ImageTagProperties.property=?  ) ) "
>digikam.database: Search query:
> "SELECT DISTINCT Images.id, Images.name, Images.album,       
> Albums.albumRoot,        ImageInformation.rating, Images.category,       
> ImageInformation.format, ImageInformation.creationDate,       
> Images.modificationDate, Images.fileSize,        ImageInformation.width, 
> ImageInformation.height,        ImageTagProperties.value,
> ImageTagProperties.property, ImageTagProperties.tagid  FROM Images       
> INNER JOIN ImageTagProperties ON ImageTagProperties.imageid=Images.id       
> LEFT JOIN ImageInformation ON Images.id=ImageInformation.imageid       
> INNER JOIN Albums           ON Albums.id=Images.album WHERE
> Images.status=1 AND (  ( ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) )  );"
> (QVariant(int, 49), QVariant(int, 49), QVariant(QString,
> "autodetectedPerson"), QVariant(int, 49), QVariant(int, 49),
> QVariant(QString, "autodetectedFace"), QVariant(int, 49), QVariant(int,
> 49), QVariant(QString, "tagRegion"))
>digikam.dbengine: Prepare failed!
>digikam.dbengine: Failure executing query:
> "SELECT DISTINCT Images.id, Images.name, Images.album,       
> Albums.albumRoot,        ImageInformation.rating, Images.category,       
> ImageInformation.format, ImageInformation.creationDate,       
> Images.modificationDate, Images.fileSize,        ImageInformation.width, 
> ImageInformation.height,        ImageTagProperties.value,
> ImageTagProperties.property, ImageTagProperties.tagid  FROM Images       
> INNER JOIN ImageTagProperties ON ImageTagProperties.imageid=Images.id       
> LEFT JOIN ImageInformation ON Images.id=ImageInformation.imageid       
> INNER JOIN Albums           ON Albums.id=Images.album WHERE
> Images.status=1 AND (  ( ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) OR ( (ImageTagProperties.tagid=? OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=?)) AND
> ImageTagProperties.property=?  ) )  );"
>Error messages: "QMYSQL3: Unable to prepare statement" "Access denied for
user 'digikam'@'localhost' (using password: YES)" "1045" 2
>Bound values:  ()
>digikam.dbengine: Failure executing query:
> "SELECT DISTINCT Images.id, Images.name, Images.album,       
> Albums.albumRoot,        ImageInformation.rating, Images.category,       
> ImageInformation.format, ImageInformation.creationDate,       
> Images.modificationDate, Images.fileSize,        ImageInformation.width, 
> ImageInformation.height,        ImageTagProperties.value,
> ImageTagProperties.property, ImageTagProperties.tagid  FROM Images       
> INNER JOIN ImageTagProperties ON ImageTagProperties.imageid=Images.id       
> LEFT JOIN ImageInformation ON Images.id=ImageInformation.imageid       
> INNER JOIN Albums           ON Albums.id=Images.album WHERE
> Images.status=1 AND (  ( ( (ImageTagProperties.tagid=49 OR
> ImageTagProperties.tagid IN (SELECT id FROM TagsTree WHERE pid=49)) AND
> ImageTagProperties.property='autodetectedPerson'  ) OR (
> (ImageTagProperties.tagid=49 OR ImageTagProperties.tagid IN (SELECT id
> FROM TagsTree WHERE pid=49)) AND
> ImageTagProperties.property='autodetectedFace'  ) OR (
> (ImageTagProperties.tagid=49 OR ImageTagProperties.tagid IN (SELECT id
> FROM TagsTree WHERE pid=49)) AND ImageTagProperties.property='tagRegion' 
> ) )  );"
>Error messages: "QMYSQL: Unable to execute query" "Access denied for user
'digikam'@'localhost' (using password: YES)" "1045" 2
>Bound values:  (QVariant(int, 49), QVariant(int, 49), QVariant(QString,
"autodetectedPerson"), QVariant(int, 49), QVariant(int, 49),
QVariant(QString, "autodetectedFace"), QVariant(int, 49), QVariant(int, 49),
QVariant(QString, "tagRegion"))
>digikam.general: Data From DBJobsThread is null:  true
>digikam.general: Failed to list url:  ""
>digikam.general: Event is dispatched to OSX desktop notifier
>digikam.general: Cancel Main Thread
>digikam.general: One job is done

Access denied? But digikam can connect just fine, else it wouldn't even
start!
So I opened up a mysql shell and ran the query manually:

>mariadb> SELECT DISTINCT Images.id, Images.name, Images.album,       
Albums.albumRoot,        ImageInformation.rating, Images.category,       
ImageInformation.format, ImageInformation.creationDate,       
Images.modificationDate, Images.fileSize,        ImageInformation.width, 
ImageInformation.height,        ImageTagProperties.value,
ImageTagProperties.property, ImageTagProperties.tagid  FROM Images       
INNER JOIN ImageTagProperties ON ImageTagProperties.imageid=Images.id       
LEFT JOIN ImageInformation ON Images.id=ImageInformation.imageid       
INNER JOIN Albums           ON Albums.id=Images.album WHERE Images.status=1
AND (  ( ( (ImageTagProperties.tagid=49 OR ImageTagProperties.tagid IN
(SELECT id FROM TagsTree WHERE pid=49)) AND
ImageTagProperties.property='autodetectedPerson'  ) OR (
(ImageTagProperties.tagid=49 OR ImageTagProperties.tagid IN (SELECT id FROM
TagsTree WHERE pid=49)) AND ImageTagProperties.property='autodetectedFace' 
) OR ( (ImageTagProperties.tagid=49 OR ImageTagProperties.tagid IN (SELECT
id FROM TagsTree WHERE pid=49)) AND ImageTagProperties.property='tagRegion' 
) )  );
>ERROR 1449 (HY000): The user specified as a definer ('omame'@'localhost')
does not exist

OK, now we're getting somewhere.
When I set up the mysql connection I used a personal user to configure the
digikam connection. Then, in a later iteration, I created a dedicated
digikam user and dropped the previous one.
But where is this defined? It must be somewhere in the schema, so I dumped
it and had a look:

>[...]
>--
>-- Final view structure for view `tagstree`
>--
>
>/*!50001 DROP TABLE IF EXISTS `tagstree`*/;
>/*!50001 DROP VIEW IF EXISTS `tagstree`*/;
>/*!50001 SET @saved_cs_client          = @@character_set_client */;
>/*!50001 SET @saved_cs_results         = @@character_set_results */;
>/*!50001 SET @saved_col_connection     = @@collation_connection */;
>/*!50001 SET character_set_client      = utf8mb4 */;
>/*!50001 SET character_set_results     = utf8mb4 */;
>/*!50001 SET collation_connection      = utf8mb4_general_ci */;
>/*!50001 CREATE ALGORITHM=UNDEFINED */
>/*!50013 DEFINER=`omame`@`localhost` SQL SECURITY DEFINER */

There you are! Apparently something didn't get updated in the schema when I
switched to the new user. Here's the view:

>mariadb> show create view digikam.tagstree;
>+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>| View     | Create View                                                                                                                                                                                        
| character_set_client | collation_connection |
>+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>| tagstree | CREATE ALGORITHM=UNDEFINED DEFINER=`omame`@`localhost` SQL
SECURITY DEFINER VIEW `digikam`.`tagstree` AS select `digikam`.`tags`.`id`
AS `id`,`digikam`.`tags`.`pid` AS `pid` from `digikam`.`tags` | utf8mb4             
| utf8mb4_general_ci   |
>+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>1 row in set, 1 warning (0.000 sec)

So I simply dropeed and recreated the view:

>mariadb> drop view digikam.tagstree;
>Query OK, 0 rows affected (0.006 sec)
>
>mariadb> CREATE ALGORITHM=UNDEFINED DEFINER=`digikam`@`localhost` SQL
SECURITY DEFINER VIEW `digikam`.`tagstree` AS select `digikam`.`tags`.`id`
AS `id`,`digikam`.`tags`.`pid` AS `pid` from `digikam`.`tags`;
>Query OK, 0 rows affected (0.020 sec)
>
>mariadb> show create view digikam.tagstree;
>+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>| View     | Create View                                                                                                                                                  
| character_set_client | collation_connection |
>+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>| tagstree | CREATE ALGORITHM=UNDEFINED DEFINER=`digikam`@`localhost` SQL
SECURITY DEFINER VIEW `tagstree` AS select `tags`.`id` AS `id`,`tags`.`pid`
AS `pid` from `tags` | utf8                 | utf8_general_ci      |
>+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
>1 row in set (0.001 sec)

And voilĂ : people view works!

Is there a way for digikam to handle this tiny "migration" when the users
gets updated in the preferences? Or perhaps it's worth mentioning in the
docs, unless it's already there and I completely missed it?



--
Sent from: http://digikam.1695700.n4.nabble.com/digikam-users-f1735189.html


More information about the Digikam-users mailing list