Skip to content

Commit

Permalink
Made the database provider to be used for SQL Server configurable. #229
Browse files Browse the repository at this point in the history
  • Loading branch information
martinknafve committed Jul 26, 2018
1 parent 4ecf418 commit 3153f0f
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 20 deletions.
19 changes: 11 additions & 8 deletions hmailserver/source/Server/COM/InterfaceDatabase.cpp
Expand Up @@ -488,7 +488,7 @@ STDMETHODIMP InterfaceDatabase::CreateInternalDatabase()

// Create a settings object which we use to connect to the server.
std::shared_ptr<HM::DatabaseSettings> pSettings = std::shared_ptr<HM::DatabaseSettings>(
new HM::DatabaseSettings(sEmpty, sDatabaseName, sEmpty, sPassword, sDirectory, sEmpty, HM::DatabaseSettings::TypeMSSQLCompactEdition, 0));
new HM::DatabaseSettings(sEmpty, sEmpty, sDatabaseName, sEmpty, sPassword, sDirectory, sEmpty, HM::DatabaseSettings::TypeMSSQLCompactEdition, 0));

// Connect to the new database
std::shared_ptr<HM::DALConnection> pConn = HM::DALConnectionFactory::CreateConnection(pSettings);
Expand Down Expand Up @@ -537,13 +537,14 @@ STDMETHODIMP InterfaceDatabase::CreateExternalDatabase(eDBtype ServerType, BSTR
const HM::String sDatabaseName = DatabaseName;
const HM::String sUsername = Username;
const HM::String sPassword = Password;

const HM::String sProvider = ini_file_settings_->GetDatabaseProvider();

if (sDatabaseName.Find(_T(" ")) >= 0)
return COMError::GenerateError("The database name may not contain spaces.");

// Create a settings object for the connection ...
std::shared_ptr<HM::DatabaseSettings> pSettings = std::shared_ptr<HM::DatabaseSettings>(
new HM::DatabaseSettings(sServerName, sEmpty, sUsername, sPassword, sEmpty, sEmpty,(HM::DatabaseSettings::SQLDBType) ServerType, lPort));
new HM::DatabaseSettings(sProvider, sServerName, sEmpty, sUsername, sPassword, sEmpty, sEmpty, (HM::DatabaseSettings::SQLDBType) ServerType, lPort));

// Connect to the database serve
std::shared_ptr<HM::DALConnection> pConn = HM::DALConnectionFactory::CreateConnection(pSettings);
Expand All @@ -563,7 +564,7 @@ STDMETHODIMP InterfaceDatabase::CreateExternalDatabase(eDBtype ServerType, BSTR

// Create a new settings object where we specify the database name as well.
pSettings = std::shared_ptr<HM::DatabaseSettings>(
new HM::DatabaseSettings(sServerName, sDatabaseName, sUsername, sPassword, sEmpty, sEmpty,(HM::DatabaseSettings::SQLDBType) ServerType, lPort));
new HM::DatabaseSettings(sProvider, sServerName, sDatabaseName, sUsername, sPassword, sEmpty, sEmpty, (HM::DatabaseSettings::SQLDBType) ServerType, lPort));

// Reconnect to the new database.
pConn = HM::DALConnectionFactory::CreateConnection(pSettings);
Expand All @@ -574,7 +575,7 @@ STDMETHODIMP InterfaceDatabase::CreateExternalDatabase(eDBtype ServerType, BSTR
HM::SQLScriptRunner scriptRunner;
if (!scriptRunner.ExecuteScript(pConn, pSettings->GetDefaultScript(), sErrorMessage))
return COMError::GenerateError(sErrorMessage);

ini_file_settings_->SetDatabaseDirectory("");
ini_file_settings_->SetDatabaseType((HM::DatabaseSettings::SQLDBType) ServerType);
ini_file_settings_->SetUsername(sUsername);
Expand All @@ -583,7 +584,7 @@ STDMETHODIMP InterfaceDatabase::CreateExternalDatabase(eDBtype ServerType, BSTR
ini_file_settings_->SetDatabaseServer(sServerName);
ini_file_settings_->SetDatabaseName(sDatabaseName);
ini_file_settings_->SetIsInternalDatabase(false);
return S_OK;
}
catch (...)
Expand All @@ -609,8 +610,10 @@ STDMETHODIMP InterfaceDatabase::SetDefaultDatabase(eDBtype ServerType, BSTR Serv
return COMError::GenerateError("The database name may not contain spaces.");

// Create a settings object for the connection ...
HM::String sProvider = ini_file_settings_->GetDatabaseProvider();

std::shared_ptr<HM::DatabaseSettings> pSettings = std::shared_ptr<HM::DatabaseSettings>(
new HM::DatabaseSettings(sServerName, sEmpty, sUsername, sPassword, sEmpty, sEmpty,(HM::DatabaseSettings::SQLDBType) ServerType, lPort));
new HM::DatabaseSettings(sProvider, sServerName, sEmpty, sUsername, sPassword, sEmpty, sEmpty, (HM::DatabaseSettings::SQLDBType) ServerType, lPort));

// Connect to the database server.
std::shared_ptr<HM::DALConnection> pConn = HM::DALConnectionFactory::CreateConnection(pSettings);
Expand All @@ -630,7 +633,7 @@ STDMETHODIMP InterfaceDatabase::SetDefaultDatabase(eDBtype ServerType, BSTR Serv
ini_file_settings_->SetDatabaseServer(sServerName);
ini_file_settings_->SetDatabaseName(sDatabaseName);
ini_file_settings_->SetIsInternalDatabase(ServerType == hDBTypeMSSQLCE);

return S_OK;
}
catch (...)
Expand Down
Expand Up @@ -61,6 +61,7 @@ namespace HM
password_ = ReadIniSettingString_("Database", "Password", "");
is_internal_database_ = ReadIniSettingInteger_("Database", "Internal", 0) == 1;
database_server_FailoverPartner = ReadIniSettingString_("Database", "ServerFailoverPartner", "");
database_provider_ = ReadIniSettingString_("Database", "Provider", "");

String sDatabaseType = ReadIniSettingString_("Database", "Type", "");

Expand Down
Expand Up @@ -22,6 +22,7 @@ namespace HM

bool GetDatabaseSettingsExists();

String GetDatabaseProvider() const { return database_provider_; }
String GetDatabaseServer() const { return database_server_; }
String GetDatabaseName() const { return database_name_; }
String GetUsername() const { return username_; }
Expand Down Expand Up @@ -185,6 +186,7 @@ namespace HM
bool backup_messages_dbonly_;
bool add_xauth_user_ip_;
bool rewrite_envelope_from_when_forwarding_;
String database_provider_;

String m_sDisableAUTHList;
};
Expand Down
15 changes: 12 additions & 3 deletions hmailserver/source/Server/Common/SQL/ADOConnection.cpp
Expand Up @@ -84,10 +84,19 @@ namespace HM
String sDatabase = database_settings_->GetDatabaseName();
String sServerFailoverPartner = database_settings_->GetDatabaseServerFailoverPartner();

String sProvider = "sqloledb";
if (!sServerFailoverPartner.IsEmpty())
String sProvider = database_settings_->GetProvider();

if (sProvider.IsEmpty())
{
sProvider = "SQLNCLI";
if (sServerFailoverPartner.IsEmpty())
{
sProvider = "sqloledb";
}
else
{
sProvider = "SQLNCLI";
}

}

if (bConnected)
Expand Down
Expand Up @@ -84,17 +84,19 @@ namespace HM

IniFileSettings *pIniFileSettings = IniFileSettings::Instance();

String sProvider = pIniFileSettings->GetDatabaseProvider();
String sServer = pIniFileSettings->GetDatabaseServer();
String sUsername = pIniFileSettings->GetUsername();
String sPassword = pIniFileSettings->GetPassword();
String sDatabase = pIniFileSettings->GetDatabaseName();
String sDatabaseDirectory = pIniFileSettings->GetDatabaseDirectory();
String sDatabaseServerFailoverPartner = pIniFileSettings->GetDatabaseServerFailoverPartner();
long lDBPort = pIniFileSettings->GetDatabasePort();

HM::DatabaseSettings::SQLDBType dbType = IniFileSettings::Instance()->GetDatabaseType();

std::shared_ptr<DatabaseSettings> pSettings = std::shared_ptr<DatabaseSettings>
(new DatabaseSettings(sServer, sDatabase, sUsername, sPassword, sDatabaseDirectory, sDatabaseServerFailoverPartner, dbType, lDBPort));
(new DatabaseSettings(sProvider, sServer, sDatabase, sUsername, sPassword, sDatabaseDirectory, sDatabaseServerFailoverPartner, dbType, lDBPort));

for (int i = 0; i < iNoOfConnections; i++)
{
Expand Down
7 changes: 4 additions & 3 deletions hmailserver/source/Server/Common/SQL/DatabaseSettings.cpp
Expand Up @@ -12,16 +12,17 @@

namespace HM
{
DatabaseSettings::DatabaseSettings(const String &sDatabaseServer, const String &sDatabaseName, const String &sUsername, const String &sPassword,
const String &sDatabaseDirectory, const String &sDatabaseServerFailoverPartner, HM::DatabaseSettings::SQLDBType dbType, long lDBPort) :
DatabaseSettings::DatabaseSettings(const String &sDatabaseProvider, const String &sDatabaseServer, const String &sDatabaseName, const String &sUsername, const String &sPassword,
const String &sDatabaseDirectory, const String &sDatabaseServerFailoverPartner, HM::DatabaseSettings::SQLDBType dbType, long lDBPort) :
database_server_(sDatabaseServer),
database_name_(sDatabaseName),
username_(sUsername),
password_(sPassword),
database_directory_(sDatabaseDirectory),
sqldbtype_(dbType),
database_server_failover_partner_(sDatabaseServerFailoverPartner),
dbport_(lDBPort)
dbport_(lDBPort),
database_provider_(sDatabaseProvider)
{

}
Expand Down
10 changes: 5 additions & 5 deletions hmailserver/source/Server/Common/SQL/DatabaseSettings.h
Expand Up @@ -19,10 +19,11 @@ namespace HM
TypeMSSQLCompactEdition = 4
};

DatabaseSettings(const String &sDatabaseServer, const String &sDatabaseName, const String &sUsername, const String &sPassword,
const String &sDatabaseDirectory, const String &sDatabaseServerFailoverPartner, HM::DatabaseSettings::SQLDBType dbType, long lDBPort);
DatabaseSettings(const String &sDatabaseProvider, const String &sDatabaseServer, const String &sDatabaseName, const String &sUsername, const String &sPassword,
const String &sDatabaseDirectory, const String &sDatabaseServerFailoverPartner, HM::DatabaseSettings::SQLDBType dbType, long lDBPort);
virtual ~DatabaseSettings();

String GetProvider() { return database_provider_; }
String GetServer() {return database_server_; }
String GetDatabaseName() {return database_name_;}
String GetUsername() {return username_;}
Expand All @@ -33,11 +34,12 @@ namespace HM
String GetDatabaseServerFailoverPartner() const { return database_server_failover_partner_; }

String GetDefaultScript();

static String GetDatabaseTypeName(HM::DatabaseSettings::SQLDBType type);

private:

String database_provider_;
String database_server_;
String database_name_;
String username_;
Expand All @@ -46,8 +48,6 @@ namespace HM
String database_server_failover_partner_;
HM::DatabaseSettings::SQLDBType sqldbtype_;
long dbport_;


};

}

0 comments on commit 3153f0f

Please sign in to comment.