Skip to content

Commit 8ed278b

Browse files
committed
mapping::Deserializer. Deserialize floats.
1 parent 1352309 commit 8ed278b

File tree

5 files changed

+39
-62
lines changed

5 files changed

+39
-62
lines changed

src/CMakeLists.txt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11

22
add_library(${OATPP_THIS_MODULE_NAME}
3-
oatpp-postgresql/Connection.cpp
4-
oatpp-postgresql/Connection.hpp
5-
oatpp-postgresql/Executor.cpp
6-
oatpp-postgresql/Executor.hpp
7-
oatpp-postgresql/ql_template/Parser.cpp
8-
oatpp-postgresql/ql_template/Parser.hpp
9-
oatpp-postgresql/ql_template/TemplateValueProvider.cpp
10-
oatpp-postgresql/ql_template/TemplateValueProvider.hpp
113
oatpp-postgresql/mapping/Deserializer.cpp
124
oatpp-postgresql/mapping/Deserializer.hpp
5+
oatpp-postgresql/mapping/Oid.hpp
6+
oatpp-postgresql/mapping/ResultMapper.cpp
7+
oatpp-postgresql/mapping/ResultMapper.hpp
138
oatpp-postgresql/mapping/Serializer.cpp
149
oatpp-postgresql/mapping/Serializer.hpp
1510
oatpp-postgresql/mapping/TypeMapper.cpp
16-
oatpp-postgresql/mapping/TypeMapper.hpp oatpp-postgresql/mapping/Oid.hpp oatpp-postgresql/QueryResult.cpp oatpp-postgresql/QueryResult.hpp oatpp-postgresql/mapping/ResultMapper.cpp oatpp-postgresql/mapping/ResultMapper.hpp)
11+
oatpp-postgresql/mapping/TypeMapper.hpp
12+
oatpp-postgresql/ql_template/Parser.cpp
13+
oatpp-postgresql/ql_template/Parser.hpp
14+
oatpp-postgresql/ql_template/TemplateValueProvider.cpp
15+
oatpp-postgresql/ql_template/TemplateValueProvider.hpp
16+
oatpp-postgresql/Connection.cpp
17+
oatpp-postgresql/Connection.hpp
18+
oatpp-postgresql/Executor.cpp
19+
oatpp-postgresql/Executor.hpp
20+
oatpp-postgresql/QueryResult.cpp
21+
oatpp-postgresql/QueryResult.hpp
22+
)
1723

1824
set_target_properties(${OATPP_THIS_MODULE_NAME} PROPERTIES
1925
CXX_STANDARD 11

src/oatpp-postgresql/Executor.cpp

Lines changed: 6 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,7 @@ std::shared_ptr<QueryResult> Executor::prepareQuery(const StringTemplate& queryT
6565
queryTemplate.getTemplateVariables().size(),
6666
extra->paramTypes.get());
6767

68-
auto res = std::make_shared<QueryResult>(qres, connection, m_resultMapper);
69-
70-
auto status = PQresultStatus(qres);
71-
if (status != PGRES_COMMAND_OK) {
72-
OATPP_LOGD("Executor::prepareQuery", "execute prepare failed: %s", PQerrorMessage(connection->getHandle()));
73-
} else {
74-
OATPP_LOGD("Executor::prepareQuery", "OK");
75-
}
76-
77-
return res;
68+
return std::make_shared<QueryResult>(qres, connection, m_resultMapper);
7869

7970
}
8071

@@ -97,7 +88,8 @@ std::shared_ptr<QueryResult> Executor::executeQuery(const StringTemplate& queryT
9788
const auto& var = queryTemplate.getTemplateVariables()[i];
9889
auto it = params.find(var.name);
9990
if(it == params.end()) {
100-
throw std::runtime_error("param not found");
91+
throw std::runtime_error("[oatpp::postgresql::Executor::executeQuery()]: "
92+
"Error. Parameter not found " + var.name->std_str());
10193
}
10294

10395
auto& data = outData[i];
@@ -116,41 +108,7 @@ std::shared_ptr<QueryResult> Executor::executeQuery(const StringTemplate& queryT
116108
paramFormats.get(),
117109
1);
118110

119-
auto res = std::make_shared<QueryResult>(qres, connection, m_resultMapper);
120-
121-
auto status = PQresultStatus(qres);
122-
if (status != PGRES_TUPLES_OK) {
123-
OATPP_LOGD("Database", "execute query failed: %s", PQerrorMessage(connection->getHandle()));
124-
} else {
125-
OATPP_LOGD("Database", "OK_2");
126-
127-
auto fieldsCount = PQnfields(qres);
128-
data::stream::ChunkedBuffer stream;
129-
130-
for(v_int32 i = 0; i < fieldsCount; i++) {
131-
stream << oatpp::String(PQfname(qres, i)) << " | ";
132-
}
133-
134-
stream << "\n---------------\n";
135-
136-
auto rows = PQntuples(qres);
137-
for(v_int32 i = 0; i < rows; i++) {
138-
stream << "[";
139-
for(v_int32 fieldIndex = 0; fieldIndex < fieldsCount; fieldIndex ++) {
140-
auto oid = PQftype(qres, fieldIndex);
141-
auto size = PQfsize(qres, fieldIndex);
142-
stream << "{oid=" << oid << ", size=" << size << ", val=" << /**((p_int64) */(const char*)PQgetvalue(qres, i, fieldIndex) << "}, ";
143-
}
144-
stream << "]\n";
145-
}
146-
147-
auto text = stream.toString();
148-
149-
OATPP_LOGD("RES", "%s", text->c_str());
150-
151-
}
152-
153-
return res;
111+
return std::make_shared<QueryResult>(qres, connection, m_resultMapper);
154112

155113
}
156114

@@ -213,12 +171,12 @@ std::shared_ptr<orm::QueryResult> Executor::execute(const StringTemplate& queryT
213171
auto res = queryTemplate.format(map);
214172

215173
if(!pgConnection->isPrepared(extra->templateName)) {
216-
OATPP_LOGD("AAA", "prepared[%s]={%s}", extra->templateName->c_str(), extra->preparedTemplate->c_str());
174+
//OATPP_LOGD("AAA", "prepared[%s]={%s}", extra->templateName->c_str(), extra->preparedTemplate->c_str());
217175
prepareQuery(queryTemplate, pgConnection);
218176
pgConnection->setPrepared(extra->templateName);
219177
}
220178

221-
OATPP_LOGD("AAA", "query={%s}", res->c_str());
179+
//OATPP_LOGD("AAA", "query={%s}", res->c_str());
222180

223181
return executeQuery(queryTemplate, params, pgConnection);
224182

src/oatpp-postgresql/mapping/Deserializer.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ Deserializer::Deserializer() {
5353
setDeserializerMethod(data::mapping::type::__class::Int64::CLASS_ID, &Deserializer::deserializeInt<oatpp::Int64>);
5454
setDeserializerMethod(data::mapping::type::__class::UInt64::CLASS_ID, &Deserializer::deserializeInt<oatpp::UInt64>);
5555

56-
setDeserializerMethod(data::mapping::type::__class::Float32::CLASS_ID, nullptr);
57-
setDeserializerMethod(data::mapping::type::__class::Float64::CLASS_ID, nullptr);
56+
setDeserializerMethod(data::mapping::type::__class::Float32::CLASS_ID, &Deserializer::deserializeFloat32);
57+
setDeserializerMethod(data::mapping::type::__class::Float64::CLASS_ID, &Deserializer::deserializeFloat64);
5858
setDeserializerMethod(data::mapping::type::__class::Boolean::CLASS_ID, nullptr);
5959

6060
setDeserializerMethod(data::mapping::type::__class::AbstractObject::CLASS_ID, nullptr);
@@ -140,6 +140,16 @@ oatpp::Void Deserializer::deserializeString(const Deserializer* _this, const InD
140140
throw std::runtime_error("[oatpp::postgresql::mapping::Deserializer::deserializeString()]: Error. Unknown OID.");
141141
}
142142

143+
oatpp::Void Deserializer::deserializeFloat32(const Deserializer* _this, const InData& data, const Type* type) {
144+
v_int32 intVal = deInt4(data);
145+
return oatpp::Float32(*((p_float32) &intVal));
146+
}
147+
148+
oatpp::Void Deserializer::deserializeFloat64(const Deserializer* _this, const InData& data, const Type* type) {
149+
v_int64 intVal = deInt8(data);
150+
return oatpp::Float64(*((p_float64) &intVal));
151+
}
152+
143153
oatpp::Void Deserializer::deserializeAny(const Deserializer* _this, const InData& data, const Type* type) {
144154
(void) type;
145155
const Type* valueType = _this->m_typeMapper.getOidType(data.oid);

src/oatpp-postgresql/mapping/Deserializer.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,6 @@ class Deserializer {
6363

6464
static oatpp::Void deserializeString(const Deserializer* _this, const InData& data, const Type* type);
6565

66-
static oatpp::Void deserializeAny(const Deserializer* _this, const InData& data, const Type* type);
67-
6866
template<class IntWrapper>
6967
static oatpp::Void deserializeInt(const Deserializer* _this, const InData& data, const Type* type) {
7068
(void) _this;
@@ -73,6 +71,11 @@ class Deserializer {
7371
return IntWrapper((typename IntWrapper::UnderlyingType) value);
7472
}
7573

74+
static oatpp::Void deserializeFloat32(const Deserializer* _this, const InData& data, const Type* type);
75+
static oatpp::Void deserializeFloat64(const Deserializer* _this, const InData& data, const Type* type);
76+
77+
static oatpp::Void deserializeAny(const Deserializer* _this, const InData& data, const Type* type);
78+
7679
};
7780

7881
}}}

test/oatpp-postgresql/tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class Test : public oatpp::test::UnitTest {
104104

105105
{
106106

107-
auto res = client.selectInts(connection);
107+
auto res = client.selectFloats(connection);
108108
OATPP_LOGD(TAG, "OK=%d, count=%d", res->isSuccess(), res->count());
109109

110110
auto dataset = res->fetch<oatpp::Vector<oatpp::Fields<oatpp::Any>>>();

0 commit comments

Comments
 (0)