[libgda] Ensure proper virtual prepare_connection() is called



commit 30fa6f4b51ede13b51bbabb8b0f96bcaec5a9516
Author: Vivien Malerba <malerba gnome-db org>
Date:   Tue Nov 18 20:20:28 2014 +0100

    Ensure proper virtual prepare_connection() is called

 libgda/sqlite/virtual/gda-vprovider-data-model.c |   23 +++++++++++++++++++++-
 providers/ldap/gda-ldap-provider.c               |   12 +++++++++-
 2 files changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/libgda/sqlite/virtual/gda-vprovider-data-model.c 
b/libgda/sqlite/virtual/gda-vprovider-data-model.c
index 0823d74..ac22473 100644
--- a/libgda/sqlite/virtual/gda-vprovider-data-model.c
+++ b/libgda/sqlite/virtual/gda-vprovider-data-model.c
@@ -49,6 +49,8 @@ static GObjectClass  *parent_class = NULL;
 static GdaConnection *gda_vprovider_data_model_create_connection (GdaServerProvider *provider);
 static gboolean       gda_vprovider_data_model_open_connection (GdaServerProvider *provider, GdaConnection 
*cnc,
                                                                GdaQuarkList *params, GdaQuarkList *auth);
+static gboolean       gda_vprovider_data_model_prepare_connection (GdaServerProvider *provider, 
GdaConnection *cnc,
+                                                                  GdaQuarkList *params, GdaQuarkList *auth);
 static gboolean       gda_vprovider_data_model_close_connection (GdaServerProvider *provider,
                                                                 GdaConnection *cnc);
 static GObject        *gda_vprovider_data_model_statement_execute (GdaServerProvider *provider, 
GdaConnection *cnc,
@@ -81,7 +83,7 @@ GdaServerProviderBase data_model_base_functions = {
        NULL,
        NULL,
        gda_vprovider_data_model_open_connection,
-       NULL,
+       gda_vprovider_data_model_prepare_connection,
        gda_vprovider_data_model_close_connection,
        NULL,
        NULL,
@@ -427,6 +429,25 @@ gda_vprovider_data_model_open_connection (GdaServerProvider *provider, GdaConnec
        return TRUE;
 }
 
+static gboolean
+gda_vprovider_data_model_prepare_connection (GdaServerProvider *provider, GdaConnection *cnc,
+                                            GdaQuarkList *params, GdaQuarkList *auth)
+{
+       g_return_val_if_fail (GDA_IS_VPROVIDER_DATA_MODEL (provider), FALSE);
+       g_return_val_if_fail (GDA_IS_CONNECTION (cnc), FALSE);
+
+       /* calling the parent's function first */
+       GdaServerProviderBase *parent_functions;
+        parent_functions = gda_server_provider_get_impl_functions_for_class (parent_class, 
GDA_SERVER_PROVIDER_FUNCTIONS_BASE);
+       if (parent_functions->prepare_connection) {
+               if (! parent_functions->prepare_connection (GDA_SERVER_PROVIDER (provider), cnc, params, 
auth))
+                       return FALSE;
+       }
+
+       return TRUE;
+}
+
+
 static void
 cnc_close_foreach_func (G_GNUC_UNUSED GdaDataModel *model, const gchar *table_name, GdaVconnectionDataModel 
*cnc)
 {
diff --git a/providers/ldap/gda-ldap-provider.c b/providers/ldap/gda-ldap-provider.c
index 9a2dd96..cb0b091 100644
--- a/providers/ldap/gda-ldap-provider.c
+++ b/providers/ldap/gda-ldap-provider.c
@@ -374,7 +374,7 @@ fetch_user_dn (const gchar *url, const gchar *base, const gchar *username, LdapA
  */
 static gboolean
 gda_ldap_provider_prepare_connection (GdaServerProvider *provider, GdaConnection *cnc,
-                                  GdaQuarkList *params, GdaQuarkList *auth)
+                                     GdaQuarkList *params, GdaQuarkList *auth)
 {
        g_return_val_if_fail (GDA_IS_LDAP_PROVIDER (provider), FALSE);
        g_return_val_if_fail (GDA_IS_CONNECTION (cnc), FALSE);
@@ -395,6 +395,14 @@ gda_ldap_provider_prepare_connection (GdaServerProvider *provider, GdaConnection
        gint rport;
        gboolean use_ssl, use_cache;
 
+       /* calling the parent's function first */
+       GdaServerProviderBase *parent_functions;
+        parent_functions = gda_server_provider_get_impl_functions_for_class (parent_class, 
GDA_SERVER_PROVIDER_FUNCTIONS_BASE);
+       if (parent_functions->prepare_connection) {
+               if (! parent_functions->prepare_connection (GDA_SERVER_PROVIDER (provider), cnc, params, 
auth))
+                       return FALSE;
+       }
+
         base_dn = gda_quark_list_find (params, "DB_NAME");
         if (!base_dn) {
                 gda_connection_add_event_string (cnc, "%s",
@@ -815,7 +823,7 @@ gda_ldap_provider_statement_execute (GdaServerProvider *provider, GdaConnection
                                                                               cmde->table_name, 
cmde->base_dn,
                                                                               cmde->filter, cmde->attributes,
                                                                               cmde->scope, &lerror))
-                                       retval = (GObject*) gda_set_new (NULL);
+                                               retval = (GObject*) gda_set_new (NULL);
                                        else {
                                                event = gda_connection_point_available_event (cnc,
                                                                                              
GDA_CONNECTION_EVENT_ERROR);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]