@@ -51,21 +51,20 @@ std::unique_ptr<Oid[]> Executor::getParamTypes(const StringTemplate& queryTempla
51
51
}
52
52
53
53
void Executor::prepareQuery (const StringTemplate& queryTemplate,
54
- const std::shared_ptr<database ::Connection>& connection)
54
+ const std::shared_ptr<postgresql ::Connection>& connection)
55
55
{
56
56
57
57
auto extra = std::static_pointer_cast<ql_template::Parser::TemplateExtra>(queryTemplate.getExtraData ());
58
58
59
- auto pgConnection = static_cast <PGconn *>(connection->getHandle ());
60
- PGresult *qres = PQprepare (pgConnection,
59
+ PGresult *qres = PQprepare (connection->getHandle (),
61
60
extra->templateName ->c_str (),
62
61
extra->preparedTemplate ->c_str (),
63
62
queryTemplate.getTemplateVariables ().size (),
64
63
extra->paramTypes .get ());
65
64
66
65
auto status = PQresultStatus (qres);
67
66
if (status != PGRES_COMMAND_OK) {
68
- OATPP_LOGD (" Executor::prepareQuery" , " execute prepare failed: %s" , PQerrorMessage (pgConnection ));
67
+ OATPP_LOGD (" Executor::prepareQuery" , " execute prepare failed: %s" , PQerrorMessage (connection-> getHandle () ));
69
68
} else {
70
69
OATPP_LOGD (" Executor::prepareQuery" , " OK" );
71
70
}
@@ -74,13 +73,11 @@ void Executor::prepareQuery(const StringTemplate& queryTemplate,
74
73
75
74
void Executor::executeQuery (const StringTemplate& queryTemplate,
76
75
const std::unordered_map<oatpp::String, oatpp::Void>& params,
77
- const std::shared_ptr<database ::Connection>& connection)
76
+ const std::shared_ptr<postgresql ::Connection>& connection)
78
77
{
79
78
80
79
auto extra = std::static_pointer_cast<ql_template::Parser::TemplateExtra>(queryTemplate.getExtraData ());
81
80
82
- auto pgConnection = static_cast <PGconn *>(connection->getHandle ());
83
-
84
81
v_uint32 paramsNumber = queryTemplate.getTemplateVariables ().size ();
85
82
86
83
std::vector<mapping::Serializer::OutputData> outData (paramsNumber);
@@ -104,7 +101,7 @@ void Executor::executeQuery(const StringTemplate& queryTemplate,
104
101
paramFormats[i] = data.dataFormat ;
105
102
}
106
103
107
- PGresult *qres = PQexecPrepared (pgConnection ,
104
+ PGresult *qres = PQexecPrepared (connection-> getHandle () ,
108
105
extra->templateName ->c_str (),
109
106
paramsNumber,
110
107
paramValues.get (),
@@ -114,7 +111,7 @@ void Executor::executeQuery(const StringTemplate& queryTemplate,
114
111
115
112
auto status = PQresultStatus (qres);
116
113
if (status != PGRES_TUPLES_OK) {
117
- OATPP_LOGD (" Database" , " execute query failed: %s" , PQerrorMessage (pgConnection ));
114
+ OATPP_LOGD (" Database" , " execute query failed: %s" , PQerrorMessage (connection-> getHandle () ));
118
115
} else {
119
116
OATPP_LOGD (" Database" , " OK_2" );
120
117
}
@@ -170,6 +167,7 @@ database::QueryResult Executor::execute(const StringTemplate& queryTemplate,
170
167
const std::shared_ptr<database::Connection>& connection)
171
168
{
172
169
170
+ auto pgConnection = std::static_pointer_cast<postgresql::Connection>(connection);
173
171
auto extra = std::static_pointer_cast<ql_template::Parser::TemplateExtra>(queryTemplate.getExtraData ());
174
172
175
173
std::unordered_map<oatpp::String, oatpp::String> map;
@@ -178,13 +176,17 @@ database::QueryResult Executor::execute(const StringTemplate& queryTemplate,
178
176
}
179
177
auto res = queryTemplate.format (map);
180
178
181
- OATPP_LOGD (" AAA" , " prepared[%s]={%s}" , extra->templateName ->c_str (), extra->preparedTemplate ->c_str ());
182
- OATPP_LOGD (" AAA" , " query={%s}" , res->c_str ());
179
+ if (!pgConnection->isPrepared (extra->templateName )) {
180
+ OATPP_LOGD (" AAA" , " prepared[%s]={%s}" , extra->templateName ->c_str (), extra->preparedTemplate ->c_str ());
181
+ prepareQuery (queryTemplate, pgConnection);
182
+ pgConnection->setPrepared (extra->templateName );
183
+ }
183
184
184
- prepareQuery (queryTemplate, connection );
185
- executeQuery (queryTemplate, params, connection );
185
+ OATPP_LOGD ( " AAA " , " query={%s} " , res-> c_str () );
186
+ executeQuery (queryTemplate, params, pgConnection );
186
187
187
188
return database::QueryResult ();
189
+
188
190
}
189
191
190
192
}}
0 commit comments