void ReadDsnConfiguration()

in modules/platforms/cpp/odbc/src/dsn_config.cpp [105:218]


        void ReadDsnConfiguration(const char* dsn, Configuration& config, diagnostic::DiagnosticRecordStorage* diag)
        {
            SettableValue<std::string> address = ReadDsnString(dsn, ConnectionStringParser::Key::address);

            if (address.IsSet() && !config.IsAddressesSet())
            {
                std::vector<EndPoint> endPoints;

                ParseAddress(address.GetValue(), endPoints, diag);

                config.SetAddresses(endPoints);
            }

            SettableValue<std::string> server = ReadDsnString(dsn, ConnectionStringParser::Key::server);

            if (server.IsSet() && !config.IsHostSet())
                config.SetHost(server.GetValue());

            SettableValue<int32_t> port = ReadDsnInt(dsn, ConnectionStringParser::Key::port);

            if (port.IsSet() && !config.IsTcpPortSet())
                config.SetTcpPort(static_cast<uint16_t>(port.GetValue()));

            SettableValue<std::string> schema = ReadDsnString(dsn, ConnectionStringParser::Key::schema);

            if (schema.IsSet() && !config.IsSchemaSet())
                config.SetSchema(schema.GetValue());

            SettableValue<bool> distributedJoins = ReadDsnBool(dsn, ConnectionStringParser::Key::distributedJoins);

            if (distributedJoins.IsSet() && !config.IsDistributedJoinsSet())
                config.SetDistributedJoins(distributedJoins.GetValue());

            SettableValue<bool> enforceJoinOrder = ReadDsnBool(dsn, ConnectionStringParser::Key::enforceJoinOrder);

            if (enforceJoinOrder.IsSet() && !config.IsEnforceJoinOrderSet())
                config.SetEnforceJoinOrder(enforceJoinOrder.GetValue());

            SettableValue<bool> replicatedOnly = ReadDsnBool(dsn, ConnectionStringParser::Key::replicatedOnly);

            if (replicatedOnly.IsSet() && !config.IsReplicatedOnlySet())
                config.SetReplicatedOnly(replicatedOnly.GetValue());

            SettableValue<bool> collocated = ReadDsnBool(dsn, ConnectionStringParser::Key::collocated);

            if (collocated.IsSet() && !config.IsCollocatedSet())
                config.SetCollocated(collocated.GetValue());

            SettableValue<bool> lazy = ReadDsnBool(dsn, ConnectionStringParser::Key::lazy);

            if (lazy.IsSet() && !config.IsLazySet())
                config.SetLazy(lazy.GetValue());

            SettableValue<bool> skipReducerOnUpdate = ReadDsnBool(dsn, ConnectionStringParser::Key::skipReducerOnUpdate);

            if (skipReducerOnUpdate.IsSet() && !config.IsSkipReducerOnUpdateSet())
                config.SetSkipReducerOnUpdate(skipReducerOnUpdate.GetValue());

            SettableValue<std::string> versionStr = ReadDsnString(dsn, ConnectionStringParser::Key::protocolVersion);

            if (versionStr.IsSet() && !config.IsProtocolVersionSet())
            {
                ProtocolVersion version = ProtocolVersion::FromString(versionStr.GetValue());

                if (!version.IsSupported())
                    version = Configuration::DefaultValue::protocolVersion;

                config.SetProtocolVersion(version);
            }

            SettableValue<int32_t> pageSize = ReadDsnInt(dsn, ConnectionStringParser::Key::pageSize);

            if (pageSize.IsSet() && !config.IsPageSizeSet() && pageSize.GetValue() > 0)
                config.SetPageSize(pageSize.GetValue());

            SettableValue<std::string> sslModeStr = ReadDsnString(dsn, ConnectionStringParser::Key::sslMode);

            if (sslModeStr.IsSet() && !config.IsSslModeSet())
            {
                ssl::SslMode::Type sslMode = ssl::SslMode::FromString(sslModeStr.GetValue(), ssl::SslMode::DISABLE);

                config.SetSslMode(sslMode);
            }

            SettableValue<std::string> sslKeyFile = ReadDsnString(dsn, ConnectionStringParser::Key::sslKeyFile);

            if (sslKeyFile.IsSet() && !config.IsSslKeyFileSet())
                config.SetSslKeyFile(sslKeyFile.GetValue());

            SettableValue<std::string> sslCertFile = ReadDsnString(dsn, ConnectionStringParser::Key::sslCertFile);

            if (sslCertFile.IsSet() && !config.IsSslCertFileSet())
                config.SetSslCertFile(sslCertFile.GetValue());

            SettableValue<std::string> sslCaFile = ReadDsnString(dsn, ConnectionStringParser::Key::sslCaFile);

            if (sslCaFile.IsSet() && !config.IsSslCaFileSet())
                config.SetSslCaFile(sslCaFile.GetValue());

            SettableValue<std::string> user = ReadDsnString(dsn, ConnectionStringParser::Key::user);

            if (user.IsSet() && !config.IsUserSet())
                config.SetUser(user.GetValue());

            SettableValue<std::string> password = ReadDsnString(dsn, ConnectionStringParser::Key::password);

            if (password.IsSet() && !config.IsPasswordSet())
                config.SetPassword(password.GetValue());

            SettableValue<std::string> engineModeStr = ReadDsnString(dsn, ConnectionStringParser::Key::engineMode);

            if (engineModeStr.IsSet() && !config.IsEngineModeSet())
                config.SetEngineMode(EngineMode::FromString(engineModeStr.GetValue(), config.GetEngineMode()));
        }