parent
e8ba30d086
commit
871d6ce434
@ -0,0 +1,320 @@
|
|||||||
|
//
|
||||||
|
// Created by mwo on 16/12/16.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef RESTBED_XMR_MYSQLACCOUNTS_H
|
||||||
|
#define RESTBED_XMR_MYSQLACCOUNTS_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "tools.h"
|
||||||
|
#include "ssqlses.h"
|
||||||
|
#include "MySqlConnector.h"
|
||||||
|
|
||||||
|
#include <mysql++/mysql++.h>
|
||||||
|
#include <mysql++/ssqls.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
namespace xmreg
|
||||||
|
{
|
||||||
|
|
||||||
|
using namespace mysqlpp;
|
||||||
|
using namespace std;
|
||||||
|
using namespace nlohmann;
|
||||||
|
|
||||||
|
|
||||||
|
class MysqlTransactions
|
||||||
|
{
|
||||||
|
|
||||||
|
shared_ptr<MySqlConnector> conn;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
MysqlTransactions(shared_ptr<MySqlConnector> _conn): conn {_conn}
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool
|
||||||
|
select(const uint64_t& address_id, vector<XmrTransaction>& txs)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// static shared_ptr<Query> query;
|
||||||
|
//
|
||||||
|
// if (!query)
|
||||||
|
// {
|
||||||
|
// Query q = MySqlConnector::getInstance().query(
|
||||||
|
// XmrTransaction::SELECT_STMT);
|
||||||
|
// q.parse();
|
||||||
|
// query = shared_ptr<Query>(new Query(q));
|
||||||
|
// }
|
||||||
|
|
||||||
|
Query query = conn->query(XmrTransaction::SELECT_STMT);
|
||||||
|
query.parse();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
query.storein(txs, address_id);
|
||||||
|
|
||||||
|
if (!txs.empty())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint64_t
|
||||||
|
insert(const XmrTransaction& tx_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
// static shared_ptr<Query> query;
|
||||||
|
//
|
||||||
|
// if (!query)
|
||||||
|
// {
|
||||||
|
// Query q = MySqlConnector::getInstance().query(XmrTransaction::INSERT_STMT);
|
||||||
|
// q.parse();
|
||||||
|
// query = shared_ptr<Query>(new Query(q));
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
Query query = conn->query(XmrTransaction::INSERT_STMT);
|
||||||
|
query.parse();
|
||||||
|
|
||||||
|
// cout << query << endl;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SimpleResult sr = query.execute(tx_data.hash,
|
||||||
|
tx_data.account_id,
|
||||||
|
tx_data.total_received,
|
||||||
|
tx_data.total_sent,
|
||||||
|
tx_data.unlock_time,
|
||||||
|
tx_data.height,
|
||||||
|
tx_data.coinbase,
|
||||||
|
tx_data.payment_id,
|
||||||
|
tx_data.mixin,
|
||||||
|
tx_data.timestamp);
|
||||||
|
|
||||||
|
if (sr.rows() == 1)
|
||||||
|
return sr.insert_id();
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MySqlAccounts
|
||||||
|
{
|
||||||
|
|
||||||
|
shared_ptr<MySqlConnector> conn;
|
||||||
|
|
||||||
|
shared_ptr<MysqlTransactions> mysql_tx;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
MySqlAccounts()
|
||||||
|
{
|
||||||
|
cout << "MySqlAccounts() makes new connection" << endl;
|
||||||
|
conn = make_shared<MySqlConnector>();
|
||||||
|
mysql_tx = make_shared<MysqlTransactions>(conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
select(const string& address, XmrAccount& account)
|
||||||
|
{
|
||||||
|
|
||||||
|
// static shared_ptr<Query> query;
|
||||||
|
//
|
||||||
|
// if (!query)
|
||||||
|
// {
|
||||||
|
// Query q = MySqlConnector::getInstance().query(XmrAccount::SELECT_STMT);
|
||||||
|
// q.parse();
|
||||||
|
// query = shared_ptr<Query>(new Query(q));
|
||||||
|
// }
|
||||||
|
|
||||||
|
Query query = conn->query(XmrAccount::SELECT_STMT);
|
||||||
|
query.parse();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vector<XmrAccount> res;
|
||||||
|
query.storein(res, address);
|
||||||
|
|
||||||
|
if (!res.empty())
|
||||||
|
{
|
||||||
|
account = res.at(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
select(const int64_t& acc_id, XmrAccount& account)
|
||||||
|
{
|
||||||
|
|
||||||
|
//static shared_ptr<Query> query;
|
||||||
|
|
||||||
|
// if (!query)
|
||||||
|
// {
|
||||||
|
// Query q = MySqlConnector::getInstance().query(XmrAccount::SELECT_STMT2);
|
||||||
|
// q.parse();
|
||||||
|
// query = shared_ptr<Query>(new Query(q));
|
||||||
|
// }
|
||||||
|
|
||||||
|
Query query = conn->query(XmrAccount::SELECT_STMT2);
|
||||||
|
query.parse();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vector<XmrAccount> res;
|
||||||
|
query.storein(res, acc_id);
|
||||||
|
|
||||||
|
if (!res.empty())
|
||||||
|
{
|
||||||
|
account = res.at(0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t
|
||||||
|
insert(const string& address, const uint64_t& scanned_block_height = 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
// static shared_ptr<Query> query;
|
||||||
|
|
||||||
|
// if (!query)
|
||||||
|
// {
|
||||||
|
// Query q = MySqlConnector::getInstance().query(XmrAccount::INSERT_STMT);
|
||||||
|
// q.parse();
|
||||||
|
// query = shared_ptr<Query>(new Query(q));
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
Query query = conn->query(XmrAccount::INSERT_STMT);
|
||||||
|
query.parse();
|
||||||
|
|
||||||
|
// cout << query << endl;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SimpleResult sr = query.execute(address, scanned_block_height);
|
||||||
|
|
||||||
|
if (sr.rows() == 1)
|
||||||
|
return sr.insert_id();
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t
|
||||||
|
insert_tx(const XmrTransaction& tx_data)
|
||||||
|
{
|
||||||
|
return mysql_tx->insert(tx_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
select_txs(const string& xmr_address, vector<XmrTransaction>& txs)
|
||||||
|
{
|
||||||
|
// having address first get its address_id
|
||||||
|
|
||||||
|
|
||||||
|
// a placeholder for exciting or new account data
|
||||||
|
xmreg::XmrAccount acc;
|
||||||
|
|
||||||
|
// select this account if its existing one
|
||||||
|
if (!select(xmr_address, acc))
|
||||||
|
{
|
||||||
|
cerr << "Address" << xmr_address << "does not exist in database" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return mysql_tx->select(acc.id, txs);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
select_txs(const uint64_t& account_id, vector<XmrTransaction>& txs)
|
||||||
|
{
|
||||||
|
return mysql_tx->select(account_id, txs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
update(XmrAccount& acc_orginal, XmrAccount& acc_new)
|
||||||
|
{
|
||||||
|
|
||||||
|
Query query = conn->query();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
query.update(acc_orginal, acc_new);
|
||||||
|
|
||||||
|
SimpleResult sr = query.execute();
|
||||||
|
|
||||||
|
if (sr.rows() == 1)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (mysqlpp::Exception& e)
|
||||||
|
{
|
||||||
|
MYSQL_EXCEPTION_MSG(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //RESTBED_XMR_MYSQLACCOUNTS_H
|
Loading…
Reference in new issue