xref: /plugin/statistics/db/update0001.sql (revision 4a163f509d699546ac698844a4c1763ef1e213a1)
1*4a163f50SAndreas Gohr
2*4a163f50SAndreas Gohr-- logged in users and their info and groups
3*4a163f50SAndreas Gohr
4*4a163f50SAndreas GohrCREATE TABLE `users`
5c1d8dc74SAndreas Gohr(
6*4a163f50SAndreas Gohr    `user` TEXT PRIMARY KEY,
7*4a163f50SAndreas Gohr    `dt`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- last seen
8*4a163f50SAndreas Gohr    `domain` TEXT DEFAULT NULL -- email domain
9*4a163f50SAndreas Gohr);
10*4a163f50SAndreas Gohr
11*4a163f50SAndreas GohrCREATE TABLE `groups`
12*4a163f50SAndreas Gohr(
13*4a163f50SAndreas Gohr    `user` TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE CASCADE ON UPDATE CASCADE,
14*4a163f50SAndreas Gohr    `group` TEXT NOT NULL,
15*4a163f50SAndreas Gohr    PRIMARY KEY (`user`, `group`)
16*4a163f50SAndreas Gohr);
17*4a163f50SAndreas Gohr
18*4a163f50SAndreas Gohr-- current browsing session
19*4a163f50SAndreas Gohr
20*4a163f50SAndreas GohrCREATE TABLE `sessions`
21*4a163f50SAndreas Gohr(
22*4a163f50SAndreas Gohr    `session` TEXT PRIMARY KEY,
23d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
24*4a163f50SAndreas Gohr    `end`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
25*4a163f50SAndreas Gohr    `uid`     TEXT    NOT NULL,
26*4a163f50SAndreas Gohr    `user`    TEXT    NOT NULL REFERENCES `users` (`user`) ON DELETE SET NULL ON UPDATE CASCADE,
27c1d8dc74SAndreas Gohr    `ua`       TEXT    NOT NULL,
28c1d8dc74SAndreas Gohr    `ua_info`  TEXT    NOT NULL,
29c1d8dc74SAndreas Gohr    `ua_type`  TEXT    NOT NULL,
30c1d8dc74SAndreas Gohr    `ua_ver`   TEXT    NOT NULL,
31*4a163f50SAndreas Gohr    `os`       TEXT    NOT NULL
32*4a163f50SAndreas Gohr);
33*4a163f50SAndreas GohrCREATE INDEX `idx_session_dt` ON `sessions` (`dt`);
34*4a163f50SAndreas GohrCREATE INDEX `idx_session_uid` ON `sessions` (`uid`);
35*4a163f50SAndreas GohrCREATE INDEX `idx_session_ua_type` ON `sessions` (`ua_type`);
36*4a163f50SAndreas Gohr
37*4a163f50SAndreas Gohr-- referrers
38*4a163f50SAndreas Gohr
39*4a163f50SAndreas GohrCREATE TABLE `referers`
40*4a163f50SAndreas Gohr(
41*4a163f50SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
42*4a163f50SAndreas Gohr    `url`     TEXT NOT NULL,
43*4a163f50SAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
44*4a163f50SAndreas Gohr    `type`    TEXT     NOT NULL DEFAULT 'external' -- 'external', 'search'
45*4a163f50SAndreas Gohr);
46*4a163f50SAndreas GohrCREATE UNIQUE INDEX `idx_referers_url` ON `referers` (`url`);
47*4a163f50SAndreas GohrCREATE INDEX `idx_referers_dt` ON `referers` (`dt`);
48*4a163f50SAndreas GohrCREATE INDEX `idx_referers_type` ON `referers` (`type`);
49*4a163f50SAndreas Gohr
50*4a163f50SAndreas Gohr-- page view logging
51*4a163f50SAndreas Gohr
52*4a163f50SAndreas GohrCREATE TABLE `pageviews`
53*4a163f50SAndreas Gohr(
54*4a163f50SAndreas Gohr    `id`       INTEGER PRIMARY KEY,
55*4a163f50SAndreas Gohr    `session`  TEXT    NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
56*4a163f50SAndreas Gohr    `dt`       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
57*4a163f50SAndreas Gohr    `page`     TEXT    NOT NULL,
58*4a163f50SAndreas Gohr    `ip`       TEXT    NOT NULL,
59*4a163f50SAndreas Gohr    `ref_id`   INTEGER DEFAULT NULL REFERENCES `referers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
60c1d8dc74SAndreas Gohr    `screen_x` INTEGER NOT NULL,
61c1d8dc74SAndreas Gohr    `screen_y` INTEGER NOT NULL,
62c1d8dc74SAndreas Gohr    `view_x`   INTEGER NOT NULL,
63*4a163f50SAndreas Gohr    `view_y`   INTEGER NOT NULL
64c1d8dc74SAndreas Gohr);
65*4a163f50SAndreas GohrCREATE INDEX `idx_pageviews_page` ON `pageviews` (`page`);
66*4a163f50SAndreas GohrCREATE INDEX `idx_pageviews_dt` ON `pageviews` (`dt`);
67c1d8dc74SAndreas Gohr
68c1d8dc74SAndreas GohrCREATE TABLE `iplocation`
69c1d8dc74SAndreas Gohr(
70c1d8dc74SAndreas Gohr    `ip`      TEXT PRIMARY KEY,
71c1d8dc74SAndreas Gohr    `code`    TEXT NOT NULL,
72c1d8dc74SAndreas Gohr    `country` TEXT NOT NULL,
73c1d8dc74SAndreas Gohr    `city`    TEXT NOT NULL,
74c1d8dc74SAndreas Gohr    `host`    TEXT NOT NULL,
75d5ef99ddSAndreas Gohr    `lastupd` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
76c1d8dc74SAndreas Gohr);
77c1d8dc74SAndreas GohrCREATE INDEX `idx_iplocation_code` ON `iplocation` (`code`);
78c1d8dc74SAndreas Gohr
79c1d8dc74SAndreas GohrCREATE TABLE `outlinks`
80c1d8dc74SAndreas Gohr(
81c1d8dc74SAndreas Gohr    `id`       INTEGER PRIMARY KEY,
82d5ef99ddSAndreas Gohr    `dt`       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
83*4a163f50SAndreas Gohr    `session`  TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
84c1d8dc74SAndreas Gohr    `link`     TEXT NOT NULL,
85c1d8dc74SAndreas Gohr    `page`     TEXT NOT NULL DEFAULT ''
86c1d8dc74SAndreas Gohr);
87*4a163f50SAndreas GohrCREATE INDEX `idx_outlinks_link` ON `outlinks` (`link`);
88c1d8dc74SAndreas GohrCREATE INDEX `idx_outlinks_dt` ON `outlinks` (`dt`);
89c1d8dc74SAndreas Gohr
90c1d8dc74SAndreas Gohr
91*4a163f50SAndreas Gohr-- Search engine query logging for internal searches
92c1d8dc74SAndreas GohrCREATE TABLE `search`
93c1d8dc74SAndreas Gohr(
94c1d8dc74SAndreas Gohr    `id`    INTEGER PRIMARY KEY,
95*4a163f50SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
96d5ef99ddSAndreas Gohr    `dt`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
97*4a163f50SAndreas Gohr    `query`  TEXT NOT NULL
98c1d8dc74SAndreas Gohr);
99c1d8dc74SAndreas GohrCREATE INDEX `idx_search_dt` ON `search` (`dt`);
100c1d8dc74SAndreas Gohr
101c1d8dc74SAndreas GohrCREATE TABLE `searchwords`
102c1d8dc74SAndreas Gohr(
103c1d8dc74SAndreas Gohr    `sid`  INTEGER NOT NULL,
104c1d8dc74SAndreas Gohr    `word` TEXT    NOT NULL,
105*4a163f50SAndreas Gohr    FOREIGN KEY (`sid`) REFERENCES `search` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
106c1d8dc74SAndreas Gohr    PRIMARY KEY (`sid`, `word`)
107c1d8dc74SAndreas Gohr);
108c1d8dc74SAndreas Gohr
109*4a163f50SAndreas Gohr-- Edit logging for content changes
110c1d8dc74SAndreas GohrCREATE TABLE `edits`
111c1d8dc74SAndreas Gohr(
112c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
113d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
114c1d8dc74SAndreas Gohr    `ip`      TEXT NOT NULL,
115*4a163f50SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
116c1d8dc74SAndreas Gohr    `page`    TEXT NOT NULL,
117c1d8dc74SAndreas Gohr    `type`    TEXT NOT NULL
118c1d8dc74SAndreas Gohr);
119c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_dt` ON `edits` (`dt`);
120c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_type` ON `edits` (`type`);
121c1d8dc74SAndreas Gohr
122c1d8dc74SAndreas Gohr
123c1d8dc74SAndreas GohrCREATE TABLE `logins`
124c1d8dc74SAndreas Gohr(
125c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
126d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
127c1d8dc74SAndreas Gohr    `ip`      TEXT NOT NULL,
128*4a163f50SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
129c1d8dc74SAndreas Gohr    `type`    TEXT NOT NULL
130c1d8dc74SAndreas Gohr);
131c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_dt` ON `logins` (`dt`);
132c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_type` ON `logins` (`type`);
133c1d8dc74SAndreas Gohr
134c1d8dc74SAndreas Gohr
135c1d8dc74SAndreas Gohr
136c1d8dc74SAndreas GohrCREATE TABLE `media`
137c1d8dc74SAndreas Gohr(
138c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
139d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
140c1d8dc74SAndreas Gohr    `media`   TEXT    NOT NULL,
141c1d8dc74SAndreas Gohr    `ip`      TEXT,
142*4a163f50SAndreas Gohr    `session` TEXT    NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
143c1d8dc74SAndreas Gohr    `size`    INTEGER NOT NULL,
144c1d8dc74SAndreas Gohr    `mime1`   TEXT    NOT NULL,
145c1d8dc74SAndreas Gohr    `mime2`   TEXT    NOT NULL,
146c1d8dc74SAndreas Gohr    `inline`  INTEGER NOT NULL
147c1d8dc74SAndreas Gohr);
148c1d8dc74SAndreas GohrCREATE INDEX `idx_media_media` ON `media` (`media`);
149c1d8dc74SAndreas GohrCREATE INDEX `idx_media_dt` ON `media` (`dt`);
150c1d8dc74SAndreas GohrCREATE INDEX `idx_media_mime1` ON `media` (`mime1`);
151c1d8dc74SAndreas Gohr
152c1d8dc74SAndreas Gohr
153c1d8dc74SAndreas GohrCREATE TABLE `history`
154c1d8dc74SAndreas Gohr(
155c1d8dc74SAndreas Gohr    `info`  TEXT    NOT NULL,
156d5ef99ddSAndreas Gohr    `dt`    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
157c1d8dc74SAndreas Gohr    `value` INTEGER NOT NULL,
158c1d8dc74SAndreas Gohr    PRIMARY KEY (`info`, `dt`)
159c1d8dc74SAndreas Gohr);
160c1d8dc74SAndreas Gohr
161