Mercurial > hg > orthanc-databases
comparison Framework/MySQL/MySQLDatabase.cpp @ 60:412e30336847
allowing dollars and underscores in MySQL database identifiers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 19 Nov 2018 15:06:08 +0100 |
parents | 6a574d810b98 |
children | 714c5d2bee76 |
comparison
equal
deleted
inserted
replaced
59:318c1ccb787c | 60:412e30336847 |
---|---|
326 if (mysql_ == NULL) | 326 if (mysql_ == NULL) |
327 { | 327 { |
328 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | 328 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
329 } | 329 } |
330 | 330 |
331 if (!IsAlphanumericString(name)) | 331 if (!IsValidDatabaseIdentifier(name)) |
332 { | 332 { |
333 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | 333 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
334 } | 334 } |
335 | 335 |
336 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE " | 336 Query query("SELECT COUNT(*) FROM information_schema.TABLES WHERE " |
358 if (mysql_ == NULL) | 358 if (mysql_ == NULL) |
359 { | 359 { |
360 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | 360 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
361 } | 361 } |
362 | 362 |
363 if (!IsAlphanumericString(name)) | 363 if (!IsValidDatabaseIdentifier(name)) |
364 { | 364 { |
365 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | 365 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
366 } | 366 } |
367 | 367 |
368 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA " | 368 Query query("SELECT COUNT(*) FROM information_schema.SCHEMATA " |
478 { | 478 { |
479 mysql_library_end(); | 479 mysql_library_end(); |
480 } | 480 } |
481 | 481 |
482 | 482 |
483 bool MySQLDatabase::IsAlphanumericString(const std::string& s) | 483 bool MySQLDatabase::IsValidDatabaseIdentifier(const std::string& s) |
484 { | 484 { |
485 for (size_t i = 0; i < s.length(); i++) | 485 for (size_t i = 0; i < s.length(); i++) |
486 { | 486 { |
487 if (!isalnum(s[i])) | 487 // https://dev.mysql.com/doc/refman/8.0/en/identifiers.html |
488 if (!isalnum(s[i]) && | |
489 s[i] != '$' && | |
490 s[i] != '_') | |
488 { | 491 { |
489 return false; | 492 return false; |
490 } | 493 } |
491 } | 494 } |
492 | 495 |