Samchon Framework for CPP
1.0.0
|
A SQL interface; DBMS connector. More...
#include <SQLi.hpp>
Public Member Functions | |
SQLi (const std::string &driver, int port) | |
Construct from driver name and port. More... | |
virtual void | connect (const std::string &ip, const std::string &db, const std::string &id, const std::string &pwd) |
Connect to the DBMS . More... | |
virtual void | disconnect () |
Disconnect from DBMS. More... | |
virtual auto | createStatement () -> std::shared_ptr< SQLStatement > |
Factory method for creating SQLStatement. More... | |
Protected Attributes | |
std::string | driver |
Driver; name of DBMS used for connection. More... | |
int | port |
Port number of DBMS. More... | |
Private Attributes | |
void * | hdbc |
Handler of DB-connector. More... | |
SQLStatement * | stmt |
SQLStatement's pointer linked with the SQLi. More... | |
std::mutex | stmtMutex |
Mutex ensuring concurrency with SQLStatement. More... | |
A SQL interface; DBMS connector.
SQLi is an abstract class managing connection (session) with a specific database and manages SQL statements are executed and results are returned within the context of a connection.
The reason why SQLStatement(s) are managed by SQLi is because of a principle of DBMS, DBMS system doesn't allow simultaneous query from a session (connection). Only a query (process0) is allowed at a time. If you try to simultaneous query from a SQLi, ODBC throws error. To avoid the error, an execute of query from SQLStatement will lock a mutex of SQLi to ensure exclusiveness.
To ensure the exclusiveness, you've to make SQLStatement from SQLi. Do not make SQLStatement by yourself. call SQLi::createSQLStatement() instead. Even you make a derived class from SQLStatement, don't make its constructor to have public accessor.
Becuase execution of a sql statement causes lock on mutex in SQLi, you've to destruct the SQLStatement or call SQLStatement::free() method(). If you don't, the mutex will not be unlocked, thus you can't do anything by the SQLi.
SQLi::SQLi | ( | const std::string & | driver, |
int | port | ||
) |
|
virtual |
|
virtual |
Factory method for creating SQLStatement.
Recommend to create SQLStatement by this method. Direct creation is not recommended as the reason of domain problem of each DBMS
Reimplemented in samchon::library::TSQLi.
|
protected |
|
protected |
|
private |
Handler of DB-connector.
Definition at line 76 of file SQLi.hpp.
Referenced by samchon::library::SQLStatement::SQLStatement().
|
private |
SQLStatement's pointer linked with the SQLi.
Definition at line 81 of file SQLi.hpp.
Referenced by samchon::library::SQLStatement::free(), and samchon::library::SQLStatement::refresh().
|
private |
Mutex ensuring concurrency with SQLStatement.
Definition at line 86 of file SQLi.hpp.
Referenced by samchon::library::SQLStatement::free(), and samchon::library::SQLStatement::refresh().