std::string subnet_prefix = out_bindings[1]->getString();
auto prefix_pair = Subnet4::parsePrefix(subnet_prefix);
// renew_timer
- uint32_t renew_timer = out_bindings[13]->getIntegerOrDefault<uint32_t>(0);
+ auto renew_timer = createTriplet(out_bindings[13]);
// rebind_timer
- uint32_t rebind_timer = out_bindings[11]->getIntegerOrDefault<uint32_t>(0);
+ auto rebind_timer = createTriplet(out_bindings[11]);
// valid_lifetime
- uint32_t valid_lifetime = out_bindings[19]->getIntegerOrDefault<uint32_t>(0);
+ auto valid_lifetime = createTriplet(out_bindings[19]);
// Create subnet with basic settings.
last_subnet.reset(new Subnet4(prefix_pair.first, prefix_pair.second,
MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(subnet->getMatchClientId())),
MySqlBinding::createTimestamp(subnet->getModificationTime()),
MySqlBinding::condCreateInteger<uint32_t>(subnet->getSiaddr().toUint32()),
- MySqlBinding::createInteger<uint32_t>(subnet->getT2()),
+ createBinding(subnet->getT2()),
createInputRelayBinding(subnet),
- MySqlBinding::createInteger<uint32_t>(subnet->getT1()),
+ createBinding(subnet->getT1()),
createInputRequiredClassesBinding(subnet),
MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(subnet->getHostReservationMode())),
MySqlBinding::condCreateString(subnet->getSname()),
shared_network_binding,
createInputContextBinding(subnet),
- MySqlBinding::createInteger<uint32_t>(subnet->getValid())
+ createBinding(subnet->getValid())
};
MySqlTransaction transaction(conn_);
// rebind_timer
if (!out_bindings[6]->amNull()) {
- last_network->setT2(out_bindings[6]->getInteger<uint32_t>());
+ last_network->setT2(createTriplet(out_bindings[6]));
}
// relay
// renew_timer
if (!out_bindings[8]->amNull()) {
- last_network->setT1(out_bindings[8]->getInteger<uint32_t>());
+ last_network->setT1(createTriplet(out_bindings[8]));
}
// require_client_classes
// valid_lifetime
if (!out_bindings[12]->amNull()) {
- last_network->setValid(out_bindings[12]->getInteger<uint32_t>());
+ last_network->setValid(createTriplet(out_bindings[12]));
}
shared_networks.push_back(last_network);
MySqlBinding::condCreateString(shared_network->getIface()),
MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>(shared_network->getMatchClientId())),
MySqlBinding::createTimestamp(shared_network->getModificationTime()),
- MySqlBinding::condCreateInteger<uint32_t>(shared_network->getT2()),
+ createBinding(shared_network->getT2()),
createInputRelayBinding(shared_network),
- MySqlBinding::condCreateInteger<uint32_t>(shared_network->getT1()),
+ createBinding(shared_network->getT1()),
createInputRequiredClassesBinding(shared_network),
MySqlBinding::createInteger<uint8_t>(static_cast<uint8_t>
(shared_network->getHostReservationMode())),
createInputContextBinding(shared_network),
- MySqlBinding::condCreateInteger<uint32_t>(shared_network->getValid())
+ createBinding(shared_network->getValid())
};
MySqlTransaction transaction(conn_);
}
}
+MySqlBindingPtr
+MySqlConfigBackendImpl::createBinding(const Triplet<uint32_t>& triplet) const {
+ if (triplet.unspecified()) {
+ return (MySqlBinding::createNull());
+ }
+ return (MySqlBinding::createInteger<uint32_t>(triplet.get()));
+}
+
+Triplet<uint32_t>
+MySqlConfigBackendImpl::createTriplet(const MySqlBindingPtr& binding) const {
+ if (!binding) {
+ isc_throw(Unexpected, "MySQL configuration backend internal error: "
+ "binding is NULL when creating a triplet value");
+ }
+
+ if (binding->amNull()) {
+ return (Triplet<uint32_t>());
+ }
+
+ return (Triplet<uint32_t>(binding->getInteger<uint32_t>()));
+}
+
void
MySqlConfigBackendImpl::createAuditRevision(const int index,
const ServerSelector& server_selector,
/// @brief Destructor.
~MySqlConfigBackendImpl();
+ /// @brief Creates MySQL binding from a @c Triplet.
+ ///
+ /// @param triplet Triplet value from which the binding should be created.
+ /// @return Pointer to a null binding if the triplet is "unspecified" or
+ /// a pointer to a binding representing 32-bit unsigned integer value
+ /// otherwise.
+ db::MySqlBindingPtr createBinding(const Triplet<uint32_t>& triplet) const;
+
+ /// @brief Creates @c Triplet object from MySQL binding.
+ ///
+ /// @param binding Pointer to the MySQL binding.
+ /// @return Triplet value set to "unspecified" if the MySQL binding
+ /// represents a NULL value or a Triplet value encapsulating 32-bit
+ /// unsigned integer if the MySQL represents an integer.
+ /// @throw isc::Unexpected if the provided binding pointer is NULL.
+ /// @throw isc::InvalidOperation if the binding does not represent
+ /// a 32-bit unsigned integer.
+ Triplet<uint32_t> createTriplet(const db::MySqlBindingPtr& binding) const;
+
/// @brief Returns server tags associated with the particular selector.
///
/// @param server_selector Server selector.
test_subnets_.push_back(subnet);
subnet.reset(new Subnet4(IOAddress("192.0.3.0"), 24, 20, 30, 40, 2048));
+ Triplet<uint32_t> null_timer;
+ subnet->setT1(null_timer);
+ subnet->setT2(null_timer);
+ subnet->setValid(null_timer);
test_subnets_.push_back(subnet);
subnet.reset(new Subnet4(IOAddress("192.0.4.0"), 24, 30, 40, 60, 4096));
// Add more shared networks.
shared_network.reset(new SharedNetwork4("level2"));
+ Triplet<uint32_t> null_timer;
+ shared_network->setT1(null_timer);
+ shared_network->setT2(null_timer);
+ shared_network->setValid(null_timer);
test_networks_.push_back(shared_network);
shared_network.reset(new SharedNetwork4("level3"));