started converting MySqlConnector into singleton

pull/1/head
moneroexamples 8 years ago
parent eb1c324a14
commit eedc4817d0

@ -59,6 +59,12 @@ if (!xmreg::get_blockchain_path(bc_path_opt, blockchain_path, testnet))
cout << "Blockchain path: " << blockchain_path.string() << endl;
xmreg::MySqlConnector::url = "127.0.0.1";
xmreg::MySqlConnector::username = "root";
xmreg::MySqlConnector::password = "root";
xmreg::MySqlConnector::dbname = "yourmonero";
// setup blockchain status monitoring thread
xmreg::CurrentBlockchainStatus::set_blockchain_path(blockchain_path.string());
xmreg::CurrentBlockchainStatus::set_testnet(false);

@ -29,35 +29,37 @@ using namespace nlohmann;
<< endl;
/*
* This is singleton class that connects
* and holds connection to our mysql.
*
* Only one instance of it can exist.
*
*/
class MySqlConnector
{
string url;
string username;
string password;
string dbname;
protected:
Connection conn;
public:
MySqlConnector(
string _url = "127.0.0.1",
string _username = "root",
string _password = "root",
string _dbname = "yourmonero"
):
url {_url},
username {_username},
password {_password},
dbname {_dbname}
static string url;
static string username;
static string password;
static string dbname;
static MySqlConnector& getInstance()
{
connect();
static MySqlConnector instance; // Guaranteed to be destroyed.
// Instantiated on first use.
return instance;
}
void
connect()
private:
MySqlConnector()
{
if (conn.connected())
return;
if (conn.connect(dbname.c_str(), url.c_str(),
username.c_str(), password.c_str()))
{
@ -65,35 +67,45 @@ public:
}
}
virtual ~MySqlConnector() {};
public:
MySqlConnector(MySqlConnector const&) = delete;
void operator=(MySqlConnector const&) = delete;
virtual ~MySqlConnector()
{
conn.disconnect();
};
};
string MySqlConnector::url;
string MySqlConnector::username;
string MySqlConnector::password;
string MySqlConnector::dbname;
class MysqlTransactions
{
Connection* conn;
class MySqlAccounts: public MySqlConnector
{
static constexpr const char* TABLE_NAME = "Accounts";
public:
static constexpr const char* SELECT_STMT = R"(
SELECT * FROM `Accounts` WHERE `address` = (%0q)
)";
MysqlTransactions(MySqlConnector& _connector): conn {_connector.get_connection()}
{}
};
static constexpr const char* SELECT_STMT2 = R"(
SELECT * FROM `Accounts` WHERE `id` = (%0q)
)";
static constexpr const char* INSERT_STMT = R"(
INSERT INTO `Accounts` (`address`, `scanned_block_height`) VALUES (%0q, %1q);
)";
class MySqlAccounts
{
Connection* conn;
vector<MysqlTransactions> txs;
public:
MySqlAccounts(): MySqlConnector() {}
MysqlTransactions(MySqlConnector& _connector): conn {_connector.get_connection()}
{}
bool
select(const string& address, XmrAccount& account)
@ -103,12 +115,12 @@ public:
if (!query)
{
Query q = conn.query(SELECT_STMT);
Query q = conn.query(XmrAccount::SELECT_STMT);
q.parse();
query = shared_ptr<Query>(new Query(q));
}
// Query query = conn.query(SELECT_STMT);
// Query query = conn.query(XmrAccount::SELECT_STMT);
// query.parse();
try
@ -143,12 +155,12 @@ public:
if (!query)
{
Query q = conn.query(SELECT_STMT2);
Query q = conn.query(XmrAccount::SELECT_STMT2);
q.parse();
query = shared_ptr<Query>(new Query(q));
}
// Query query = conn.query(SELECT_STMT2);
// Query query = conn.query(XmrAccount::SELECT_STMT2);
// query.parse();
try
@ -179,13 +191,13 @@ public:
if (!query)
{
Query q = conn.query(INSERT_STMT);
Query q = conn.query(XmrAccount::INSERT_STMT);
q.parse();
query = shared_ptr<Query>(new Query(q));
}
// Query query = conn.query(INSERT_STMT);
// Query query = conn.query(XmrAccount::INSERT_STMT);
// query.parse();
// cout << query << endl;

@ -38,6 +38,20 @@ sql_create_11(Accounts, 1, 2,
struct XmrAccount : public Accounts
{
static constexpr const char* SELECT_STMT = R"(
SELECT * FROM `Accounts` WHERE `address` = (%0q)
)";
static constexpr const char* SELECT_STMT2 = R"(
SELECT * FROM `Accounts` WHERE `id` = (%0q)
)";
static constexpr const char* INSERT_STMT = R"(
INSERT INTO `Accounts` (`address`, `scanned_block_height`) VALUES (%0q, %1q);
)";
using Accounts::Accounts;
// viewkey is not stored in mysql db or anywhere
@ -85,6 +99,15 @@ sql_create_10(Transactions, 1, 2,
struct XmrTransaction : public Transactions
{
static constexpr const char* SELECT_STMT = R"(
SELECT * FROM `Transactions` WHERE `address_id` = (%0q)
)";
static constexpr const char* SELECT_STMT2 = R"(
SELECT * FROM `Transactions` WHERE `id` = (%0q)
)";
using Transactions::Transactions;
// viewkey is not stored in mysql db or anywhere

Loading…
Cancel
Save