Skip to content

Commit

Permalink
fix pg
Browse files Browse the repository at this point in the history
  • Loading branch information
Jacyking committed Oct 16, 2023
1 parent 4d7f6eb commit d1e33b5
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 162 deletions.
40 changes: 25 additions & 15 deletions include/postgresql.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,10 @@ class postgresql {
template <typename... Args>
bool connect(Args &&...args) {
reset_error();
auto sql = ""s;
sql = generate_conn_sql(std::make_tuple(std::forward<Args>(args)...));

auto sql = generate_conn_sql(std::make_tuple(std::forward<Args>(args)...));
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
#endif
con_ = PQconnectdb(sql.data());
if (PQstatus(con_) != CONNECTION_OK) {
set_last_error(PQerrorMessage(con_));
Expand Down Expand Up @@ -177,7 +178,6 @@ class postgresql {
template <typename T, typename... Args>
constexpr std::enable_if_t<iguana::is_reflection_v<T>, std::vector<T>> query(
Args &&...args) {
reset_error();
std::string sql = generate_query_sql<T>(args...);
#ifdef ORMPP_ENABLE_LOG
std::cout << sql << std::endl;
Expand Down Expand Up @@ -213,7 +213,6 @@ class postgresql {
template <typename T, typename Arg, typename... Args>
constexpr std::enable_if_t<!iguana::is_reflection_v<T>, std::vector<T>> query(
const Arg &s, Args &&...args) {
reset_error();
static_assert(iguana::is_tuple<T>::value);
constexpr auto SIZE = std::tuple_size_v<T>;

Expand Down Expand Up @@ -354,6 +353,12 @@ class postgresql {
"dbname", "connect_timeout"),
tp, std::make_index_sequence<SIZE>{});
}
else if constexpr (SIZE == 6) {
return generate_conn_sql(
std::make_tuple("host", "user", "password", "dbname",
"connect_timeout", "port"),
tp, std::make_index_sequence<SIZE>{});
}
else {
return "";
}
Expand Down Expand Up @@ -488,10 +493,11 @@ class postgresql {

template <typename T>
bool prepare(const std::string &sql) {
reset_error();
res_ =
PQprepare(con_, "", sql.data(), (int)iguana::get_value<T>(), nullptr);
if (PQresultStatus(res_) != PGRES_COMMAND_OK) {
std::cout << PQresultErrorMessage(res_) << std::endl;
set_last_error(PQresultErrorMessage(res_));
PQclear(res_);
return false;
}
Expand Down Expand Up @@ -528,15 +534,18 @@ class postgresql {
std::cout << sql << std::endl;
#endif
std::vector<std::vector<char>> param_values;
auto it = auto_key_map_.find(iguana::get_name<T>().data());
auto name = iguana::get_name<T>().data();
auto it = auto_key_map_.find(name);
std::string auto_key = (it == auto_key_map_.end()) ? "" : it->second;

iguana::for_each(t,
[&t, &param_values, &auto_key, this](auto item, auto i) {
/*if(!auto_key.empty()&&auto_key==iguana::get_name<T>(decltype(i)::value).data())
return;*/
set_param_values(param_values, t.*item);
});
iguana::for_each(
t, [&t, &param_values, auto_key, name, this](auto item, auto i) {
if (!auto_key.empty() &&
auto_key == iguana::get_name<T>(decltype(i)::value).data()) {
return;
}
set_param_values(param_values, t.*item);
});

if (param_values.empty())
return INT_MIN;
Expand Down Expand Up @@ -686,8 +695,9 @@ class postgresql {
int index = 0;
for (auto i = 0; i < SIZE; ++i) {
std::string field_name = iguana::get_name<T>(i).data();
// if(it!=auto_key_map_.end()&&it->second==field_name)
// continue;
if (it != auto_key_map_.end() && it->second == field_name) {
continue;
}

values += "$";
char temp[20] = {};
Expand Down
5 changes: 1 addition & 4 deletions include/utility.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,10 @@ inline void for_each0(const std::tuple<Args...> &t, Func &&f,
template <typename T, typename = std::enable_if_t<iguana::is_reflection_v<T>>>
inline std::string get_name() {
#ifdef ORMPP_ENABLE_PG
std::string quota_name = "'" + std::string(iguana::get_name<T>()) + "'";
std::string quota_name = std::string(iguana::get_name<T>());
#else
std::string quota_name = "`" + std::string(iguana::get_name<T>()) + "`";
#endif

return quota_name;
}

Expand Down Expand Up @@ -229,7 +228,6 @@ inline std::string generate_delete_sql(Args &&...where_conditon) {
if (!is_empty(std::forward<Args>(where_conditon)...)) // fix for vs2017
append(sql, " where ", std::forward<Args>(where_conditon)...);
}

return sql;
}

Expand All @@ -240,7 +238,6 @@ inline bool has_key(const std::string &s) {
if (s.find(arr[i].data()) != std::string::npos)
return true;
}

return false;
}

Expand Down
Loading

0 comments on commit d1e33b5

Please sign in to comment.