blob: 92b39904cc69247ca36ec225517ad8544ec0f495 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <string>
#include <sstream>
#include <iterator>
#include "ignite/odbc/utility.h"
#include "ignite/odbc/config/configuration.h"
#include "ignite/odbc/config/connection_string_parser.h"
#include "ignite/odbc/config/config_tools.h"
namespace ignite
{
namespace odbc
{
namespace config
{
const std::string Configuration::DefaultValue::dsn = "Apache Ignite DSN";
const std::string Configuration::DefaultValue::driver = "Apache Ignite";
const std::string Configuration::DefaultValue::schema = "PUBLIC";
const std::string Configuration::DefaultValue::address = "";
const std::string Configuration::DefaultValue::server = "";
const uint16_t Configuration::DefaultValue::port = 10800;
const int32_t Configuration::DefaultValue::pageSize = 1024;
const bool Configuration::DefaultValue::distributedJoins = false;
const bool Configuration::DefaultValue::enforceJoinOrder = false;
const bool Configuration::DefaultValue::replicatedOnly = false;
const bool Configuration::DefaultValue::collocated = false;
const bool Configuration::DefaultValue::lazy = false;
const bool Configuration::DefaultValue::skipReducerOnUpdate = false;
const ProtocolVersion& Configuration::DefaultValue::protocolVersion = ProtocolVersion::GetCurrent();
const ssl::SslMode::Type Configuration::DefaultValue::sslMode = ssl::SslMode::DISABLE;
const std::string Configuration::DefaultValue::sslKeyFile = "";
const std::string Configuration::DefaultValue::sslCertFile = "";
const std::string Configuration::DefaultValue::sslCaFile = "";
const std::string Configuration::DefaultValue::user = "";
const std::string Configuration::DefaultValue::password = "";
const EngineMode::Type Configuration::DefaultValue::engineMode = EngineMode::DEFAULT;
Configuration::Configuration() :
dsn(DefaultValue::dsn),
driver(DefaultValue::driver),
schema(DefaultValue::schema),
server(DefaultValue::server),
port(DefaultValue::port),
pageSize(DefaultValue::pageSize),
distributedJoins(DefaultValue::distributedJoins),
enforceJoinOrder(DefaultValue::enforceJoinOrder),
replicatedOnly(DefaultValue::replicatedOnly),
collocated(DefaultValue::collocated),
lazy(DefaultValue::lazy),
skipReducerOnUpdate(DefaultValue::skipReducerOnUpdate),
protocolVersion(DefaultValue::protocolVersion),
endPoints(std::vector<EndPoint>()),
sslMode(DefaultValue::sslMode),
sslKeyFile(DefaultValue::sslKeyFile),
sslCertFile(DefaultValue::sslCertFile),
sslCaFile(DefaultValue::sslCaFile),
user(DefaultValue::user),
password(DefaultValue::password),
engineMode(DefaultValue::engineMode)
{
// No-op.
}
Configuration::~Configuration()
{
// No-op.
}
std::string Configuration::ToConnectString() const
{
ArgumentMap arguments;
ToMap(arguments);
std::stringstream connect_string_buffer;
for (ArgumentMap::const_iterator it = arguments.begin(); it != arguments.end(); ++it)
{
const std::string& key = it->first;
const std::string& value = it->second;
if (value.empty())
continue;
if (value.find(' ') == std::string::npos)
connect_string_buffer << key << '=' << value << ';';
else
connect_string_buffer << key << "={" << value << "};";
}
return connect_string_buffer.str();
}
uint16_t Configuration::GetTcpPort() const
{
return port.GetValue();
}
void Configuration::SetTcpPort(uint16_t port)
{
this->port.SetValue(port);
}
bool Configuration::IsTcpPortSet() const
{
return port.IsSet();
}
const std::string& Configuration::GetDsn(const std::string& dflt) const
{
if (!dsn.IsSet())
return dflt;
return dsn.GetValue();
}
bool Configuration::IsDsnSet() const
{
return dsn.IsSet();
}
void Configuration::SetDsn(const std::string& dsn)
{
this->dsn.SetValue(dsn);
}
const std::string& Configuration::GetDriver() const
{
return driver.GetValue();
}
void Configuration::SetDriver(const std::string& driver)
{
this->driver.SetValue(driver);
}
const std::string& Configuration::GetHost() const
{
return server.GetValue();
}
void Configuration::SetHost(const std::string& server)
{
this->server.SetValue(server);
}
bool Configuration::IsHostSet() const
{
return server.IsSet();
}
const std::string& Configuration::GetSchema() const
{
return schema.GetValue();
}
void Configuration::SetSchema(const std::string& schema)
{
this->schema.SetValue(schema);
}
bool Configuration::IsSchemaSet() const
{
return schema.IsSet();
}
const std::vector<EndPoint>& Configuration::GetAddresses() const
{
return endPoints.GetValue();
}
void Configuration::SetAddresses(const std::vector<EndPoint>& endPoints)
{
this->endPoints.SetValue(endPoints);
}
bool Configuration::IsAddressesSet() const
{
return endPoints.IsSet();
}
ssl::SslMode::Type Configuration::GetSslMode() const
{
return sslMode.GetValue();
}
void Configuration::SetSslMode(ssl::SslMode::Type sslMode)
{
this->sslMode.SetValue(sslMode);
}
bool Configuration::IsSslModeSet() const
{
return sslMode.IsSet();
}
const std::string& Configuration::GetSslKeyFile() const
{
return sslKeyFile.GetValue();
}
void Configuration::SetSslKeyFile(const std::string& sslKeyFile)
{
this->sslKeyFile.SetValue(sslKeyFile);
}
bool Configuration::IsSslKeyFileSet() const
{
return sslKeyFile.IsSet();
}
const std::string& Configuration::GetSslCertFile() const
{
return sslCertFile.GetValue();
}
void Configuration::SetSslCertFile(const std::string& sslCertFile)
{
this->sslCertFile.SetValue(sslCertFile);
}
bool Configuration::IsSslCertFileSet() const
{
return sslCertFile.IsSet();
}
const std::string& Configuration::GetSslCaFile() const
{
return sslCaFile.GetValue();
}
void Configuration::SetSslCaFile(const std::string& sslCaFile)
{
this->sslCaFile.SetValue(sslCaFile);
}
bool Configuration::IsSslCaFileSet() const
{
return sslCaFile.IsSet();
}
bool Configuration::IsDistributedJoins() const
{
return distributedJoins.GetValue();
}
void Configuration::SetDistributedJoins(bool val)
{
this->distributedJoins.SetValue(val);
}
bool Configuration::IsDistributedJoinsSet() const
{
return distributedJoins.IsSet();
}
bool Configuration::IsEnforceJoinOrder() const
{
return enforceJoinOrder.GetValue();
}
void Configuration::SetEnforceJoinOrder(bool val)
{
this->enforceJoinOrder.SetValue(val);
}
bool Configuration::IsEnforceJoinOrderSet() const
{
return enforceJoinOrder.IsSet();
}
bool Configuration::IsReplicatedOnly() const
{
return replicatedOnly.GetValue();
}
void Configuration::SetReplicatedOnly(bool val)
{
this->replicatedOnly.SetValue(val);
}
bool Configuration::IsReplicatedOnlySet() const
{
return replicatedOnly.IsSet();
}
bool Configuration::IsCollocated() const
{
return collocated.GetValue();
}
void Configuration::SetCollocated(bool val)
{
this->collocated.SetValue(val);
}
bool Configuration::IsCollocatedSet() const
{
return collocated.IsSet();
}
bool Configuration::IsLazy() const
{
return lazy.GetValue();
}
void Configuration::SetLazy(bool val)
{
this->lazy.SetValue(val);
}
bool Configuration::IsLazySet() const
{
return lazy.IsSet();
}
bool Configuration::IsSkipReducerOnUpdate() const
{
return skipReducerOnUpdate.GetValue();
}
void Configuration::SetSkipReducerOnUpdate(bool val)
{
this->skipReducerOnUpdate.SetValue(val);
}
bool Configuration::IsSkipReducerOnUpdateSet() const
{
return skipReducerOnUpdate.IsSet();
}
ProtocolVersion Configuration::GetProtocolVersion() const
{
return protocolVersion.GetValue();
}
void Configuration::SetProtocolVersion(const ProtocolVersion& version)
{
this->protocolVersion.SetValue(version);
}
bool Configuration::IsProtocolVersionSet() const
{
return protocolVersion.IsSet();
}
void Configuration::SetPageSize(int32_t size)
{
this->pageSize.SetValue(size);
}
bool Configuration::IsPageSizeSet() const
{
return pageSize.IsSet();
}
const std::string& Configuration::GetUser() const
{
return user.GetValue();
}
void Configuration::SetUser(const std::string& user)
{
this->user.SetValue(user);
}
bool Configuration::IsUserSet() const
{
return user.IsSet();
}
const std::string& Configuration::GetPassword() const
{
return password.GetValue();
}
void Configuration::SetPassword(const std::string& pass)
{
this->password.SetValue(pass);
}
bool Configuration::IsPasswordSet() const
{
return password.IsSet();
}
EngineMode::Type Configuration::GetEngineMode() const {
return engineMode.GetValue();
}
void Configuration::SetEngineMode(EngineMode::Type mode) {
engineMode.SetValue(mode);
}
bool Configuration::IsEngineModeSet() const {
return engineMode.IsSet();
}
int32_t Configuration::GetPageSize() const
{
return pageSize.GetValue();
}
void Configuration::ToMap(ArgumentMap& res) const
{
AddToMap(res, ConnectionStringParser::Key::dsn, dsn);
AddToMap(res, ConnectionStringParser::Key::driver, driver);
AddToMap(res, ConnectionStringParser::Key::schema, schema);
AddToMap(res, ConnectionStringParser::Key::address, endPoints);
AddToMap(res, ConnectionStringParser::Key::server, server);
AddToMap(res, ConnectionStringParser::Key::port, port);
AddToMap(res, ConnectionStringParser::Key::distributedJoins, distributedJoins);
AddToMap(res, ConnectionStringParser::Key::enforceJoinOrder, enforceJoinOrder);
AddToMap(res, ConnectionStringParser::Key::protocolVersion, protocolVersion);
AddToMap(res, ConnectionStringParser::Key::pageSize, pageSize);
AddToMap(res, ConnectionStringParser::Key::replicatedOnly, replicatedOnly);
AddToMap(res, ConnectionStringParser::Key::collocated, collocated);
AddToMap(res, ConnectionStringParser::Key::lazy, lazy);
AddToMap(res, ConnectionStringParser::Key::skipReducerOnUpdate, skipReducerOnUpdate);
AddToMap(res, ConnectionStringParser::Key::sslMode, sslMode);
AddToMap(res, ConnectionStringParser::Key::sslKeyFile, sslKeyFile);
AddToMap(res, ConnectionStringParser::Key::sslCertFile, sslCertFile);
AddToMap(res, ConnectionStringParser::Key::sslCaFile, sslCaFile);
AddToMap(res, ConnectionStringParser::Key::user, user);
AddToMap(res, ConnectionStringParser::Key::password, password);
AddToMap(res, ConnectionStringParser::Key::engineMode, engineMode);
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key, const SettableValue<uint16_t>& value)
{
if (value.IsSet())
map[key] = common::LexicalCast<std::string>(value.GetValue());
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key, const SettableValue<int32_t>& value)
{
if (value.IsSet())
map[key] = common::LexicalCast<std::string>(value.GetValue());
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue<std::string>& value)
{
if (value.IsSet())
map[key] = value.GetValue();
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue<bool>& value)
{
if (value.IsSet())
map[key] = value.GetValue() ? "true" : "false";
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue<ProtocolVersion>& value)
{
if (value.IsSet())
map[key] = value.GetValue().ToString();
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue< std::vector<EndPoint> >& value)
{
if (value.IsSet())
map[key] = AddressesToString(value.GetValue());
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue<ssl::SslMode::Type>& value)
{
if (value.IsSet())
map[key] = ssl::SslMode::ToString(value.GetValue());
}
template<>
void Configuration::AddToMap(ArgumentMap& map, const std::string& key,
const SettableValue<EngineMode::Type>& value)
{
if (value.IsSet())
map[key] = EngineMode::ToString(value.GetValue());
}
}
}
}