QwAnalysis
QwDatabase Class Reference

A database interface class. More...

#include <QwDatabase.h>

+ Inheritance diagram for QwDatabase:

Public Member Functions

 QwDatabase (const string &major="00", const string &minor="00", const string &point="0000")
 Simple constructor. More...
 
 QwDatabase (QwOptions &options, const string &major="00", const string &minor="00", const string &point="0000")
 Constructor with QwOptions object. More...
 
virtual ~QwDatabase ()
 Destructor. More...
 
void SetAccessLevel (string accesslevel)
 Sets the access level flag based on string labels: "off", "ro", "rw". More...
 
Bool_t AllowsReadAccess ()
 
Bool_t AllowsWriteAccess ()
 
Bool_t Connect ()
 Open a connection to the database using the predefined parameters. More...
 
void Disconnect ()
 
Bool_t Connected ()
 
const string GetServerVersion ()
 
void ProcessOptions (QwOptions &options)
 Processes the options contained in the QwOptions object. More...
 
void ProcessOptions (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. More...
 
mysqlpp::Query Query (const char *qstr=0)
 
mysqlpp::Query Query (const std::string &qstr)
 
const string GetVersion ()
 
const string GetVersionMajor ()
 Return a full version string for the DB schema. More...
 
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. More...
 

Private Types

enum  EQwDBAccessLevel { kQwDatabaseOff, kQwDatabaseReadOnly, kQwDatabaseReadWrite }
 

Private Member Functions

Bool_t ValidateConnection ()
 Checks that given connection parameters result in a valid connection. More...
 
bool StoreDBVersion ()
 Retrieve database schema version information from database. More...
 
 QwDatabase (const QwDatabase &rhs)
 Copy Constructor (not implemented) More...
 
QwDatabaseoperator= (const QwDatabase &rhs)
 Assignment operator (not implemented) More...
 

Private Attributes

EQwDBAccessLevel fAccessLevel
 Access level of the database instance. More...
 
string fDatabase
 Name of database to connect to. More...
 
string fDBServer
 Name of server carrying DB to connect to. More...
 
string fDBUsername
 Name of account to connect to DB server with. More...
 
string fDBPassword
 DB account password. More...
 
UInt_t fDBPortNumber
 Port number to connect to on server (mysql default port is 3306) More...
 
Bool_t fValidConnection
 True if a valid connection was established using defined connection information. More...
 
string fVersionMajor
 Major version number of current DB schema. More...
 
string fVersionMinor
 Minor version number of current DB schema. More...
 
string fVersionPoint
 Point version number of current DB schema. More...
 
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 45 of file QwDatabase.h.

Member Enumeration Documentation

Enumerator
kQwDatabaseOff 
kQwDatabaseReadOnly 
kQwDatabaseReadWrite 

Definition at line 79 of file QwDatabase.h.

Constructor & Destructor Documentation

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

Simple constructor.

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 53 of file QwDatabase.cc.

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

53  : Connection(), kValidVersionMajor(major), kValidVersionMinor(minor), kValidVersionPoint(point)
54 {
55  QwDebug << "Greetings from QwDatabase extended constructor." << QwLog::endl;
56 
57  // Initialize member fields
60 
62 
63  fDBPortNumber = 0;
64  fValidConnection = false;
65 
66  ProcessOptions(options);
67 
68 }
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
const string kValidVersionPoint
Definition: QwDatabase.h:105
void ProcessOptions(QwOptions &options)
Processes the options contained in the QwOptions object.
Definition: QwDatabase.cc:225
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
string fVersionMajor
Major version number of current DB schema.
Definition: QwDatabase.h:100
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91
const string kValidVersionMajor
Definition: QwDatabase.h:103
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
string fDBPassword
DB account password.
Definition: QwDatabase.h:96
const string kValidVersionMinor
Definition: QwDatabase.h:104
Bool_t fValidConnection
True if a valid connection was established using defined connection information.
Definition: QwDatabase.h:98
string fVersionPoint
Point version number of current DB schema.
Definition: QwDatabase.h:102
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
string fVersionMinor
Minor version number of current DB schema.
Definition: QwDatabase.h:101
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299

+ Here is the call graph for this function:

QwDatabase::~QwDatabase ( )
virtual

Destructor.

The destructor says "Good-bye World!"

Definition at line 72 of file QwDatabase.cc.

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

73 {
74  QwDebug << "QwDatabase::~QwDatabase() : Good-bye World from QwDatabase destructor!" << QwLog::endl;
75  if( connected() ) Disconnect();
76 }
void Disconnect()
Definition: QwDatabase.h:59
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299

+ Here is the call graph for this function:

QwDatabase::QwDatabase ( const QwDatabase rhs)
private

Copy Constructor (not implemented)

Member Function Documentation

Bool_t QwDatabase::AllowsReadAccess ( )
inline

Definition at line 55 of file QwDatabase.h.

References fAccessLevel, kQwDatabaseReadOnly, and kQwDatabaseReadWrite.

Referenced by QwParityDB::SetupOneRun().

EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91

+ Here is the caller graph for this function:

Bool_t QwDatabase::AllowsWriteAccess ( )
inline

Definition at line 56 of file QwDatabase.h.

References fAccessLevel, and kQwDatabaseReadWrite.

Referenced by main().

EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91

+ Here is the caller graph for this function:

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 175 of file QwDatabase.cc.

References QwLog::endl(), fAccessLevel, fDatabase, fDBPassword, fDBPortNumber, fDBServer, fDBUsername, fValidConnection, kQwDatabaseOff, QwError, and ValidateConnection().

Referenced by QwEPICSEvent::FillDB(), QwRegression::FillDB(), QwBlinder::FillDB(), QwMainCerenkovDetector::FillDB(), QwBeamLine::FillDB(), QwIntegratedRaster::FillDB(), QwHelicity::FillDB(), QwLumi::FillDB(), QwBeamMod::FillDB_MPS(), QwBlinder::FillErrDB(), QwMainCerenkovDetector::FillErrDB(), QwBeamLine::FillErrDB(), QwIntegratedRaster::FillErrDB(), QwLumi::FillErrDB(), QwParityDB::FillParameterFiles(), QwEPICSEvent::FillSlowControlsData(), QwEPICSEvent::FillSlowControlsSettings(), QwEPICSEvent::FillSlowControlsStrigs(), QwBlinder::ReadSeed(), QwParityDB::SetAnalysisID(), QwParityDB::SetRunID(), QwParityDB::SetRunletID(), QwParityDB::SetRunNumber(), QwParityDB::StoreErrorCodeIDs(), QwParityDB::StoreLumiDetectorIDs(), QwParityDB::StoreMainDetectorIDs(), QwParityDB::StoreMeasurementIDs(), QwParityDB::StoreMonitorIDs(), QwParityDB::StoreSlowControlDetectorIDs(), QwBlinder::WriteChecksum(), and QwBlinder::WriteTestValues().

176 {
177  /* Open a connection to the database using the predefined parameters.
178  * Must call QwDatabase::ConnectionInfo() first.
179  */
180 
181  // Return flase, if we're not using the DB.
182  if (fAccessLevel==kQwDatabaseOff) return false;
183 
184  // Make sure not already connected
185  if (connected()) return true;
186 
187  // If never connected before, then make sure connection parameters form
188  // valid connection
189  if (!fValidConnection) {
191  }
192 
193  if (fValidConnection) {
194  return connect(fDatabase.c_str(), fDBServer.c_str(), fDBUsername.c_str(), fDBPassword.c_str(), (unsigned int) fDBPortNumber);
195  // return connect(fDatabase.Data(), fDBServer.Data(), fDBUsername.Data(), fDBPassword.Data(), (unsigned int) fDBPortNumber);
196  } else {
197  QwError << "QwDatabase::Connect() : Must establish valid connection to database." << QwLog::endl;
198  return false;
199  }
200 }
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
Bool_t ValidateConnection()
Checks that given connection parameters result in a valid connection.
Definition: QwDatabase.cc:84
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91
string fDBPassword
DB account password.
Definition: QwDatabase.h:96
Bool_t fValidConnection
True if a valid connection was established using defined connection information.
Definition: QwDatabase.h:98
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Bool_t QwDatabase::Connected ( )
inline

Definition at line 60 of file QwDatabase.h.

Referenced by QwParityDB::~QwParityDB().

60 { return connected(); }

+ Here is the caller graph for this function:

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 209 of file QwDatabase.cc.

References QwOptions::AddOptions().

Referenced by QwOptions::DefineOptions().

210 {
211  // Specify command line options for use by QwDatabase
212  options.AddOptions("Database options")("QwDatabase.accesslevel", po::value<string>(), "database access level (OFF,RO,RW)");
213  options.AddOptions("Database options")("QwDatabase.dbname", po::value<string>(), "database name");
214  options.AddOptions("Database options")("QwDatabase.dbserver", po::value<string>(), "database server name");
215  options.AddOptions("Database options")("QwDatabase.dbusername", po::value<string>(), "database username");
216  options.AddOptions("Database options")("QwDatabase.dbpassword", po::value<string>(), "database password");
217  options.AddOptions("Database options")("QwDatabase.dbport", po::value<int>()->default_value(0), "database server port number (defaults to standard mysql port)");
218 }
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:164

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const string QwDatabase::GetServerVersion ( )
inline

Definition at line 61 of file QwDatabase.h.

Referenced by PrintServerInfo().

61 {return server_version();}; //<! Get database server version

+ Here is the caller graph for this function:

const string QwDatabase::GetValidVersion ( )

Definition at line 309 of file QwDatabase.cc.

References kValidVersionMajor, kValidVersionMinor, and kValidVersionPoint.

Referenced by ValidateConnection().

309  {
310  string version = kValidVersionMajor + "." + kValidVersionMinor + "." + kValidVersionPoint;
311  return version;
312 }
const string kValidVersionPoint
Definition: QwDatabase.h:105
const string kValidVersionMajor
Definition: QwDatabase.h:103
const string kValidVersionMinor
Definition: QwDatabase.h:104

+ Here is the caller graph for this function:

const string QwDatabase::GetVersion ( )

Definition at line 304 of file QwDatabase.cc.

References fVersionMajor, fVersionMinor, and fVersionPoint.

Referenced by main(), and ValidateConnection().

304  {
305  string version = fVersionMajor + "." + fVersionMinor + "." + fVersionPoint;
306  return version;
307 }
string fVersionMajor
Major version number of current DB schema.
Definition: QwDatabase.h:100
string fVersionPoint
Point version number of current DB schema.
Definition: QwDatabase.h:102
string fVersionMinor
Minor version number of current DB schema.
Definition: QwDatabase.h:101

+ Here is the caller graph for this function:

const string QwDatabase::GetVersionMajor ( )
inline

Return a full version string for the DB schema.

Definition at line 71 of file QwDatabase.h.

References fVersionMajor.

71 {return fVersionMajor;} //<! fVersionMajor getter
string fVersionMajor
Major version number of current DB schema.
Definition: QwDatabase.h:100
const string QwDatabase::GetVersionMinor ( )
inline

Definition at line 72 of file QwDatabase.h.

References fVersionMinor.

72 {return fVersionMinor;} //<! fVersionMinor getter
string fVersionMinor
Minor version number of current DB schema.
Definition: QwDatabase.h:101
const string QwDatabase::GetVersionPoint ( )
inline

Definition at line 73 of file QwDatabase.h.

References fVersionPoint.

73 {return fVersionPoint;} //<! fVersionPoint getter
string fVersionPoint
Point version number of current DB schema.
Definition: QwDatabase.h:102
QwDatabase& QwDatabase::operator= ( const QwDatabase rhs)
private

Assignment operator (not implemented)

void QwDatabase::PrintServerInfo ( )

This function prints the server information.

Definition at line 283 of file QwDatabase.cc.

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

284 {
285  if (fValidConnection)
286  {
287  printf("\nQwDatabase MySQL ");
288  printf("%s v%s %s -----------------\n", BOLD, GetServerVersion().c_str(), NORMAL);
289  printf("Database server : %s%10s%s", RED, fDBServer.c_str(), NORMAL);
290  printf(" name : %s%12s%s", BLUE, fDatabase.c_str(), NORMAL);
291  printf(" user : %s%6s%s", RED, fDBUsername.c_str(), NORMAL);
292  printf(" port : %s%6d%s\n", BLUE, fDBPortNumber, NORMAL);
293  printf(" %s\n\n", server_status().c_str());
294  }
295  else
296  {
297  printf("There is no connection.\n");
298  }
299 
300  return;
301 }
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
#define BOLD
Definition: QwColor.h:37
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
Bool_t fValidConnection
True if a valid connection was established using defined connection information.
Definition: QwDatabase.h:98
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
#define RED
Definition: QwColor.h:29
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93
#define BLUE
Definition: QwColor.h:32
const string GetServerVersion()
Definition: QwDatabase.h:61
#define NORMAL
Definition: QwColor.h:61

+ Here is the call graph for this function:

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 225 of file QwDatabase.cc.

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

Referenced by QwDatabase().

226 {
227  if (options.HasValue("QwDatabase.accesslevel")) {
228  string access = options.GetValue<string>("QwDatabase.accesslevel");
229  SetAccessLevel(access);
230  }
231  else {
232  QwWarning << "QwDatabase::ProcessOptions : No access level specified; database access is OFF" << QwLog::endl;
234  }
235  if (options.HasValue("QwDatabase.dbport")) {
236  fDBPortNumber = options.GetValue<int>("QwDatabase.dbport");
237  }
238  if (options.HasValue("QwDatabase.dbname")) {
239  fDatabase = options.GetValue<string>("QwDatabase.dbname");
240  }
241  if (options.HasValue("QwDatabase.dbusername")) {
242  fDBUsername = options.GetValue<string>("QwDatabase.dbusername");
243  }
244  if (options.HasValue("QwDatabase.dbpassword")) {
245  fDBPassword = options.GetValue<string>("QwDatabase.dbpassword");
246  }
247  if (options.HasValue("QwDatabase.dbserver")) {
248  fDBServer = options.GetValue<string>("QwDatabase.dbserver");
249  }
250 
251  return;
252 }
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
bool HasValue(const std::string &key)
Has this key been defined.
Definition: QwOptions.h:233
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
void SetAccessLevel(string accesslevel)
Sets the access level flag based on string labels: &quot;off&quot;, &quot;ro&quot;, &quot;rw&quot;.
Definition: QwDatabase.cc:264
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91
T GetValue(const std::string &key)
Get a templated value.
Definition: QwOptions.h:240
string fDBPassword
DB account password.
Definition: QwDatabase.h:96
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void QwDatabase::ProcessOptions ( 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 254 of file QwDatabase.cc.

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

255 {
256  SetAccessLevel(static_cast<string>(accesslevel));
257  fDatabase = dbname;
258  fDBUsername = username;
259  fDBPassword = passwd;
260  fDBServer = dbhost;
261  fDBPortNumber = dbport;
262 }
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
void SetAccessLevel(string accesslevel)
Sets the access level flag based on string labels: &quot;off&quot;, &quot;ro&quot;, &quot;rw&quot;.
Definition: QwDatabase.cc:264
string fDBPassword
DB account password.
Definition: QwDatabase.h:96
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93

+ Here is the call graph for this function:

mysqlpp::Query QwDatabase::Query ( const std::string &  qstr)
inline

Definition at line 67 of file QwDatabase.h.

67 {return query(qstr);} //<! Generate a query to the database.
void QwDatabase::SetAccessLevel ( string  accesslevel)

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

Definition at line 264 of file QwDatabase.cc.

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

Referenced by ProcessOptions().

265 {
266  TString level = accesslevel.c_str();
267  level.ToLower();
268  if (level=="off") fAccessLevel = kQwDatabaseOff;
269  else if (level=="ro") fAccessLevel = kQwDatabaseReadOnly;
270  else if (level=="rw") fAccessLevel = kQwDatabaseReadWrite;
271  else{
272  QwWarning << "QwDatabase::SetAccessLevel : Unrecognized access level \""
273  << accesslevel << "\"; setting database access OFF"
274  << QwLog::endl;
276  }
277  return;
278 }
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool QwDatabase::StoreDBVersion ( )
private

Retrieve database schema version information from database.

Definition at line 318 of file QwDatabase.cc.

References Disconnect(), QwLog::endl(), fVersionMajor, fVersionMinor, fVersionPoint, Query(), QwDebug, and QwError.

Referenced by ValidateConnection().

319 {
320  try
321  {
322  mysqlpp::Query query = this->Query();
323 
324  query << "SELECT * FROM db_schema";
325  std::vector<db_schema> res;
326  query.storein(res);
327  QwDebug << "QwDatabase::StoreDBVersion => Number of rows returned: " << res.size() << QwLog::endl;
328 
329  // 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.
330  if (res.size()>1)
331  {
332  QwError << "Unable to find unique schema version in database." << QwLog::endl;
333  QwError << "Schema query returned " << res.size() << "rows." << QwLog::endl;
334  QwError << "Please make sure that db_schema contains one unique." << QwLog::endl;
335  this->Disconnect();
336  return false;
337  }
338 
339  // Run already exists in database. Pull run_id and move along.
340  if (res.size()==1)
341  {
342  QwDebug << "QwDatabase::StoreDBVersion => db_schema_id = " << res.at(0).db_schema_id << QwLog::endl;
343 
344  fVersionMajor=res.at(0).major_release_number;
345  fVersionMinor=res.at(0).minor_release_number;
346  fVersionPoint=res.at(0).point_release_number;
347  this->Disconnect();
348  }
349  }
350  catch (const mysqlpp::Exception& er)
351  {
352  QwError << er.what() << QwLog::endl;
353  disconnect();
354  return false;
355  }
356 
357  return true;
358 
359 }
void Disconnect()
Definition: QwDatabase.h:59
string fVersionMajor
Major version number of current DB schema.
Definition: QwDatabase.h:100
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
string fVersionPoint
Point version number of current DB schema.
Definition: QwDatabase.h:102
mysqlpp::Query Query(const char *qstr=0)
Definition: QwDatabase.h:66
string fVersionMinor
Minor version number of current DB schema.
Definition: QwDatabase.h:101
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 84 of file QwDatabase.cc.

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

Referenced by Connect().

85 {
86  QwDebug << "Entering QwDatabase::ValidateConnection()..." << QwLog::endl;
87 
88  // Bool_t status;
89  //
90  // Retrieve options if they haven't already been filled.
91  //
92  // if (fDatabase.empty()){
93  // status = ProcessOptions(gQwOptions);
94  // if (!status) return status;
95  // }
96 
97  // Check values.
99  if (fDatabase.empty()){
100  QwError << "QwDatabase::ValidateConnection() : No database supplied. Unable to connect." << QwLog::endl;
101  fValidConnection=false;
102  }
103  if (fDBUsername.empty()){
104  QwError << "QwDatabase::ValidateConnection() : No database username supplied. Unable to connect." << QwLog::endl;
105  fValidConnection=false;
106  }
107  if (fDBPassword.empty()){
108  QwError << "QwDatabase::ValidateConnection() : No database password supplied. Unable to connect." << QwLog::endl;
109  fValidConnection=false;
110  }
111  if (fDBServer.empty()){
112  QwMessage << "QwDatabase::ValidateConnection() : No database server supplied. Attempting localhost." << QwLog::endl;
113  fDBServer = "localhost";
114  }
115  //
116  // Try to connect with given information
117  //
118  try {
119  connect(fDatabase.c_str(), fDBServer.c_str(), fDBUsername.c_str(),
120  fDBPassword.c_str(), (unsigned int) fDBPortNumber);
121  // connect(dbname.Data(), server.Data(), username.Data(), password.Data(), (unsigned int) port);
122  } catch (std::exception const& e) {
123  QwError << "QwDatabase::ValidateConnection() : " << QwLog::endl;
124  QwError << e.what() << " while validating connection" << QwLog::endl;
125  QwError << "Database name = " << fDatabase <<QwLog::endl;
126  QwError << "Database server = " << fDBServer <<QwLog::endl;
127  QwError << "Database username = " << fDBUsername <<QwLog::endl;
128  QwError << "Database port = " << fDBPortNumber <<QwLog::endl;
129  QwError << "Continuing without database." << QwLog::endl;
130  QwWarning << "Might have left database connection dangling..." << QwLog::endl;
132  return kFALSE;
133  }
134 
135  QwDebug << "QwDatabase::ValidateConnection() : Made it past connect() call." << QwLog::endl;
136 
137  // Get database schema version information
138  if (StoreDBVersion()) {
139  fValidConnection=true;
140  // Success!
141  QwMessage << "QwDatabase::ValidateConnection() : Successfully connected to requested database." << QwLog::endl;
142  } else {
143  QwError << "QwDatabase::ValidateConnection() : Unsuccessfully connected to requested database." << QwLog::endl;
144  // Connection was bad so clear the member variables
145  fValidConnection=false;
146  fDatabase.clear();
147  fDBServer.clear();
148  fDBUsername.clear();
149  fDBPassword.clear();
150  fDBPortNumber=0;
151  }
152  disconnect();
153  }
154 
155  // Check to make sure database and QwDatabase schema versions match up.
160  fValidConnection = false;
161  QwError << "QwDatabase::ValidConnection() : Connected database schema inconsistent with current version of analyzer." << QwLog::endl;
162  QwError << " Database version is " << this->GetVersion() << QwLog::endl;
163  QwError << " Required database version is " << this->GetValidVersion() << QwLog::endl;
164  QwError << " Please connect to a database supporting the required schema version." << QwLog::endl;
165  exit(1);
166  }
167 
168  QwDebug << "QwDatabase::ValidateConnection() : Exiting successfully." << QwLog::endl;
169  return fValidConnection;
170 }
#define QwMessage
Predefined log drain for regular messages.
Definition: QwLog.h:50
UInt_t fDBPortNumber
Port number to connect to on server (mysql default port is 3306)
Definition: QwDatabase.h:97
const string kValidVersionPoint
Definition: QwDatabase.h:105
string fDBServer
Name of server carrying DB to connect to.
Definition: QwDatabase.h:94
const string GetValidVersion()
Definition: QwDatabase.cc:309
static const double e
Definition: QwUnits.h:91
string fVersionMajor
Major version number of current DB schema.
Definition: QwDatabase.h:100
const string GetVersion()
Definition: QwDatabase.cc:304
EQwDBAccessLevel fAccessLevel
Access level of the database instance.
Definition: QwDatabase.h:91
const string kValidVersionMajor
Definition: QwDatabase.h:103
#define QwDebug
Predefined log drain for debugging output.
Definition: QwLog.h:60
string fDBPassword
DB account password.
Definition: QwDatabase.h:96
const string kValidVersionMinor
Definition: QwDatabase.h:104
Bool_t fValidConnection
True if a valid connection was established using defined connection information.
Definition: QwDatabase.h:98
string fVersionPoint
Point version number of current DB schema.
Definition: QwDatabase.h:102
string fDBUsername
Name of account to connect to DB server with.
Definition: QwDatabase.h:95
string fVersionMinor
Minor version number of current DB schema.
Definition: QwDatabase.h:101
string fDatabase
Name of database to connect to.
Definition: QwDatabase.h:93
static std::ostream & endl(std::ostream &)
End of the line.
Definition: QwLog.cc:299
#define QwWarning
Predefined log drain for warnings.
Definition: QwLog.h:45
bool StoreDBVersion()
Retrieve database schema version information from database.
Definition: QwDatabase.cc:318
#define QwError
Predefined log drain for errors.
Definition: QwLog.h:40

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

EQwDBAccessLevel QwDatabase::fAccessLevel
private

Access level of the database instance.

Definition at line 91 of file QwDatabase.h.

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

string QwDatabase::fDatabase
private

Name of database to connect to.

Definition at line 93 of file QwDatabase.h.

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

string QwDatabase::fDBPassword
private

DB account password.

Definition at line 96 of file QwDatabase.h.

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

UInt_t QwDatabase::fDBPortNumber
private

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

Definition at line 97 of file QwDatabase.h.

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

string QwDatabase::fDBServer
private

Name of server carrying DB to connect to.

Definition at line 94 of file QwDatabase.h.

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

string QwDatabase::fDBUsername
private

Name of account to connect to DB server with.

Definition at line 95 of file QwDatabase.h.

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

Bool_t QwDatabase::fValidConnection
private

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

Definition at line 98 of file QwDatabase.h.

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

string QwDatabase::fVersionMajor
private

Major version number of current DB schema.

Definition at line 100 of file QwDatabase.h.

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

string QwDatabase::fVersionMinor
private

Minor version number of current DB schema.

Definition at line 101 of file QwDatabase.h.

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

string QwDatabase::fVersionPoint
private

Point version number of current DB schema.

Definition at line 102 of file QwDatabase.h.

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

const string QwDatabase::kValidVersionMajor
private

Definition at line 103 of file QwDatabase.h.

Referenced by GetValidVersion(), and ValidateConnection().

const string QwDatabase::kValidVersionMinor
private

Definition at line 104 of file QwDatabase.h.

Referenced by GetValidVersion(), and ValidateConnection().

const string QwDatabase::kValidVersionPoint
private

Definition at line 105 of file QwDatabase.h.

Referenced by GetValidVersion(), and ValidateConnection().


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