comparison Framework/MySQL/MySQLDatabase.cpp @ 24:17f849b2af34

sharing plugin initialization code
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 12 Jul 2018 12:17:39 +0200
parents b2ff1cd2907a
children 6a574d810b98
comparison
equal deleted inserted replaced
23:b2ff1cd2907a 24:17f849b2af34
298 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); 298 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database);
299 } 299 }
300 } 300 }
301 301
302 302
303 static void CheckAlphanumericString(const std::string& name)
304 {
305 for (size_t i = 0; i < name.length(); i++)
306 {
307 if (!isalnum(name[i]))
308 {
309 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
310 }
311 }
312 }
313
314
315 bool MySQLDatabase::DoesTableExist(MySQLTransaction& transaction, 303 bool MySQLDatabase::DoesTableExist(MySQLTransaction& transaction,
316 const std::string& name) 304 const std::string& name)
317 { 305 {
318 if (mysql_ == NULL) 306 if (mysql_ == NULL)
319 { 307 {
320 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 308 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
321 } 309 }
322 310
323 CheckAlphanumericString(name); 311 if (!IsAlphanumericString(name))
312 {
313 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
314 }
324 315
325 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE " 316 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE "
326 "(TABLE_SCHEMA = ${database}) AND (TABLE_NAME = ${table})", true); 317 "(TABLE_SCHEMA = ${database}) AND (TABLE_NAME = ${table})", true);
327 query.SetType("database", ValueType_Utf8String); 318 query.SetType("database", ValueType_Utf8String);
328 query.SetType("table", ValueType_Utf8String); 319 query.SetType("table", ValueType_Utf8String);
347 if (mysql_ == NULL) 338 if (mysql_ == NULL)
348 { 339 {
349 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 340 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
350 } 341 }
351 342
352 CheckAlphanumericString(name); 343 if (!IsAlphanumericString(name))
344 {
345 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
346 }
353 347
354 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA " 348 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA "
355 "WHERE SCHEMA_NAME = ${database}", true); 349 "WHERE SCHEMA_NAME = ${database}", true);
356 query.SetType("database", ValueType_Utf8String); 350 query.SetType("database", ValueType_Utf8String);
357 351
462 456
463 void MySQLDatabase::GlobalFinalization() 457 void MySQLDatabase::GlobalFinalization()
464 { 458 {
465 mysql_library_end(); 459 mysql_library_end();
466 } 460 }
461
462
463 bool MySQLDatabase::IsAlphanumericString(const std::string& s)
464 {
465 for (size_t i = 0; i < s.length(); i++)
466 {
467 if (!isalnum(s[i]))
468 {
469 return false;
470 }
471 }
472
473 return true;
474 }
467 } 475 }