summaryrefslogtreecommitdiff
path: root/platform/default/sqlite_cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/sqlite_cache.cpp')
-rw-r--r--platform/default/sqlite_cache.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/platform/default/sqlite_cache.cpp b/platform/default/sqlite_cache.cpp
index 46df7ed2af..e618c960c4 100644
--- a/platform/default/sqlite_cache.cpp
+++ b/platform/default/sqlite_cache.cpp
@@ -117,9 +117,9 @@ void SQLiteCache::Impl::get(const Resource &resource, Callback callback) {
response->modified = getStmt->get<int64_t>(1);
response->etag = getStmt->get<std::string>(2);
response->expires = getStmt->get<int64_t>(3);
- response->data = getStmt->get<std::string>(4);
+ response->data = std::make_shared<std::string>(std::move(getStmt->get<std::string>(4)));
if (getStmt->get<int>(5)) { // == compressed
- response->data = util::decompress(response->data);
+ response->data = std::make_shared<std::string>(std::move(util::decompress(*response->data)));
}
callback(std::move(response));
} else {
@@ -171,18 +171,21 @@ void SQLiteCache::Impl::put(const Resource& resource, std::shared_ptr<const Resp
putStmt->bind(6 /* expires */, response->expires);
std::string data;
- if (resource.kind != Resource::SpriteImage) {
+ if (resource.kind != Resource::SpriteImage && response->data) {
// Do not compress images, since they are typically compressed already.
- data = util::compress(response->data);
+ data = util::compress(*response->data);
}
- if (!data.empty() && data.size() < response->data.size()) {
+ if (!data.empty() && data.size() < response->data->size()) {
// Store the compressed data when it is smaller than the original
// uncompressed data.
putStmt->bind(7 /* data */, data, false); // do not retain the string internally.
putStmt->bind(8 /* compressed */, true);
+ } else if (response->data) {
+ putStmt->bind(7 /* data */, *response->data, false); // do not retain the string internally.
+ putStmt->bind(8 /* compressed */, false);
} else {
- putStmt->bind(7 /* data */, response->data, false); // do not retain the string internally.
+ putStmt->bind(7 /* data */, "", false);
putStmt->bind(8 /* compressed */, false);
}