diff --git a/config/dbstructure.config.php b/config/dbstructure.config.php index 0c24d8a73..ac9127f76 100644 --- a/config/dbstructure.config.php +++ b/config/dbstructure.config.php @@ -34,7 +34,7 @@ use Friendica\Database\DBA; if (!defined('DB_UPDATE_VERSION')) { - define('DB_UPDATE_VERSION', 1294); + define('DB_UPDATE_VERSION', 1295); } return [ @@ -1380,5 +1380,16 @@ return [ "done_priority_next_try" => ["done", "priority", "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"] + ] ] ]; + diff --git a/database.sql b/database.sql index 208714908..1143ac6d9 100644 --- a/database.sql +++ b/database.sql @@ -1,6 +1,6 @@ -- ------------------------------------------ -- 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`) ) 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'; + diff --git a/src/Model/Storage/Database.php b/src/Model/Storage/Database.php new file mode 100644 index 000000000..39a1cb64a --- /dev/null +++ b/src/Model/Storage/Database.php @@ -0,0 +1,54 @@ + $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]); + } +} \ No newline at end of file