mirror of
https://github.com/oatpp/oatpp-postgresql.git
synced 2025-02-17 12:09:32 +08:00
Add boolean type mapping.
This commit is contained in:
parent
eab915b05a
commit
d511320a06
@ -64,7 +64,7 @@ Deserializer::Deserializer() {
|
||||
|
||||
setDeserializerMethod(data::mapping::type::__class::Float32::CLASS_ID, &Deserializer::deserializeFloat32);
|
||||
setDeserializerMethod(data::mapping::type::__class::Float64::CLASS_ID, &Deserializer::deserializeFloat64);
|
||||
setDeserializerMethod(data::mapping::type::__class::Boolean::CLASS_ID, nullptr);
|
||||
setDeserializerMethod(data::mapping::type::__class::Boolean::CLASS_ID, &Deserializer::deserializeBoolean);
|
||||
|
||||
setDeserializerMethod(data::mapping::type::__class::AbstractObject::CLASS_ID, nullptr);
|
||||
setDeserializerMethod(data::mapping::type::__class::AbstractEnum::CLASS_ID, nullptr);
|
||||
@ -177,8 +177,18 @@ oatpp::Void Deserializer::deserializeFloat32(const Deserializer* _this, const In
|
||||
return oatpp::Float32();
|
||||
}
|
||||
|
||||
v_int32 intVal = deInt4(data);
|
||||
return oatpp::Float32(*((p_float32) &intVal));
|
||||
switch(data.oid) {
|
||||
case FLOAT4OID: {
|
||||
v_int32 intVal = deInt4(data);
|
||||
return oatpp::Float32(*((p_float32) &intVal));
|
||||
}
|
||||
case FLOAT8OID: {
|
||||
v_int64 intVal = deInt8(data);
|
||||
return oatpp::Float32(*((p_float64) &intVal));
|
||||
}
|
||||
}
|
||||
|
||||
throw std::runtime_error("[oatpp::postgresql::mapping::Deserializer::deserializeFloat32()]: Error. Unknown OID.");
|
||||
|
||||
}
|
||||
|
||||
@ -191,8 +201,38 @@ oatpp::Void Deserializer::deserializeFloat64(const Deserializer* _this, const In
|
||||
return oatpp::Float64();
|
||||
}
|
||||
|
||||
v_int64 intVal = deInt8(data);
|
||||
return oatpp::Float64(*((p_float64) &intVal));
|
||||
switch(data.oid) {
|
||||
case FLOAT4OID: {
|
||||
v_int32 intVal = deInt4(data);
|
||||
return oatpp::Float64(*((p_float32) &intVal));
|
||||
}
|
||||
case FLOAT8OID: {
|
||||
v_int64 intVal = deInt8(data);
|
||||
return oatpp::Float64(*((p_float64) &intVal));
|
||||
}
|
||||
}
|
||||
|
||||
throw std::runtime_error("[oatpp::postgresql::mapping::Deserializer::deserializeFloat32()]: Error. Unknown OID.");
|
||||
|
||||
}
|
||||
|
||||
oatpp::Void Deserializer::deserializeBoolean(const Deserializer* _this, const InData& data, const Type* type) {
|
||||
|
||||
(void) _this;
|
||||
(void) type;
|
||||
|
||||
if(data.isNull) {
|
||||
return oatpp::Boolean();
|
||||
}
|
||||
|
||||
switch(data.oid) {
|
||||
case BOOLOID: return oatpp::Boolean((bool) data.data[0]);
|
||||
case INT2OID:
|
||||
case INT4OID:
|
||||
case INT8OID: return oatpp::Boolean((bool) deInt(data));
|
||||
}
|
||||
|
||||
throw std::runtime_error("[oatpp::postgresql::mapping::Deserializer::deserializeBoolean()]: Error. Unknown OID.");
|
||||
|
||||
}
|
||||
|
||||
|
@ -87,6 +87,8 @@ public:
|
||||
static oatpp::Void deserializeFloat32(const Deserializer* _this, const InData& data, const Type* type);
|
||||
static oatpp::Void deserializeFloat64(const Deserializer* _this, const InData& data, const Type* type);
|
||||
|
||||
static oatpp::Void deserializeBoolean(const Deserializer* _this, const InData& data, const Type* type);
|
||||
|
||||
static oatpp::Void deserializeAny(const Deserializer* _this, const InData& data, const Type* type);
|
||||
|
||||
static oatpp::Void deserializeUuid(const Deserializer* _this, const InData& data, const Type* type);
|
||||
|
@ -55,7 +55,7 @@ Serializer::Serializer() {
|
||||
|
||||
setSerializerMethod(data::mapping::type::__class::Float32::CLASS_ID, &Serializer::serializeFloat32);
|
||||
setSerializerMethod(data::mapping::type::__class::Float64::CLASS_ID, &Serializer::serializeFloat64);
|
||||
setSerializerMethod(data::mapping::type::__class::Boolean::CLASS_ID, nullptr);
|
||||
setSerializerMethod(data::mapping::type::__class::Boolean::CLASS_ID, &Serializer::serializeBoolean);
|
||||
|
||||
setSerializerMethod(data::mapping::type::__class::AbstractObject::CLASS_ID, nullptr);
|
||||
setSerializerMethod(data::mapping::type::__class::AbstractEnum::CLASS_ID, nullptr);
|
||||
@ -138,7 +138,7 @@ void Serializer::serInt8(OutputData& outData, v_int64 value) {
|
||||
void Serializer::serializeString(OutputData& outData, const oatpp::Void& polymorph) {
|
||||
if(polymorph) {
|
||||
base::StrBuffer *buff = static_cast<base::StrBuffer *>(polymorph.get());
|
||||
outData.data = buff->c_str();
|
||||
outData.data = (char *)buff->getData();
|
||||
outData.dataSize = buff->getSize();
|
||||
outData.dataFormat = 1;
|
||||
} else {
|
||||
@ -231,10 +231,23 @@ void Serializer::serializeFloat64(OutputData& outData, const oatpp::Void& polymo
|
||||
}
|
||||
}
|
||||
|
||||
void Serializer::serializeBoolean(OutputData& outData, const oatpp::Void& polymorph) {
|
||||
if(polymorph) {
|
||||
auto v = polymorph.staticCast<oatpp::Boolean>();
|
||||
outData.dataBuffer.reset(new char[1]);
|
||||
outData.data = outData.dataBuffer.get();
|
||||
outData.dataSize = 1;
|
||||
outData.dataFormat = 1;
|
||||
outData.data[0] = (bool)v;
|
||||
} else{
|
||||
serNull(outData);
|
||||
}
|
||||
}
|
||||
|
||||
void Serializer::serializeUuid(OutputData& outData, const oatpp::Void& polymorph) {
|
||||
if(polymorph) {
|
||||
auto v = polymorph.staticCast<postgresql::Uuid>();
|
||||
outData.data = (const char*) v->getData();
|
||||
outData.data = (char*) v->getData();
|
||||
outData.dataSize = v->getSize();
|
||||
outData.dataFormat = 1;
|
||||
} else{
|
||||
|
@ -34,7 +34,7 @@ public:
|
||||
|
||||
struct OutputData {
|
||||
std::unique_ptr<char[]> dataBuffer;
|
||||
const char* data;
|
||||
char* data;
|
||||
int dataSize;
|
||||
int dataFormat;
|
||||
};
|
||||
@ -137,6 +137,13 @@ public:
|
||||
*/
|
||||
static void serializeFloat64(OutputData& outData, const oatpp::Void& polymorph);
|
||||
|
||||
/**
|
||||
* OID used - BOOLOID
|
||||
* @param outData
|
||||
* @param polymorph
|
||||
*/
|
||||
static void serializeBoolean(OutputData& outData, const oatpp::Void& polymorph);
|
||||
|
||||
/**
|
||||
* OID used - UUIDOID
|
||||
* @param outData
|
||||
|
@ -3,5 +3,6 @@ DROP TABLE IF EXISTS test_ints;
|
||||
CREATE TABLE test_ints (
|
||||
f_int16 smallint,
|
||||
f_int32 integer,
|
||||
f_int64 bigint
|
||||
f_int64 bigint,
|
||||
f_bool boolean
|
||||
);
|
||||
|
@ -43,6 +43,7 @@ class IntsRow : public oatpp::DTO {
|
||||
DTO_FIELD(Int16, f_int16);
|
||||
DTO_FIELD(Int32, f_int32);
|
||||
DTO_FIELD(Int64, f_int64);
|
||||
DTO_FIELD(Boolean, f_bool);
|
||||
|
||||
};
|
||||
|
||||
@ -70,12 +71,13 @@ public:
|
||||
|
||||
QUERY(insertIntValues,
|
||||
"INSERT INTO test_ints "
|
||||
"(f_int16, f_int32, f_int64) "
|
||||
"(f_int16, f_int32, f_int64, f_bool) "
|
||||
"VALUES "
|
||||
"(:f_int16, :f_int32, :f_int64)",
|
||||
"(:f_int16, :f_int32, :f_int64, :f_bool)",
|
||||
PARAM(Int16, f_int16),
|
||||
PARAM(Int32, f_int32),
|
||||
PARAM(Int64, f_int64))
|
||||
PARAM(Int64, f_int64),
|
||||
PARAM(Boolean, f_bool))
|
||||
|
||||
QUERY(selectAllInts, "SELECT * FROM test_ints")
|
||||
|
||||
@ -98,20 +100,24 @@ void IntTest::onRun() {
|
||||
auto connection = client.getConnection();
|
||||
|
||||
client.insertIntValues(nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
nullptr, connection);
|
||||
|
||||
client.insertIntValues(-1,
|
||||
-1,
|
||||
-1, connection);
|
||||
-1,
|
||||
false, connection);
|
||||
|
||||
client.insertIntValues(std::numeric_limits<v_int16>::min(),
|
||||
std::numeric_limits<v_int32>::min(),
|
||||
std::numeric_limits<v_int64>::min(), connection);
|
||||
std::numeric_limits<v_int64>::min(),
|
||||
true, connection);
|
||||
|
||||
client.insertIntValues(std::numeric_limits<v_int16>::max(),
|
||||
std::numeric_limits<v_int32>::max(),
|
||||
std::numeric_limits<v_int64>::max(), connection);
|
||||
std::numeric_limits<v_int64>::max(),
|
||||
true, connection);
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user