Skip to content

Commit

Permalink
Publisher banner improvments
Browse files Browse the repository at this point in the history
  • Loading branch information
NejcZdovc committed Apr 22, 2020
1 parent 3edeea2 commit cf2ca36
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

#include <map>
#include <utility>
#include <vector>

#include "base/strings/stringprintf.h"
#include "bat/ledger/internal/database/database_server_publisher_amounts.h"
Expand Down Expand Up @@ -173,30 +172,56 @@ bool DatabaseServerPublisherAmounts::MigrateToV15(
return true;
}

void DatabaseServerPublisherAmounts::InsertOrUpdate(
void DatabaseServerPublisherAmounts::InsertOrUpdateList(
ledger::DBTransaction* transaction,
const ledger::PublisherBanner& info) {
const std::vector<ledger::PublisherBanner>& list) {
DCHECK(transaction);

// It's ok if social links are empty
if (info.amounts.empty()) {
if (list.empty()) {
return;
}

for (const auto& amount : info.amounts) {
const std::string query = base::StringPrintf(
"INSERT OR REPLACE INTO %s "
"(publisher_key, amount) VALUES (?, ?)",
const std::string base_query = base::StringPrintf(
"INSERT OR REPLACE INTO %s VALUES ",
kTableName);

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;
size_t i = 0;
std::string query;
for (const auto& info : list) {
// It's ok if amounts are empty
if (info.amounts.empty()) {
continue;
}

if (i == 0) {
query += base_query;
}

BindString(command.get(), 0, info.publisher_key);
BindDouble(command.get(), 1, amount);
transaction->commands.push_back(std::move(command));
for (const auto& amount : info.amounts) {
if (i == kBatchLimit) {
query += base_query;
i = 0;
}

query += base::StringPrintf(
R"(("%s",%g))",
info.publisher_key.c_str(),
amount);
query += (i == kBatchLimit - 1) ? ";" : ",";
i++;
}
}

if (query.empty()) {
return;
}

query.pop_back();

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::EXECUTE;
command->command = query;
transaction->commands.push_back(std::move(command));
}

void DatabaseServerPublisherAmounts::GetRecord(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#define BRAVELEDGER_DATABASE_DATABASE_SERVER_PUBLISHER_AMOUNTS_H_

#include <string>
#include <vector>

#include "bat/ledger/internal/database/database_table.h"

Expand All @@ -19,9 +20,9 @@ class DatabaseServerPublisherAmounts: public DatabaseTable {

bool Migrate(ledger::DBTransaction* transaction, const int target) override;

void InsertOrUpdate(
void InsertOrUpdateList(
ledger::DBTransaction* transaction,
const ledger::PublisherBanner& info);
const std::vector<ledger::PublisherBanner>& list);

void GetRecord(
const std::string& publisher_key,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,8 +208,9 @@ void DatabaseServerPublisherBanner::InsertOrUpdateList(
"VALUES (?, ?, ?, ?, ?)",
kTableName);

ledger::DBCommandPtr command;
for (const auto& info : list) {
auto command = ledger::DBCommand::New();
command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;

Expand All @@ -220,11 +221,11 @@ void DatabaseServerPublisherBanner::InsertOrUpdateList(
BindString(command.get(), 4, info.logo);

transaction->commands.push_back(std::move(command));

links_->InsertOrUpdate(transaction.get(), info);
amounts_->InsertOrUpdate(transaction.get(), info);
}

links_->InsertOrUpdateList(transaction.get(), list);
amounts_->InsertOrUpdateList(transaction.get(), list);

auto transaction_callback = std::bind(&OnResultCallback,
_1,
callback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,36 +175,61 @@ bool DatabaseServerPublisherLinks::MigrateToV15(
return true;
}

void DatabaseServerPublisherLinks::InsertOrUpdate(
void DatabaseServerPublisherLinks::InsertOrUpdateList(
ledger::DBTransaction* transaction,
const ledger::PublisherBanner& info) {
const std::vector<ledger::PublisherBanner>& list) {
DCHECK(transaction);

// It's ok if links are empty
if (info.links.empty()) {
if (list.empty()) {
return;
}

for (const auto& link : info.links) {
if (link.second.empty()) {
const std::string base_query = base::StringPrintf(
"INSERT OR REPLACE INTO %s VALUES ",
kTableName);

size_t i = 0;
std::string query;
for (const auto& info : list) {
// It's ok if links are empty
if (info.links.empty()) {
continue;
}

const std::string query = base::StringPrintf(
"INSERT OR REPLACE INTO %s "
"(publisher_key, provider, link) "
"VALUES (?, ?, ?)",
kTableName);
if (i == 0) {
query += base_query;
}

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;
for (const auto& link : info.links) {
if (link.second.empty()) {
continue;
}

if (i == kBatchLimit) {
query += base_query;
i = 0;
}

query += base::StringPrintf(
R"(("%s","%s","%s"))",
info.publisher_key.c_str(),
link.first.c_str(),
link.second.c_str());
query += (i == kBatchLimit - 1) ? ";" : ",";
i++;
}
}

BindString(command.get(), 0, info.publisher_key);
BindString(command.get(), 1, link.first);
BindString(command.get(), 2, link.second);
transaction->commands.push_back(std::move(command));
if (query.empty()) {
return;
}

query.pop_back();

auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::EXECUTE;
command->command = query;
transaction->commands.push_back(std::move(command));
}

void DatabaseServerPublisherLinks::GetRecord(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <map>
#include <string>
#include <vector>

#include "bat/ledger/internal/database/database_table.h"

Expand All @@ -20,9 +21,9 @@ class DatabaseServerPublisherLinks: public DatabaseTable {

bool Migrate(ledger::DBTransaction* transaction, const int target) override;

void InsertOrUpdate(
void InsertOrUpdateList(
ledger::DBTransaction* transaction,
const ledger::PublisherBanner& info);
const std::vector<ledger::PublisherBanner>& list);

void GetRecord(
const std::string& publisher_key,
Expand Down

0 comments on commit cf2ca36

Please sign in to comment.