]> git.mxchange.org Git - friendica.git/blobdiff - database.sql
Centralised function for the sort order
[friendica.git] / database.sql
index b0f3ca7962a4c5cfe98f03d392b5a2d0c83d4980..7da771e0ead0309aaec1f05b2a4218ca354e2e29 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2023.09-dev (Giant Rhubarb)
--- DB_UPDATE_VERSION 1527
+-- DB_UPDATE_VERSION 1531
 -- ------------------------------------------
 
 
@@ -109,6 +109,7 @@ CREATE TABLE IF NOT EXISTS `user-gserver` (
        `gsid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Gserver id',
        `ignored` boolean NOT NULL DEFAULT '0' COMMENT 'server accounts are ignored for the user',
         PRIMARY KEY(`uid`,`gsid`),
+        INDEX `gsid` (`gsid`),
        FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`gsid`) REFERENCES `gserver` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='User settings about remote servers';
@@ -172,8 +173,8 @@ CREATE TABLE IF NOT EXISTS `contact` (
        `archive` boolean NOT NULL DEFAULT '0' COMMENT '',
        `unsearchable` boolean NOT NULL DEFAULT '0' COMMENT 'Contact prefers to not be searchable',
        `sensitive` boolean NOT NULL DEFAULT '0' COMMENT 'Contact posts sensitive content',
-       `baseurl` varbinary(383) DEFAULT '' COMMENT 'baseurl of the contact',
-       `gsid` int unsigned COMMENT 'Global Server ID',
+       `baseurl` varbinary(383) DEFAULT '' COMMENT 'baseurl of the contact from the gserver record, can be missing',
+       `gsid` int unsigned COMMENT 'Global Server ID, can be missing',
        `bd` date NOT NULL DEFAULT '0001-01-01' COMMENT '',
        `reason` text COMMENT '',
        `self` boolean NOT NULL DEFAULT '0' COMMENT '1 if the contact is the user him/her self',
@@ -509,9 +510,13 @@ CREATE TABLE IF NOT EXISTS `config` (
 CREATE TABLE IF NOT EXISTS `contact-relation` (
        `cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact the related contact had interacted with',
        `relation-cid` int unsigned NOT NULL DEFAULT 0 COMMENT 'related contact who had interacted with the contact',
-       `last-interaction` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last interaction',
+       `last-interaction` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last interaction by relation-cid on cid',
        `follow-updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Date of the last update of the contact relationship',
-       `follows` boolean NOT NULL DEFAULT '0' COMMENT '',
+       `follows` boolean NOT NULL DEFAULT '0' COMMENT 'if true, relation-cid follows cid',
+       `score` smallint unsigned COMMENT 'score for interactions of cid on relation-cid',
+       `relation-score` smallint unsigned COMMENT 'score for interactions of relation-cid on cid',
+       `thread-score` smallint unsigned COMMENT 'score for interactions of cid on threads of relation-cid',
+       `relation-thread-score` smallint unsigned COMMENT 'score for interactions of relation-cid on threads of cid',
         PRIMARY KEY(`cid`,`relation-cid`),
         INDEX `relation-cid` (`relation-cid`),
        FOREIGN KEY (`cid`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
@@ -1295,6 +1300,25 @@ CREATE TABLE IF NOT EXISTS `post-delivery-data` (
        FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Delivery data for items';
 
+--
+-- TABLE post-engagement
+--
+CREATE TABLE IF NOT EXISTS `post-engagement` (
+       `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
+       `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
+       `contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay',
+       `media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio',
+       `language` varbinary(128) COMMENT 'Language information about this post',
+       `created` datetime COMMENT '',
+       `comments` mediumint unsigned COMMENT 'Number of comments',
+       `activities` mediumint unsigned COMMENT 'Number of activities (like, dislike, ...)',
+        PRIMARY KEY(`uri-id`),
+        INDEX `owner-id` (`owner-id`),
+        INDEX `created` (`created`),
+       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Engagement data per post';
+
 --
 -- TABLE post-history
 --
@@ -2044,6 +2068,7 @@ CREATE VIEW `post-user-view` AS SELECT
        `author`.`hidden` AS `author-hidden`,
        `author`.`updated` AS `author-updated`,
        `author`.`gsid` AS `author-gsid`,
+       `author`.`baseurl` AS `author-baseurl`,
        `post-user`.`owner-id` AS `owner-id`,
        `owner`.`uri-id` AS `owner-uri-id`,
        `owner`.`url` AS `owner-link`,
@@ -2691,14 +2716,12 @@ CREATE VIEW `network-item-view` AS SELECT
                        STRAIGHT_JOIN `contact` ON `contact`.`id` = `post-thread-user`.`contact-id`
                        STRAIGHT_JOIN `contact` AS `authorcontact` ON `authorcontact`.`id` = `post-thread-user`.`author-id`
                        STRAIGHT_JOIN `contact` AS `ownercontact` ON `ownercontact`.`id` = `post-thread-user`.`owner-id`
-                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `post-thread-user`.`uid` AND `author`.`cid` = `post-thread-user`.`author-id`
-                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `post-thread-user`.`uid` AND `owner`.`cid` = `post-thread-user`.`owner-id`
                        WHERE `post-user`.`visible` AND NOT `post-user`.`deleted`
                        AND (NOT `contact`.`readonly` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`)
                        AND (`post-user`.`hidden` IS NULL OR NOT `post-user`.`hidden`)
                        AND NOT `authorcontact`.`blocked` AND NOT `ownercontact`.`blocked`
-                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
-                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`);
+                       AND NOT EXISTS(SELECT `cid`    FROM `user-contact` WHERE `uid` = `post-thread-user`.`uid` AND `cid` IN (`authorcontact`.`id`, `ownercontact`.`id`) AND (`blocked` OR `ignored`))
+                       AND NOT EXISTS(SELECT `gsid`   FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`);
 
 --
 -- VIEW network-thread-view
@@ -2721,15 +2744,12 @@ CREATE VIEW `network-thread-view` AS SELECT
                        STRAIGHT_JOIN `contact` ON `contact`.`id` = `post-thread-user`.`contact-id`
                        STRAIGHT_JOIN `contact` AS `authorcontact` ON `authorcontact`.`id` = `post-thread-user`.`author-id`
                        STRAIGHT_JOIN `contact` AS `ownercontact` ON `ownercontact`.`id` = `post-thread-user`.`owner-id`
-                       LEFT JOIN `user-contact` AS `author` ON `author`.`uid` = `post-thread-user`.`uid` AND `author`.`cid` = `post-thread-user`.`author-id`
-                       LEFT JOIN `user-contact` AS `owner` ON `owner`.`uid` = `post-thread-user`.`uid` AND `owner`.`cid` = `post-thread-user`.`owner-id`
                        WHERE `post-user`.`visible` AND NOT `post-user`.`deleted`
                        AND (NOT `contact`.`readonly` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`)
                        AND (`post-thread-user`.`hidden` IS NULL OR NOT `post-thread-user`.`hidden`)
                        AND NOT `authorcontact`.`blocked` AND NOT `ownercontact`.`blocked`
-                       AND (`author`.`blocked` IS NULL OR NOT `author`.`blocked`)
-                       AND (`owner`.`blocked` IS NULL OR NOT `owner`.`blocked`)
-                       AND NOT EXISTS(SELECT `gsid` FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`);
+                       AND NOT EXISTS(SELECT `cid`    FROM `user-contact` WHERE `uid` = `post-thread-user`.`uid` AND `cid` IN (`authorcontact`.`id`, `ownercontact`.`id`) AND (`blocked` OR `ignored`))
+                       AND NOT EXISTS(SELECT `gsid`   FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`);
 
 --
 -- VIEW owner-view