in modules/platforms/cpp/ignite/protocol/utils.cpp [315:424]
void append_primitive_with_type(binary_tuple_builder &builder, const primitive &value) {
if (value.is_null()) {
builder.append_null(); // Type.
builder.append_null(); // Scale.
builder.append_null(); // Value.
return;
}
switch (value.get_type()) {
case ignite_type::BOOLEAN: {
append_type_and_scale(builder, ignite_type::INT8);
builder.append_bool(value.get<bool>());
break;
}
case ignite_type::INT8: {
append_type_and_scale(builder, ignite_type::INT8);
builder.append_int8(value.get<std::int8_t>());
break;
}
case ignite_type::INT16: {
append_type_and_scale(builder, ignite_type::INT16);
builder.append_int16(value.get<std::int16_t>());
break;
}
case ignite_type::INT32: {
append_type_and_scale(builder, ignite_type::INT32);
builder.append_int32(value.get<std::int32_t>());
break;
}
case ignite_type::INT64: {
append_type_and_scale(builder, ignite_type::INT64);
builder.append_int64(value.get<std::int64_t>());
break;
}
case ignite_type::FLOAT: {
append_type_and_scale(builder, ignite_type::FLOAT);
builder.append_float(value.get<float>());
break;
}
case ignite_type::DOUBLE: {
append_type_and_scale(builder, ignite_type::DOUBLE);
builder.append_double(value.get<double>());
break;
}
case ignite_type::UUID: {
append_type_and_scale(builder, ignite_type::UUID);
builder.append_uuid(value.get<uuid>());
break;
}
case ignite_type::STRING: {
append_type_and_scale(builder, ignite_type::STRING);
builder.append_varlen(value.get<std::string>());
break;
}
case ignite_type::BYTE_ARRAY: {
append_type_and_scale(builder, ignite_type::BYTE_ARRAY);
auto &data = value.get<std::vector<std::byte>>();
builder.append_varlen(data);
break;
}
case ignite_type::DECIMAL: {
const auto &dec_value = value.get<big_decimal>();
append_type_and_scale(builder, ignite_type::DECIMAL, dec_value.get_scale());
builder.append_number(dec_value);
break;
}
case ignite_type::NUMBER: {
append_type_and_scale(builder, ignite_type::NUMBER);
builder.append_number(value.get<big_integer>());
break;
}
case ignite_type::DATE: {
append_type_and_scale(builder, ignite_type::DATE);
builder.append_date(value.get<ignite_date>());
break;
}
case ignite_type::TIME: {
append_type_and_scale(builder, ignite_type::TIME);
builder.append_time(value.get<ignite_time>());
break;
}
case ignite_type::DATETIME: {
append_type_and_scale(builder, ignite_type::DATETIME);
builder.append_date_time(value.get<ignite_date_time>());
break;
}
case ignite_type::TIMESTAMP: {
append_type_and_scale(builder, ignite_type::TIMESTAMP);
builder.append_timestamp(value.get<ignite_timestamp>());
break;
}
case ignite_type::PERIOD: {
append_type_and_scale(builder, ignite_type::PERIOD);
builder.append_period(value.get<ignite_period>());
break;
}
case ignite_type::DURATION: {
append_type_and_scale(builder, ignite_type::DURATION);
builder.append_duration(value.get<ignite_duration>());
break;
}
case ignite_type::BITMASK: {
append_type_and_scale(builder, ignite_type::BITMASK);
builder.append_varlen(value.get<bit_array>().get_raw());
break;
}
default:
throw ignite_error("Unsupported type: " + std::to_string(int(value.get_type())));
}
}