@@ -25,7 +25,7 @@ namespace quality_control {
2525namespace repository {
2626
2727MySqlDatabase::MySqlDatabase ()
28- : mServer (nullptr ), queueSize(0 )
28+ : mServer (nullptr ), queueSize(0 )
2929{
3030 lastStorage.reset ();
3131}
@@ -51,8 +51,8 @@ void MySqlDatabase::connect(std::string host, std::string database, std::string
5151 mServer = new TMySQLServer (connectionString.str ().c_str (), username.c_str (), password.c_str ());
5252 if (!mServer || mServer ->GetErrorCode ()) {
5353 string s = " Failed to connect to the database\n " ;
54- if (mServer ->GetErrorCode ()) {
55- s+= mServer ->GetErrorMsg ();
54+ if (mServer ->GetErrorCode ()) {
55+ s += mServer ->GetErrorMsg ();
5656 }
5757 BOOST_THROW_EXCEPTION (FatalException () << errinfo_details (s));
5858 } else {
@@ -65,31 +65,32 @@ void MySqlDatabase::prepareTaskDataContainer(std::string taskName)
6565 // one object per run
6666 string query;
6767 query += " CREATE TABLE IF NOT EXISTS `data_" + taskName
68- + " ` (object_name CHAR(64), updatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, data LONGBLOB, size INT, run INT, "
69- " fill INT, PRIMARY KEY(object_name, run)) ENGINE=MyISAM" ;
68+ +
69+ " ` (object_name CHAR(64), updatetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP, data LONGBLOB, size INT, run INT, "
70+ " fill INT, PRIMARY KEY(object_name, run)) ENGINE=MyISAM" ;
7071 if (!execute (query)) {
7172 BOOST_THROW_EXCEPTION (FatalException () << errinfo_details (" Failed to create data table" ));
7273 } else {
7374 QcInfoLogger::GetInstance () << " Create data table for task " << taskName << infologger::endm;
7475 }
7576}
7677
77- void MySqlDatabase::store (MonitorObject* mo)
78+ void MySqlDatabase::store (MonitorObject * mo)
7879{
7980 // TODO we take ownership here to delete later -> clearly to be improved
8081 // we execute grouped insertions. Here we just register that we should keep this mo in memory.
8182 mObjectsQueue [mo->getTaskName ()].push_back (mo);
8283 queueSize++;
83- if (queueSize > 100 || lastStorage.getTime () > 10 /* sec*/ ) { // TODO use a configuration to set the max limits
84+ if (queueSize > 1 || lastStorage.getTime () > 10 /* sec*/ ) { // TODO use a configuration to set the max limits
8485 storeQueue ();
8586 }
8687}
8788
8889void MySqlDatabase::storeQueue ()
8990{
90- cout << " Database queue will now be processed (" << queueSize << " objects)" << endl;
91+ cout << " Database queue will now be processed (" << queueSize << " objects)" << endl;
9192
92- for (auto & kv : mObjectsQueue ) {
93+ for (auto & kv : mObjectsQueue ) {
9394 storeForTask (kv.first );
9495 }
9596 mObjectsQueue .clear ();
@@ -99,9 +100,9 @@ void MySqlDatabase::storeQueue()
99100
100101void MySqlDatabase::storeForTask (std::string taskName)
101102{
102- vector<MonitorObject*> objects = mObjectsQueue [taskName];
103+ vector<MonitorObject *> objects = mObjectsQueue [taskName];
103104
104- if (objects.size () == 0 ) {
105+ if (objects.size () == 0 ) {
105106 return ;
106107 }
107108
@@ -111,13 +112,7 @@ void MySqlDatabase::storeForTask(std::string taskName)
111112 // build statement string
112113 string query;
113114 query += " REPlACE INTO `data_" + taskName
114- + " ` (object_name, data, size, run, fill) values " ;
115- for (size_t i = 0 ; i < objects.size () ; i++) {
116- if (i != 0 ) {
117- query += " ," ;
118- }
119- query += " (?,?,octet_length(data),?,?)" ;
120- }
115+ + " ` (object_name, data, size, run, fill) values (?,?,octet_length(data),?,?)" ;
121116
122117 // Prepare statement
123118 TMySQLStatement *statement;
@@ -135,67 +130,68 @@ void MySqlDatabase::storeForTask(std::string taskName)
135130 }
136131
137132 // Assign data
138- int i= 0 ;
133+ // int i = 0;
139134 TMessage message (kMESS_OBJECT );
140- for (auto mo : objects) {
135+ for (auto mo : objects) {
141136 message.Reset ();
142137 message.WriteObjectAny (mo, mo->IsA ());
143138 statement->NextIteration ();
144- statement->SetString (i+ 0 , mo->getName ().c_str ());
145- statement->SetBinary (i+ 1 , message.Buffer (), message.Length (), message.Length ());
146- statement->SetInt (i+ 2 , 0 );
147- statement->SetInt (i+ 3 , 0 );
139+ statement->SetString (0 , mo->getName ().c_str ());
140+ statement->SetBinary (1 , message.Buffer (), message.Length (), message.Length ());
141+ statement->SetInt (2 , 0 );
142+ statement->SetInt (3 , 0 );
148143 }
149144 statement->Process ();
150145 delete statement;
151146
152- for (auto mo : objects) {
147+ for (auto mo : objects) {
153148 delete mo;
154149 }
155150 objects.clear ();
156151}
157152
158- o2::quality_control::core::MonitorObject* MySqlDatabase::retrieve (std::string taskName, std::string objectName)
153+ o2::quality_control::core::MonitorObject * MySqlDatabase::retrieve (std::string taskName, std::string objectName)
159154{
160155 string query;
161156 TMySQLStatement *statement = nullptr ;
162157
163158 query += " SELECT object_name, data, updatetime, run, fill FROM data_" + taskName + " WHERE object_name = ?" ;
164- statement = (TMySQLStatement*) mServer ->Statement (query.c_str ());
159+ statement = (TMySQLStatement *) mServer ->Statement (query.c_str ());
165160 if (mServer ->IsError ()) {
166- if (statement)
161+ if (statement) {
167162 delete statement;
163+ }
168164 BOOST_THROW_EXCEPTION (
169- DatabaseException () << errinfo_details (" Encountered an error when creating statement in MySqlDatabase" )
170- << errinfo_db_message (mServer ->GetErrorMsg ()) << errinfo_db_errno (mServer ->GetErrorCode ()));
165+ DatabaseException () << errinfo_details (" Encountered an error when creating statement in MySqlDatabase" )
166+ << errinfo_db_message (mServer ->GetErrorMsg ()) << errinfo_db_errno (mServer ->GetErrorCode ()));
171167 }
172168 statement->NextIteration ();
173169 statement->SetString (0 , objectName.c_str ());
174170
175171 if (!(statement->Process () && statement->StoreResult ())) {
176172 delete statement;
177173 BOOST_THROW_EXCEPTION (
178- DatabaseException ()
179- << errinfo_details (" Encountered an error when processing and storing results in MySqlDatabase" )
180- << errinfo_db_message (mServer ->GetErrorMsg ()) << errinfo_db_errno (mServer ->GetErrorCode ()));
174+ DatabaseException ()
175+ << errinfo_details (" Encountered an error when processing and storing results in MySqlDatabase" )
176+ << errinfo_db_message (mServer ->GetErrorMsg ()) << errinfo_db_errno (mServer ->GetErrorCode ()));
181177 }
182178
183- o2::quality_control::core::MonitorObject* mo = nullptr ;
179+ o2::quality_control::core::MonitorObject * mo = nullptr ;
184180 if (statement->NextResultRow ()) { // Consider only the first result
185181 string name = statement->GetString (0 );
186- void * blob = nullptr ;
182+ void * blob = nullptr ;
187183 Long_t blobSize;
188184 statement->GetBinary (1 , blob, blobSize); // retrieve the data
189185 TDatime updatetime (statement->GetYear (2 ), statement->GetMonth (2 ), statement->GetDay (2 ), statement->GetHour (2 ),
190- statement->GetMinute (2 ), statement->GetSecond (2 ));
186+ statement->GetMinute (2 ), statement->GetSecond (2 ));
191187 int run = statement->IsNull (3 ) ? -1 : statement->GetInt (3 );
192188 int fill = statement->IsNull (4 ) ? -1 : statement->GetInt (4 );
193189
194190 TMessage mess (kMESS_OBJECT );
195191 mess.SetBuffer (blob, blobSize, kFALSE );
196192 mess.SetReadMode ();
197193 mess.Reset ();
198- mo = (o2::quality_control::core::MonitorObject*) (mess.ReadObjectAny (mess.GetClass ()));
194+ mo = (o2::quality_control::core::MonitorObject *) (mess.ReadObjectAny (mess.GetClass ()));
199195 }
200196 delete statement;
201197
@@ -215,19 +211,20 @@ void MySqlDatabase::disconnect()
215211 }
216212}
217213
218- TMySQLResult* MySqlDatabase::query (string sql)
214+ TMySQLResult * MySqlDatabase::query (string sql)
219215{
220216 if (mServer ) {
221- return ((TMySQLResult*) mServer ->Query (sql.c_str ()));
217+ return ((TMySQLResult *) mServer ->Query (sql.c_str ()));
222218 } else {
223219 return (nullptr );
224220 }
225221}
226222
227223bool MySqlDatabase::execute (string sql)
228224{
229- if (mServer )
225+ if (mServer ) {
230226 return mServer ->Exec (sql.c_str ());
227+ }
231228
232229 return false ;
233230}
@@ -236,7 +233,7 @@ void MySqlDatabase::addIndex(string table, string column)
236233{
237234 std::ostringstream stringStream;
238235 stringStream << " CREATE INDEX " << table << " _i_" << column << " on " << table << " (" << column << " )" ;
239- TMySQLResult* res = query (stringStream.str ().c_str ());
236+ TMySQLResult * res = query (stringStream.str ().c_str ());
240237 if (res) {
241238 delete (res);
242239 } else {
@@ -249,12 +246,12 @@ std::vector<std::string> MySqlDatabase::getPublishedObjectNames(std::string task
249246 std::vector<std::string> result;
250247
251248 string queryString = " select distinct object_name from " ;
252- queryString += taskName;
249+ queryString += " data_ " + taskName;
253250
254- TMySQLResult* mysqlResult = query (queryString);
251+ TMySQLResult * mysqlResult = query (queryString);
255252 if (mysqlResult) { // only if we got a result
256- TMySQLRow* row;
257- while ((row = (TMySQLRow*) mysqlResult->Next ())) {
253+ TMySQLRow * row;
254+ while ((row = (TMySQLRow *) mysqlResult->Next ())) {
258255 result.push_back (row->GetField (0 ));
259256 delete row;
260257 }
@@ -263,16 +260,17 @@ std::vector<std::string> MySqlDatabase::getPublishedObjectNames(std::string task
263260
264261 return result;
265262}
263+
266264std::vector<std::string> MySqlDatabase::getListOfTasksWithPublications ()
267265{
268266 std::vector<std::string> result;
269267
270268 string queryString = " select table_name from information_schema.tables where table_schema='quality_control'" ;
271269
272- TMySQLResult* mysqlResult = query (queryString);
270+ TMySQLResult * mysqlResult = query (queryString);
273271 if (mysqlResult) { // only if we got a result
274- TMySQLRow* row;
275- while ((row = (TMySQLRow*) mysqlResult->Next ())) {
272+ TMySQLRow * row;
273+ while ((row = (TMySQLRow *) mysqlResult->Next ())) {
276274 result.push_back (row->GetField (0 ));
277275 delete row;
278276 }
0 commit comments