aboutsummaryrefslogtreecommitdiff
path: root/src/db.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.cpp')
-rw-r--r--src/db.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/db.cpp b/src/db.cpp
new file mode 100644
index 0000000..92e3d1d
--- /dev/null
+++ b/src/db.cpp
@@ -0,0 +1,76 @@
+/*
+ * =====================================================================================
+ *
+ * Filename: db.cpp
+ *
+ * Description: Connection to a postgres database
+ *
+ * Version: 1.0
+ * Created: 04/06/2023 11:40:39 AM
+ * Revision: none
+ * Compiler: gcc
+ *
+ * Author: Cara Salter (muirrum), cara@devcara.com
+ * Organization: Worcester Polytechnic Institute
+ *
+ * =====================================================================================
+ */
+#include <fmt/core.h>
+#include <mutex>
+#include <stdlib.h>
+#include <stdio.h>
+#include <iostream>
+#include <142bot/db.hpp>
+#include <pqxx/pqxx>
+#include <fmt/format.h>
+#include <cstdarg>
+
+using namespace std;
+
+namespace db {
+ std::mutex db_mutex;
+ std::string _error;
+
+ /**
+ * Connects to a postgres database, returns false if error
+ **/
+ pqxx::connection connect(const std::string &host, const std::string &user, const std::string &pass, const std::string &db, int port) {
+ std::lock_guard<std::mutex> db_lock(db_mutex);
+
+ std::string cn_s = "postgresql://";
+
+ if (!user.empty()) {
+ cn_s = cn_s + user;
+ }
+ if (!pass.empty() && !user.empty()) {
+ cn_s = cn_s + ":" + pass;
+ }
+
+ if ((!user.empty() || !pass.empty())) {
+ cn_s = cn_s + "@";
+ }
+
+ if (!host.empty()) {
+ cn_s = cn_s + "localhost";
+ }
+ if (port != 0 && !host.empty()) {
+ cn_s = cn_s + ":" + std::to_string(port);
+ }
+ if (!db.empty()) {
+ cn_s = cn_s + "/" + db;
+ }
+
+ try {
+ pqxx::connection c{cn_s};
+ return c;
+ } catch (std::exception const &e) {
+ _error = e.what();
+ throw e;
+ }
+ }
+
+ const std::string& error() {
+ return _error;
+ }
+
+}