From 2629906b6d961064ad566f90adfe8d28a7315d8a Mon Sep 17 00:00:00 2001 From: OpenGnSys Support Team Date: Fri, 17 May 2019 12:26:26 +0200 Subject: #941 add basic database-independent abstraction (dbi) Add basic infrastructure to support for the independent database layer. --- Makefile | 4 ++-- sources/dbi.cpp | 37 +++++++++++++++++++++++++++++++++++++ sources/dbi.h | 21 +++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 sources/dbi.cpp create mode 100644 sources/dbi.h diff --git a/Makefile b/Makefile index bffa4dc..9087eaa 100644 --- a/Makefile +++ b/Makefile @@ -12,10 +12,10 @@ CFLAGS += -g -Wall -I../../Includes CPPFLAGS := $(CFLAGS) # Opciones de linkado -LDFLAGS := -Wl,--no-as-needed $(shell mysql_config --libs) -lev -ljansson +LDFLAGS := -Wl,--no-as-needed $(shell mysql_config --libs) -lev -ljansson -ldbi # Ficheros objetos -OBJS := ../../Includes/Database.o sources/ogAdmServer.o +OBJS := ../../Includes/Database.o sources/ogAdmServer.o sources/dbi.o all: $(PROYECTO) diff --git a/sources/dbi.cpp b/sources/dbi.cpp new file mode 100644 index 0000000..cc5c5b5 --- /dev/null +++ b/sources/dbi.cpp @@ -0,0 +1,37 @@ +#include "dbi.h" + +struct og_dbi *og_dbi_open(struct og_dbi_config *config) +{ + struct og_dbi *dbi; + + dbi = (struct og_dbi *)malloc(sizeof(struct og_dbi)); + if (!dbi) + return NULL; + + dbi_initialize_r(NULL, &dbi->inst); + dbi->conn = dbi_conn_new_r("mysql", dbi->inst); + if (!dbi->conn) { + free(dbi); + return NULL; + } + + dbi_conn_set_option(dbi->conn, "host", config->host); + dbi_conn_set_option(dbi->conn, "username", config->user); + dbi_conn_set_option(dbi->conn, "password", config->passwd); + dbi_conn_set_option(dbi->conn, "dbname", config->database); + dbi_conn_set_option(dbi->conn, "encoding", "UTF-8"); + + if (dbi_conn_connect(dbi->conn) < 0) { + free(dbi); + return NULL; + } + + return dbi; +} + +void og_dbi_close(struct og_dbi *dbi) +{ + dbi_conn_close(dbi->conn); + dbi_shutdown_r(dbi->inst); + free(dbi); +} diff --git a/sources/dbi.h b/sources/dbi.h new file mode 100644 index 0000000..882550f --- /dev/null +++ b/sources/dbi.h @@ -0,0 +1,21 @@ +#ifndef __OG_DBI +#define __OG_DBI + +#include + +struct og_dbi_config { + const char *user; + const char *passwd; + const char *host; + const char *database; +}; + +struct og_dbi { + dbi_conn conn; + dbi_inst inst; +}; + +struct og_dbi *og_dbi_open(struct og_dbi_config *config); +void og_dbi_close(struct og_dbi *db); + +#endif -- cgit v1.2.3-18-g5258