5#include <bsoncxx/json.hpp>
6#include <mongocxx/client.hpp>
7#include <mongocxx/instance.hpp>
11#include <imod/TModelWrap.h>
12#include <ilog/TLoggerCompWrap.h>
13#include <ifile/IFileNameParam.h>
16#include <imtbase/TModelUpdateBinder.h>
17#include <imtdb/CDatabaseAccessSettings.h>
18#include <imtmongo/IMongoDatabaseEngine.h>
25class CMongoDatabaseEngineAttr:
public ilog::CLoggerComponentBase
28 typedef ilog::CLoggerComponentBase BaseClass;
29 I_BEGIN_COMPONENT(CMongoDatabaseEngineAttr);
34class CMongoDatabaseEngineComp:
35 virtual public IMongoDatabaseEngine,
36 virtual public CMongoDatabaseEngineAttr
39 typedef CMongoDatabaseEngineAttr BaseClass;
41 I_BEGIN_COMPONENT(CMongoDatabaseEngineComp);
43 I_REGISTER_SUBELEMENT(DatabaseAccessSettings);
45 I_REGISTER_SUBELEMENT_INTERFACE(DatabaseAccessSettings, istd::IChangeable, ExtractDatabaseAccessSettings);
46 I_REGISTER_SUBELEMENT_INTERFACE(DatabaseAccessSettings, imod::IModel, ExtractDatabaseAccessSettings);
47 I_ASSIGN(m_databaseAccessSettingsCompPtr,
"DatabaseAccessSettings",
"Settings for database access",
false,
"DatabaseAccessSettings");
48 I_ASSIGN(m_dbTypeAttrPtr,
"DbType",
"The property holds database connections using the driver",
true,
"MongoDB");
49 I_ASSIGN(m_dbNameAttrPtr,
"DbName",
"The property holds connection's database name",
true,
"agisbil");
50 I_ASSIGN(m_userNameAttrPtr,
"UserName",
"The property holds connection's user name",
true,
"postgres");
51 I_ASSIGN(m_paswordAttrPtr,
"Pasword",
"The property holds connection's password.",
true,
"12345");
52 I_ASSIGN(m_hostNameAttrPtr,
"HostName",
"The property holds connection's host name.",
true,
"localhost");
53 I_ASSIGN(m_maintenanceDatabaseNameAttrPtr,
"MaintainanceDatabase",
"Name of Maintenance database. It's necessary for creating database if it not exists",
true,
"postgres");
54 I_ASSIGN(m_migrationFolderPathCompPtr,
"MigrationFolderPath",
"The property holds the folder contains SQL migraton script",
false,
"MigrationFolderPath");
55 I_ASSIGN(m_autoCreateDatabaseAttrPtr,
"AutoCreateDatabase",
"The property holds behavior to create database on startup.\n Possible values:\n0 - will not create new database;\n1 - will create database once;\n2 - will create database at each startup",
true, 1);
56 I_ASSIGN(m_autoCreateTablesAttrPtr,
"AutoCreateTables",
"The property holds behavior to create tables on startup.\n Possible values:\n0 - will not create new tables;\n1 - will create tables once;\n2 - will create tables at each startup",
true, 1);
57 I_ASSIGN(m_portAttrPtr,
"Port",
"The property holds connection's port number",
true, 270);
60 CMongoDatabaseEngineComp();
62 static void DrectBindValue(QByteArray*
string,
const QByteArray& what,
const QByteArray& expr);
63 static void DrectBindValueInsertDefault(QByteArray*
string,
const QByteArray& what);
64 static void DrectBindValueUpdateDefault(QByteArray*
string,
const QByteArray& what);
66 virtual mongocxx::database* GetDatabase()
override;
73 virtual void OnComponentCreated()
override;
74 virtual void OnComponentDestroyed()
override;
83 QString GetDatabaseName()
const;
84 QString GetHostName()
const;
86 QString GetUserName()
const;
87 QString GetPassword()
const;
90 template <
typename Interface>
91 static Interface* ExtractDatabaseAccessSettings(CMongoDatabaseEngineComp& component)
93 return &component.m_workingAccessSettings;
98 I_ATTR(QByteArray, m_dbTypeAttrPtr);
99 I_ATTR(QByteArray, m_dbNameAttrPtr);
100 I_ATTR(QByteArray, m_userNameAttrPtr);
101 I_ATTR(QByteArray, m_paswordAttrPtr);
102 I_ATTR(QByteArray, m_hostNameAttrPtr);
103 I_ATTR(QByteArray, m_maintenanceDatabaseNameAttrPtr);
104 I_ATTR(QByteArray, m_databaseCreationScriptPathAttrPtr);
105 I_REF(ifile::IFileNameParam, m_migrationFolderPathCompPtr);
106 I_ATTR(
int, m_autoCreateDatabaseAttrPtr);
107 I_ATTR(
int, m_autoCreateTablesAttrPtr);
108 I_ATTR(
int, m_portAttrPtr);
112 imod::TModelWrap<imtdb::CDatabaseAccessSettings> m_workingAccessSettings;
114 mongocxx::client * m_client;
115 mongocxx::database* m_database;
Configuration interface for database connection credentials and parameters.