Add Database storage backend
This storage store files data in a separate database table
This commit is contained in:
parent
6e85a18678
commit
e5c2d4e2f8
|
@ -34,7 +34,7 @@
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
if (!defined('DB_UPDATE_VERSION')) {
|
if (!defined('DB_UPDATE_VERSION')) {
|
||||||
define('DB_UPDATE_VERSION', 1294);
|
define('DB_UPDATE_VERSION', 1295);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -1380,5 +1380,16 @@ return [
|
||||||
"done_priority_next_try" => ["done", "priority", "next_try"],
|
"done_priority_next_try" => ["done", "priority", "next_try"],
|
||||||
"done_next_try" => ["done", "next_try"]
|
"done_next_try" => ["done", "next_try"]
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"storage" => [
|
||||||
|
"comment" => "Data stored by Database storage backend",
|
||||||
|
"fields" => [
|
||||||
|
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "Auto incremented image data id"],
|
||||||
|
"data" => ["type" => "longblob", "not null" => "1", "comment" => "file data"]
|
||||||
|
],
|
||||||
|
"indexes" => [
|
||||||
|
"PRIMARY" => ["id"]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
11
database.sql
11
database.sql
|
@ -1,6 +1,6 @@
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
-- Friendica 2019.03-dev (The Tazmans Flax-lily)
|
-- Friendica 2019.03-dev (The Tazmans Flax-lily)
|
||||||
-- DB_UPDATE_VERSION 1294
|
-- DB_UPDATE_VERSION 1295
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -1274,4 +1274,13 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
|
||||||
INDEX `done_next_try` (`done`,`next_try`)
|
INDEX `done_next_try` (`done`,`next_try`)
|
||||||
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Background tasks queue entries';
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Background tasks queue entries';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TABLE storage
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS `storage` (
|
||||||
|
`id` int unsigned NOT NULL auto_increment COMMENT 'Auto incremented image data id',
|
||||||
|
`data` longblob NOT NULL COMMENT 'file data',
|
||||||
|
PRIMARY KEY(`id`)
|
||||||
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Data stored by Database storage backend';
|
||||||
|
|
||||||
|
|
||||||
|
|
54
src/Model/Storage/Database.php
Normal file
54
src/Model/Storage/Database.php
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file src/Model/Storage/Filesystem.php
|
||||||
|
* @brief Storage backend system
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Friendica\Model\Storage;
|
||||||
|
|
||||||
|
use Friendica\Core\Logger;
|
||||||
|
use Friendica\Core\L10n;
|
||||||
|
use Friendica\Core\System;
|
||||||
|
use Friendica\Database\DBA;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Database based storage system
|
||||||
|
*
|
||||||
|
* This class manage data stored in database table.
|
||||||
|
*/
|
||||||
|
class Database implements IStorage
|
||||||
|
{
|
||||||
|
public static function get($ref)
|
||||||
|
{
|
||||||
|
$r = DBA::selectFirst('storage', ['data'], ['id' => $ref]);
|
||||||
|
if (!DBA::isResult($r)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $r['data'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function put($data, $ref = '')
|
||||||
|
{
|
||||||
|
if ($ref !== '') {
|
||||||
|
$r = DBA::update('storage', ['data' => $data], ['id' => $ref]);
|
||||||
|
if ($r === false) {
|
||||||
|
Logger::log('Failed to update data with id ' . $ref . ': ' . DBA::errorNo() . ' : ' . DBA::errorMessage());
|
||||||
|
throw new StorageException(L10n::t('Database storage failed to update %s', $ref));
|
||||||
|
}
|
||||||
|
return $ref;
|
||||||
|
} else {
|
||||||
|
$r = DBA::insert('storage', ['data' => $data]);
|
||||||
|
if ($r === false) {
|
||||||
|
Logger::log('Failed to insert data: ' . DBA::errorNo() . ' : ' . DBA::errorMessage());
|
||||||
|
throw new StorageException(L10n::t('Database storage failed to insert data'));
|
||||||
|
}
|
||||||
|
return DBA::lastInsertId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function delete($ref)
|
||||||
|
{
|
||||||
|
return DBA::delete('storage', ['id' => $ref]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue