JAPAn
Just Another Parity Analyzer
Loading...
Searching...
No Matches
QwDatabase Class Reference

A database interface class. More...

#include <QwDatabase.h>

+ Collaboration diagram for QwDatabase:

Public Member Functions

template<typename Statement, typename Lambda>
void QuerySelectForEachResult (const Statement &statement, Lambda &&lambda)
 
template<typename QueryResult, typename Lambda>
void ForEachResult (QueryResult &result, Lambda &&lambda) const
 
template<typename Statement>
size_t QuerySelectCountResults (const Statement &statement)
 
template<typename QueryResult>
size_t CountResults (QueryResult &result) const
 
template<typename Statement, typename Lambda>
bool QuerySelectForFirstResult (const Statement &statement, Lambda &&lambda)
 
template<typename QueryResult, typename Lambda>
bool ForFirstResult (QueryResult &result, Lambda &&lambda) const
 
template<typename Statement, typename Lambda>
auto VisitConnectionForSelect (Lambda &&lambda) -> QuerySelectReturnType< Statement >
 
 QwDatabase (const string &major="00", const string &minor="00", const string &point="0000")
 Simple constructor.
 
 QwDatabase (QwOptions &options, const string &major="00", const string &minor="00", const string &point="0000")
 Constructor with QwOptions object.
 
virtual ~QwDatabase ()
 Destructor.
 
void SetAccessLevel (string accesslevel)
 Sets the access level flag based on string labels: "off", "ro", "rw".
 
Bool_t AllowsReadAccess ()
 
Bool_t AllowsWriteAccess ()
 
Bool_t Connect ()
 Open a connection to the database using the predefined parameters.
 
void Disconnect ()
 
Bool_t Connected ()
 Get a scoped connection that automatically disconnects when destroyed.
 
QwScopedConnection GetScopedConnection ()
 
const string GetServerVersion ()
 
void ProcessOptions (QwOptions &options)
 Processes the options contained in the QwOptions object.
 
void ProcessOptions (const EQwDBType &dbtype, const TString &dbname, const TString &username, const TString &passwd, const TString &dbhost="localhost", const Int_t dbport=0, const TString &accesslevel="ro")
 Processes database options.
 
template<typename Statement>
size_t QueryCount (const Statement &statement)
 
template<typename Statement>
bool QueryExists (const Statement &statement)
 
template<typename Statement>
auto QuerySelect (const Statement &statement)
 
template<typename Statement>
void QueryExecute (const Statement &statement)
 
template<typename InsertStatement>
uint64_t QueryInsertAndGetId (const InsertStatement &statement)
 
const string GetVersion ()
 
const string GetVersionMajor ()
 Return a full version string for the DB schema.
 
const string GetVersionMinor ()
 
const string GetVersionPoint ()
 
const string GetValidVersion ()
 
void PrintServerInfo ()
 

Static Public Member Functions

static void DefineOptions (QwOptions &options)
 Defines available class options for QwOptions.
 

Protected Attributes

Bool_t fDBInsertMissingKeys
 True if missing keys should be inserted into the database automatically.
 

Private Types

enum  EQwDBType { kQwDatabaseNone }
 
enum class  EConnectionCheck : bool { kUnchecked = false , kChecked = true }
 
enum  EQwDBAccessLevel { kQwDatabaseOff , kQwDatabaseReadOnly , kQwDatabaseReadWrite }
 
using DatabaseConnection
 
template<typename Statement>
using QuerySelectReturnType
 

Private Member Functions

template<EConnectionCheck CheckConnection = EConnectionCheck::kChecked, typename Lambda>
auto VisitConnection (Lambda &&lambda)
 
Bool_t ValidateConnection ()
 Checks that given connection parameters result in a valid connection.
 
bool StoreDBVersion ()
 Retrieve database schema version information from database.
 
 QwDatabase (const QwDatabase &rhs)
 Copy Constructor (not implemented)
 
QwDatabaseoperator= (const QwDatabase &rhs)
 Assignment operator (not implemented)
 

Private Attributes

EQwDBType fDBType = kQwDatabaseNone
 Type of database backend to use.
 
DatabaseConnection fDBConnection
 
EQwDBAccessLevel fAccessLevel
 Access level of the database instance.
 
string fDatabase
 Name of database to connect to.
 
string fDBServer
 Name of server carrying DB to connect to.
 
string fDBUsername
 Name of account to connect to DB server with.
 
string fDBPassword
 DB account password.
 
UInt_t fDBPortNumber
 Port number to connect to on server (mysql default port is 3306)
 
Bool_t fValidConnection
 True if a valid connection was established using defined connection information.
 
Bool_t fDBDebug
 True if database debug information should be printed to stdout.
 
string fVersionMajor
 Major version number of current DB schema.
 
string fVersionMinor
 Minor version number of current DB schema.
 
string fVersionPoint
 Point version number of current DB schema.
 
const string kValidVersionMajor
 
const string kValidVersionMinor
 
const string kValidVersionPoint
 

Detailed Description

A database interface class.

This class provides the connection to the Qweak database to other objects in the Qweak analyzer. A static global object gQwDatabase is used to provide these services.

Definition at line 121 of file QwDatabase.h.

Member Typedef Documentation

◆ DatabaseConnection

Initial value:
std::variant<
std::monostate
>

Definition at line 148 of file QwDatabase.h.

◆ QuerySelectReturnType

template<typename Statement>
using QwDatabase::QuerySelectReturnType
private
Initial value:
std::variant<
std::monostate
>

Definition at line 163 of file QwDatabase.h.

Member Enumeration Documentation

◆ EConnectionCheck

enum class QwDatabase::EConnectionCheck : bool
strongprivate
Enumerator
kUnchecked 
kChecked 

Definition at line 180 of file QwDatabase.h.

180 : bool {
181 kUnchecked = false,
182 kChecked = true
183 };

◆ EQwDBAccessLevel

Enumerator
kQwDatabaseOff 
kQwDatabaseReadOnly 
kQwDatabaseReadWrite 

Definition at line 419 of file QwDatabase.h.

◆ EQwDBType

enum QwDatabase::EQwDBType
private
Enumerator
kQwDatabaseNone 

Definition at line 123 of file QwDatabase.h.

124#ifdef __USE_DATABASE_SQLITE3__
125 , kQwDatabaseSQLite3
126#endif // __USE_DATABASE_SQLITE3__
127#ifdef __USE_DATABASE_MYSQL__
128 , kQwDatabaseMySQL
129#endif // __USE_DATABASE_MYSQL__
130#ifdef __USE_DATABASE_POSTGRESQL__
131 , kQwDatabasePostgreSQL
132#endif // __USE_DATABASE_POSTGRESQL__
133 };

Constructor & Destructor Documentation

◆ QwDatabase() [1/3]

QwDatabase::QwDatabase ( const string & major = "00",
const string & minor = "00",
const string & point = "0000" )

Simple constructor.

The simple constructor initializes member fields. This class is not used to establish the database connection.

Definition at line 78 of file QwDatabase.cc.

79{
80 QwDebug << "Greetings from QwDatabase simple constructor." << QwLog::endl;
81
82 // Initialize member fields
85
87
88 fDBPortNumber = 0;
89 fValidConnection = false;
90
91}
#define QwDebug
Predefined log drain for debugging output.
Definition QwLog.h:59
string fDBUsername
Name of account to connect to DB server with.
Definition QwDatabase.h:435
const string kValidVersionPoint
Definition QwDatabase.h:446
const string kValidVersionMinor
Definition QwDatabase.h:445
string fDBServer
Name of server carrying DB to connect to.
Definition QwDatabase.h:434
string fVersionPoint
Point version number of current DB schema.
Definition QwDatabase.h:443
const string kValidVersionMajor
Definition QwDatabase.h:444
string fDatabase
Name of database to connect to.
Definition QwDatabase.h:433
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition QwDatabase.h:431
string fVersionMinor
Minor version number of current DB schema.
Definition QwDatabase.h:442
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition QwDatabase.h:437
string fVersionMajor
Major version number of current DB schema.
Definition QwDatabase.h:441
string fDBPassword
DB account password.
Definition QwDatabase.h:436
Bool_t fValidConnection
True if a valid connection was established using defined connection information.
Definition QwDatabase.h:438
static std::ostream & endl(std::ostream &)
End of the line.
Definition QwLog.cc:297

References QwLog::endl(), fAccessLevel, fDatabase, fDBPassword, fDBPortNumber, fDBServer, fDBUsername, fValidConnection, fVersionMajor, fVersionMinor, fVersionPoint, kQwDatabaseOff, kValidVersionMajor, kValidVersionMinor, kValidVersionPoint, and QwDebug.

Referenced by operator=(), and QwDatabase().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QwDatabase() [2/3]

QwDatabase::QwDatabase ( QwOptions & options,
const string & major = "00",
const string & minor = "00",
const string & point = "0000" )

Constructor with QwOptions object.

The constructor initializes member fields using the values in the QwOptions object.

Parameters
optionsThe QwOptions object.
majorMajor version number
minorMinor version number
pointPoint revision number

Definition at line 100 of file QwDatabase.cc.

101{
102 QwDebug << "Greetings from QwDatabase extended constructor." << QwLog::endl;
103
104 // Initialize member fields
107
109
110 fDBPortNumber = 0;
111 fValidConnection = false;
112
113 ProcessOptions(options);
114
115}
void ProcessOptions(QwOptions &options)
Processes the options contained in the QwOptions object.

References QwLog::endl(), fAccessLevel, fDatabase, fDBPassword, fDBPortNumber, fDBServer, fDBUsername, fValidConnection, fVersionMajor, fVersionMinor, fVersionPoint, kQwDatabaseOff, kValidVersionMajor, kValidVersionMinor, kValidVersionPoint, ProcessOptions(), and QwDebug.

+ Here is the call graph for this function:

◆ ~QwDatabase()

QwDatabase::~QwDatabase ( )
virtual

Destructor.

The destructor says "Good-bye World!"

Definition at line 119 of file QwDatabase.cc.

120{
121 QwDebug << "QwDatabase::~QwDatabase() : Good-bye World from QwDatabase destructor!" << QwLog::endl;
122 if (Connected()) Disconnect();
123}
void Disconnect()
Definition QwDatabase.h:313
Bool_t Connected()
Get a scoped connection that automatically disconnects when destroyed.
Definition QwDatabase.h:323

References Connected(), Disconnect(), QwLog::endl(), and QwDebug.

+ Here is the call graph for this function:

◆ QwDatabase() [3/3]

QwDatabase::QwDatabase ( const QwDatabase & rhs)
private

Copy Constructor (not implemented)

References QwDatabase().

+ Here is the call graph for this function:

Member Function Documentation

◆ AllowsReadAccess()

Bool_t QwDatabase::AllowsReadAccess ( )
inline

◆ AllowsWriteAccess()

Bool_t QwDatabase::AllowsWriteAccess ( )
inline

Definition at line 310 of file QwDatabase.h.

References fAccessLevel, and kQwDatabaseReadWrite.

◆ Connect()

bool QwDatabase::Connect ( )

Open a connection to the database using the predefined parameters.

This function is used to initiate a database connection.

Definition at line 303 of file QwDatabase.cc.

304{
305 /* Open a connection to the database using the predefined parameters.
306 * Must call QwDatabase::ConnectionInfo() first.
307 */
308
309 // Return false, if we're not using the DB.
310 if (fAccessLevel==kQwDatabaseOff) return false;
311
312 // Make sure not already connected
313 if (Connected()) return true;
314
315 // If never connected before, then make sure connection parameters form
316 // valid connection
317 if (!fValidConnection) {
319 }
320
321 if (fValidConnection) {
322 // FIXME (wdconinc) duplication with ValidateConnection
323 try {
324 switch(fDBType)
325 {
326#ifdef __USE_DATABASE_MYSQL__
327 case kQwDatabaseMySQL: {
328 QwDebug << "QwDatabase::ValidateConnection() : Using MySQL backend." << QwLog::endl;
329 sqlpp::mysql::connection_config config;
330 config.host = fDBServer;
331 config.user = fDBUsername;
332 config.password = fDBPassword;
333 config.database = fDatabase;
334 config.port = fDBPortNumber;
335#ifdef __USE_SQLPP11__
336 config.debug = fDBDebug;
337#endif
338#ifdef __USE_SQLPP23__
339 if (fDBDebug) {
340 config.debug = sqlpp::debug_logger({sqlpp::log_category::all}, [](const std::string& msg) {
341 QwMessage << "SQL Debug: " << msg << QwLog::endl;
342 });
343 }
344#endif
345 fDBConnection = std::make_shared<sqlpp::mysql::connection>(config);
346 break;
347 }
348#endif
349#ifdef __USE_DATABASE_SQLITE3__
350 case kQwDatabaseSQLite3: {
351 QwDebug << "QwDatabase::ValidateConnection() : Using SQLite3 backend." << QwLog::endl;
352 sqlpp::sqlite3::connection_config config;
353 config.path_to_database = fDatabase;
354 config.password = fDBPassword;
355 // FIXME (wdconinc) use proper access flags
356 config.flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
357#ifdef __USE_SQLPP11__
358 config.debug = fDBDebug;
359#endif
360#ifdef __USE_SQLPP23__
361 if (fDBDebug) {
362 config.debug = sqlpp::debug_logger({sqlpp::log_category::all}, [](const std::string& msg) {
363 QwMessage << "SQL Debug: " << msg << QwLog::endl;
364 });
365 }
366#endif
367 fDBConnection = std::make_shared<sqlpp::sqlite3::connection>(config);
368 break;
369 }
370#endif
371#ifdef __USE_DATABASE_POSTGRESQL__
372 case kQwDatabasePostgreSQL: {
373 QwDebug << "QwDatabase::ValidateConnection() : Using PostgreSQL backend." << QwLog::endl;
374 sqlpp::postgresql::connection_config config;
375 config.host = fDBServer;
376 config.user = fDBUsername;
377 config.password = fDBPassword;
378 config.dbname = fDatabase;
379 config.port = fDBPortNumber;
380 fDBConnection = std::make_shared<sqlpp::postgresql::connection>(config);
381 break;
382 }
383#endif
384 default: {
385 QwError << "QwDatabase::ValidateConnection() : Unsupported database type." << QwLog::endl;
386 return false;
387 }
388 }
389 } catch (const std::exception& e) {
390 QwError << "QwDatabase::Connect() : " << QwLog::endl;
391 QwError << e.what() << " while connecting to database" << QwLog::endl;
392 fValidConnection = false;
393 return false;
394 }
395 return true;
396 } else {
397 QwError << "QwDatabase::Connect() : Must establish valid connection to database." << QwLog::endl;
398 return false;
399 }
400}
#define QwError
Predefined log drain for errors.
Definition QwLog.h:39
#define QwMessage
Predefined log drain for regular messages.
Definition QwLog.h:49
Bool_t ValidateConnection()
Checks that given connection parameters result in a valid connection.
Bool_t fDBDebug
True if database debug information should be printed to stdout.
Definition QwDatabase.h:439
DatabaseConnection fDBConnection
Definition QwDatabase.h:176
EQwDBType fDBType
Type of database backend to use.
Definition QwDatabase.h:134

References Connected(), QwLog::endl(), fAccessLevel, fDatabase, fDBConnection, fDBDebug, fDBPassword, fDBPortNumber, fDBServer, fDBType, fDBUsername, fValidConnection, kQwDatabaseOff, QwDebug, QwError, QwMessage, and ValidateConnection().

+ Here is the call graph for this function:

◆ Connected()

Bool_t QwDatabase::Connected ( )
inline

Get a scoped connection that automatically disconnects when destroyed.

Definition at line 323 of file QwDatabase.h.

References VisitConnection().

Referenced by Connect(), and ~QwDatabase().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CountResults()

template<typename QueryResult>
size_t QwDatabase::CountResults ( QueryResult & result) const
inline

Definition at line 248 of file QwDatabase.h.

248 {
249 size_t count = 0;
250 ForEachResult(result, [&count](const auto& row) {
251 (void)row; // Suppress unused variable warning
252 count++;
253 });
254 return count;
255 }
void ForEachResult(QueryResult &result, Lambda &&lambda) const
Definition QwDatabase.h:223

References ForEachResult().

+ Here is the call graph for this function:

◆ DefineOptions()

void QwDatabase::DefineOptions ( QwOptions & options)
static

Defines available class options for QwOptions.

Defines configuration options for QwDatabase class using QwOptions functionality.

Should apparently by called by QwOptions::DefineOptions() in QwParityOptions.h

Definition at line 409 of file QwDatabase.cc.

410{
411 // Specify command line options for use by QwDatabase
412 // FIXME (wdconinc) add database type option
413 options.AddOptions("Database options")("QwDatabase.accesslevel", po::value<string>(), "database access level (OFF,RO,RW)");
414 options.AddOptions("Database options")("QwDatabase.dbname", po::value<string>(), "database name or path");
415 options.AddOptions("Database options")("QwDatabase.dbserver", po::value<string>(), "database server name");
416 options.AddOptions("Database options")("QwDatabase.dbusername", po::value<string>(), "database username");
417 options.AddOptions("Database options")("QwDatabase.dbpassword", po::value<string>(), "database password");
418 options.AddOptions("Database options")("QwDatabase.dbport", po::value<int>()->default_value(0), "database server port number (defaults to standard mysql port)");
419 options.AddOptions("Database options")("QwDatabase.debug", po::value<bool>()->default_value(false), "enable database debug output (default false)");
420 options.AddOptions("Database options")("QwDatabase.insert-missing-keys", po::value<bool>()->default_value(false), "insert missing keys into the database (default false)");
421
422 std::stringstream dbtypes;
423 dbtypes << "none";
424#ifdef __USE_DATABASE_SQLITE3__
425 dbtypes << ",sqlite3";
426#endif // __USE_DATABASE_SQLITE3__
427#ifdef __USE_DATABASE_MYSQL__
428 dbtypes << ",mysql";
429#endif // __USE_DATABASE_MYSQL__
430#ifdef __USE_DATABASE_POSTGRESQL__
431 dbtypes << ",postgresql";
432#endif // __USE_DATABASE_POSTGRESQL__
433 std::stringstream desc;
434 desc << "database type (" << dbtypes.str() << ")";
435 options.AddOptions("Database options")("QwDatabase.dbtype", po::value<string>()->default_value("none"), desc.str().c_str());
436}
po::options_description_easy_init AddOptions(const std::string &blockname="Specialized options")
Add an option to a named block or create new block.
Definition QwOptions.h:170

References QwOptions::AddOptions().

Referenced by QwOptions::DefineOptions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Disconnect()

void QwDatabase::Disconnect ( )
inline

Definition at line 313 of file QwDatabase.h.

313 {
315 using T = std::decay_t<decltype(conn)>;
316 if constexpr (!std::is_same_v<T, std::monostate>) {
317 if (conn) {
318 conn.reset();
319 }
320 }
321 });
322 }; //<! Close an open database connection
auto VisitConnection(Lambda &&lambda)
Definition QwDatabase.h:187

References VisitConnection().

Referenced by StoreDBVersion(), ValidateConnection(), and ~QwDatabase().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ForEachResult()

template<typename QueryResult, typename Lambda>
void QwDatabase::ForEachResult ( QueryResult & result,
Lambda && lambda ) const
inline

Definition at line 223 of file QwDatabase.h.

223 {
224 std::visit([&lambda](auto& res) {
225 using T = std::decay_t<decltype(res)>;
226 if constexpr (!std::is_same_v<T, std::monostate>) {
227 for (const auto& row : res) {
228 lambda(row);
229 }
230 }
231 // If T is std::monostate, do nothing (no results to iterate over)
232 }, result);
233 }

Referenced by CountResults(), ForFirstResult(), and QuerySelectForEachResult().

+ Here is the caller graph for this function:

◆ ForFirstResult()

template<typename QueryResult, typename Lambda>
bool QwDatabase::ForFirstResult ( QueryResult & result,
Lambda && lambda ) const
inline

Definition at line 272 of file QwDatabase.h.

272 {
273 bool found = false;
274 ForEachResult(result, [&lambda, &found](const auto& row) {
275 if (!found) { // Only process first result
276 lambda(row);
277 found = true;
278 }
279 });
280 return found;
281 }

References ForEachResult().

Referenced by StoreDBVersion().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetScopedConnection()

QwScopedConnection QwDatabase::GetScopedConnection ( )
inline

Definition at line 335 of file QwDatabase.h.

335 {
336 return QwScopedConnection(this);
337 }

◆ GetServerVersion()

const string QwDatabase::GetServerVersion ( )
inline

Definition at line 338 of file QwDatabase.h.

338 {
339 // FIXME (wdconinc) implement server_version();
340 return "";
341 }; //<! Get database server version

Referenced by PrintServerInfo().

+ Here is the caller graph for this function:

◆ GetValidVersion()

const string QwDatabase::GetValidVersion ( )

Definition at line 558 of file QwDatabase.cc.

558 {
559 string version = kValidVersionMajor + "." + kValidVersionMinor + "." + kValidVersionPoint;
560 return version;
561}

References kValidVersionMajor, kValidVersionMinor, and kValidVersionPoint.

Referenced by ValidateConnection().

+ Here is the caller graph for this function:

◆ GetVersion()

const string QwDatabase::GetVersion ( )

Definition at line 553 of file QwDatabase.cc.

553 {
554 string version = fVersionMajor + "." + fVersionMinor + "." + fVersionPoint;
555 return version;
556}

References fVersionMajor, fVersionMinor, and fVersionPoint.

Referenced by ValidateConnection().

+ Here is the caller graph for this function:

◆ GetVersionMajor()

const string QwDatabase::GetVersionMajor ( )
inline

Return a full version string for the DB schema.

Definition at line 411 of file QwDatabase.h.

411{return fVersionMajor;} //<! fVersionMajor getter

References fVersionMajor.

◆ GetVersionMinor()

const string QwDatabase::GetVersionMinor ( )
inline

Definition at line 412 of file QwDatabase.h.

412{return fVersionMinor;} //<! fVersionMinor getter

References fVersionMinor.

◆ GetVersionPoint()

const string QwDatabase::GetVersionPoint ( )
inline

Definition at line 413 of file QwDatabase.h.

413{return fVersionPoint;} //<! fVersionPoint getter

References fVersionPoint.

◆ operator=()

QwDatabase & QwDatabase::operator= ( const QwDatabase & rhs)
private

Assignment operator (not implemented)

References QwDatabase().

+ Here is the call graph for this function:

◆ PrintServerInfo()

void QwDatabase::PrintServerInfo ( )

This function prints the server information.

Definition at line 531 of file QwDatabase.cc.

532{
534 {
535 printf("\nQwDatabase MySQL ");
536 printf("%s v%s %s -----------------\n", BOLD, GetServerVersion().c_str(), NORMAL);
537 printf("Database server : %s%10s%s", RED, fDBServer.c_str(), NORMAL);
538 printf(" name : %s%12s%s", BLUE, fDatabase.c_str(), NORMAL);
539 printf(" user : %s%6s%s", RED, fDBUsername.c_str(), NORMAL);
540 printf(" port : %s%6d%s\n", BLUE, fDBPortNumber, NORMAL);
541 // FIXME (wdconinc) implement server_status();
542 //printf(" %s\n\n", server_status().c_str());
543 }
544 else
545 {
546 printf("There is no connection.\n");
547 }
548
549 return;
550}
#define NORMAL
Definition QwColor.h:65
#define BOLD
Definition QwColor.h:41
#define BLUE
Definition QwColor.h:36
#define RED
Definition QwColor.h:33
const string GetServerVersion()
Definition QwDatabase.h:338

References BLUE, BOLD, fDatabase, fDBPortNumber, fDBServer, fDBUsername, fValidConnection, GetServerVersion(), NORMAL, and RED.

+ Here is the call graph for this function:

◆ ProcessOptions() [1/2]

void QwDatabase::ProcessOptions ( const EQwDBType & dbtype,
const TString & dbname,
const TString & username,
const TString & passwd,
const TString & dbhost = "localhost",
const Int_t dbport = 0,
const TString & accesslevel = "ro" )

Processes database options.

Definition at line 501 of file QwDatabase.cc.

502{
503 SetAccessLevel(static_cast<string>(accesslevel));
504 fDBType = dbtype;
505 fDatabase = dbname;
506 fDBUsername = username;
507 fDBPassword = passwd;
508 fDBServer = dbhost;
509 fDBPortNumber = dbport;
510}
void SetAccessLevel(string accesslevel)
Sets the access level flag based on string labels: "off", "ro", "rw".

References fDatabase, fDBPassword, fDBPortNumber, fDBServer, fDBType, fDBUsername, and SetAccessLevel().

+ Here is the call graph for this function:

◆ ProcessOptions() [2/2]

void QwDatabase::ProcessOptions ( QwOptions & options)

Processes the options contained in the QwOptions object.

Loads the configuration options for QwDatabase class into this instance of QwDatabase from the QwOptions object.

Parameters
optionsOptions object

Definition at line 443 of file QwDatabase.cc.

444{
445 if (options.HasValue("QwDatabase.accesslevel")) {
446 string access = options.GetValue<string>("QwDatabase.accesslevel");
447 SetAccessLevel(access);
448 }
449 else {
450 QwWarning << "QwDatabase::ProcessOptions : No access level specified; database access is OFF" << QwLog::endl;
452 }
453 if (options.HasValue("QwDatabase.dbtype")) {
454 string dbtype = options.GetValue<string>("QwDatabase.dbtype");
456#ifdef __USE_DATABASE_MYSQL__
457 if (dbtype == "mysql") {
458 fDBType = kQwDatabaseMySQL;
459 }
460#endif
461#ifdef __USE_DATABASE_SQLITE3__
462 if (dbtype == "sqlite3") {
463 fDBType = kQwDatabaseSQLite3;
464 }
465#endif
466#ifdef __USE_DATABASE_POSTGRESQL__
467 if (dbtype == "postgresql") {
468 fDBType = kQwDatabasePostgreSQL;
469 }
470#endif
471 if (fDBType == kQwDatabaseNone) {
472 QwWarning << "QwDatabase::ProcessOptions : Unrecognized database type \"" << dbtype << "\"; using none" << QwLog::endl;
473 }
474 } else {
475 QwMessage << "QwDatabase::ProcessOptions : No database type specified" << QwLog::endl;
477 }
478 if (options.HasValue("QwDatabase.dbport")) {
479 fDBPortNumber = options.GetValue<int>("QwDatabase.dbport");
480 }
481 if (options.HasValue("QwDatabase.dbname")) {
482 fDatabase = options.GetValue<string>("QwDatabase.dbname");
483 }
484 if (options.HasValue("QwDatabase.dbusername")) {
485 fDBUsername = options.GetValue<string>("QwDatabase.dbusername");
486 }
487 if (options.HasValue("QwDatabase.dbpassword")) {
488 fDBPassword = options.GetValue<string>("QwDatabase.dbpassword");
489 }
490 if (options.HasValue("QwDatabase.dbserver")) {
491 fDBServer = options.GetValue<string>("QwDatabase.dbserver");
492 }
493 if (options.HasValue("QwDatabase.debug")) {
494 fDBDebug = options.GetValue<bool>("QwDatabase.debug");
495 }
496 if (options.HasValue("QwDatabase.insert-missing-keys")) {
497 fDBInsertMissingKeys = options.GetValue<bool>("QwDatabase.insert-missing-keys");
498 }
499}
#define QwWarning
Predefined log drain for warnings.
Definition QwLog.h:44
Bool_t fDBInsertMissingKeys
True if missing keys should be inserted into the database automatically.
Definition QwDatabase.h:449
T GetValue(const std::string &key)
Get a templated value.
Definition QwOptions.h:236
bool HasValue(const std::string &key)
Has this key been defined.
Definition QwOptions.h:229

References QwLog::endl(), fAccessLevel, fDatabase, fDBDebug, fDBInsertMissingKeys, fDBPassword, fDBPortNumber, fDBServer, fDBType, fDBUsername, QwOptions::GetValue(), QwOptions::HasValue(), kQwDatabaseNone, kQwDatabaseOff, QwMessage, QwWarning, and SetAccessLevel().

Referenced by QwDatabase().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QueryCount()

template<typename Statement>
size_t QwDatabase::QueryCount ( const Statement & statement)
inline

Definition at line 348 of file QwDatabase.h.

348 {
349 return VisitConnection<EConnectionCheck::kChecked>([&statement](auto& connection) -> size_t {
350 using T = std::decay_t<decltype(connection)>;
351 if constexpr (!std::is_same_v<T, std::monostate>) {
352 auto result = (*connection)(statement);
353 size_t count = 0;
354 for (const auto& row : result) {
355 (void)row; // Suppress unused variable warning
356 count++;
357 }
358 return count;
359 }
360 // This should never be reached due to VisitConnection logic
361 throw std::runtime_error("Unreachable: monostate in QueryCount lambda");
362 });
363 }

References VisitConnection().

Referenced by QueryExists(), and StoreDBVersion().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QueryExecute()

template<typename Statement>
void QwDatabase::QueryExecute ( const Statement & statement)
inline

Definition at line 383 of file QwDatabase.h.

383 {
384 VisitConnection<EConnectionCheck::kChecked>([&statement](auto& connection) {
385 using T = std::decay_t<decltype(connection)>;
386 if constexpr (!std::is_same_v<T, std::monostate>) {
387 (*connection)(statement);
388 }
389 });
390 } //<! Execute a statement without returning a result.

References VisitConnection().

+ Here is the call graph for this function:

◆ QueryExists()

template<typename Statement>
bool QwDatabase::QueryExists ( const Statement & statement)
inline

Definition at line 366 of file QwDatabase.h.

366 {
367 return QueryCount(statement) > 0;
368 } //<! Generate a query to check existence in the database.
size_t QueryCount(const Statement &statement)
Definition QwDatabase.h:348

References QueryCount().

+ Here is the call graph for this function:

◆ QueryInsertAndGetId()

template<typename InsertStatement>
uint64_t QwDatabase::QueryInsertAndGetId ( const InsertStatement & statement)
inline

Definition at line 393 of file QwDatabase.h.

393 {
394 return VisitConnection<EConnectionCheck::kChecked>([&statement](auto& connection) -> uint64_t {
395 using T = std::decay_t<decltype(connection)>;
396 if constexpr (!std::is_same_v<T, std::monostate>) {
397 auto result = (*connection)(statement);
398 // For INSERT operations, most databases return the ID directly as uint64_t
399 if constexpr (std::is_integral_v<decltype(result)>) {
400 return static_cast<uint64_t>(result);
401 } else {
402 throw std::runtime_error("Unexpected result type from INSERT operation - expected integral type");
403 }
404 }
405 // This should never be reached due to VisitConnection logic
406 throw std::runtime_error("Unreachable: monostate in QueryInsertAndGetId lambda");
407 });
408 } //<! Execute an INSERT statement and return the auto-increment ID.

References VisitConnection().

+ Here is the call graph for this function:

◆ QuerySelect()

template<typename Statement>
auto QwDatabase::QuerySelect ( const Statement & statement)
inline

Definition at line 371 of file QwDatabase.h.

371 {
372 return VisitConnectionForSelect<Statement>([&statement](auto& connection) {
373 using T = std::decay_t<decltype(connection)>;
374 if constexpr (!std::is_same_v<T, std::monostate>) {
375 return (*connection)(statement);
376 }
377 // This should never be reached due to VisitConnectionForSelect logic
378 throw std::runtime_error("Unreachable: monostate in QuerySelect lambda");
379 });
380 } //<! Execute a SELECT statement and return the result.
auto VisitConnectionForSelect(Lambda &&lambda) -> QuerySelectReturnType< Statement >
Definition QwDatabase.h:285

References VisitConnectionForSelect().

Referenced by QuerySelectForEachResult(), and StoreDBVersion().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QuerySelectCountResults()

template<typename Statement>
size_t QwDatabase::QuerySelectCountResults ( const Statement & statement)
inline

Definition at line 237 of file QwDatabase.h.

237 {
238 size_t count = 0;
239 QuerySelectForEachResult(statement, [&count](const auto& row) {
240 (void)row; // Suppress unused variable warning
241 count++;
242 });
243 return count;
244 }
void QuerySelectForEachResult(const Statement &statement, Lambda &&lambda)
Definition QwDatabase.h:216

References QuerySelectForEachResult().

+ Here is the call graph for this function:

◆ QuerySelectForEachResult()

template<typename Statement, typename Lambda>
void QwDatabase::QuerySelectForEachResult ( const Statement & statement,
Lambda && lambda )
inline

Definition at line 216 of file QwDatabase.h.

216 {
217 auto results = QuerySelect(statement);
218 ForEachResult(results, std::forward<Lambda>(lambda));
219 }
auto QuerySelect(const Statement &statement)
Definition QwDatabase.h:371

References ForEachResult(), and QuerySelect().

Referenced by QuerySelectCountResults(), and QuerySelectForFirstResult().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ QuerySelectForFirstResult()

template<typename Statement, typename Lambda>
bool QwDatabase::QuerySelectForFirstResult ( const Statement & statement,
Lambda && lambda )
inline

Definition at line 259 of file QwDatabase.h.

259 {
260 bool found = false;
261 QuerySelectForEachResult(statement, [&lambda, &found](const auto& row) {
262 if (!found) { // Only process first result
263 lambda(row);
264 found = true;
265 }
266 });
267 return found;
268 }

References QuerySelectForEachResult().

+ Here is the call graph for this function:

◆ SetAccessLevel()

void QwDatabase::SetAccessLevel ( string accesslevel)

Sets the access level flag based on string labels: "off", "ro", "rw".

Definition at line 512 of file QwDatabase.cc.

513{
514 TString level = accesslevel.c_str();
515 level.ToLower();
516 if (level=="off") fAccessLevel = kQwDatabaseOff;
517 else if (level=="ro") fAccessLevel = kQwDatabaseReadOnly;
518 else if (level=="rw") fAccessLevel = kQwDatabaseReadWrite;
519 else{
520 QwWarning << "QwDatabase::SetAccessLevel : Unrecognized access level \""
521 << accesslevel << "\"; setting database access OFF"
522 << QwLog::endl;
524 }
525 return;
526}

References QwLog::endl(), fAccessLevel, kQwDatabaseOff, kQwDatabaseReadOnly, kQwDatabaseReadWrite, and QwWarning.

Referenced by ProcessOptions(), and ProcessOptions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ StoreDBVersion()

bool QwDatabase::StoreDBVersion ( )
private

Retrieve database schema version information from database.

Definition at line 567 of file QwDatabase.cc.

568{
569 try
570 {
571 QwParitySchema::db_schema db_schema;
572 size_t record_count = QueryCount(
573 sqlpp::select(sqlpp::all_of(db_schema))
574 .from(db_schema)
575 .where(sqlpp::value(true))
576 );
577 QwDebug << "QwDatabase::StoreDBVersion => Number of rows returned: " << record_count << QwLog::endl;
578
579 // If there is more than one run in the DB with the same run number, then there will be trouble later on. Catch and bomb out.
580 if (record_count > 1)
581 {
582 QwError << "Unable to find unique schema version in database." << QwLog::endl;
583 QwError << "Schema query returned " << record_count << " rows." << QwLog::endl;
584 QwError << "Please make sure that db_schema contains one unique." << QwLog::endl;
585 Disconnect();
586 return false;
587 }
588
589 // Run already exists in database. Pull run_id and move along.
590 if (record_count == 1)
591 {
592 auto results = QuerySelect(
593 sqlpp::select(sqlpp::all_of(db_schema))
594 .from(db_schema)
595 .where(sqlpp::value(true))
596 );
598 results,
599 [this](const auto& row) {
600 QwDebug << "QwDatabase::StoreDBVersion => db_schema_id = " << row.db_schema_id << QwLog::endl;
601 this->fVersionMajor = row.major_release_number;
602 this->fVersionMinor = row.minor_release_number;
603 this->fVersionPoint = row.point_release_number;
604 }
605 );
606 Disconnect();
607 }
608 }
609 catch (const std::exception& er)
610 {
611 QwError << er.what() << QwLog::endl;
612 Disconnect();
613 return false;
614 }
615
616 return true;
617
618}
bool ForFirstResult(QueryResult &result, Lambda &&lambda) const
Definition QwDatabase.h:272

References Disconnect(), QwLog::endl(), ForFirstResult(), fVersionMajor, fVersionMinor, fVersionPoint, QueryCount(), QuerySelect(), QwDebug, and QwError.

Referenced by ValidateConnection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ValidateConnection()

Bool_t QwDatabase::ValidateConnection ( )
private

Checks that given connection parameters result in a valid connection.

This function is used to load the connection information for the database. It tests the connection to make sure it is valid and causes a program exit if no valid connection can be formed.

It is called the first time Connect() is called.

Definition at line 131 of file QwDatabase.cc.

132{
133 QwDebug << "Entering QwDatabase::ValidateConnection()..." << QwLog::endl;
134
135 // Bool_t status;
136 //
137 // Retrieve options if they haven't already been filled.
138 //
139 // if (fDatabase.empty()){
140 // status = ProcessOptions(gQwOptions);
141 // if (!status) return status;
142 // }
143
144 // Check values.
146 if (fDatabase.empty()){
147 QwError << "QwDatabase::ValidateConnection() : No database supplied. Unable to connect." << QwLog::endl;
148 fValidConnection=false;
149 }
150#ifdef __USE_DATABASE_SQLITE3__
151 if (fDBType != kQwDatabaseSQLite3) {
152#else
153 // If SQLite3 is not available, all databases require username/password
154 if (true) {
155#endif
156 if (fDBUsername.empty()){
157 QwError << "QwDatabase::ValidateConnection() : No database username supplied. Unable to connect." << QwLog::endl;
158 fValidConnection=false;
159 }
160 if (fDBPassword.empty()){
161 QwError << "QwDatabase::ValidateConnection() : No database password supplied. Unable to connect." << QwLog::endl;
162 fValidConnection=false;
163 }
164 if (fDBServer.empty()){
165 QwMessage << "QwDatabase::ValidateConnection() : No database server supplied. Attempting localhost." << QwLog::endl;
166 fDBServer = "localhost";
167 }
168 }
169 //
170 // Try to connect with given information
171 //
172 try {
173 // FIXME (wdconinc) duplication with Connect
174 switch(fDBType)
175 {
176#ifdef __USE_DATABASE_MYSQL__
177 case kQwDatabaseMySQL: {
178 QwDebug << "QwDatabase::ValidateConnection() : Using MySQL backend." << QwLog::endl;
179 sqlpp::mysql::connection_config config;
180 config.host = fDBServer;
181 config.user = fDBUsername;
182 config.password = fDBPassword;
183 config.database = fDatabase;
184 config.port = fDBPortNumber;
185#ifdef __USE_SQLPP11__
186 config.debug = fDBDebug;
187#endif
188#ifdef __USE_SQLPP23__
189 if (fDBDebug) {
190 config.debug = sqlpp::debug_logger({sqlpp::log_category::all}, [](const std::string& msg) {
191 QwMessage << "SQL Debug: " << msg << QwLog::endl;
192 });
193 }
194#endif
195 fDBConnection = std::make_shared<sqlpp::mysql::connection>(config);
196 break;
197 }
198#endif
199#ifdef __USE_DATABASE_SQLITE3__
200 case kQwDatabaseSQLite3: {
201 QwDebug << "QwDatabase::ValidateConnection() : Using SQLite3 backend." << QwLog::endl;
202 sqlpp::sqlite3::connection_config config;
203 config.path_to_database = fDatabase;
204 config.password = fDBPassword;
205 // FIXME (wdconinc) use proper access flags
206 config.flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
207#ifdef __USE_SQLPP11__
208 config.debug = fDBDebug;
209#endif
210#ifdef __USE_SQLPP23__
211 if (fDBDebug) {
212 config.debug = sqlpp::debug_logger({sqlpp::log_category::all}, [](const std::string& msg) {
213 QwMessage << "SQL Debug: " << msg << QwLog::endl;
214 });
215 }
216#endif
217 fDBConnection = std::make_shared<sqlpp::sqlite3::connection>(config);
218 break;
219 }
220#endif
221#ifdef __USE_DATABASE_POSTGRESQL__
222 case kQwDatabasePostgreSQL: {
223 QwDebug << "QwDatabase::ValidateConnection() : Using PostgreSQL backend." << QwLog::endl;
224 sqlpp::postgresql::connection_config config;
225 config.host = fDBServer;
226 config.user = fDBUsername;
227 config.password = fDBPassword;
228 config.dbname = fDatabase;
229 config.port = fDBPortNumber;
230#ifdef __USE_SQLPP11__
231 config.debug = fDBDebug;
232#endif
233#ifdef __USE_SQLPP23__
234 if (fDBDebug) {
235 config.debug = sqlpp::debug_logger({sqlpp::log_category::all}, [](const std::string& msg) {
236 QwMessage << "SQL Debug: " << msg << QwLog::endl;
237 });
238 }
239#endif
240 fDBConnection = std::make_shared<sqlpp::postgresql::connection>(config);
241 break;
242 }
243#endif
244 default: {
245 QwError << "QwDatabase::ValidateConnection() : Unsupported database type." << QwLog::endl;
247 return false;
248 }
249 }
250 } catch (std::exception const& e) {
251 QwError << "QwDatabase::ValidateConnection() : " << QwLog::endl;
252 QwError << e.what() << " while validating connection" << QwLog::endl;
253 QwError << "Database name = " << fDatabase <<QwLog::endl;
254 QwError << "Database server = " << fDBServer <<QwLog::endl;
255 QwError << "Database username = " << fDBUsername <<QwLog::endl;
256 QwError << "Database port = " << fDBPortNumber <<QwLog::endl;
257 QwError << "Continuing without database." << QwLog::endl;
258 QwWarning << "Might have left database connection dangling..." << QwLog::endl;
260 return kFALSE;
261 }
262
263 QwDebug << "QwDatabase::ValidateConnection() : Made it past connect() call." << QwLog::endl;
264
265 // Get database schema version information
266 if (StoreDBVersion()) {
267 fValidConnection = true;
268 // Success!
269 QwMessage << "QwDatabase::ValidateConnection() : Successfully connected to requested database." << QwLog::endl;
270 } else {
271 QwError << "QwDatabase::ValidateConnection() : Unsuccessfully connected to requested database." << QwLog::endl;
272 // Connection was bad so clear the member variables
273 fValidConnection = false;
274 fDatabase.clear();
275 fDBServer.clear();
276 fDBUsername.clear();
277 fDBPassword.clear();
279 }
280 Disconnect();
281 }
282
283 // Check to make sure database and QwDatabase schema versions match up.
288 fValidConnection = false;
289 QwError << "QwDatabase::ValidConnection() : Connected database schema inconsistent with current version of analyzer." << QwLog::endl;
290 QwError << " Database version is " << this->GetVersion() << QwLog::endl;
291 QwError << " Required database version is " << this->GetValidVersion() << QwLog::endl;
292 QwError << " Please connect to a database supporting the required schema version." << QwLog::endl;
293 exit(1);
294 }
295
296 QwDebug << "QwDatabase::ValidateConnection() : Exiting successfully." << QwLog::endl;
297 return fValidConnection;
298}
const string GetValidVersion()
bool StoreDBVersion()
Retrieve database schema version information from database.
const string GetVersion()

References Disconnect(), QwLog::endl(), fAccessLevel, fDatabase, fDBConnection, fDBDebug, fDBPassword, fDBPortNumber, fDBServer, fDBType, fDBUsername, fValidConnection, fVersionMajor, fVersionMinor, fVersionPoint, GetValidVersion(), GetVersion(), kQwDatabaseOff, kQwDatabaseReadWrite, kValidVersionMajor, kValidVersionMinor, kValidVersionPoint, QwDebug, QwError, QwMessage, QwWarning, and StoreDBVersion().

Referenced by Connect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ VisitConnection()

template<EConnectionCheck CheckConnection = EConnectionCheck::kChecked, typename Lambda>
auto QwDatabase::VisitConnection ( Lambda && lambda)
inlineprivate

Definition at line 187 of file QwDatabase.h.

187 {
188 return std::visit([&lambda](auto& connection) -> decltype(lambda(connection)) {
189 using T = std::decay_t<decltype(connection)>;
190 if constexpr (std::is_same_v<T, std::monostate>) {
191 if constexpr (CheckConnection == EConnectionCheck::kChecked) {
192 throw std::runtime_error("Database not connected (no backend available)");
193 } else {
194 // For unchecked mode with monostate, return appropriate default
195 if constexpr (std::is_void_v<decltype(lambda(connection))>) {
196 return; // Return void for void lambdas
197 } else {
198 return decltype(lambda(connection)){}; // Return default-constructed value
199 }
200 }
201 } else {
202 if constexpr (CheckConnection == EConnectionCheck::kChecked) {
203 if (!connection) {
204 throw std::runtime_error("Database not connected");
205 }
206 }
207 return lambda(connection);
208 }
209 }, fDBConnection);
210 }

References fDBConnection, and kChecked.

Referenced by Connected(), Disconnect(), QueryCount(), QueryExecute(), and QueryInsertAndGetId().

+ Here is the caller graph for this function:

◆ VisitConnectionForSelect()

template<typename Statement, typename Lambda>
auto QwDatabase::VisitConnectionForSelect ( Lambda && lambda) -> QuerySelectReturnType<Statement>
inline

Definition at line 285 of file QwDatabase.h.

285 {
286 using ReturnVariant = QuerySelectReturnType<Statement>;
287 return std::visit([&lambda](auto& connection) -> ReturnVariant {
288 using T = std::decay_t<decltype(connection)>;
289 if constexpr (std::is_same_v<T, std::monostate>) {
290 throw std::runtime_error("Database not connected (no backend available)");
291 } else {
292 if (!connection) {
293 throw std::runtime_error("Database not connected");
294 }
295 return ReturnVariant{lambda(connection)};
296 }
297 }, fDBConnection);
298 }
std::variant< std::monostate > QuerySelectReturnType
Definition QwDatabase.h:163

References fDBConnection.

Referenced by QuerySelect().

+ Here is the caller graph for this function:

Field Documentation

◆ fAccessLevel

EQwDBAccessLevel QwDatabase::fAccessLevel
private

Access level of the database instance.

Definition at line 431 of file QwDatabase.h.

Referenced by AllowsReadAccess(), AllowsWriteAccess(), Connect(), ProcessOptions(), QwDatabase(), QwDatabase(), SetAccessLevel(), and ValidateConnection().

◆ fDatabase

string QwDatabase::fDatabase
private

Name of database to connect to.

Definition at line 433 of file QwDatabase.h.

Referenced by Connect(), PrintServerInfo(), ProcessOptions(), ProcessOptions(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fDBConnection

DatabaseConnection QwDatabase::fDBConnection
private

◆ fDBDebug

Bool_t QwDatabase::fDBDebug
private

True if database debug information should be printed to stdout.

Definition at line 439 of file QwDatabase.h.

Referenced by Connect(), ProcessOptions(), and ValidateConnection().

◆ fDBInsertMissingKeys

Bool_t QwDatabase::fDBInsertMissingKeys
protected

True if missing keys should be inserted into the database automatically.

Definition at line 449 of file QwDatabase.h.

Referenced by ProcessOptions().

◆ fDBPassword

string QwDatabase::fDBPassword
private

DB account password.

Definition at line 436 of file QwDatabase.h.

Referenced by Connect(), ProcessOptions(), ProcessOptions(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fDBPortNumber

UInt_t QwDatabase::fDBPortNumber
private

Port number to connect to on server (mysql default port is 3306)

Definition at line 437 of file QwDatabase.h.

Referenced by Connect(), PrintServerInfo(), ProcessOptions(), ProcessOptions(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fDBServer

string QwDatabase::fDBServer
private

Name of server carrying DB to connect to.

Definition at line 434 of file QwDatabase.h.

Referenced by Connect(), PrintServerInfo(), ProcessOptions(), ProcessOptions(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fDBType

EQwDBType QwDatabase::fDBType = kQwDatabaseNone
private

Type of database backend to use.

Definition at line 134 of file QwDatabase.h.

Referenced by Connect(), ProcessOptions(), ProcessOptions(), and ValidateConnection().

◆ fDBUsername

string QwDatabase::fDBUsername
private

Name of account to connect to DB server with.

Definition at line 435 of file QwDatabase.h.

Referenced by Connect(), PrintServerInfo(), ProcessOptions(), ProcessOptions(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fValidConnection

Bool_t QwDatabase::fValidConnection
private

True if a valid connection was established using defined connection information.

Definition at line 438 of file QwDatabase.h.

Referenced by Connect(), PrintServerInfo(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ fVersionMajor

string QwDatabase::fVersionMajor
private

Major version number of current DB schema.

Definition at line 441 of file QwDatabase.h.

Referenced by GetVersion(), GetVersionMajor(), QwDatabase(), QwDatabase(), StoreDBVersion(), and ValidateConnection().

◆ fVersionMinor

string QwDatabase::fVersionMinor
private

Minor version number of current DB schema.

Definition at line 442 of file QwDatabase.h.

Referenced by GetVersion(), GetVersionMinor(), QwDatabase(), QwDatabase(), StoreDBVersion(), and ValidateConnection().

◆ fVersionPoint

string QwDatabase::fVersionPoint
private

Point version number of current DB schema.

Definition at line 443 of file QwDatabase.h.

Referenced by GetVersion(), GetVersionPoint(), QwDatabase(), QwDatabase(), StoreDBVersion(), and ValidateConnection().

◆ kValidVersionMajor

const string QwDatabase::kValidVersionMajor
private

Definition at line 444 of file QwDatabase.h.

Referenced by GetValidVersion(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ kValidVersionMinor

const string QwDatabase::kValidVersionMinor
private

Definition at line 445 of file QwDatabase.h.

Referenced by GetValidVersion(), QwDatabase(), QwDatabase(), and ValidateConnection().

◆ kValidVersionPoint

const string QwDatabase::kValidVersionPoint
private

Definition at line 446 of file QwDatabase.h.

Referenced by GetValidVersion(), QwDatabase(), QwDatabase(), and ValidateConnection().


The documentation for this class was generated from the following files: