]> git.mxchange.org Git - friendica.git/commitdiff
Some more foreign keys added
authorMichael <heluecht@pirati.ca>
Thu, 19 Nov 2020 06:26:30 +0000 (06:26 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 19 Nov 2020 06:26:30 +0000 (06:26 +0000)
database.sql
include/enotify.php
src/Database/DBStructure.php
static/dbstructure.config.php
update.php

index e2b333a6da58b4444c72c967533e0899b6fde291..0d60666204f19ca3a5a2ad3902711aed5f6fd27e 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2020.12-dev (Red Hot Poker)
--- DB_UPDATE_VERSION 1376
+-- DB_UPDATE_VERSION 1377
 -- ------------------------------------------
 
 
@@ -620,7 +620,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 '',
@@ -645,7 +645,7 @@ 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` 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',
@@ -661,7 +661,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, ...)',
@@ -681,7 +680,8 @@ 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',
+       `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',
@@ -741,6 +741,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`),
@@ -749,8 +750,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';
 
@@ -826,8 +831,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',
@@ -895,8 +900,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 '',
@@ -908,7 +913,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';
 
 --
@@ -917,15 +926,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='';
 
@@ -1349,7 +1361,10 @@ CREATE TABLE IF NOT EXISTS `thread` (
         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 (`uid`) REFERENCES `user` (`uid`) 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';
 
 --
index b7fe18a18fe4b6cb9e154f9b68e20dbd592b7cce..27eb871065384adf0f96516d114deffd37ea3031 100644 (file)
@@ -476,21 +476,30 @@ function notification($params)
        $notify_id = 0;
 
        if ($show_in_notification_page) {
-               $notification = DI::notify()->insert([
+               $fields = [
                        'name'          => $params['source_name'] ?? '',
                        'name_cache'    => substr(strip_tags(BBCode::convert($params['source_name'])), 0, 255),
                        'url'           => $params['source_link'] ?? '',
                        'photo'         => $params['source_photo'] ?? '',
                        'link'          => $itemlink ?? '',
                        'uid'           => $params['uid'] ?? 0,
-                       'iid'           => $item_id,
-                       'uri-id'        => $uri_id,
-                       'parent'        => $parent_id,
-                       'parent-uri-id' => $parent_uri_id,
                        'type'          => $params['type'] ?? '',
                        'verb'          => $params['verb'] ?? '',
                        'otype'         => $params['otype'] ?? '',
-               ]);
+               ];
+               if (!empty($item_id)) {
+                       $fields['iid'] = $item_id;
+               }
+               if (!empty($uri_id)) {
+                       $fields['uri-id'] = $uri_id;
+               }
+               if (!empty($item_id)) {
+                       $fields['parent'] = $parent_id;
+               }
+               if (!empty($item_id)) {
+                       $fields['parent-uri-id'] = $parent_uri_id;
+               }
+               $notification = DI::notify()->insert($fields);
 
                // Notification insertion can be intercepted by an addon registering the 'enotify_store' hook
                if (!$notification) {
index 6f3fe5dba5b2e718741ff44e03f155e1d1f6e3bd..98d167c2fe82a33e8bb5cd8271f2569bf0349d5a 100644 (file)
@@ -1054,6 +1054,14 @@ class DBStructure
                        }
                }
 
+               if (self::existsTable('verb') && !DBA::exists('verb', ['id' => 0])) {
+                       DBA::insert('verb', ['name' => '']);
+                       $lastid = DBA::lastInsertId();
+                       if ($lastid != 0) {
+                               DBA::update('verb', ['id' => 0], ['id' => $lastid]);
+                       }
+               }
+
                if (self::existsTable('user') && !DBA::exists('user', ['uid' => 0])) {
                        $user = [
                                "verified" => true,
index e952675fefa92aba747ed3b6b20f06773afb84ba..990835fe8b12cce8668b213c773c21403fe7cf7a 100644 (file)
@@ -55,7 +55,7 @@
 use Friendica\Database\DBA;
 
 if (!defined('DB_UPDATE_VERSION')) {
-       define('DB_UPDATE_VERSION', 1376);
+       define('DB_UPDATE_VERSION', 1377);
 }
 
 return [
@@ -686,7 +686,7 @@ return [
                "fields" => [
                        "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
                        "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "comment" => "User id"],
-                       "fid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["fcontact" => "id"], "comment" => ""],
+                       "fid" => ["type" => "int unsigned", "relation" => ["fcontact" => "id"], "comment" => ""],
                        "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => ""],
                        "knowyou" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
                        "duplex" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
@@ -710,7 +710,7 @@ return [
                        "uri" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                        "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
                        "uri-hash" => ["type" => "varchar(80)", "not null" => "1", "default" => "", "comment" => "RIPEMD-128 hash from uri"],
-                       "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "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" => ["type" => "int unsigned", "relation" => ["item" => "id"], "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" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "uri of the top-level parent to this item"],
                        "parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table that contains the top-level parent uri"],
                        "thr-parent" => ["type" => "varchar(255)", "not null" => "1", "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"],
@@ -722,12 +722,11 @@ return [
                        "changed" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "Date that something in the conversation changed, indicating clients should fetch the conversation again"],
                        "gravity" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => ""],
                        "network" => ["type" => "char(4)", "not null" => "1", "default" => "", "comment" => "Network from where the item comes from"],
-                       "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the owner of this item"],
-                       "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Link to the contact table with uid=0 of the author of this item"],
+                       "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Link to the contact table with uid=0 of the owner of this item"],
+                       "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Link to the contact table with uid=0 of the author of this item"],
                        "causer-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Link to the contact table with uid=0 of the contact that caused the item creation"],
                        "icid" => ["type" => "int unsigned", "relation" => ["item-content" => "id"], "comment" => "Id of the item-content table entry that contains the whole item content"],
-                       "iaid" => ["type" => "int unsigned", "relation" => ["item-activity" => "id"], "comment" => "Id of the item-activity table entry that contains the activity data"],
-                       "vid" => ["type" => "smallint unsigned", "relation" => ["verb" => "id"], "comment" => "Id of the verb table entry that contains the activity verbs"],
+                       "vid" => ["type" => "smallint unsigned", "foreign" => ["verb" => "id", "on delete" => "restrict"], "comment" => "Id of the verb table entry that contains the activity verbs"],
                        "extid" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                        "post-type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Post type (personal note, bookmark, ...)"],
                        "global" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
@@ -737,7 +736,7 @@ return [
                        "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item has been deleted"],
                        // User specific fields. Eventually they will move to user-item
                        "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "comment" => "Owner id which owns this copy of the item"],
-                       "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+                       "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => "contact.id"],
                        "wall" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "This item was posted to the wall of uid"],
                        "origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "item originated at this site"],
                        "pubmail" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
@@ -748,8 +747,9 @@ return [
                        "psid" => ["type" => "int unsigned", "foreign" => ["permissionset" => "id", "on delete" => "restrict"], "comment" => "ID of the permission set of this post"],
                        // It has to be decided whether these fields belong to the user or the structure
                        "resource-id" => ["type" => "varchar(32)", "not null" => "1", "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" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["event" => "id"], "comment" => "Used to link to the event.id"],
+                       "event-id" => ["type" => "int unsigned", "relation" => ["event" => "id"], "comment" => "Used to link to the event.id"],
                        // Deprecated fields. Will be removed in upcoming versions
+                       "iaid" => ["type" => "int unsigned", "comment" => "Deprecated"],
                        "attach" => ["type" => "mediumtext", "comment" => "Deprecated"],
                        "allow_cid" => ["type" => "mediumtext", "comment" => "Deprecated"],
                        "allow_gid" => ["type" => "mediumtext", "comment" => "Deprecated"],
@@ -811,6 +811,7 @@ return [
                        "uid_eventid" => ["uid", "event-id"],
                        "icid" => ["icid"],
                        "iaid" => ["iaid"],
+                       "vid" => ["vid"],
                        "psid_wall" => ["psid", "wall"],
                        "uri-id" => ["uri-id"],
                        "parent-uri-id" => ["parent-uri-id"],
@@ -890,8 +891,8 @@ return [
                        "from-name" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "name of the sender"],
                        "from-photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "contact photo link of the sender"],
                        "from-url" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => "profile linke of the sender"],
-                       "contact-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "relation" => ["contact" => "id"], "comment" => "contact.id"],
-                       "convid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["conv" => "id"], "comment" => "conv.id"],
+                       "contact-id" => ["type" => "varchar(255)", "relation" => ["contact" => "id"], "comment" => "contact.id"],
+                       "convid" => ["type" => "int unsigned", "relation" => ["conv" => "id"], "comment" => "conv.id"],
                        "title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                        "body" => ["type" => "mediumtext", "comment" => ""],
                        "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "if message visited it is 1"],
@@ -958,10 +959,10 @@ return [
                        "msg" => ["type" => "mediumtext", "comment" => ""],
                        "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "comment" => "Owner User id"],
                        "link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
-                       "iid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => "item.id"],
-                       "parent" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
-                       "uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Item-uri id of the related post"],
-                       "parent-uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"],
+                       "iid" => ["type" => "int unsigned", "relation" => ["item" => "id"], "comment" => "item.id"],
+                       "parent" => ["type" => "int unsigned", "relation" => ["item" => "id"], "comment" => ""],
+                       "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the related post"],
+                       "parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"],
                        "seen" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
                        "verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""],
                        "otype" => ["type" => "varchar(10)", "not null" => "1", "default" => "", "comment" => ""],
@@ -973,6 +974,8 @@ return [
                        "seen_uid_date" => ["seen", "uid", "date"],
                        "uid_date" => ["uid", "date"],
                        "uid_type_link" => ["uid", "type", "link(190)"],
+                       "uri-id" => ["uri-id"],
+                       "parent-uri-id" => ["parent-uri-id"],
                ]
        ],
        "notify-threads" => [
@@ -980,14 +983,15 @@ return [
                "fields" => [
                        "id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
                        "notify-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["notify" => "id"], "comment" => ""],
-                       "master-parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["item" => "id"], "comment" => ""],
-                       "master-parent-uri-id" => ["type" => "int unsigned", "relation" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"],
+                       "master-parent-item" => ["type" => "int unsigned", "foreign" => ["item" => "id"], "comment" => ""],
+                       "master-parent-uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Item-uri id of the parent of the related post"],
                        "parent-item" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "comment" => ""],
                        "receiver-uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"],
                                "comment" => "User id"],
                ],
                "indexes" => [
                        "PRIMARY" => ["id"],
+                       "master-parent-item" => ["master-parent-item"],
                        "master-parent-uri-id" => ["master-parent-uri-id"],
                        "receiver-uid" => ["receiver-uid"],
                        "notify-id" => ["notify-id"],
@@ -1368,9 +1372,9 @@ return [
                                "comment" => "sequential ID"],
                        "uri-id" => ["type" => "int unsigned", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
                        "uid" => ["type" => "mediumint unsigned", "not null" => "1", "default" => "0", "foreign" => ["user" => "uid"], "comment" => "User id"],
-                       "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => ""],
-                       "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item owner"],
-                       "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "relation" => ["contact" => "id"], "comment" => "Item author"],
+                       "contact-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => ""],
+                       "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"],
+                       "author-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item author"],
                        "created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
                        "edited" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
                        "commented" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""],
index 3544275c003ad9f928fd4608e8c0331ef66c02fa..94cb145c6480e20f69eff63bcac8e4fc71f21d80 100644 (file)
@@ -788,11 +788,74 @@ function pre_update_1376()
                return Update::FAILED;
        }
 
+       Photo::delete(["NOT `uid` IN (SELECT `uid` FROM `user`)"]);
+
        if (!DBA::e("DELETE FROM `contact` WHERE NOT `uid` IN (SELECT `uid` FROM `user`)")) {
                return Update::FAILED;
        }
 
-       Photo::delete(["NOT `uid` IN (SELECT `uid` FROM `user`)"]);
+       return Update::SUCCESS;
+}
+
+function pre_update_1377()
+{
+       DBStructure::checkInitialValues();
+
+       if (!DBA::e("DELETE FROM `item` WHERE NOT `parent` IN (SELECT `id` FROM `item`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `item` WHERE NOT `author-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `item` WHERE NOT `owner-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("UPDATE `item` SET `contact-id` = `owner-id` WHERE NOT `contact-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `thread` WHERE NOT `author-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `thread` WHERE NOT `owner-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("UPDATE `thread` SET `contact-id` = `owner-id` WHERE NOT `contact-id` IN (SELECT `id` FROM `contact`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("UPDATE `notify` SET `uri-id` = NULL WHERE `uri-id` = 0")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `notify` WHERE `uri-id` NOT IN (SELECT `id` FROM `item-uri`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("UPDATE `notify` SET `parent-uri-id` = NULL WHERE `parent-uri-id` = 0")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `notify` WHERE `parent-uri-id` NOT IN (SELECT `id` FROM `item-uri`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("UPDATE `notify-threads` SET `master-parent-uri-id` = NULL WHERE `master-parent-uri-id` = 0")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `notify-threads` WHERE `master-parent-uri-id` NOT IN (SELECT `id` FROM `item-uri`)")) {
+               return Update::FAILED;
+       }
+
+       if (!DBA::e("DELETE FROM `notify-threads` WHERE `master-parent-item` NOT IN (SELECT `id` FROM `item`)")) {
+               return Update::FAILED;
+       }
 
        return Update::SUCCESS;
 }