[Digikam-devel] is creating a tag as simple as adding new entries to the Tags table?
Francesco R.
francesco at pnpitalia.it
Fri Jan 27 13:42:49 GMT 2012
It's sligtly different from sqlite and mysql, assuming sqlite something like
this could work:
Run digikam at least once, it will create the tables and populate them with
some tags.
Also create a tag on your own, then close digikam, open the db, find your tag.
Use the pid of your tag as a starting point for all your tag tree, the
triggers should take care of the "TagsTree" table, you need only to insert in
the "Tags" one.
you can then relate the tag with the image using the "ImageTags" table.
in case you have a mysql-workbench available I've also attached a mysql-
workbench file (intended for mysql doh) that should be near to the actual
sqlite database schema.
the SQL:
INSERT INTO Tags (pid, name) VALUES( :tagPID, :tagname);
INSERT INTO Tags (id, pid, name, icon, iconkde)
VALUES (:id, :pid, :name, :icon, :iconkde);
DELETE FROM Tags WHERE id=:tagID;
the tables:
CREATE TABLE IF NOT EXISTS Tags
(id INTEGER PRIMARY KEY,
pid INTEGER,
name TEXT NOT NULL,
icon INTEGER,
iconkde TEXT,
UNIQUE (name, pid))
CREATE TABLE IF NOT EXISTS TagsTree
(id INTEGER NOT NULL,
pid INTEGER NOT NULL,
UNIQUE (id, pid))
CREATE TABLE IF NOT EXISTS ImageTags
(imageid INTEGER NOT NULL,
tagid INTEGER NOT NULL,
UNIQUE (imageid, tagid))
the triggers:
CREATE TRIGGER delete_tag DELETE ON Tags
BEGIN
DELETE FROM ImageTags WHERE tagid=OLD.id;
DELETE FROM TagProperties WHERE tagid=OLD.id;
DELETE FROM ImageTagProperties WHERE tagid=OLD.id;
END;
CREATE TRIGGER insert_tagstree AFTER INSERT ON Tags
BEGIN
INSERT INTO TagsTree
SELECT NEW.id, NEW.pid
UNION
SELECT NEW.id, pid FROM TagsTree WHERE id=NEW.pid;
END;
CREATE TRIGGER delete_tag DELETE ON Tags
BEGIN
DELETE FROM ImageTags WHERE tagid=OLD.id;
DELETE FROM TagProperties WHERE tagid=OLD.id;
DELETE FROM ImageTagProperties WHERE tagid=OLD.id;
END;
CREATE TRIGGER delete_tagstree DELETE ON Tags
BEGIN
DELETE FROM Tags
WHERE id IN (SELECT id FROM TagsTree WHERE pid=OLD.id);
DELETE FROM TagsTree
WHERE id IN (SELECT id FROM TagsTree WHERE pid=OLD.id);
DELETE FROM TagsTree
WHERE id=OLD.id;
END;
CREATE TRIGGER move_tagstree UPDATE OF pid ON Tags
BEGIN
DELETE FROM TagsTree
WHERE
((id = OLD.id)
OR
id IN (SELECT id FROM TagsTree WHERE pid=OLD.id))
AND
pid IN (SELECT pid FROM TagsTree WHERE id=OLD.id);
INSERT INTO TagsTree
SELECT NEW.id, NEW.pid
UNION
SELECT NEW.id, pid FROM TagsTree WHERE id=NEW.pid
UNION
SELECT id, NEW.pid FROM TagsTree WHERE pid=NEW.id
UNION
SELECT A.id, B.pid FROM TagsTree A, TagsTree B
WHERE
A.pid = NEW.id AND B.id = NEW.pid;
END;
On Friday 27 January 2012 07:24:47 Ram Bhamidipaty wrote:
> I did find the file core/project/documents/DBSCHEMA.ODS
>
> That spread sheet does mention the Tags table as well as the meaning of
> the columns. But I don't see anything about the TagTree and TagProperties
> tables. Did I miss it?
>
> If I add an entry into Tags is that enough to create a tag? In my tests I
> see many entries in TagTree and TagProperties -- can I just ignore those
> tables?
>
> Thanks for any help.
>
> -Ram
>
> On Thu, Jan 26, 2012 at 9:51 PM, Gilles Caulier
>
> <caulier.gilles at gmail.com> wrote:
> > Do you take a look into digiKam database documentation from git/master
> > reprository. Look into "project" sub dir...
> >
> > Gilles Caulier
> >
> > 2012/1/27 Ram Bhamidipaty <rambham at gmail.com>:
> >> Hi,
> >>
> >> I am in the process of importing a large number of pictures and their
> >> associated tags
> >> into digikam. My pictures do not have the tag information in the
> >> image file - but it is
> >> in another database.
> >>
> >> I would like to write a script that can create the appropriate tags in
> >> digikam. The
> >> structure of the Tags table seems simple, but I am not so sure about the
> >> TagTree and TagProperties tables. Do I need to create entries there as
> >> well?
> >>
> >> Or -- is there a digikam supported API that I can use to create tags?
> >>
> >> Thanks for any info.
> >> -Ram
-------------- next part --------------
A non-text attachment was scrubbed...
Name: digikamtest2.mwb
Type: application/zip
Size: 27799 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/digikam-devel/attachments/20120127/c9adb2db/attachment.zip>
More information about the Digikam-devel
mailing list