[planner: 13/40] unknown type name 'GdaDataSourceInfo'.




commit 0d23d593caeb37e4f4a596dab4f851bd80a22ff0
Author: Ahmed Baïzid <ahmed baizid org>
Date:   Thu Jun 18 15:06:15 2015 +0200

    unknown type name 'GdaDataSourceInfo'.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=584556

 libplanner/mrp-sql.c     | 51 +++++++++++++++++++++++--------------
 src/planner-sql-plugin.c | 65 ++++++++++++++++++++++++++++++------------------
 2 files changed, 74 insertions(+), 42 deletions(-)
---
diff --git a/libplanner/mrp-sql.c b/libplanner/mrp-sql.c
index 500ffd29..6c66204d 100644
--- a/libplanner/mrp-sql.c
+++ b/libplanner/mrp-sql.c
@@ -2215,6 +2215,22 @@ sql_read_tasks (SQLData *data)
        return FALSE;
 }
 
+/*
+ * mrp_sql_load_project:
+ * @storage: an #MrpStorageSQL
+ * @host: unused
+ * @port: unused
+ * @database: used to display warnings
+ * @login: unused
+ * @password: unused
+ * @project_id: identify the project in the database
+ * @error: location to store error, or NULL
+ *
+ * Import a project from a database.
+ * The "planner-auto" libgda DSN is used.
+ *
+ * Returns: %TRUE on success, %FALSE on failure.
+ */
 gboolean
 mrp_sql_load_project (MrpStorageSQL *storage,
                      const gchar   *host,
@@ -2228,11 +2244,9 @@ mrp_sql_load_project (MrpStorageSQL *storage,
        SQLData        *data;
        gboolean        success;
        const gchar    *dsn_name = "planner-auto";
-       gchar          *db_txt;
        MrpCalendar    *calendar;
        MrpGroup       *group;
        MrpTaskManager *task_manager;
-       const gchar    *provider = "PostgreSQL";
 
        data = g_new0 (SQLData, 1);
 
@@ -2252,13 +2266,6 @@ mrp_sql_load_project (MrpStorageSQL *storage,
 
        data->root_task = mrp_task_new ();
 
-       db_txt = g_strdup_printf (CONNECTION_FORMAT_STRING, host, database);
-       gda_config_save_data_source (dsn_name,
-                                    provider,
-                                    db_txt,
-                                    "planner project", login, password, FALSE);
-       g_free (db_txt);
-
        data->con = gda_connection_open_from_dsn (dsn_name, NULL, GDA_CONNECTION_OPTIONS_NONE, error);
 
        if (!GDA_IS_CONNECTION (data->con)) {
@@ -3643,6 +3650,23 @@ sql_write_tasks (SQLData *data)
        return FALSE;
 }
 
+/*
+ * mrp_sql_save_project:
+ * @storage: an #MrpStorageSQL
+ * @force: If the database changed since the import, overwrite the project or not?
+ * @host: unused
+ * @port: unused
+ * @database: used to display warnings
+ * @user: unused
+ * @password: unused
+ * @project_id: identify the project in the database
+ * @error: location to store error, or NULL
+ *
+ * Export a project to a database.
+ * The "planner-auto" libgda DSN is used.
+ *
+ * Returns: %TRUE on success, %FALSE on failure.
+ */
 gboolean
 mrp_sql_save_project (MrpStorageSQL  *storage,
                      gboolean        force,
@@ -3655,11 +3679,9 @@ mrp_sql_save_project (MrpStorageSQL  *storage,
                      GError        **error)
 {
        SQLData      *data;
-       gchar        *db_txt = NULL;
        const gchar  *dsn_name = "planner-auto";
        gboolean      success;
        gboolean      ret = FALSE;
-       const gchar  *provider = "PostgreSQL";
 
        data = g_new0 (SQLData, 1);
        data->project_id = *project_id;
@@ -3678,13 +3700,6 @@ mrp_sql_save_project (MrpStorageSQL  *storage,
 
        data->project = storage->project;
 
-       db_txt = g_strdup_printf (CONNECTION_FORMAT_STRING, host, database);
-       gda_config_save_data_source (dsn_name,
-                                    provider,
-                                    db_txt,
-                                    "planner project", user, password, FALSE);
-       g_free (db_txt);
-
        data->con = gda_connection_open_from_dsn (dsn_name, NULL, GDA_CONNECTION_OPTIONS_NONE, error);
 
        data->revision = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (data->project),
diff --git a/src/planner-sql-plugin.c b/src/planner-sql-plugin.c
index 834dc51e..977452ed 100644
--- a/src/planner-sql-plugin.c
+++ b/src/planner-sql-plugin.c
@@ -52,6 +52,7 @@
 #define CONF_USERNAME "/plugins/sql/username"
 
 #define CONNECTION_FORMAT_STRING "HOST=%s;DB_NAME=%s"
+#define AUTH_FORMAT_STRING "USERNAME=%s;PASSWORD=%s"
 
 struct _PlannerPluginPriv {
        GtkActionGroup *actions;
@@ -665,23 +666,20 @@ create_database (const gchar   *dsn_name,
        guint              result;
        gboolean           retval;
        GdaConnection     *conn;
-       GdaDataSourceInfo *dsn;
-       gchar             *cnc_string_orig;
+       const GdaDsnInfo  *dsn;
        gchar             *init_cnc;
        /* FIXME: In postgresql we use template1 as the connection database */
        gchar             *init_database = "template1";
        gchar             *query;
        GError            *error = NULL;
 
-       dsn = gda_config_find_data_source (dsn_name);
-       cnc_string_orig = dsn->cnc_string;
+       dsn = gda_config_get_dsn_info (dsn_name);
        retval = FALSE;
 
        window = GTK_WINDOW (plugin->main_window);
 
        /* Use same data but changing the database */
        init_cnc = g_strdup_printf (CONNECTION_FORMAT_STRING, host, init_database);
-       gda_config_save_data_source_info (dsn);
 
        conn = gda_connection_open_from_string(dsn->provider, init_cnc, dsn->auth_string, 0, &error);
        if (error) {
@@ -690,7 +688,7 @@ create_database (const gchar   *dsn_name,
        }
        g_free(init_cnc);
        if (conn == NULL) {
-               g_warning ("Can't connect to database server in order to check/create the database: %s", 
cnc_string_orig);
+               g_warning ("Can't connect to database server in order to check/create the database: %s", 
dsn->cnc_string);
        } else {
                dialog = gtk_message_dialog_new (window,
                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -714,7 +712,6 @@ create_database (const gchar   *dsn_name,
                }
                gda_connection_close (conn);
        }
-       gda_config_save_data_source_info (dsn);
 
        return retval;
 }
@@ -807,18 +804,9 @@ sql_plugin_retrieve_project_id (PlannerPlugin *plugin,
        gint               project_id;
        GtkTreeSelection  *selection;
        GtkTreeIter        iter;
-       gchar             *db_txt;
        const gchar       *dsn_name = "planner-auto";
-       const gchar       *provider = "PostgreSQL";
        gchar             *filename;
 
-       db_txt = g_strdup_printf (CONNECTION_FORMAT_STRING,server,database);
-       gda_config_save_data_source (dsn_name,
-                                     provider,
-                                     db_txt,
-                                     "planner project", login, password, FALSE);
-       g_free (db_txt);
-
        conn = sql_get_tested_connection (dsn_name, server, database, plugin);
 
        if (conn == NULL) {
@@ -1062,6 +1050,41 @@ sql_plugin_retrieve_db_values (PlannerPlugin  *plugin,
        return ret;
 }
 
+/*
+ * define_dsn:
+ * @server: a server
+ * @port: unused
+ * @database: a database
+ * @login: a login
+ * @password: a password
+ *
+ * Define "planner-auto" libgda DSN.
+ * Once defined, connections to the database can be made using the DSN name alone.
+ * provider, host, database, login, password are retrieved.
+ */
+static void
+define_dsn (const gchar *server, const gchar *port, const gchar *database, const gchar *login, const gchar 
*password)
+{
+    GdaDsnInfo dsn_info = {
+        "planner-auto",
+        "PostgreSQL",
+        "planner project",
+        NULL,
+        NULL,
+        FALSE
+    };
+    GError *error = NULL;
+    dsn_info.cnc_string = g_strdup_printf (CONNECTION_FORMAT_STRING, server, database);
+    dsn_info.auth_string = g_strdup_printf (AUTH_FORMAT_STRING, login, password);
+    gda_config_define_dsn (&dsn_info, &error);
+    if (error) {
+        g_warning (error->message);
+        g_clear_error (&error);
+    }
+    g_free (dsn_info.cnc_string);
+    g_free (dsn_info.auth_string);
+}
+
 static void
 sql_plugin_open (GtkAction *action,
                 gpointer   user_data)
@@ -1088,6 +1111,7 @@ sql_plugin_open (GtkAction *action,
                                            &password)) {
                return;
        }
+       define_dsn (server, port, database, login, password);
 
        project_id = sql_plugin_retrieve_project_id (plugin,
                                                     server,
@@ -1184,9 +1208,7 @@ sql_plugin_save (GtkAction *action,
        gchar         *uri      = NULL;
        const gchar   *uri_plan = NULL;
        GError        *error    = NULL;
-       gchar         *db_txt;
        const gchar   *dsn_name = "planner-auto";
-       const gchar   *provider = "PostgreSQL";
 
        project = planner_window_get_project (plugin->main_window);
 
@@ -1200,12 +1222,7 @@ sql_plugin_save (GtkAction *action,
                return;
        }
 
-       db_txt = g_strdup_printf (CONNECTION_FORMAT_STRING,server,database);
-       gda_config_save_data_source (dsn_name,
-                                     provider,
-                                     db_txt,
-                                     "planner project", login, password, FALSE);
-       g_free (db_txt);
+       define_dsn (server, port, database, login, password);
        conn = sql_get_tested_connection (dsn_name, server, database, plugin);
        if (conn == NULL) {
                return;


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