From 8c9e4c46a075a418935dbd604fae92803fad4e09 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 10 Sep 2023 03:47:06 +0000 Subject: [PATCH] "cascade" for "post-engagement" / fixes for "report" definition --- database.sql | 6 +++--- doc/database/db_report.md | 36 +++++++++++++++++------------------ src/Database/DBA.php | 5 +++++ src/Database/DBStructure.php | 4 ++-- static/dbstructure.config.php | 6 +++--- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/database.sql b/database.sql index 7da771e0ea..6a7cb50e2c 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- Friendica 2023.09-dev (Giant Rhubarb) --- DB_UPDATE_VERSION 1531 +-- DB_UPDATE_VERSION 1532 -- ------------------------------------------ @@ -1316,7 +1316,7 @@ CREATE TABLE IF NOT EXISTS `post-engagement` ( 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 + FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Engagement data per post'; -- @@ -1741,7 +1741,7 @@ CREATE TABLE IF NOT EXISTS `report` ( `assigned-uid` mediumint unsigned COMMENT 'Assigned moderator user', `status` tinyint unsigned NOT NULL COMMENT 'Status of the report, one of Entity\Report::STATUS_*', `resolution` tinyint unsigned COMMENT 'Resolution of the report, one of Entity\Report::RESOLUTION_*', - `created` datetime(6) NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '', + `created` datetime(6) NOT NULL DEFAULT '0001-01-01 00:00:00.000000' COMMENT '', `edited` datetime(6) COMMENT 'Last time the report has been edited', PRIMARY KEY(`id`), INDEX `uid` (`uid`), diff --git a/doc/database/db_report.md b/doc/database/db_report.md index c2890e25a9..cae4a2f33b 100644 --- a/doc/database/db_report.md +++ b/doc/database/db_report.md @@ -6,24 +6,24 @@ Table report Fields ------ -| Field | Description | Type | Null | Key | Default | Extra | -| --------------- | ------------------------------------------------------------ | ------------------ | ---- | --- | ------------------- | -------------- | -| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | -| uid | Reporting user | mediumint unsigned | YES | | NULL | | -| reporter-id | Reporting contact | int unsigned | YES | | NULL | | -| cid | Reported contact | int unsigned | NO | | NULL | | -| gsid | Reported contact server | int unsigned | YES | | NULL | | -| comment | Report | text | YES | | NULL | | -| category-id | Report category, one of Entity\Report::CATEGORY_* | int unsigned | NO | | 1 | | -| forward | Forward the report to the remote server | boolean | YES | | NULL | | -| public-remarks | Remarks shared with the reporter | text | YES | | NULL | | -| private-remarks | Remarks shared with the moderation team | text | YES | | NULL | | -| last-editor-uid | Last editor user | mediumint unsigned | YES | | NULL | | -| assigned-uid | Assigned moderator user | mediumint unsigned | YES | | NULL | | -| status | Status of the report, one of Entity\Report::STATUS_* | tinyint unsigned | NO | | NULL | | -| resolution | Resolution of the report, one of Entity\Report::RESOLUTION_* | tinyint unsigned | YES | | NULL | | -| created | | datetime(6) | NO | | 0001-01-01 00:00:00 | | -| edited | Last time the report has been edited | datetime(6) | YES | | NULL | | +| Field | Description | Type | Null | Key | Default | Extra | +| --------------- | ------------------------------------------------------------ | ------------------ | ---- | --- | -------------------------- | -------------- | +| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment | +| uid | Reporting user | mediumint unsigned | YES | | NULL | | +| reporter-id | Reporting contact | int unsigned | YES | | NULL | | +| cid | Reported contact | int unsigned | NO | | NULL | | +| gsid | Reported contact server | int unsigned | YES | | NULL | | +| comment | Report | text | YES | | NULL | | +| category-id | Report category, one of Entity\Report::CATEGORY_* | int unsigned | NO | | 1 | | +| forward | Forward the report to the remote server | boolean | YES | | NULL | | +| public-remarks | Remarks shared with the reporter | text | YES | | NULL | | +| private-remarks | Remarks shared with the moderation team | text | YES | | NULL | | +| last-editor-uid | Last editor user | mediumint unsigned | YES | | NULL | | +| assigned-uid | Assigned moderator user | mediumint unsigned | YES | | NULL | | +| status | Status of the report, one of Entity\Report::STATUS_* | tinyint unsigned | NO | | NULL | | +| resolution | Resolution of the report, one of Entity\Report::RESOLUTION_* | tinyint unsigned | YES | | NULL | | +| created | | datetime(6) | NO | | 0001-01-01 00:00:00.000000 | | +| edited | Last time the report has been edited | datetime(6) | YES | | NULL | | Indexes ------------ diff --git a/src/Database/DBA.php b/src/Database/DBA.php index 930e60472f..0c0fd0f80d 100644 --- a/src/Database/DBA.php +++ b/src/Database/DBA.php @@ -42,6 +42,11 @@ class DBA */ const NULL_DATETIME = '0001-01-01 00:00:00'; + /** + * Lowest possible datetime(6) value + */ + const NULL_DATETIME6 = '0001-01-01 00:00:00.000000'; + public static function connect(): bool { return DI::dba()->connect(); diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index 6291d0ffc4..6ac52ea9c3 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -284,7 +284,7 @@ class DBStructure echo $sql; } if ($action) { - $r = DBA::e($sql); + $r = DBA::e(str_replace('\\', '\\\\', $sql)); if (!DBA::isResult($r)) { $errors .= self::printUpdateError($name); } @@ -493,7 +493,7 @@ class DBStructure DI::config()->set('system', 'maintenance_reason', DI::l10n()->t('%s: updating %s table.', DateTimeFormat::utcNow() . ' ' . date('e'), $name)); } - $r = DBA::e($sql3); + $r = DBA::e(str_replace('\\', '\\\\', $sql3)); if (!DBA::isResult($r)) { $errors .= self::printUpdateError($sql3); } diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 318a836efd..cc03bb98e4 100644 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -56,7 +56,7 @@ use Friendica\Database\DBA; // This file is required several times during the test in DbaDefinition which justifies this condition if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1531); + define('DB_UPDATE_VERSION', 1532); } return [ @@ -1328,7 +1328,7 @@ return [ "comment" => "Engagement data per post", "fields" => [ "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"], - "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"], + "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id"], "comment" => "Item owner"], "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Person, organisation, news, community, relay"], "media-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Type of media in a bit array (1 = image, 2 = video, 4 = audio"], "language" => ["type" => "varbinary(128)", "comment" => "Language information about this post"], @@ -1736,7 +1736,7 @@ return [ "assigned-uid" => ["type" => "mediumint unsigned", "foreign" => ["user" => "uid"], "comment" => "Assigned moderator user"], "status" => ["type" => "tinyint unsigned", "not null" => "1", "comment" => "Status of the report, one of Entity\Report::STATUS_*"], "resolution" => ["type" => "tinyint unsigned", "comment" => "Resolution of the report, one of Entity\Report::RESOLUTION_*"], - "created" => ["type" => "datetime(6)", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => ""], + "created" => ["type" => "datetime(6)", "not null" => "1", "default" => DBA::NULL_DATETIME6, "comment" => ""], "edited" => ["type" => "datetime(6)", "comment" => "Last time the report has been edited"], ], "indexes" => [