Skip to content

Commit 12cdc83

Browse files
committed
Serializer. Serialize Ints.
1 parent 58f43f8 commit 12cdc83

File tree

4 files changed

+207
-11
lines changed

4 files changed

+207
-11
lines changed

src/oatpp-postgresql/Executor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ database::QueryResult Executor::execute(const StringTemplate& queryTemplate,
186186
executeQuery(queryTemplate, params, pgConnection);
187187

188188
return database::QueryResult();
189-
189+
190190
}
191191

192192
}}

src/oatpp-postgresql/mapping/Serializer.cpp

Lines changed: 122 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424

2525
#include "Serializer.hpp"
2626

27+
#if defined(WIN32) || defined(_WIN32)
28+
#include <WinSock2.h>
29+
#else
30+
#include <arpa/inet.h>
31+
#endif
32+
2733
namespace oatpp { namespace postgresql { namespace mapping {
2834

2935
Serializer::Serializer() {
@@ -33,17 +39,17 @@ Serializer::Serializer() {
3339
setSerializerMethod(data::mapping::type::__class::String::CLASS_ID, &Serializer::serializeString);
3440
setSerializerMethod(data::mapping::type::__class::Any::CLASS_ID, nullptr);
3541

36-
setSerializerMethod(data::mapping::type::__class::Int8::CLASS_ID, nullptr);
37-
setSerializerMethod(data::mapping::type::__class::UInt8::CLASS_ID, nullptr);
42+
setSerializerMethod(data::mapping::type::__class::Int8::CLASS_ID, &Serializer::serializeInt8);
43+
setSerializerMethod(data::mapping::type::__class::UInt8::CLASS_ID, &Serializer::serializeUInt8);
3844

39-
setSerializerMethod(data::mapping::type::__class::Int16::CLASS_ID, nullptr);
40-
setSerializerMethod(data::mapping::type::__class::UInt16::CLASS_ID, nullptr);
45+
setSerializerMethod(data::mapping::type::__class::Int16::CLASS_ID, &Serializer::serializeInt16);
46+
setSerializerMethod(data::mapping::type::__class::UInt16::CLASS_ID, &Serializer::serializeUInt16);
4147

42-
setSerializerMethod(data::mapping::type::__class::Int32::CLASS_ID, nullptr);
43-
setSerializerMethod(data::mapping::type::__class::UInt32::CLASS_ID, nullptr);
48+
setSerializerMethod(data::mapping::type::__class::Int32::CLASS_ID, &Serializer::serializeInt32);
49+
setSerializerMethod(data::mapping::type::__class::UInt32::CLASS_ID, &Serializer::serializeUInt32);
4450

45-
setSerializerMethod(data::mapping::type::__class::Int64::CLASS_ID, nullptr);
46-
setSerializerMethod(data::mapping::type::__class::UInt64::CLASS_ID, nullptr);
51+
setSerializerMethod(data::mapping::type::__class::Int64::CLASS_ID, &Serializer::serializeInt64);
52+
setSerializerMethod(data::mapping::type::__class::UInt64::CLASS_ID, &Serializer::serializeUInt64);
4753

4854
setSerializerMethod(data::mapping::type::__class::Float32::CLASS_ID, nullptr);
4955
setSerializerMethod(data::mapping::type::__class::Float64::CLASS_ID, nullptr);
@@ -82,11 +88,119 @@ void Serializer::serialize(OutputData& outData, const oatpp::Void& polymorph) co
8288
}
8389
}
8490

91+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
92+
// Serializer utility functions
93+
94+
void Serializer::serNull(OutputData& outData) {
95+
outData.dataBuffer.reset();
96+
outData.data = nullptr;
97+
outData.dataSize = 0;
98+
outData.dataFormat = 1;
99+
}
100+
101+
void Serializer::serInt2(OutputData& outData, v_int16 value) {
102+
outData.dataBuffer.reset(new char[2]);
103+
outData.data = outData.dataBuffer.get();
104+
outData.dataSize = 2;
105+
outData.dataFormat = 1;
106+
107+
*((p_int16) outData.data) = htons(value);
108+
}
109+
110+
void Serializer::serInt4(OutputData& outData, v_int32 value) {
111+
outData.dataBuffer.reset(new char[4]);
112+
outData.data = outData.dataBuffer.get();
113+
outData.dataSize = 4;
114+
outData.dataFormat = 1;
115+
116+
*((p_int32) outData.data) = htonl(value);
117+
}
118+
119+
void Serializer::serInt8(OutputData& outData, v_int64 value) {
120+
outData.dataBuffer.reset(new char[8]);
121+
outData.data = outData.dataBuffer.get();
122+
outData.dataSize = 8;
123+
outData.dataFormat = 1;
124+
125+
*((p_int32) (outData.data + 0)) = htonl(value >> 32);
126+
*((p_int32) (outData.data + 4)) = htonl(value & 0xFFFFFFFF);
127+
}
128+
129+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
130+
// Serializer functions
131+
85132
void Serializer::serializeString(OutputData& outData, const oatpp::Void& polymorph) {
86133
base::StrBuffer* buff = static_cast<base::StrBuffer*>(polymorph.get());
87134
outData.data = buff->c_str();
88135
outData.dataSize = buff->getSize();
89136
outData.dataFormat = 1;
90137
}
91138

139+
void Serializer::serializeInt8(OutputData& outData, const oatpp::Void& polymorph) {
140+
if(polymorph) {
141+
auto v = polymorph.staticCast<oatpp::Int8>();
142+
serInt2(outData, *v);
143+
} else {
144+
serNull(outData);
145+
}
146+
}
147+
148+
void Serializer::serializeUInt8(OutputData& outData, const oatpp::Void& polymorph) {
149+
if(polymorph) {
150+
auto v = polymorph.staticCast<oatpp::UInt8>();
151+
serInt2(outData, *v);
152+
} else {
153+
serNull(outData);
154+
}
155+
}
156+
157+
void Serializer::serializeInt16(OutputData& outData, const oatpp::Void& polymorph) {
158+
if(polymorph) {
159+
auto v = polymorph.staticCast<oatpp::Int16>();
160+
serInt2(outData, *v);
161+
} else {
162+
serNull(outData);
163+
}
164+
}
165+
166+
void Serializer::serializeUInt16(OutputData& outData, const oatpp::Void& polymorph) {
167+
if(polymorph) {
168+
auto v = polymorph.staticCast<oatpp::UInt16>();
169+
serInt4(outData, *v);
170+
} else {
171+
serNull(outData);
172+
}
173+
}
174+
175+
void Serializer::serializeInt32(OutputData& outData, const oatpp::Void& polymorph) {
176+
if(polymorph) {
177+
auto v = polymorph.staticCast<oatpp::Int32>();
178+
serInt4(outData, *v);
179+
} else {
180+
serNull(outData);
181+
}
182+
}
183+
184+
void Serializer::serializeUInt32(OutputData& outData, const oatpp::Void& polymorph) {
185+
if(polymorph) {
186+
auto v = polymorph.staticCast<oatpp::UInt32>();
187+
serInt8(outData, *v);
188+
} else {
189+
serNull(outData);
190+
}
191+
}
192+
193+
void Serializer::serializeInt64(OutputData& outData, const oatpp::Void& polymorph) {
194+
if(polymorph) {
195+
auto v = polymorph.staticCast<oatpp::Int64>();
196+
serInt8(outData, *v);
197+
} else {
198+
serNull(outData);
199+
}
200+
}
201+
202+
void Serializer::serializeUInt64(OutputData& outData, const oatpp::Void& polymorph) {
203+
204+
}
205+
92206
}}}

src/oatpp-postgresql/mapping/Serializer.hpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ class Serializer {
4141

4242
public:
4343
typedef void (*SerializerMethod)(OutputData&, const oatpp::Void&);
44+
private:
45+
46+
static void serNull(OutputData& outData);
47+
static void serInt2(OutputData& outData, v_int16 value);
48+
static void serInt4(OutputData& outData, v_int32 value);
49+
static void serInt8(OutputData& outData, v_int64 value);
50+
4451
private:
4552
std::vector<SerializerMethod> m_methods;
4653
public:
@@ -53,8 +60,69 @@ class Serializer {
5360

5461
public:
5562

63+
/**
64+
* OID used - TEXTOID
65+
* @param outData
66+
* @param polymorph
67+
*/
5668
static void serializeString(OutputData& outData, const oatpp::Void& polymorph);
5769

70+
/**
71+
* OID used - INT2OID
72+
* @param outData
73+
* @param polymorph
74+
*/
75+
static void serializeInt8(OutputData& outData, const oatpp::Void& polymorph);
76+
77+
/**
78+
* OID used - INT2OID
79+
* @param outData
80+
* @param polymorph
81+
*/
82+
static void serializeUInt8(OutputData& outData, const oatpp::Void& polymorph);
83+
84+
/**
85+
* OID used - INT2OID
86+
* @param outData
87+
* @param polymorph
88+
*/
89+
static void serializeInt16(OutputData& outData, const oatpp::Void& polymorph);
90+
91+
/**
92+
* OID used - INT4OID
93+
* @param outData
94+
* @param polymorph
95+
*/
96+
static void serializeUInt16(OutputData& outData, const oatpp::Void& polymorph);
97+
98+
/**
99+
* OID used - INT4OID
100+
* @param outData
101+
* @param polymorph
102+
*/
103+
static void serializeInt32(OutputData& outData, const oatpp::Void& polymorph);
104+
105+
/**
106+
* OID used - INT8OID
107+
* @param outData
108+
* @param polymorph
109+
*/
110+
static void serializeUInt32(OutputData& outData, const oatpp::Void& polymorph);
111+
112+
/**
113+
* OID used - INT8OID
114+
* @param outData
115+
* @param polymorph
116+
*/
117+
static void serializeInt64(OutputData& outData, const oatpp::Void& polymorph);
118+
119+
/**
120+
* Not implemented
121+
* @param outData
122+
* @param polymorph
123+
*/
124+
static void serializeUInt64(OutputData& outData, const oatpp::Void& polymorph);
125+
58126
};
59127

60128
}}}

test/oatpp-postgresql/tests.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ class MyClient : public oatpp::database::DbClient {
3636
PARAM(oatpp::String, password),
3737
PARAM(oatpp::String, email))
3838

39+
QUERY(insertInts,
40+
"INSERT INTO test_t "
41+
"(f_int8, f_uint8, f_int16, f_uint16, f_int32, f_uint32, f_int64) VALUES"
42+
"(:f_int8, :f_uint8, :f_int16, :f_uint16, :f_int32, :f_uint32, :f_int64);",
43+
PARAM(oatpp::Int8, f_int8), PARAM(oatpp::UInt8, f_uint8),
44+
PARAM(oatpp::Int16, f_int16), PARAM(oatpp::UInt16, f_uint16),
45+
PARAM(oatpp::Int32, f_int32), PARAM(oatpp::UInt32, f_uint32),
46+
PARAM(oatpp::Int64, f_int64))
47+
3948
};
4049

4150
#include OATPP_CODEGEN_END(DbClient)
@@ -51,8 +60,13 @@ class Test : public oatpp::test::UnitTest {
5160
auto client = MyClient(executor);
5261
auto connection = executor->getConnection();
5362

54-
client.createUser("my-login1", "pass1", "email@email.com1", connection);
55-
client.createUser("my-login2", "pass2", "email@email.com2", connection);
63+
//client.createUser("my-login1", "pass1", "email@email.com1", connection);
64+
//client.createUser("my-login2", "pass2", "email@email.com2", connection);
65+
66+
client.insertInts(8, 8, 16, 16, 32, 32, 64, connection);
67+
client.insertInts(-1, -1, -1, -1, -1, -1, -1, connection);
68+
69+
5670

5771
}
5872
};

0 commit comments

Comments
 (0)