Skip to content

Commit

Permalink
Uplift of #5301 (squashed) to release
Browse files Browse the repository at this point in the history
  • Loading branch information
brave-browser-releases authored and bsclifton committed Apr 24, 2020
1 parent d729c1f commit f3f3ee9
Show file tree
Hide file tree
Showing 9 changed files with 219 additions and 179 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 ",
table_name_);

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 (?, ?, ?, ?, ?)",
table_name_);

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 @@ -129,26 +129,42 @@ void DatabaseServerPublisherInfo::InsertOrUpdatePartialList(
return;
}

const std::string query = base::StringPrintf(
"INSERT OR REPLACE INTO %s "
"(publisher_key, status, excluded, address) "
"VALUES (?, ?, ?, ?)",
const std::string base_query = base::StringPrintf(
"INSERT OR REPLACE INTO %s VALUES ",
table_name_);

auto transaction = ledger::DBTransaction::New();
size_t i = 0;
std::string main_query = base_query;
for (const auto& info : list) {
auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::RUN;
command->command = query;
if (i == kBatchLimit) {
main_query += base_query;
i = 0;
}

BindString(command.get(), 0, info.publisher_key);
BindInt(command.get(), 1, static_cast<int>(info.status));
BindBool(command.get(), 2, info.excluded);
BindString(command.get(), 3, info.address);
main_query += base::StringPrintf(
R"(("%s",%d,%d,"%s"))",
info.publisher_key.c_str(),
static_cast<int>(info.status),
info.excluded,
info.address.c_str());
main_query += (i == kBatchLimit - 1) ? ";" : ",";
i++;
}

transaction->commands.push_back(std::move(command));
if (main_query.empty()) {
callback(ledger::Result::LEDGER_ERROR);
return;
}

main_query.pop_back();

auto transaction = ledger::DBTransaction::New();
auto command = ledger::DBCommand::New();
command->type = ledger::DBCommand::Type::EXECUTE;
command->command = main_query;

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

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 ",
table_name_);

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 (?, ?, ?)",
table_name_);
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
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

namespace braveledger_database {

const size_t kBatchLimit = 999;

bool DropTable(
ledger::DBTransaction* transaction,
const std::string& table_name);
Expand Down
Loading

0 comments on commit f3f3ee9

Please sign in to comment.