blob: 69f41b317daaea09185c608b7c79ed343efb554b [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.
*/
#ifndef _IGNITE_ODBC_CONFIG_CONFIGURATION
#define _IGNITE_ODBC_CONFIG_CONFIGURATION
#include <stdint.h>
#include <string>
#include <map>
#include "ignite/odbc/protocol_version.h"
#include "ignite/odbc/config/settable_value.h"
#include "ignite/odbc/ssl_mode.h"
#include "ignite/odbc/end_point.h"
#include "ignite/odbc/nested_tx_mode.h"
namespace ignite
{
namespace odbc
{
namespace config
{
/**
* ODBC configuration abstraction.
*/
class Configuration
{
public:
/** Argument map type. */
typedef std::map<std::string, std::string> ArgumentMap;
/** Default values for configuration. */
struct DefaultValue
{
/** Default value for DSN attribute. */
static const std::string dsn;
/** Default value for Driver attribute. */
static const std::string driver;
/** Default value for schema attribute. */
static const std::string schema;
/** Default value for address attribute. */
static const std::string address;
/** Default value for server attribute. */
static const std::string server;
/** Default value for sslMode attribute. */
static const ssl::SslMode::Type sslMode;
/** Default value for sslKeyFile attribute. */
static const std::string sslKeyFile;
/** Default value for sslCertFile attribute. */
static const std::string sslCertFile;
/** Default value for sslCaFile attribute. */
static const std::string sslCaFile;
/** Default value for protocol version. */
static const ProtocolVersion& protocolVersion;
/** Default value for port attribute. */
static const uint16_t port;
/** Default value for fetch results page size attribute. */
static const int32_t pageSize;
/** Default value for distributed joins attribute. */
static const bool distributedJoins;
/** Default value for enforce join order attribute. */
static const bool enforceJoinOrder;
/** Default value for replicated only attribute. */
static const bool replicatedOnly;
/** Default value for collocated attribute. */
static const bool collocated;
/** Default value for lazy attribute. */
static const bool lazy;
/** Default value for skipReducerOnUpdate attribute. */
static const bool skipReducerOnUpdate;
/** Default value for user attribute. */
static const std::string user;
/** Default value for password attribute. */
static const std::string password;
/** Default value for nestedTxMode attribute. */
static const NestedTxMode::Type nestedTxMode;
};
/**
* Default constructor.
*/
Configuration();
/**
* Destructor.
*/
~Configuration();
/**
* Convert configure to connect string.
*
* @return Connect string.
*/
std::string ToConnectString() const;
/**
* Get server port.
*
* @return Server port.
*/
uint16_t GetTcpPort() const;
/**
* Set server port.
*
* @param port Server port.
*/
void SetTcpPort(uint16_t port);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsTcpPortSet() const;
/**
* Get DSN.
*
* @return Data Source Name.
*/
const std::string& GetDsn(const std::string& dflt = DefaultValue::dsn) const;
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsDsnSet() const;
/**
* Set DSN.
*
* @param dsn Data Source Name.
*/
void SetDsn(const std::string& dsn);
/**
* Get Driver.
*
* @return Driver name.
*/
const std::string& GetDriver() const;
/**
* Set driver.
*
* @param driver Driver.
*/
void SetDriver(const std::string& driver);
/**
* Get server host.
*
* @return Server host.
*/
const std::string& GetHost() const;
/**
* Set server host.
*
* @param server Server host.
*/
void SetHost(const std::string& server);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsHostSet() const;
/**
* Get schema.
*
* @return Schema.
*/
const std::string& GetSchema() const;
/**
* Set schema.
*
* @param schema Schema name.
*/
void SetSchema(const std::string& schema);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSchemaSet() const;
/**
* Get addresses.
*
* @return Addresses.
*/
const std::vector<EndPoint>& GetAddresses() const;
/**
* Set addresses to connect to.
*
* @param endPoints Addresses.
*/
void SetAddresses(const std::vector<EndPoint>& endPoints);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsAddressesSet() const;
/**
* Get SSL mode.
*
* @return SSL mode.
*/
ssl::SslMode::Type GetSslMode() const;
/**
* Set SSL mode.
*
* @param sslMode SSL mode.
*/
void SetSslMode(ssl::SslMode::Type sslMode);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSslModeSet() const;
/**
* Get SSL key file path.
*
* @return SSL key file path.
*/
const std::string& GetSslKeyFile() const;
/**
* Set SSL key file path.
*
* @param sslKeyFile SSL key file path.
*/
void SetSslKeyFile(const std::string& sslKeyFile);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSslKeyFileSet() const;
/**
* Get SSL certificate file path.
*
* @return SSL certificate file path.
*/
const std::string& GetSslCertFile() const;
/**
* Set SSL certificate file path.
*
* @param sslCertFile SSL certificate file path.
*/
void SetSslCertFile(const std::string& sslCertFile);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSslCertFileSet() const;
/**
* Get SSL certificate authority file path.
*
* @return SSL certificate authority file path.
*/
const std::string& GetSslCaFile() const;
/**
* Set SSL certificate authority file path.
*
* @param sslCaFile SSL certificate authority file path.
*/
void SetSslCaFile(const std::string& sslCaFile);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSslCaFileSet() const;
/**
* Check distributed joins flag.
*
* @return True if distributed joins are enabled.
*/
bool IsDistributedJoins() const;
/**
* Set distributed joins.
*
* @param val Value to set.
*/
void SetDistributedJoins(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsDistributedJoinsSet() const;
/**
* Check enforce join order flag.
*
* @return True if enforcing of join order is enabled.
*/
bool IsEnforceJoinOrder() const;
/**
* Set enforce joins.
*
* @param val Value to set.
*/
void SetEnforceJoinOrder(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsEnforceJoinOrderSet() const;
/**
* Check replicated only flag.
*
* @return True if replicated only is enabled.
*/
bool IsReplicatedOnly() const;
/**
* Set replicated only flag.
*
* @param val Value to set.
*/
void SetReplicatedOnly(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsReplicatedOnlySet() const;
/**
* Check collocated flag.
*
* @return True if collocated is enabled.
*/
bool IsCollocated() const;
/**
* Set collocated.
*
* @param val Value to set.
*/
void SetCollocated(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsCollocatedSet() const;
/**
* Check lazy flag.
*
* @return True if lazy is enabled.
*/
bool IsLazy() const;
/**
* Set lazy.
*
* @param val Value to set.
*/
void SetLazy(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsLazySet() const;
/**
* Check update on server flag.
*
* @return True if update on server.
*/
bool IsSkipReducerOnUpdate() const;
/**
* Set update on server.
*
* @param val Value to set.
*/
void SetSkipReducerOnUpdate(bool val);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsSkipReducerOnUpdateSet() const;
/**
* Get protocol version.
*
* @return Protocol version.
*/
ProtocolVersion GetProtocolVersion() const;
/**
* Set protocol version.
*
* @param version Version to set.
*/
void SetProtocolVersion(const ProtocolVersion& version);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsProtocolVersionSet() const;
/**
* Get fetch results page size.
*
* @return Fetch results page size.
*/
int32_t GetPageSize() const;
/**
* Set fetch results page size.
*
* @param size Fetch results page size.
*/
void SetPageSize(int32_t size);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsPageSizeSet() const;
/**
* Get user.
*
* @return User.
*/
const std::string& GetUser() const;
/**
* Set user.
*
* @param user User.
*/
void SetUser(const std::string& user);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsUserSet() const;
/**
* Get password.
*
* @return Password.
*/
const std::string& GetPassword() const;
/**
* Set password.
*
* @param pass Password.
*/
void SetPassword(const std::string& pass);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsPasswordSet() const;
/**
* Get nested transaction mode.
*
* @return Nested transaction mode.
*/
NestedTxMode::Type GetNestedTxMode() const;
/**
* Set nested transaction mode.
*
* @param mode Nested transaction mode.
*/
void SetNestedTxMode(NestedTxMode::Type mode);
/**
* Check if the value set.
*
* @return @true if the value set.
*/
bool IsNestedTxModeSet() const;
/**
* Get argument map.
*
* @param res Resulting argument map.
*/
void ToMap(ArgumentMap& res) const;
private:
/**
* Add key and value to the argument map.
*
* @param map Map.
* @param key Key.
* @param value Value.
*/
template<typename T>
static void AddToMap(ArgumentMap& map, const std::string& key, const SettableValue<T>& value);
/** DSN. */
SettableValue<std::string> dsn;
/** Driver name. */
SettableValue<std::string> driver;
/** Schema. */
SettableValue<std::string> schema;
/** Server. Deprecated. */
SettableValue<std::string> server;
/** TCP port. Deprecated. */
SettableValue<uint16_t> port;
/** Request and response page size. */
SettableValue<int32_t> pageSize;
/** Distributed joins flag. */
SettableValue<bool> distributedJoins;
/** Enforce join order flag. */
SettableValue<bool> enforceJoinOrder;
/** Replicated only flag. */
SettableValue<bool> replicatedOnly;
/** Collocated flag. */
SettableValue<bool> collocated;
/** Lazy flag. */
SettableValue<bool> lazy;
/** Skip reducer on update flag. */
SettableValue<bool> skipReducerOnUpdate;
/** Protocol version. */
SettableValue<ProtocolVersion> protocolVersion;
/** Connection end-points. */
SettableValue< std::vector<EndPoint> > endPoints;
/** SSL Mode. */
SettableValue<ssl::SslMode::Type> sslMode;
/** SSL private key file path. */
SettableValue<std::string> sslKeyFile;
/** SSL certificate file path. */
SettableValue<std::string> sslCertFile;
/** SSL certificate authority file path. */
SettableValue<std::string> sslCaFile;
/** User. */
SettableValue<std::string> user;
/** Password. */
SettableValue<std::string> password;
/** Nested transaction mode. */
SettableValue<NestedTxMode::Type> nestedTxMode;
};
template<>
void Configuration::AddToMap<std::string>(ArgumentMap& map, const std::string& key,
const SettableValue<std::string>& value);
template<>
void Configuration::AddToMap<uint16_t>(ArgumentMap& map, const std::string& key,
const SettableValue<uint16_t>& value);
template<>
void Configuration::AddToMap<int32_t>(ArgumentMap& map, const std::string& key,
const SettableValue<int32_t>& value);
template<>
void Configuration::AddToMap<bool>(ArgumentMap& map, const std::string& key,
const SettableValue<bool>& value);
template<>
void Configuration::AddToMap<ProtocolVersion>(ArgumentMap& map, const std::string& key,
const SettableValue<ProtocolVersion>& value);
template<>
void Configuration::AddToMap< std::vector<EndPoint> >(ArgumentMap& map, const std::string& key,
const SettableValue< std::vector<EndPoint> >& value);
template<>
void Configuration::AddToMap<ssl::SslMode::Type>(ArgumentMap& map, const std::string& key,
const SettableValue<ssl::SslMode::Type>& value);
template<>
void Configuration::AddToMap<NestedTxMode::Type>(ArgumentMap& map, const std::string& key,
const SettableValue<NestedTxMode::Type>& value);
}
}
}
#endif //_IGNITE_ODBC_CONFIG_CONFIGURATION