Skip to content

Commit 5befa02

Browse files
committed
Deserializer. Support varchar + text
1 parent 8ed278b commit 5befa02

File tree

6 files changed

+29
-15
lines changed

6 files changed

+29
-15
lines changed

src/oatpp-postgresql/Executor.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -161,23 +161,20 @@ std::shared_ptr<orm::QueryResult> Executor::execute(const StringTemplate& queryT
161161
const std::shared_ptr<orm::Connection>& connection)
162162
{
163163

164-
auto pgConnection = std::static_pointer_cast<postgresql::Connection>(connection);
165-
auto extra = std::static_pointer_cast<ql_template::Parser::TemplateExtra>(queryTemplate.getExtraData());
166-
167-
std::unordered_map<oatpp::String, oatpp::String> map;
168-
for(auto p : params) {
169-
map[p.first] = "<" + p.first + ">";
164+
std::shared_ptr<orm::Connection> conn = connection;
165+
if(!conn) {
166+
conn = getConnection();
170167
}
171-
auto res = queryTemplate.format(map);
168+
169+
auto pgConnection = std::static_pointer_cast<postgresql::Connection>(conn);
170+
171+
auto extra = std::static_pointer_cast<ql_template::Parser::TemplateExtra>(queryTemplate.getExtraData());
172172

173173
if(!pgConnection->isPrepared(extra->templateName)) {
174-
//OATPP_LOGD("AAA", "prepared[%s]={%s}", extra->templateName->c_str(), extra->preparedTemplate->c_str());
175174
prepareQuery(queryTemplate, pgConnection);
176175
pgConnection->setPrepared(extra->templateName);
177176
}
178177

179-
//OATPP_LOGD("AAA", "query={%s}", res->c_str());
180-
181178
return executeQuery(queryTemplate, params, pgConnection);
182179

183180
}

src/oatpp-postgresql/mapping/Deserializer.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ oatpp::Void Deserializer::deserializeString(const Deserializer* _this, const InD
135135
(void) _this;
136136
(void) type;
137137
switch(data.oid) {
138-
case TEXTOID: return oatpp::String(data.data, data.size, true);
138+
case TEXTOID:
139+
case VARCHAROID: return oatpp::String(data.data, data.size, true);
140+
139141
}
140142
throw std::runtime_error("[oatpp::postgresql::mapping::Deserializer::deserializeString()]: Error. Unknown OID.");
141143
}

src/oatpp-postgresql/mapping/ResultMapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ oatpp::Void ResultMapper::readRowAsObject(ResultMapper* _this, ResultData* dbDat
107107

108108
mapping::Deserializer::InData inData;
109109
inData.oid = PQftype(dbData->dbResult, i);
110-
inData.size = PQfsize(dbData->dbResult, i);
110+
inData.size = PQgetlength(dbData->dbResult, rowIndex, i);
111111
inData.data = PQgetvalue(dbData->dbResult, rowIndex, i);
112112

113113
field->set(object.get(), _this->m_deserializer.deserialize(inData, field->type));

src/oatpp-postgresql/mapping/ResultMapper.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class ResultMapper {
6868
mapping::Deserializer::InData inData;
6969

7070
inData.oid = PQftype(dbData->dbResult, i);
71-
inData.size = PQfsize(dbData->dbResult, i);
71+
inData.size = PQgetlength(dbData->dbResult, rowIndex, i);
7272
inData.data = PQgetvalue(dbData->dbResult, rowIndex, i);
7373

7474
polymorphicDispatcher->addPolymorphicItem(listWrapper, _this->m_deserializer.deserialize(inData, itemType));
@@ -98,7 +98,7 @@ class ResultMapper {
9898
mapping::Deserializer::InData inData;
9999

100100
inData.oid = PQftype(dbData->dbResult, i);
101-
inData.size = PQfsize(dbData->dbResult, i);
101+
inData.size = PQgetlength(dbData->dbResult, rowIndex, i);
102102
inData.data = PQgetvalue(dbData->dbResult, rowIndex, i);
103103

104104
polymorphicDispatcher->addPolymorphicItem(mapWrapper, dbData->colNames[i], _this->m_deserializer.deserialize(inData, valueType));

src/oatpp-postgresql/mapping/TypeMapper.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ TypeMapper::TypeMapper() {
6565

6666
{
6767
setOidType(TEXTOID, oatpp::String::Class::getType());
68+
setOidType(VARCHAROID, oatpp::String::Class::getType());
6869

6970
setOidType(INT2OID, oatpp::Int16::Class::getType());
7071
setOidType(INT4OID, oatpp::Int32::Class::getType());

test/oatpp-postgresql/tests.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ class MyClient : public oatpp::orm::DbClient {
5959
PARAM(oatpp::String, password),
6060
PARAM(oatpp::String, email))
6161

62+
QUERY(insertStrs,
63+
"INSERT INTO test_strs "
64+
"(f_str1, f_str2, f_str3) VALUES "
65+
"(:f_str1, :f_str2, :f_str3);",
66+
PARAM(oatpp::String, f_str1),
67+
PARAM(oatpp::String, f_str2),
68+
PARAM(oatpp::String, f_str3))
69+
70+
QUERY(selectStrs, "SELECT * FROM test_strs")
71+
6272
QUERY(insertInts,
6373
"INSERT INTO test_ints "
6474
"(f_int8, f_uint8, f_int16, f_uint16, f_int32, f_uint32, f_int64) VALUES "
@@ -102,9 +112,13 @@ class Test : public oatpp::test::UnitTest {
102112
//client.insertFloats(0.32, 0.64, connection);
103113
//client.insertFloats(-0.32, -0.64, connection);
104114

115+
//client.insertStrs("Hello", "World", "Oat++", connection);
116+
//client.insertStrs("Hello", "World", "oatpp", connection);
117+
//client.insertStrs("Yeah", "Ops", "!!!", connection);
118+
105119
{
106120

107-
auto res = client.selectFloats(connection);
121+
auto res = client.selectStrs(connection);
108122
OATPP_LOGD(TAG, "OK=%d, count=%d", res->isSuccess(), res->count());
109123

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

0 commit comments

Comments
 (0)