From: <svn...@op...> - 2009-04-05 17:55:57
|
Author: bricks Date: Sun Apr 5 19:55:52 2009 New Revision: 5542 URL: http://www.opensync.org/changeset/5542 Log: started to implement OSyncDBConnection Added: branches/osyncdb2/opensync/db2/opensync_db_connection.c branches/osyncdb2/opensync/db2/opensync_db_internals.h Modified: branches/osyncdb2/opensync/db2/opensync_db.c branches/osyncdb2/opensync/db2/opensync_db_connection_private.h branches/osyncdb2/opensync/db2/opensync_db_private.h Modified: branches/osyncdb2/opensync/db2/opensync_db.c ============================================================================== --- branches/osyncdb2/opensync/db2/opensync_db.c Sun Apr 5 19:12:15 2009 (r5541) +++ branches/osyncdb2/opensync/db2/opensync_db.c Sun Apr 5 19:55:52 2009 (r5542) @@ -19,6 +19,7 @@ */ #include "opensync_db.h" +#include "opensync_db_internals.h" #include "opensync_db_private.h" OSyncDB *osync_db_new(OSyncError **error) { @@ -124,5 +125,26 @@ OSyncDBConnection* osync_db_connect(OSyncDB *db, const char *dbname, const char *username, const *password, OSyncError **error) { osync_assert(db); - return db->connect(db, dbname, username, password, osync_db_get_userdata(db), error); + OSyncDBConnection *retval = NULL; + retval = db->connect(db, dbname, username, password, osync_db_get_userdata(db), error); + + if ( retval ) { + osync_list_add(osync_db_get_connections(db), retval); + osync_db_connection_ref(retval); + } + + return retval; +} + +OSyncList *osync_db_get_connections(OSyncDB *db) { + osync_assert(db); + return db->connections; +} + +void osync_db_remove_connection(OSyncDB *db, OSyncDBConnection *dbcon) { + osync_assert(db); + osync_assert(dbcon); + + osync_list_remove(osync_db_get_connections(db), dbcon); + osync_db_connection_unref(dbcon); } Added: branches/osyncdb2/opensync/db2/opensync_db_connection.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/osyncdb2/opensync/db2/opensync_db_connection.c Sun Apr 5 19:55:52 2009 (r5542) @@ -0,0 +1,103 @@ +/* + * libopensync - A synchronization framework + * Copyright (C) 2009 Bjoern Ricks <bjo...@gm...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "opensync_db_connection.h" +#include "opensync_db_connection_private.h" + + + +OSyncDBConnection *osync_db_connection_new(OSyncDB *db, OSyncError *error) { + OSyncDBConnection *dbcon = NULL; + + osync_assert(db); + + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error); + + dbcon = osync_try_malloc0(sizeof(OSyncDBConnection), error); + if (!dbcon) { + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return NULL; + } + osync_db_connection_set_db(dbcon, db); + dbcon->ref_count = 1; + + osync_trace(TRACE_EXIT, "%s: %p", __func__, dbdbcon); + return dbcon; +} + +OSyncDB *osync_db_connection_ref(OSyncDBConnection *dbcon) { + osync_assert(dbcon); + + g_atomic_int_inc(&(dbcon->ref_count)); + + return dbcon; +} + +void osync_db_connection_unref(OSyncDBConnection *dbcon) { + osync_assert(dbcon); + + if (g_atomic_int_dec_and_test(&(dbcon->ref_count))) { + osync_db_unref(dbcon->db); + osync_free(db); + } +} + +void osync_db_connection_set_db(OSyncDBConnection *con, OSyncDB *db) { + osync_assert(con); + osync_assert(db); + + if ( con->db ) { + osync_db_unref(con->db); + } + con->db = db; + osync_db_ref(db); +} + +void *osync_db_connection_get_data(OSyncDBConnection *dbcon) { + return dbcon->data; +} + +OSyncList *osync_db_connection_query(OSyncDBConnection *dbcon, const char *query, OSyncError **error) { + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, dbcon, query, error); + + osync_assert(dbcon); + + OSyncList *list = NULL; + list = dbcon->query(dbcon, query, osync_db_connection_get_data(dbcon), error); + + osync_trace(TRACE_EXIT, "%s", __func__); + return list; +} + +void osync_db_connection_disconnect(OSyncDBConnection *dbcon, OSyncError **error) { + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, dbcon, error); + + osync_assert(dbcon); + dbcon->disconnect(dbcon, osync_db_connection_get_data(dbcon), error); + + OSyncDB *db = osync_db_connection_get_db(dbcon); + osync_db_remove_connection(db, dbcon); + + osync_trace(TRACE_EXIT, "%s", __func__); +} + +OSyncDB *osync_db_connection_get_db(OSyncDBConnection *dbcon) { + return dbcon->db; +} Modified: branches/osyncdb2/opensync/db2/opensync_db_connection_private.h ============================================================================== --- branches/osyncdb2/opensync/db2/opensync_db_connection_private.h Sun Apr 5 19:12:15 2009 (r5541) +++ branches/osyncdb2/opensync/db2/opensync_db_connection_private.h Sun Apr 5 19:55:52 2009 (r5542) @@ -27,6 +27,11 @@ OSyncDBConnectionDisconnectFn disconnect; /*TODO to be continued */ void *data; + int ref_count; } OSyncDBConnection; +void osync_db_connection_set_db(OSyncDBConnection *con, OSyncDB *db); + +void *osync_db_connection_get_data(OSyncDBConnection *dbcon); + #endif /* _OPENSYNC_DB_CONNECTION_PRIVATE_H_ */ Added: branches/osyncdb2/opensync/db2/opensync_db_internals.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/osyncdb2/opensync/db2/opensync_db_internals.h Sun Apr 5 19:55:52 2009 (r5542) @@ -0,0 +1,26 @@ +/* + * libopensync - A synchronization framework + * Copyright (C) 2009 Bjoern Ricks <bjo...@gm...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef _OPENSYNC_DB_INTERNALS_H_ +#define _OPENSYNC_DB_INTERNALS_H_ + +void osync_db_remove_connection(OSyncDB *db, OSyncDBConnection *dbcon); + +#endif /* _OPENSYNC_DB_INTERNALS_H_ */ Modified: branches/osyncdb2/opensync/db2/opensync_db_private.h ============================================================================== --- branches/osyncdb2/opensync/db2/opensync_db_private.h Sun Apr 5 19:12:15 2009 (r5541) +++ branches/osyncdb2/opensync/db2/opensync_db_private.h Sun Apr 5 19:55:52 2009 (r5542) @@ -31,6 +31,10 @@ int ref_count; } OSyncDB; -void osync_db_set_data(OSyncDB *db, void *userdata); +void osync_db_set_userdata(OSyncDB *db, void *userdata); + +void *osync_db_get_userdata(OSyncDB *db); + +OSyncList *osync_db_get_connections(OSyncDB *db); #endif /* _OPENSYNC_DB_PRIVATE_H_ */ |