xref: /plugin/statistics/db/update0001.sql (revision 41d1fffc4a3b58bed7f96d983ba8317fe9e225a5) !
14a163f50SAndreas Gohr-- logged in users and their info and groups
24a163f50SAndreas Gohr
34a163f50SAndreas GohrCREATE TABLE `users`
4c1d8dc74SAndreas Gohr(
54a163f50SAndreas Gohr    `user`   TEXT PRIMARY KEY,
64a163f50SAndreas Gohr    `dt`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- last seen
74a163f50SAndreas Gohr    `domain` TEXT              DEFAULT NULL               -- email domain
84a163f50SAndreas Gohr);
94a163f50SAndreas Gohr
104a163f50SAndreas GohrCREATE TABLE `groups`
114a163f50SAndreas Gohr(
124a163f50SAndreas Gohr    `user`  TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE CASCADE ON UPDATE CASCADE,
134a163f50SAndreas Gohr    `group` TEXT NOT NULL,
144a163f50SAndreas Gohr    PRIMARY KEY (`user`, `group`)
154a163f50SAndreas Gohr);
164a163f50SAndreas Gohr
174a163f50SAndreas Gohr-- current browsing session
184a163f50SAndreas Gohr
194a163f50SAndreas GohrCREATE TABLE `sessions`
204a163f50SAndreas Gohr(
214a163f50SAndreas Gohr    `session` TEXT PRIMARY KEY,
22d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
234a163f50SAndreas Gohr    `end`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
244a163f50SAndreas Gohr    `uid`     TEXT     NOT NULL,
25*41d1fffcSAndreas Gohr    `user`    TEXT              DEFAULT NULL REFERENCES `users` (`user`) ON DELETE SET NULL ON UPDATE CASCADE,
26c1d8dc74SAndreas Gohr    `ua`      TEXT     NOT NULL,
27c1d8dc74SAndreas Gohr    `ua_info` TEXT     NOT NULL,
28c1d8dc74SAndreas Gohr    `ua_type` TEXT     NOT NULL,
29c1d8dc74SAndreas Gohr    `ua_ver`  TEXT     NOT NULL,
304a163f50SAndreas Gohr    `os`      TEXT     NOT NULL
314a163f50SAndreas Gohr);
324a163f50SAndreas GohrCREATE INDEX `idx_session_dt` ON `sessions` (`dt`);
334a163f50SAndreas GohrCREATE INDEX `idx_session_uid` ON `sessions` (`uid`);
344a163f50SAndreas GohrCREATE INDEX `idx_session_ua_type` ON `sessions` (`ua_type`);
354a163f50SAndreas Gohr
364a163f50SAndreas Gohr-- referrers
374a163f50SAndreas Gohr
384a163f50SAndreas GohrCREATE TABLE `referers`
394a163f50SAndreas Gohr(
404a163f50SAndreas Gohr    `id`     INTEGER PRIMARY KEY,
414a163f50SAndreas Gohr    `url`    TEXT     NOT NULL,
424a163f50SAndreas Gohr    `dt`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
43*41d1fffcSAndreas Gohr    `engine` TEXT              DEFAULT NULL -- search engine if it is a search engine referrer
444a163f50SAndreas Gohr);
454a163f50SAndreas GohrCREATE UNIQUE INDEX `idx_referers_url` ON `referers` (`url`);
464a163f50SAndreas GohrCREATE INDEX `idx_referers_dt` ON `referers` (`dt`);
47*41d1fffcSAndreas GohrCREATE INDEX `idx_referers_engine` ON `referers` (`engine`);
484a163f50SAndreas Gohr
494a163f50SAndreas Gohr-- page view logging
504a163f50SAndreas Gohr
514a163f50SAndreas GohrCREATE TABLE `pageviews`
524a163f50SAndreas Gohr(
534a163f50SAndreas Gohr    `id`       INTEGER PRIMARY KEY,
544a163f50SAndreas Gohr    `dt`       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
554a163f50SAndreas Gohr    `ip`       TEXT     NOT NULL,
5602aa9b73SAndreas Gohr    `session`  TEXT     NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
5702aa9b73SAndreas Gohr    `page`     TEXT     NOT NULL,
584a163f50SAndreas Gohr    `ref_id`   INTEGER           DEFAULT NULL REFERENCES `referers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
59c1d8dc74SAndreas Gohr    `screen_x` INTEGER  NOT NULL,
60c1d8dc74SAndreas Gohr    `screen_y` INTEGER  NOT NULL,
61c1d8dc74SAndreas Gohr    `view_x`   INTEGER  NOT NULL,
624a163f50SAndreas Gohr    `view_y`   INTEGER  NOT NULL
63c1d8dc74SAndreas Gohr);
644a163f50SAndreas GohrCREATE INDEX `idx_pageviews_page` ON `pageviews` (`page`);
654a163f50SAndreas GohrCREATE INDEX `idx_pageviews_dt` ON `pageviews` (`dt`);
66c1d8dc74SAndreas Gohr
67c1d8dc74SAndreas GohrCREATE TABLE `iplocation`
68c1d8dc74SAndreas Gohr(
69c1d8dc74SAndreas Gohr    `ip`      TEXT PRIMARY KEY,
70c1d8dc74SAndreas Gohr    `code`    TEXT     NOT NULL,
71c1d8dc74SAndreas Gohr    `country` TEXT     NOT NULL,
72c1d8dc74SAndreas Gohr    `city`    TEXT     NOT NULL,
73c1d8dc74SAndreas Gohr    `host`    TEXT     NOT NULL,
74d5ef99ddSAndreas Gohr    `lastupd` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
75c1d8dc74SAndreas Gohr);
76c1d8dc74SAndreas GohrCREATE INDEX `idx_iplocation_code` ON `iplocation` (`code`);
77c1d8dc74SAndreas Gohr
78c1d8dc74SAndreas GohrCREATE TABLE `outlinks`
79c1d8dc74SAndreas Gohr(
80c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
81d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
824a163f50SAndreas Gohr    `session` TEXT     NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
83c1d8dc74SAndreas Gohr    `link`    TEXT     NOT NULL,
84c1d8dc74SAndreas Gohr    `page`    TEXT     NOT NULL DEFAULT ''
85c1d8dc74SAndreas Gohr);
864a163f50SAndreas GohrCREATE INDEX `idx_outlinks_link` ON `outlinks` (`link`);
87c1d8dc74SAndreas GohrCREATE INDEX `idx_outlinks_dt` ON `outlinks` (`dt`);
88c1d8dc74SAndreas Gohr
89c1d8dc74SAndreas Gohr
904a163f50SAndreas Gohr-- Search engine query logging for internal searches
91c1d8dc74SAndreas GohrCREATE TABLE `search`
92c1d8dc74SAndreas Gohr(
93c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
94d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
9502aa9b73SAndreas Gohr    `ip`      TEXT     NOT NULL,
9602aa9b73SAndreas Gohr    `session` TEXT     NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
974a163f50SAndreas 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,
1054a163f50SAndreas Gohr    FOREIGN KEY (`sid`) REFERENCES `search` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
106c1d8dc74SAndreas Gohr    PRIMARY KEY (`sid`, `word`)
107c1d8dc74SAndreas Gohr);
108c1d8dc74SAndreas Gohr
1094a163f50SAndreas 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,
1154a163f50SAndreas 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,
128af93d154SAndreas Gohr    `user` TEXT     NOT NULL, -- no references to users, as this is for all logins, including failed ones
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    `ip`      TEXT,
1414a163f50SAndreas Gohr    `session` TEXT     NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
14202aa9b73SAndreas Gohr    `media`   TEXT     NOT NULL,
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