use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
- define('DB_UPDATE_VERSION', 1294);
+ define('DB_UPDATE_VERSION', 1295);
}
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"]
+ ]
]
];
+
-- ------------------------------------------
-- Friendica 2019.03-dev (The Tazmans Flax-lily)
--- DB_UPDATE_VERSION 1294
+-- DB_UPDATE_VERSION 1295
-- ------------------------------------------
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';
+
--- /dev/null
+<?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]);
+ }
+}
\ No newline at end of file