xref: /plugin/statistics/db/update0001.sql (revision 02aa9b73ad7fe7ccc600c393ae1cf861c37c9024)
14a163f50SAndreas Gohr
24a163f50SAndreas Gohr-- logged in users and their info and groups
34a163f50SAndreas Gohr
44a163f50SAndreas GohrCREATE TABLE `users`
5c1d8dc74SAndreas Gohr(
64a163f50SAndreas Gohr    `user` TEXT PRIMARY KEY,
74a163f50SAndreas Gohr    `dt`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- last seen
84a163f50SAndreas Gohr    `domain` TEXT DEFAULT NULL -- email domain
94a163f50SAndreas Gohr);
104a163f50SAndreas Gohr
114a163f50SAndreas GohrCREATE TABLE `groups`
124a163f50SAndreas Gohr(
134a163f50SAndreas Gohr    `user` TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE CASCADE ON UPDATE CASCADE,
144a163f50SAndreas Gohr    `group` TEXT NOT NULL,
154a163f50SAndreas Gohr    PRIMARY KEY (`user`, `group`)
164a163f50SAndreas Gohr);
174a163f50SAndreas Gohr
184a163f50SAndreas Gohr-- current browsing session
194a163f50SAndreas Gohr
204a163f50SAndreas GohrCREATE TABLE `sessions`
214a163f50SAndreas Gohr(
224a163f50SAndreas Gohr    `session` TEXT PRIMARY KEY,
23d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
244a163f50SAndreas Gohr    `end`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
254a163f50SAndreas Gohr    `uid`     TEXT    NOT NULL,
264a163f50SAndreas 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,
314a163f50SAndreas Gohr    `os`       TEXT    NOT NULL
324a163f50SAndreas Gohr);
334a163f50SAndreas GohrCREATE INDEX `idx_session_dt` ON `sessions` (`dt`);
344a163f50SAndreas GohrCREATE INDEX `idx_session_uid` ON `sessions` (`uid`);
354a163f50SAndreas GohrCREATE INDEX `idx_session_ua_type` ON `sessions` (`ua_type`);
364a163f50SAndreas Gohr
374a163f50SAndreas Gohr-- referrers
384a163f50SAndreas Gohr
394a163f50SAndreas GohrCREATE TABLE `referers`
404a163f50SAndreas Gohr(
414a163f50SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
424a163f50SAndreas Gohr    `url`     TEXT NOT NULL,
434a163f50SAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
444a163f50SAndreas Gohr    `type`    TEXT     NOT NULL DEFAULT 'external' -- 'external', 'search'
454a163f50SAndreas Gohr);
464a163f50SAndreas GohrCREATE UNIQUE INDEX `idx_referers_url` ON `referers` (`url`);
474a163f50SAndreas GohrCREATE INDEX `idx_referers_dt` ON `referers` (`dt`);
484a163f50SAndreas GohrCREATE INDEX `idx_referers_type` ON `referers` (`type`);
494a163f50SAndreas Gohr
504a163f50SAndreas Gohr-- page view logging
514a163f50SAndreas Gohr
524a163f50SAndreas GohrCREATE TABLE `pageviews`
534a163f50SAndreas Gohr(
544a163f50SAndreas Gohr    `id`       INTEGER PRIMARY KEY,
554a163f50SAndreas Gohr    `dt`       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
564a163f50SAndreas Gohr    `ip`       TEXT    NOT NULL,
57*02aa9b73SAndreas Gohr    `session`  TEXT    NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
58*02aa9b73SAndreas Gohr    `page`     TEXT    NOT NULL,
594a163f50SAndreas 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,
634a163f50SAndreas Gohr    `view_y`   INTEGER NOT NULL
64c1d8dc74SAndreas Gohr);
654a163f50SAndreas GohrCREATE INDEX `idx_pageviews_page` ON `pageviews` (`page`);
664a163f50SAndreas 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,
834a163f50SAndreas 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);
874a163f50SAndreas GohrCREATE INDEX `idx_outlinks_link` ON `outlinks` (`link`);
88c1d8dc74SAndreas GohrCREATE INDEX `idx_outlinks_dt` ON `outlinks` (`dt`);
89c1d8dc74SAndreas Gohr
90c1d8dc74SAndreas Gohr
914a163f50SAndreas Gohr-- Search engine query logging for internal searches
92c1d8dc74SAndreas GohrCREATE TABLE `search`
93c1d8dc74SAndreas Gohr(
94c1d8dc74SAndreas Gohr    `id`    INTEGER PRIMARY KEY,
95d5ef99ddSAndreas Gohr    `dt`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
96*02aa9b73SAndreas Gohr    `ip`      TEXT NOT NULL,
97*02aa9b73SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
984a163f50SAndreas Gohr    `query`  TEXT NOT NULL
99c1d8dc74SAndreas Gohr);
100c1d8dc74SAndreas GohrCREATE INDEX `idx_search_dt` ON `search` (`dt`);
101c1d8dc74SAndreas Gohr
102c1d8dc74SAndreas GohrCREATE TABLE `searchwords`
103c1d8dc74SAndreas Gohr(
104c1d8dc74SAndreas Gohr    `sid`  INTEGER NOT NULL,
105c1d8dc74SAndreas Gohr    `word` TEXT    NOT NULL,
1064a163f50SAndreas Gohr    FOREIGN KEY (`sid`) REFERENCES `search` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
107c1d8dc74SAndreas Gohr    PRIMARY KEY (`sid`, `word`)
108c1d8dc74SAndreas Gohr);
109c1d8dc74SAndreas Gohr
1104a163f50SAndreas Gohr-- Edit logging for content changes
111c1d8dc74SAndreas GohrCREATE TABLE `edits`
112c1d8dc74SAndreas Gohr(
113c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
114d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
115c1d8dc74SAndreas Gohr    `ip`      TEXT NOT NULL,
1164a163f50SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
117c1d8dc74SAndreas Gohr    `page`    TEXT NOT NULL,
118c1d8dc74SAndreas Gohr    `type`    TEXT NOT NULL
119c1d8dc74SAndreas Gohr);
120c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_dt` ON `edits` (`dt`);
121c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_type` ON `edits` (`type`);
122c1d8dc74SAndreas Gohr
123c1d8dc74SAndreas Gohr
124c1d8dc74SAndreas GohrCREATE TABLE `logins`
125c1d8dc74SAndreas Gohr(
126c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
127d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
128c1d8dc74SAndreas Gohr    `ip`      TEXT NOT NULL,
1294a163f50SAndreas Gohr    `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
130c1d8dc74SAndreas Gohr    `type`    TEXT NOT NULL
131c1d8dc74SAndreas Gohr);
132c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_dt` ON `logins` (`dt`);
133c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_type` ON `logins` (`type`);
134c1d8dc74SAndreas Gohr
135c1d8dc74SAndreas Gohr
136c1d8dc74SAndreas Gohr
137c1d8dc74SAndreas GohrCREATE TABLE `media`
138c1d8dc74SAndreas Gohr(
139c1d8dc74SAndreas Gohr    `id`      INTEGER PRIMARY KEY,
140d5ef99ddSAndreas Gohr    `dt`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
141c1d8dc74SAndreas Gohr    `ip`      TEXT,
1424a163f50SAndreas Gohr    `session` TEXT    NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE,
143*02aa9b73SAndreas Gohr    `media`   TEXT    NOT NULL,
144c1d8dc74SAndreas Gohr    `size`    INTEGER NOT NULL,
145c1d8dc74SAndreas Gohr    `mime1`   TEXT    NOT NULL,
146c1d8dc74SAndreas Gohr    `mime2`   TEXT    NOT NULL,
147c1d8dc74SAndreas Gohr    `inline`  INTEGER NOT NULL
148c1d8dc74SAndreas Gohr);
149c1d8dc74SAndreas GohrCREATE INDEX `idx_media_media` ON `media` (`media`);
150c1d8dc74SAndreas GohrCREATE INDEX `idx_media_dt` ON `media` (`dt`);
151c1d8dc74SAndreas GohrCREATE INDEX `idx_media_mime1` ON `media` (`mime1`);
152c1d8dc74SAndreas Gohr
153c1d8dc74SAndreas Gohr
154c1d8dc74SAndreas GohrCREATE TABLE `history`
155c1d8dc74SAndreas Gohr(
156c1d8dc74SAndreas Gohr    `info`  TEXT    NOT NULL,
157d5ef99ddSAndreas Gohr    `dt`    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
158c1d8dc74SAndreas Gohr    `value` INTEGER NOT NULL,
159c1d8dc74SAndreas Gohr    PRIMARY KEY (`info`, `dt`)
160c1d8dc74SAndreas Gohr);
161c1d8dc74SAndreas Gohr
162