File: version-1.sql

package info (click to toggle)
gnome-shell-pomodoro 0.28.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,848 kB
  • sloc: javascript: 3,494; xml: 240; sql: 88; sh: 10; makefile: 9
file content (96 lines) | stat: -rw-r--r-- 3,294 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
CREATE TABLE "entries" (
    "id"                    INTEGER PRIMARY KEY AUTOINCREMENT,
    "datetime-string"       TEXT NOT NULL,  -- in utc
    "datetime-local-string" TEXT NOT NULL,  -- local
    "state-name"            TEXT NOT NULL,
    "state-duration"        INTEGER DEFAULT 0,
    "elapsed"               INTEGER DEFAULT 0
);

CREATE TABLE "aggregated-entries" (
    "id"                    INTEGER PRIMARY KEY AUTOINCREMENT,
    "date-string"           TEXT  NOT NULL,  -- local
    "state-name"            TEXT  NOT NULL,
    "state-duration"        INTEGER  DEFAULT 0,
    "elapsed"               INTEGER  DEFAULT 0
);

CREATE INDEX "entries-datetime-local-string" ON "entries" (
    "datetime-local-string"
);
CREATE INDEX "aggregated-entries-date-string" ON "aggregated-entries" (
    "date-string"
);
CREATE UNIQUE INDEX "aggregated-entries-date-string-state-name" ON "aggregated-entries" (
    "date-string",
    "state-name"
);

CREATE TRIGGER "entries-insert" AFTER INSERT ON "entries" FOR EACH ROW
    BEGIN
        UPDATE "aggregated-entries"
            SET
                "elapsed" = "elapsed" + NEW."elapsed",
                "state-duration" = "state-duration" + NEW."state-duration"
            WHERE
                "date-string" = date(NEW."datetime-local-string") AND
                "state-name" = NEW."state-name";

        INSERT INTO "aggregated-entries" (
                "date-string",
                "state-name",
                "state-duration",
                "elapsed"
            )
            SELECT
                date(NEW."datetime-local-string"),
                NEW."state-name",
                NEW."state-duration",
                NEW."elapsed"
            WHERE
                changes() = 0;
    END;

CREATE TRIGGER "entries-update" AFTER UPDATE ON "entries" FOR EACH ROW
    BEGIN
        UPDATE "aggregated-entries"
            SET
                "elapsed" = "elapsed" + NEW."elapsed",
                "state-duration" = "state-duration" + NEW."state-duration"
            WHERE
                "date-string" = date(NEW."datetime-local-string") AND
                "state-name" = NEW."state-name";

        INSERT INTO "aggregated-entries" (
                "date-string",
                "state-name",
                "state-duration",
                "elapsed"
            )
            SELECT
                date(NEW."datetime-local-string"),
                NEW."state-name",
                NEW."state-duration",
                NEW."elapsed"
            WHERE
                changes() = 0;

        UPDATE "aggregated-entries"
            SET
                "elapsed" = "elapsed" - OLD."elapsed",
                "state-duration" = "state-duration" - OLD."state-duration"
            WHERE
                "date-string" = date(OLD."datetime-local-string") AND
                "state-name" = OLD."state-name";
    END;

CREATE TRIGGER "entries-delete" AFTER DELETE ON "entries" FOR EACH ROW
    BEGIN
        UPDATE "aggregated-entries"
            SET
                "elapsed" = "elapsed" - OLD."elapsed",
                "state-duration" = "state-duration" - OLD."state-duration"
            WHERE
                "date-string" = date(OLD."datetime-local-string") AND
                "state-name" = OLD."state-name";
    END;