Database.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) 2008-2022 the Urho3D project
  2. // License: MIT
  3. #include "../Precompiled.h"
  4. #include "../Core/Profiler.h"
  5. #include "../Database/Database.h"
  6. namespace Urho3D
  7. {
  8. Database::Database(Context* context) :
  9. Object(context),
  10. #ifdef ODBC_3_OR_LATER
  11. poolSize_(0)
  12. #else
  13. poolSize_(M_MAX_UNSIGNED)
  14. #endif
  15. {
  16. }
  17. DBAPI Database::GetAPI()
  18. {
  19. #ifdef URHO3D_DATABASE_ODBC
  20. return DBAPI_ODBC;
  21. #else
  22. return DBAPI_SQLITE;
  23. #endif
  24. }
  25. DbConnection* Database::Connect(const String& connectionString)
  26. {
  27. URHO3D_PROFILE(DatabaseConnect);
  28. SharedPtr<DbConnection> connection;
  29. if (IsPooling())
  30. {
  31. Vector<SharedPtr<DbConnection>>& connectionsPool = connectionsPool_[connectionString];
  32. while (!connectionsPool.Empty())
  33. {
  34. connection = connectionsPool.Back();
  35. connectionsPool.Pop();
  36. if (connection->IsConnected())
  37. break;
  38. connection = nullptr;
  39. }
  40. }
  41. if (!connection)
  42. connection = new DbConnection(context_, connectionString);
  43. if (connection->IsConnected())
  44. {
  45. connections_.Push(connection);
  46. return connection;
  47. }
  48. else
  49. return nullptr;
  50. }
  51. void Database::Disconnect(DbConnection* connection)
  52. {
  53. if (!connection)
  54. return;
  55. URHO3D_PROFILE(DatabaseDisconnect);
  56. SharedPtr<DbConnection> dbConnection(connection);
  57. connections_.Remove(dbConnection);
  58. // Must finalize the connection before closing the connection or returning it to the pool
  59. connection->Finalize();
  60. if (IsPooling())
  61. {
  62. Vector<SharedPtr<DbConnection>>& connectionsPool = connectionsPool_[connection->GetConnectionString()];
  63. if (connectionsPool.Size() < poolSize_)
  64. connectionsPool.Push(dbConnection);
  65. }
  66. }
  67. }