From 7bce8aef0d84021fe391464eb6b5abc1fb9a0ff4 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 30 Nov 2012 16:15:34 +0100 Subject: [PATCH] Updated the internal API for database engines --- include/Database.h | 1 + include/Database/database.h | 35 +++-------------------- include/Database/engine.h | 55 +++++++++++++++++++++++++++++++++++++ src/Makefile | 2 +- src/database.c | 16 +++++------ src/engines/Makefile | 2 +- src/engines/pdo.c | 10 +++---- src/engines/pgsql.c | 6 ++-- src/engines/project.conf | 2 +- src/engines/sqlite2.c | 6 ++-- src/engines/sqlite3.c | 6 ++-- src/engines/template.c | 6 ++-- src/project.conf | 2 +- 13 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 include/Database/engine.h diff --git a/include/Database.h b/include/Database.h index b1c066c..489013c 100644 --- a/include/Database.h +++ b/include/Database.h @@ -19,6 +19,7 @@ # define LIBDATABASE_DATABASE_H # include "Database/database.h" +# include "Database/engine.h" #endif /* !LIBDATABASE_DATABASE_H */ diff --git a/include/Database/database.h b/include/Database/database.h index cd688d2..8b404b5 100644 --- a/include/Database/database.h +++ b/include/Database/database.h @@ -18,13 +18,12 @@ #ifndef LIBDATABASE_DATABASE_DATABASE_H # define LIBDATABASE_DATABASE_DATABASE_H -# include # include # include /* Database */ -/* private */ +/* public */ /* types */ typedef enum _DatabaseType { @@ -40,31 +39,6 @@ typedef struct _DatabaseStatement DatabaseStatement; typedef int (*DatabaseCallback)(void * data, int argc, char ** argv, char ** columns); -typedef struct _DatabasePlugin DatabasePlugin; - -typedef struct _DatabasePluginDefinition -{ - char const * name; - char const * description; - /* essential */ - DatabasePlugin * (*init)(Config * config, char const * section); - void (*destroy)(DatabasePlugin * plugin); - /* accessors */ - int64_t (*get_last_id)(DatabasePlugin * plugin); - /* useful */ - int (*query)(DatabasePlugin * plugin, char const * query, - DatabaseCallback callback, void * data); - /* prepared statements */ - DatabaseStatement * (*prepare_new)(DatabasePlugin * plugin, - char const * query); - void (*prepare_delete)(DatabasePlugin * plugin, - DatabaseStatement * statement); - int (*prepare_query)(DatabasePlugin * plugin, - DatabaseStatement * statement, - DatabaseCallback callback, void * data, - va_list args); -} DatabasePluginDefinition; - /* public */ /* functions */ @@ -76,12 +50,11 @@ void database_delete(Database * database); int64_t database_get_last_id(Database * database); /* useful */ -DatabaseStatement * database_prepare_new( - Database * database, char const * query); +DatabaseStatement * database_prepare_new(Database * database, + char const * query); void database_prepare_delete(Database * database, DatabaseStatement * statement); -int database_prepare_query(Database * database, - DatabaseStatement * statement, +int database_prepare_query(Database * database, DatabaseStatement * statement, DatabaseCallback callback, void * data, ...); int database_query(Database * database, char const * query, diff --git a/include/Database/engine.h b/include/Database/engine.h new file mode 100644 index 0000000..8e51577 --- /dev/null +++ b/include/Database/engine.h @@ -0,0 +1,55 @@ +/* $Id$ */ +/* Copyright (c) 2012 Pierre Pronchery */ +/* This file is part of DeforaOS Database libDatabase */ +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + + + +#ifndef LIBDATABASE_DATABASE_ENGINE_H +# define LIBDATABASE_DATABASE_ENGINE_H + +# include +# include +# include +# include "database.h" + + +/* DatabaseEngine */ +/* public */ +/* types */ +typedef struct _DatabaseEngine DatabaseEngine; + +typedef struct _DatabaseEngineDefinition +{ + char const * name; + char const * description; + /* essential */ + DatabaseEngine * (*init)(Config * config, char const * section); + void (*destroy)(DatabaseEngine * engine); + /* accessors */ + int64_t (*get_last_id)(DatabaseEngine * engine); + /* useful */ + int (*query)(DatabaseEngine * engine, char const * query, + DatabaseCallback callback, void * data); + /* prepared statements */ + DatabaseStatement * (*prepare_new)(DatabaseEngine * engine, + char const * query); + void (*prepare_delete)(DatabaseEngine * engine, + DatabaseStatement * statement); + int (*prepare_query)(DatabaseEngine * engine, + DatabaseStatement * statement, + DatabaseCallback callback, void * data, + va_list args); +} DatabaseEngineDefinition; + +#endif /* !LIBDATABASE_DATABASE_ENGINE_H */ diff --git a/src/Makefile b/src/Makefile index aea358b..d9b82b2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -4,7 +4,7 @@ PREFIX = /usr/local DESTDIR = LIBDIR = $(PREFIX)/lib CC ?= cc -CPPFLAGSF= -I ../include/Database +CPPFLAGSF= -I ../include CPPFLAGS?= CFLAGSF = -W -fPIC CFLAGS = -Wall -g -O2 -pedantic diff --git a/src/database.c b/src/database.c index 7bf5bf2..0413399 100644 --- a/src/database.c +++ b/src/database.c @@ -17,7 +17,7 @@ #include #include -#include "database.h" +#include "Database.h" #include "../config.h" @@ -27,8 +27,8 @@ struct _Database { Plugin * plugin; - DatabasePluginDefinition * dplugin; - DatabasePlugin * database; + DatabaseEngineDefinition * dplugin; + DatabaseEngine * database; }; @@ -75,24 +75,22 @@ int64_t database_get_last_id(Database * database) /* database_prepare_new */ -DatabaseStatement * database_prepare_new( - Database * database, char const * query) +DatabaseStatement * database_prepare_new(Database * database, + char const * query) { return database->dplugin->prepare_new(database->database, query); } /* database_prepare_delete */ -void database_prepare_delete(Database * database, - DatabaseStatement * statement) +void database_prepare_delete(Database * database, DatabaseStatement * statement) { database->dplugin->prepare_delete(database->database, statement); } /* database_prepare_query */ -int database_prepare_query(Database * database, - DatabaseStatement * statement, +int database_prepare_query(Database * database, DatabaseStatement * statement, DatabaseCallback callback, void * data, ...) { int ret; diff --git a/src/engines/Makefile b/src/engines/Makefile index 3a7c419..0152f1d 100644 --- a/src/engines/Makefile +++ b/src/engines/Makefile @@ -3,7 +3,7 @@ PREFIX = /usr/local DESTDIR = LIBDIR = $(PREFIX)/lib CC ?= cc -CPPFLAGSF= -I ../../include/Database +CPPFLAGSF= -I ../../include CPPFLAGS?= CFLAGSF = -W -fPIC CFLAGS = -Wall -g -O2 -pedantic diff --git a/src/engines/pdo.c b/src/engines/pdo.c index 983f397..d5591f3 100644 --- a/src/engines/pdo.c +++ b/src/engines/pdo.c @@ -22,7 +22,7 @@ #endif #include #include -#include "database.h" +#include "Database/engine.h" #include "../../config.h" /* constants */ @@ -37,11 +37,11 @@ /* PDO */ /* private */ /* types */ -typedef struct _DatabasePlugin +typedef struct _DatabaseEngine { Plugin * plugin; - DatabasePluginDefinition * dplugin; - DatabasePlugin * database; + DatabaseEngineDefinition * dplugin; + DatabaseEngine * database; } PDO; typedef struct _DatabaseStatement @@ -69,7 +69,7 @@ static int _pdo_prepare_query(PDO * pdo, PDOStatement * statement, /* public */ /* variables */ -DatabasePluginDefinition database = +DatabaseEngineDefinition database = { "PDO", NULL, diff --git a/src/engines/pgsql.c b/src/engines/pgsql.c index cbb5a4e..a2e81c4 100644 --- a/src/engines/pgsql.c +++ b/src/engines/pgsql.c @@ -24,13 +24,13 @@ #include #include #include -#include "database.h" +#include "Database/engine.h" /* PgSQL */ /* private */ /* types */ -typedef struct _DatabasePlugin +typedef struct _DatabaseEngine { PGconn * handle; Oid last; @@ -68,7 +68,7 @@ static int _pgsql_prepare_query(PgSQL * pgsql, PgSQLStatement * statement, /* public */ /* variables */ -DatabasePluginDefinition database = +DatabaseEngineDefinition database = { "PostgreSQL", NULL, diff --git a/src/engines/project.conf b/src/engines/project.conf index c957afa..9ec91a1 100644 --- a/src/engines/project.conf +++ b/src/engines/project.conf @@ -1,5 +1,5 @@ targets=pdo,pgsql,sqlite2,sqlite3,template -cppflags_force=-I ../../include/Database +cppflags_force=-I ../../include cflags_force=-W -fPIC cflags=-Wall -g -O2 -pedantic dist=Makefile diff --git a/src/engines/sqlite2.c b/src/engines/sqlite2.c index e3d2c30..5b27a13 100644 --- a/src/engines/sqlite2.c +++ b/src/engines/sqlite2.c @@ -23,13 +23,13 @@ #include #include #include -#include "database.h" +#include "Database/engine.h" /* SQLite2 */ /* private */ /* types */ -typedef struct _DatabasePlugin +typedef struct _DatabaseEngine { sqlite * handle; } SQLite2; @@ -61,7 +61,7 @@ static int _sqlite2_prepare_query(SQLite2 * sqlite, /* public */ /* variables */ -DatabasePluginDefinition database = +DatabaseEngineDefinition database = { "SQLite2", NULL, diff --git a/src/engines/sqlite3.c b/src/engines/sqlite3.c index 292650c..1df0655 100644 --- a/src/engines/sqlite3.c +++ b/src/engines/sqlite3.c @@ -23,13 +23,13 @@ #include #include #include -#include "database.h" +#include "Database/engine.h" /* SQLite3 */ /* private */ /* types */ -typedef struct _DatabasePlugin +typedef struct _DatabaseEngine { sqlite3 * handle; } SQLite3; @@ -62,7 +62,7 @@ static int _sqlite3_prepare_query(SQLite3 * sqlite3, /* public */ /* variables */ -DatabasePluginDefinition database = +DatabaseEngineDefinition database = { "SQLite3", NULL, diff --git a/src/engines/template.c b/src/engines/template.c index 6f8f047..704d770 100644 --- a/src/engines/template.c +++ b/src/engines/template.c @@ -22,13 +22,13 @@ #endif #include #include -#include "database.h" +#include "Database/engine.h" /* Template */ /* private */ /* types */ -typedef struct _DatabasePlugin +typedef struct _DatabaseEngine { void * handle; } Template; @@ -60,7 +60,7 @@ static int _template_prepare_query(Template * template, /* public */ /* variables */ -DatabasePluginDefinition database = +DatabaseEngineDefinition database = { "Template", NULL, diff --git a/src/project.conf b/src/project.conf index 446d72a..8062a84 100644 --- a/src/project.conf +++ b/src/project.conf @@ -1,6 +1,6 @@ subdirs=engines targets=libDatabase -cppflags_force=-I ../include/Database +cppflags_force=-I ../include cflags_force=-W -fPIC cflags=-Wall -g -O2 -pedantic dist=Makefile