]> git.mxchange.org Git - friendica.git/blobdiff - database.sql
Merge pull request #9700 from MrPetovan/bug/notices
[friendica.git] / database.sql
index 1e439213d4b46c27b6dfdd63954e22a8dc20239e..fbfdd70bbfccecac05e8052bc775c93904b63b13 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2020.12-dev (Red Hot Poker)
--- DB_UPDATE_VERSION 1370
+-- DB_UPDATE_VERSION 1383
 -- ------------------------------------------
 
 
@@ -26,13 +26,70 @@ CREATE TABLE IF NOT EXISTS `gserver` (
        `detection-method` tinyint unsigned COMMENT 'Method that had been used to detect that server',
        `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '',
        `last_poco_query` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '',
-       `last_contact` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '',
-       `last_failure` datetime DEFAULT '0001-01-01 00:00:00' COMMENT '',
+       `last_contact` datetime DEFAULT '0001-01-01 00:00:00' COMMENT 'Last successful connection request',
+       `last_failure` datetime DEFAULT '0001-01-01 00:00:00' COMMENT 'Last failed connection request',
        `failed` boolean COMMENT 'Connection failed',
+       `next_contact` datetime DEFAULT '0001-01-01 00:00:00' COMMENT 'Next connection request',
         PRIMARY KEY(`id`),
-        UNIQUE INDEX `nurl` (`nurl`(190))
+        UNIQUE INDEX `nurl` (`nurl`(190)),
+        INDEX `next_contact` (`next_contact`)
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Global servers';
 
+--
+-- TABLE user
+--
+CREATE TABLE IF NOT EXISTS `user` (
+       `uid` mediumint unsigned NOT NULL auto_increment COMMENT 'sequential ID',
+       `parent-uid` mediumint unsigned COMMENT 'The parent user that has full control about this user',
+       `guid` varchar(64) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this user',
+       `username` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this user is known by',
+       `password` varchar(255) NOT NULL DEFAULT '' COMMENT 'encrypted password',
+       `legacy_password` boolean NOT NULL DEFAULT '0' COMMENT 'Is the password hash double-hashed?',
+       `nickname` varchar(255) NOT NULL DEFAULT '' COMMENT 'nick- and user name',
+       `email` varchar(255) NOT NULL DEFAULT '' COMMENT 'the users email address',
+       `openid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
+       `timezone` varchar(128) NOT NULL DEFAULT '' COMMENT 'PHP-legal timezone',
+       `language` varchar(32) NOT NULL DEFAULT 'en' COMMENT 'default language',
+       `register_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of registration',
+       `login_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last login',
+       `default-location` varchar(255) NOT NULL DEFAULT '' COMMENT 'Default for item.location',
+       `allow_location` boolean NOT NULL DEFAULT '0' COMMENT '1 allows to display the location',
+       `theme` varchar(255) NOT NULL DEFAULT '' COMMENT 'user theme preference',
+       `pubkey` text COMMENT 'RSA public key 4096 bit',
+       `prvkey` text COMMENT 'RSA private key 4096 bit',
+       `spubkey` text COMMENT '',
+       `sprvkey` text COMMENT '',
+       `verified` boolean NOT NULL DEFAULT '0' COMMENT 'user is verified through email',
+       `blocked` boolean NOT NULL DEFAULT '0' COMMENT '1 for user is blocked',
+       `blockwall` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to post to the profile page of the user',
+       `hidewall` boolean NOT NULL DEFAULT '0' COMMENT 'Hide profile details from unkown viewers',
+       `blocktags` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to tag the post of this user',
+       `unkmail` boolean NOT NULL DEFAULT '0' COMMENT 'Permit unknown people to send private mails to this user',
+       `cntunkmail` int unsigned NOT NULL DEFAULT 10 COMMENT '',
+       `notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT 'email notification options',
+       `page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'page/profile type',
+       `account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `prvnets` boolean NOT NULL DEFAULT '0' COMMENT '',
+       `pwdreset` varchar(255) COMMENT 'Password reset request token',
+       `pwdreset_time` datetime COMMENT 'Timestamp of the last password reset request',
+       `maxreq` int unsigned NOT NULL DEFAULT 10 COMMENT '',
+       `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `account_removed` boolean NOT NULL DEFAULT '0' COMMENT 'if 1 the account is removed',
+       `account_expired` boolean NOT NULL DEFAULT '0' COMMENT '',
+       `account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp when account expires and will be deleted',
+       `expire_notification_sent` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last warning of account expiration',
+       `def_gid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `allow_cid` mediumtext COMMENT 'default permission for this user',
+       `allow_gid` mediumtext COMMENT 'default permission for this user',
+       `deny_cid` mediumtext COMMENT 'default permission for this user',
+       `deny_gid` mediumtext COMMENT 'default permission for this user',
+       `openidserver` text COMMENT '',
+        PRIMARY KEY(`uid`),
+        INDEX `nickname` (`nickname`(32)),
+        INDEX `parent-uid` (`parent-uid`),
+       FOREIGN KEY (`parent-uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='The local users';
+
 --
 -- TABLE contact
 --
@@ -120,14 +177,14 @@ CREATE TABLE IF NOT EXISTS `contact` (
         PRIMARY KEY(`id`),
         INDEX `uid_name` (`uid`,`name`(190)),
         INDEX `self_uid` (`self`,`uid`),
-        INDEX `alias_uid` (`alias`(96),`uid`),
+        INDEX `alias_uid` (`alias`(128),`uid`),
         INDEX `pending_uid` (`pending`,`uid`),
         INDEX `blocked_uid` (`blocked`,`uid`),
         INDEX `uid_rel_network_poll` (`uid`,`rel`,`network`,`poll`(64),`archive`),
         INDEX `uid_network_batch` (`uid`,`network`,`batch`(64)),
-        INDEX `addr_uid` (`addr`(96),`uid`),
-        INDEX `nurl_uid` (`nurl`(96),`uid`),
-        INDEX `nick_uid` (`nick`(32),`uid`),
+        INDEX `addr_uid` (`addr`(128),`uid`),
+        INDEX `nurl_uid` (`nurl`(128),`uid`),
+        INDEX `nick_uid` (`nick`(128),`uid`),
         INDEX `attag_uid` (`attag`(96),`uid`),
         INDEX `dfrn-id` (`dfrn-id`(64)),
         INDEX `issued-id` (`issued-id`(64)),
@@ -135,6 +192,7 @@ CREATE TABLE IF NOT EXISTS `contact` (
         INDEX `uid_network_self_lastupdate` (`uid`,`network`,`self`,`last-update`),
         INDEX `uid_lastitem` (`uid`,`last-item`),
         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 RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='contact table';
 
@@ -162,59 +220,6 @@ CREATE TABLE IF NOT EXISTS `tag` (
         INDEX `url` (`url`)
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='tags and mentions';
 
---
--- TABLE user
---
-CREATE TABLE IF NOT EXISTS `user` (
-       `uid` mediumint unsigned NOT NULL auto_increment COMMENT 'sequential ID',
-       `parent-uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'The parent user that has full control about this user',
-       `guid` varchar(64) NOT NULL DEFAULT '' COMMENT 'A unique identifier for this user',
-       `username` varchar(255) NOT NULL DEFAULT '' COMMENT 'Name that this user is known by',
-       `password` varchar(255) NOT NULL DEFAULT '' COMMENT 'encrypted password',
-       `legacy_password` boolean NOT NULL DEFAULT '0' COMMENT 'Is the password hash double-hashed?',
-       `nickname` varchar(255) NOT NULL DEFAULT '' COMMENT 'nick- and user name',
-       `email` varchar(255) NOT NULL DEFAULT '' COMMENT 'the users email address',
-       `openid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
-       `timezone` varchar(128) NOT NULL DEFAULT '' COMMENT 'PHP-legal timezone',
-       `language` varchar(32) NOT NULL DEFAULT 'en' COMMENT 'default language',
-       `register_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of registration',
-       `login_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last login',
-       `default-location` varchar(255) NOT NULL DEFAULT '' COMMENT 'Default for item.location',
-       `allow_location` boolean NOT NULL DEFAULT '0' COMMENT '1 allows to display the location',
-       `theme` varchar(255) NOT NULL DEFAULT '' COMMENT 'user theme preference',
-       `pubkey` text COMMENT 'RSA public key 4096 bit',
-       `prvkey` text COMMENT 'RSA private key 4096 bit',
-       `spubkey` text COMMENT '',
-       `sprvkey` text COMMENT '',
-       `verified` boolean NOT NULL DEFAULT '0' COMMENT 'user is verified through email',
-       `blocked` boolean NOT NULL DEFAULT '0' COMMENT '1 for user is blocked',
-       `blockwall` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to post to the profile page of the user',
-       `hidewall` boolean NOT NULL DEFAULT '0' COMMENT 'Hide profile details from unkown viewers',
-       `blocktags` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to tag the post of this user',
-       `unkmail` boolean NOT NULL DEFAULT '0' COMMENT 'Permit unknown people to send private mails to this user',
-       `cntunkmail` int unsigned NOT NULL DEFAULT 10 COMMENT '',
-       `notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT 'email notification options',
-       `page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'page/profile type',
-       `account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
-       `prvnets` boolean NOT NULL DEFAULT '0' COMMENT '',
-       `pwdreset` varchar(255) COMMENT 'Password reset request token',
-       `pwdreset_time` datetime COMMENT 'Timestamp of the last password reset request',
-       `maxreq` int unsigned NOT NULL DEFAULT 10 COMMENT '',
-       `expire` int unsigned NOT NULL DEFAULT 0 COMMENT '',
-       `account_removed` boolean NOT NULL DEFAULT '0' COMMENT 'if 1 the account is removed',
-       `account_expired` boolean NOT NULL DEFAULT '0' COMMENT '',
-       `account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp when account expires and will be deleted',
-       `expire_notification_sent` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'timestamp of last warning of account expiration',
-       `def_gid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
-       `allow_cid` mediumtext COMMENT 'default permission for this user',
-       `allow_gid` mediumtext COMMENT 'default permission for this user',
-       `deny_cid` mediumtext COMMENT 'default permission for this user',
-       `deny_gid` mediumtext COMMENT 'default permission for this user',
-       `openidserver` text COMMENT '',
-        PRIMARY KEY(`uid`),
-        INDEX `nickname` (`nickname`(32))
-) DEFAULT COLLATE utf8mb4_general_ci COMMENT='The local users';
-
 --
 -- TABLE clients
 --
@@ -241,9 +246,19 @@ CREATE TABLE IF NOT EXISTS `permissionset` (
        `deny_cid` mediumtext COMMENT 'Access Control - list of denied contact.id',
        `deny_gid` mediumtext COMMENT 'Access Control - list of denied groups',
         PRIMARY KEY(`id`),
-        INDEX `uid_allow_cid_allow_gid_deny_cid_deny_gid` (`allow_cid`(50),`allow_gid`(30),`deny_cid`(50),`deny_gid`(30))
+        INDEX `uid_allow_cid_allow_gid_deny_cid_deny_gid` (`uid`,`allow_cid`(50),`allow_gid`(30),`deny_cid`(50),`deny_gid`(30)),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='';
 
+--
+-- TABLE verb
+--
+CREATE TABLE IF NOT EXISTS `verb` (
+       `id` smallint unsigned NOT NULL auto_increment,
+       `name` varchar(100) NOT NULL DEFAULT '' COMMENT '',
+        PRIMARY KEY(`id`)
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Activity Verbs';
+
 --
 -- TABLE 2fa_app_specific_password
 --
@@ -319,6 +334,7 @@ CREATE TABLE IF NOT EXISTS `apcontact` (
         INDEX `alias` (`alias`(190)),
         INDEX `followers` (`followers`(190)),
         INDEX `baseurl` (`baseurl`(190)),
+        INDEX `sharedinbox` (`sharedinbox`(190)),
         INDEX `gsid` (`gsid`),
        FOREIGN KEY (`gsid`) REFERENCES `gserver` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='ActivityPub compatible contacts - used in the ActivityPub implementation';
@@ -447,6 +463,19 @@ CREATE TABLE IF NOT EXISTS `conversation` (
         INDEX `received` (`received`)
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Raw data and structure information for messages';
 
+--
+-- TABLE delayed-post
+--
+CREATE TABLE IF NOT EXISTS `delayed-post` (
+       `id` int unsigned NOT NULL auto_increment,
+       `uri` varchar(255) COMMENT 'URI of the post that will be distributed later',
+       `uid` mediumint unsigned COMMENT 'Owner User id',
+       `delayed` datetime COMMENT 'delay time',
+        PRIMARY KEY(`id`),
+        UNIQUE INDEX `uid_uri` (`uid`,`uri`(190)),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Posts that are about to be distributed at a later time';
+
 --
 -- TABLE diaspora-interaction
 --
@@ -484,6 +513,7 @@ CREATE TABLE IF NOT EXISTS `event` (
         PRIMARY KEY(`id`),
         INDEX `uid_start` (`uid`,`start`),
         INDEX `cid` (`cid`),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`cid`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Events';
 
@@ -615,7 +645,7 @@ CREATE TABLE IF NOT EXISTS `inbox-status` (
 CREATE TABLE IF NOT EXISTS `intro` (
        `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
        `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
-       `fid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `fid` int unsigned COMMENT '',
        `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT '',
        `knowyou` boolean NOT NULL DEFAULT '0' COMMENT '',
        `duplex` boolean NOT NULL DEFAULT '0' COMMENT '',
@@ -640,9 +670,9 @@ CREATE TABLE IF NOT EXISTS `item` (
        `uri` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `uri-id` int unsigned COMMENT 'Id of the item-uri table entry that contains the item uri',
        `uri-hash` varchar(80) NOT NULL DEFAULT '' COMMENT 'RIPEMD-128 hash from uri',
-       `parent` int unsigned NOT NULL DEFAULT 0 COMMENT 'item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item',
-       `parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT 'uri of the parent to this item',
-       `parent-uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the parent uri',
+       `parent` int unsigned COMMENT 'item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item',
+       `parent-uri` varchar(255) NOT NULL DEFAULT '' COMMENT 'uri of the top-level parent to this item',
+       `parent-uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the top-level parent uri',
        `thr-parent` varchar(255) NOT NULL DEFAULT '' COMMENT 'If the parent of this item is not the top-level item in the conversation, the uri of the immediate parent; otherwise set to parent-uri',
        `thr-parent-id` int unsigned COMMENT 'Id of the item-uri table that contains the thread parent uri',
        `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation timestamp.',
@@ -656,7 +686,6 @@ CREATE TABLE IF NOT EXISTS `item` (
        `author-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Link to the contact table with uid=0 of the author of this item',
        `causer-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Link to the contact table with uid=0 of the contact that caused the item creation',
        `icid` int unsigned COMMENT 'Id of the item-content table entry that contains the whole item content',
-       `iaid` int unsigned COMMENT 'Id of the item-activity table entry that contains the activity data',
        `vid` smallint unsigned COMMENT 'Id of the verb table entry that contains the activity verbs',
        `extid` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `post-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Post type (personal note, bookmark, ...)',
@@ -676,8 +705,9 @@ CREATE TABLE IF NOT EXISTS `item` (
        `forum_mode` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
        `psid` int unsigned COMMENT 'ID of the permission set of this post',
        `resource-id` varchar(32) NOT NULL DEFAULT '' COMMENT 'Used to link other tables to items, it identifies the linked resource (e.g. photo) and if set must also set resource_type',
-       `event-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Used to link to the event.id',
-       `attach` mediumtext COMMENT 'JSON structure representing attachments to this item',
+       `event-id` int unsigned COMMENT 'Used to link to the event.id',
+       `iaid` int unsigned COMMENT 'Deprecated',
+       `attach` mediumtext COMMENT 'Deprecated',
        `allow_cid` mediumtext COMMENT 'Deprecated',
        `allow_gid` mediumtext COMMENT 'Deprecated',
        `deny_cid` mediumtext COMMENT 'Deprecated',
@@ -736,6 +766,7 @@ CREATE TABLE IF NOT EXISTS `item` (
         INDEX `uid_eventid` (`uid`,`event-id`),
         INDEX `icid` (`icid`),
         INDEX `iaid` (`iaid`),
+        INDEX `vid` (`vid`),
         INDEX `psid_wall` (`psid`,`wall`),
         INDEX `uri-id` (`uri-id`),
         INDEX `parent-uri-id` (`parent-uri-id`),
@@ -744,7 +775,12 @@ CREATE TABLE IF NOT EXISTS `item` (
        FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`parent-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`thr-parent-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
+       FOREIGN KEY (`author-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
        FOREIGN KEY (`causer-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
+       FOREIGN KEY (`vid`) REFERENCES `verb` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`psid`) REFERENCES `permissionset` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Structure for all posts';
 
@@ -775,6 +811,7 @@ CREATE TABLE IF NOT EXISTS `item-content` (
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT 'item title',
        `content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `body` mediumtext COMMENT 'item body content',
+       `raw-body` mediumtext COMMENT 'Body without embedded media links',
        `location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
        `coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
        `language` text COMMENT 'Language information about this post',
@@ -819,8 +856,8 @@ CREATE TABLE IF NOT EXISTS `mail` (
        `from-name` varchar(255) NOT NULL DEFAULT '' COMMENT 'name of the sender',
        `from-photo` varchar(255) NOT NULL DEFAULT '' COMMENT 'contact photo link of the sender',
        `from-url` varchar(255) NOT NULL DEFAULT '' COMMENT 'profile linke of the sender',
-       `contact-id` varchar(255) NOT NULL DEFAULT '' COMMENT 'contact.id',
-       `convid` int unsigned NOT NULL DEFAULT 0 COMMENT 'conv.id',
+       `contact-id` varchar(255) COMMENT 'contact.id',
+       `convid` int unsigned COMMENT 'conv.id',
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `body` mediumtext COMMENT '',
        `seen` boolean NOT NULL DEFAULT '0' COMMENT 'if message visited it is 1',
@@ -888,8 +925,8 @@ CREATE TABLE IF NOT EXISTS `notify` (
        `msg` mediumtext COMMENT '',
        `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'Owner User id',
        `link` varchar(255) NOT NULL DEFAULT '' COMMENT '',
-       `iid` int unsigned NOT NULL DEFAULT 0 COMMENT 'item.id',
-       `parent` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `iid` int unsigned COMMENT 'item.id',
+       `parent` int unsigned COMMENT '',
        `uri-id` int unsigned COMMENT 'Item-uri id of the related post',
        `parent-uri-id` int unsigned COMMENT 'Item-uri id of the parent of the related post',
        `seen` boolean NOT NULL DEFAULT '0' COMMENT '',
@@ -901,7 +938,11 @@ CREATE TABLE IF NOT EXISTS `notify` (
         INDEX `seen_uid_date` (`seen`,`uid`,`date`),
         INDEX `uid_date` (`uid`,`date`),
         INDEX `uid_type_link` (`uid`,`type`,`link`(190)),
-       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
+        INDEX `uri-id` (`uri-id`),
+        INDEX `parent-uri-id` (`parent-uri-id`),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`parent-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='notifications';
 
 --
@@ -910,15 +951,18 @@ CREATE TABLE IF NOT EXISTS `notify` (
 CREATE TABLE IF NOT EXISTS `notify-threads` (
        `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
        `notify-id` int unsigned NOT NULL DEFAULT 0 COMMENT '',
-       `master-parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `master-parent-item` int unsigned COMMENT '',
        `master-parent-uri-id` int unsigned COMMENT 'Item-uri id of the parent of the related post',
        `parent-item` int unsigned NOT NULL DEFAULT 0 COMMENT '',
        `receiver-uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
         PRIMARY KEY(`id`),
+        INDEX `master-parent-item` (`master-parent-item`),
         INDEX `master-parent-uri-id` (`master-parent-uri-id`),
         INDEX `receiver-uid` (`receiver-uid`),
         INDEX `notify-id` (`notify-id`),
        FOREIGN KEY (`notify-id`) REFERENCES `notify` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`master-parent-item`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`master-parent-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`receiver-uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='';
 
@@ -945,7 +989,8 @@ CREATE TABLE IF NOT EXISTS `openwebauth-token` (
        `meta` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of creation',
         PRIMARY KEY(`id`),
-        INDEX `uid` (`uid`)
+        INDEX `uid` (`uid`),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Store OpenWebAuth token to verify contacts';
 
 --
@@ -981,11 +1026,11 @@ CREATE TABLE IF NOT EXISTS `participation` (
 -- TABLE pconfig
 --
 CREATE TABLE IF NOT EXISTS `pconfig` (
-       `id` int unsigned NOT NULL auto_increment COMMENT '',
+       `id` int unsigned NOT NULL auto_increment COMMENT 'Primary key',
        `uid` mediumint unsigned NOT NULL DEFAULT 0 COMMENT 'User id',
-       `cat` varbinary(50) NOT NULL DEFAULT '' COMMENT '',
-       `k` varbinary(100) NOT NULL DEFAULT '' COMMENT '',
-       `v` mediumtext COMMENT '',
+       `cat` varchar(50) NOT NULL DEFAULT '' COMMENT 'Category',
+       `k` varchar(100) NOT NULL DEFAULT '' COMMENT 'Key',
+       `v` mediumtext COMMENT 'Value',
         PRIMARY KEY(`id`),
         UNIQUE INDEX `uid_cat_k` (`uid`,`cat`,`k`),
        FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
@@ -1028,6 +1073,7 @@ CREATE TABLE IF NOT EXISTS `photo` (
         INDEX `uid_album_scale_created` (`uid`,`album`(32),`scale`,`created`),
         INDEX `uid_album_resource-id_created` (`uid`,`album`(32),`resource-id`,`created`),
         INDEX `resource-id` (`resource-id`),
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE RESTRICT,
        FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='photo storage';
 
@@ -1041,7 +1087,9 @@ CREATE TABLE IF NOT EXISTS `post-category` (
        `tid` int unsigned NOT NULL DEFAULT 0 COMMENT '',
         PRIMARY KEY(`uri-id`,`uid`,`type`,`tid`),
         INDEX `uri-id` (`tid`),
+        INDEX `uid` (`uid`),
        FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
        FOREIGN KEY (`tid`) REFERENCES `tag` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='post relation to categories';
 
@@ -1064,6 +1112,27 @@ 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-media
+--
+CREATE TABLE IF NOT EXISTS `post-media` (
+       `id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
+       `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
+       `url` varbinary(511) NOT NULL COMMENT 'Media URL',
+       `type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Media type',
+       `mimetype` varchar(60) COMMENT '',
+       `height` smallint unsigned COMMENT 'Height of the media',
+       `width` smallint unsigned COMMENT 'Width of the media',
+       `size` int unsigned COMMENT 'Media size',
+       `preview` varbinary(255) COMMENT 'Preview URL',
+       `preview-height` smallint unsigned COMMENT 'Height of the preview picture',
+       `preview-width` smallint unsigned COMMENT 'Width of the preview picture',
+       `description` text COMMENT '',
+        PRIMARY KEY(`id`),
+        UNIQUE INDEX `uri-id-url` (`uri-id`,`url`),
+       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Attached media';
+
 --
 -- TABLE post-tag
 --
@@ -1080,6 +1149,29 @@ CREATE TABLE IF NOT EXISTS `post-tag` (
        FOREIGN KEY (`cid`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='post relation to tags';
 
+--
+-- TABLE post-user
+--
+CREATE TABLE IF NOT EXISTS `post-user` (
+       `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
+       `uid` mediumint unsigned NOT NULL COMMENT 'Owner id which owns this copy of the item',
+       `protocol` tinyint unsigned COMMENT 'Protocol used to deliver the item for this user',
+       `contact-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'contact.id',
+       `unseen` boolean NOT NULL DEFAULT '1' COMMENT 'post has not been seen',
+       `hidden` boolean NOT NULL DEFAULT '0' COMMENT 'Marker to hide the post from the user',
+       `notification-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
+       `origin` boolean NOT NULL DEFAULT '0' COMMENT 'item originated at this site',
+       `psid` int unsigned COMMENT 'ID of the permission set of this post',
+        PRIMARY KEY(`uid`,`uri-id`),
+        INDEX `uri-id` (`uri-id`),
+        INDEX `contact-id` (`contact-id`),
+        INDEX `psid` (`psid`),
+       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`psid`) REFERENCES `permissionset` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
+) DEFAULT COLLATE utf8mb4_general_ci COMMENT='User specific post data';
+
 --
 -- TABLE process
 --
@@ -1294,7 +1386,11 @@ CREATE TABLE IF NOT EXISTS `thread` (
         INDEX `private_wall_origin_commented` (`private`,`wall`,`origin`,`commented`),
         INDEX `uri-id` (`uri-id`),
        FOREIGN KEY (`iid`) REFERENCES `item` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
-       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
+       FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`contact-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
+       FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
+       FOREIGN KEY (`author-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Thread related data';
 
 --
@@ -1356,15 +1452,6 @@ CREATE TABLE IF NOT EXISTS `user-item` (
        FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='User specific item data';
 
---
--- TABLE verb
---
-CREATE TABLE IF NOT EXISTS `verb` (
-       `id` smallint unsigned NOT NULL auto_increment,
-       `name` varchar(100) NOT NULL DEFAULT '' COMMENT '',
-        PRIMARY KEY(`id`)
-) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Activity Verbs';
-
 --
 -- TABLE worker-ipc
 --
@@ -1379,7 +1466,8 @@ CREATE TABLE IF NOT EXISTS `worker-ipc` (
 --
 CREATE TABLE IF NOT EXISTS `workerqueue` (
        `id` int unsigned NOT NULL auto_increment COMMENT 'Auto incremented worker task id',
-       `parameter` mediumtext COMMENT 'Task command',
+       `command` varchar(100) COMMENT 'Task command',
+       `parameter` mediumtext COMMENT 'Task parameter',
        `priority` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Task priority',
        `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'Creation date',
        `pid` int unsigned NOT NULL DEFAULT 0 COMMENT 'Process id of the worker',
@@ -1388,9 +1476,10 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
        `retrial` tinyint NOT NULL DEFAULT 0 COMMENT 'Retrial counter',
        `done` boolean NOT NULL DEFAULT '0' COMMENT 'Marked 1 when the task was done - will be deleted later',
         PRIMARY KEY(`id`),
-        INDEX `done_parameter` (`done`,`parameter`(64)),
+        INDEX `command` (`command`),
+        INDEX `done_command_parameter` (`done`,`command`,`parameter`(64)),
         INDEX `done_executed` (`done`,`executed`),
-        INDEX `done_priority_created` (`done`,`priority`,`created`),
+        INDEX `done_priority_retrial_created` (`done`,`priority`,`retrial`,`created`),
         INDEX `done_priority_next_try` (`done`,`priority`,`next_try`),
         INDEX `done_pid_next_try` (`done`,`pid`,`next_try`),
         INDEX `done_pid_retrial` (`done`,`pid`,`retrial`),
@@ -1552,7 +1641,7 @@ CREATE VIEW `owner-view` AS SELECT
        `contact`.`term-date` AS `term-date`,
        `contact`.`last-item` AS `last-item`,
        `contact`.`priority` AS `priority`,
-       `contact`.`blocked` AS `blocked`,
+       `user`.`blocked` AS `blocked`,
        `contact`.`block_reason` AS `block_reason`,
        `contact`.`readonly` AS `readonly`,
        `contact`.`writable` AS `writable`,