[Database version 1402] Rework parsed_url table

- Allow arbitrary-sized URL
- Use URL hash for primary key instead of truncated URL, requires table truncation pre update
- Add expires field
This commit is contained in:
Hypolite Petovan 2021-02-16 10:10:53 -05:00
parent 1b90686fcd
commit 7de03eb13f
3 changed files with 23 additions and 8 deletions

View file

@ -1,6 +1,6 @@
-- ------------------------------------------
-- Friendica 2021.03-dev (Red Hot Poker)
-- DB_UPDATE_VERSION 1402
-- DB_UPDATE_VERSION 1403
-- ------------------------------------------
@ -959,15 +959,17 @@ CREATE TABLE IF NOT EXISTS `openwebauth-token` (
-- TABLE parsed_url
--
CREATE TABLE IF NOT EXISTS `parsed_url` (
`url` varbinary(255) NOT NULL COMMENT 'page url',
`url_hash` binary(64) NOT NULL COMMENT 'page url hash',
`guessing` boolean NOT NULL DEFAULT '0' COMMENT 'is the \'guessing\' mode active?',
`oembed` boolean NOT NULL DEFAULT '0' COMMENT 'is the data the result of oembed?',
`url` text NOT NULL COMMENT 'page url',
`content` mediumtext COMMENT 'page data',
`created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of creation',
PRIMARY KEY(`url`,`guessing`,`oembed`),
INDEX `created` (`created`)
`expires` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT 'datetime of expiration',
PRIMARY KEY(`url_hash`,`guessing`,`oembed`),
INDEX `created` (`created`),
INDEX `expires` (`expires`)
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='cache for \'parse_url\' queries';
--
-- TABLE pconfig
--

View file

@ -55,7 +55,7 @@
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
define('DB_UPDATE_VERSION', 1402);
define('DB_UPDATE_VERSION', 1403);
}
return [
@ -1019,15 +1019,18 @@ return [
"parsed_url" => [
"comment" => "cache for 'parse_url' queries",
"fields" => [
"url" => ["type" => "varbinary(255)", "not null" => "1", "primary" => "1", "comment" => "page url"],
"url_hash" => ["type" => "binary(64)", "not null" => "1", "primary" => "1", "comment" => "page url hash"],
"guessing" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the 'guessing' mode active?"],
"oembed" => ["type" => "boolean", "not null" => "1", "default" => "0", "primary" => "1", "comment" => "is the data the result of oembed?"],
"url" => ["type" => "text", "not null" => "1", "comment" => "page url"],
"content" => ["type" => "mediumtext", "comment" => "page data"],
"created" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of creation"],
"expires" => ["type" => "datetime", "not null" => "1", "default" => DBA::NULL_DATETIME, "comment" => "datetime of expiration"],
],
"indexes" => [
"PRIMARY" => ["url", "guessing", "oembed"],
"PRIMARY" => ["url_hash", "guessing", "oembed"],
"created" => ["created"],
"expires" => ["expires"],
]
],
"pconfig" => [

View file

@ -817,3 +817,13 @@ function update_1400()
return Update::SUCCESS;
}
function pre_update_1403()
{
// Necessary before a primary key change
if (!DBA::e("DROP TABLE `parsed_url`")) {
return Update::FAILED;
}
return Update::SUCCESS;
}