[libgda] Ported test raw ddl creator to G_DEFINE/G_DECLARE



commit 56acaf71da82e5d7897d7b7742a91ca65d78092b
Author: Daniel Espinosa <esodan gmail com>
Date:   Wed Apr 3 18:00:07 2019 -0600

    Ported test raw ddl creator to G_DEFINE/G_DECLARE

 tests/raw-ddl-creator.c | 223 +++++++++++++++++++-----------------------------
 tests/raw-ddl-creator.h |  29 ++-----
 2 files changed, 95 insertions(+), 157 deletions(-)
---
diff --git a/tests/raw-ddl-creator.c b/tests/raw-ddl-creator.c
index a0cf76b47..b34eea9a1 100644
--- a/tests/raw-ddl-creator.c
+++ b/tests/raw-ddl-creator.c
@@ -39,7 +39,6 @@
 static void raw_ddl_creator_class_init (RawDDLCreatorClass *klass);
 static void raw_ddl_creator_init (RawDDLCreator *creator);
 static void raw_ddl_creator_dispose (GObject *object);
-static void raw_ddl_creator_finalize (GObject *object);
 
 static void raw_ddl_creator_set_property (GObject *object,
                                         guint param_id,
@@ -53,7 +52,6 @@ static void raw_ddl_creator_get_property (GObject *object,
 static gboolean load_customization (RawDDLCreator *ddlc, const gchar *xml_spec_file, GError **error);
 static GdaServerOperation *prepare_dbo_server_operation (RawDDLCreator *ddlc, GdaServerProvider *prov, 
GdaConnection *cnc,
                                                         GdaMetaDbObject *dbo, GError **error);
-static GRecMutex init_mutex;
 
 typedef struct {
        gchar  *prov;
@@ -70,7 +68,7 @@ static gboolean ProviderSpecific_equal (gconstpointer a, gconstpointer b);
 static void ProviderSpecific_key_free (ProviderSpecificKey *key);
 static void ProviderSpecific_value_free (ProviderSpecificValue *value);
 
-struct _RawDDLCreatorPrivate {
+typedef struct {
        GdaConnection *cnc;
        GdaMetaStruct *d_mstruct;
 
@@ -79,11 +77,9 @@ struct _RawDDLCreatorPrivate {
        GValue *schema;
        gchar *quoted_catalog;
        gchar *quoted_schema;
-};
-
-/* get a pointer to the parents to be able to call their destructor */
-static GObjectClass *parent_class = NULL;
+} RawDDLCreatorPrivate;
 
+G_DEFINE_TYPE_WITH_PRIVATE (RawDDLCreator, raw_ddl_creator, G_TYPE_OBJECT)
 
 /* properties */
 enum {
@@ -101,32 +97,6 @@ GQuark raw_ddl_creator_error_quark (void) {
        return quark;
 }
 
-GType
-raw_ddl_creator_get_type (void) {
-       static GType type = 0;
-
-       if (G_UNLIKELY (type == 0)) {
-               static const GTypeInfo info = {
-                       sizeof (RawDDLCreatorClass),
-                       (GBaseInitFunc) NULL,
-                       (GBaseFinalizeFunc) NULL,
-                       (GClassInitFunc) raw_ddl_creator_class_init,
-                       NULL,
-                       NULL,
-                       sizeof (RawDDLCreator),
-                       0,
-                       (GInstanceInitFunc) raw_ddl_creator_init,
-                       0
-               };
-
-               g_rec_mutex_lock (&init_mutex);
-               if (type == 0)
-                       type = g_type_register_static (G_TYPE_OBJECT, "RawDDLCreator", &info, 0);
-               g_rec_mutex_unlock (&init_mutex);
-       }
-       return type;
-}
-
 static guint
 ProviderSpecific_hash (gconstpointer key)
 {
@@ -174,9 +144,6 @@ raw_ddl_creator_class_init (RawDDLCreatorClass *klass)
 {
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-       g_rec_mutex_lock (&init_mutex);
-       parent_class = g_type_class_peek_parent (klass);
-
        /* Properties */
        object_class->set_property = raw_ddl_creator_set_property;
        object_class->get_property = raw_ddl_creator_get_property;
@@ -191,25 +158,23 @@ raw_ddl_creator_class_init (RawDDLCreatorClass *klass)
                (G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)));
 
        object_class->dispose = raw_ddl_creator_dispose;
-       object_class->finalize = raw_ddl_creator_finalize;
 
-       g_rec_mutex_unlock (&init_mutex);
 }
 
 
 static void
 raw_ddl_creator_init (RawDDLCreator *creator)
 {
-       creator->priv = g_new0 (RawDDLCreatorPrivate, 1);
-       creator->priv->cnc = NULL;
-       creator->priv->d_mstruct = NULL;
-       creator->priv->provider_specifics = g_hash_table_new_full (ProviderSpecific_hash, 
ProviderSpecific_equal,
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (creator);
+       priv->cnc = NULL;
+       priv->d_mstruct = NULL;
+       priv->provider_specifics = g_hash_table_new_full (ProviderSpecific_hash, ProviderSpecific_equal,
                                                                   (GDestroyNotify) ProviderSpecific_key_free,
                                                                   (GDestroyNotify) 
ProviderSpecific_value_free);
-       creator->priv->catalog = NULL;
-       creator->priv->schema = NULL;
-       creator->priv->quoted_catalog = NULL;
-       creator->priv->quoted_schema = NULL;
+       priv->catalog = NULL;
+       priv->schema = NULL;
+       priv->quoted_catalog = NULL;
+       priv->quoted_schema = NULL;
 }
 
 static void
@@ -220,48 +185,29 @@ raw_ddl_creator_dispose (GObject *object)
        g_return_if_fail (RAW_IS_DDL_CREATOR (object));
 
        creator = RAW_DDL_CREATOR (object);
-       if (creator->priv) {
-               if (creator->priv->catalog)
-                       gda_value_free (creator->priv->catalog);
-               if (creator->priv->schema)
-                       gda_value_free (creator->priv->schema);
-               g_free (creator->priv->quoted_catalog);
-               g_free (creator->priv->quoted_schema);
-
-               if (creator->priv->cnc) {
-                       g_object_unref (creator->priv->cnc);
-                       creator->priv->cnc = NULL;
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (creator);
+
+               if (priv->catalog)
+                       gda_value_free (priv->catalog);
+               if (priv->schema)
+                       gda_value_free (priv->schema);
+               g_free (priv->quoted_catalog);
+               g_free (priv->quoted_schema);
+
+               if (priv->cnc) {
+                       g_object_unref (priv->cnc);
+                       priv->cnc = NULL;
                }
 
-               if (creator->priv->d_mstruct) {
-                       g_object_unref (creator->priv->d_mstruct);
-                       creator->priv->d_mstruct = NULL;
+               if (priv->d_mstruct) {
+                       g_object_unref (priv->d_mstruct);
+                       priv->d_mstruct = NULL;
                }
-       }
 
        /* parent class */
-       parent_class->dispose (object);
+       G_OBJECT_CLASS (raw_ddl_creator_parent_class)->dispose (object);
 }
 
-static void
-raw_ddl_creator_finalize (GObject *object)
-{
-       RawDDLCreator *creator;
-
-       g_return_if_fail (object != NULL);
-       g_return_if_fail (RAW_IS_DDL_CREATOR (object));
-
-       creator = RAW_DDL_CREATOR (object);
-       if (creator->priv) {
-               if (creator->priv->provider_specifics)
-                       g_hash_table_destroy (creator->priv->provider_specifics);
-               g_free (creator->priv);
-               creator->priv = NULL;
-       }
-
-       /* parent class */
-       parent_class->finalize (object);
-}
 
 static void
 raw_ddl_creator_set_property (GObject *object,
@@ -272,43 +218,45 @@ raw_ddl_creator_set_property (GObject *object,
        RawDDLCreator *creator;
 
        creator = RAW_DDL_CREATOR (object);
-       if (creator->priv) {
+
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (creator);
+
                switch (param_id) {
                case PROP_CNC_OBJECT:
-                       if (creator->priv->cnc)
-                               g_object_unref (creator->priv->cnc);
+                       if (priv->cnc)
+                               g_object_unref (priv->cnc);
 
-                       creator->priv->cnc = g_value_get_object (value);
-                       if (creator->priv->cnc)
-                               g_object_ref (creator->priv->cnc);
+                       priv->cnc = g_value_get_object (value);
+                       if (priv->cnc)
+                               g_object_ref (priv->cnc);
                        break;
                case PROP_CATALOG:
-                       if (creator->priv->catalog)
-                               gda_value_free (creator->priv->catalog);
-                       creator->priv->catalog = NULL;
-                       g_free (creator->priv->quoted_catalog);
-                       creator->priv->quoted_catalog = NULL;
+                       if (priv->catalog)
+                               gda_value_free (priv->catalog);
+                       priv->catalog = NULL;
+                       g_free (priv->quoted_catalog);
+                       priv->quoted_catalog = NULL;
                        if (g_value_get_string (value) && *g_value_get_string (value)) {
-                               creator->priv->catalog = gda_value_copy (value);
-                               if (!creator->priv->cnc)
+                               priv->catalog = gda_value_copy (value);
+                               if (!priv->cnc)
                                        g_warning ("The \"catalog\" property should be set after the \"cnc\" 
one");
-                               creator->priv->quoted_catalog =
-                                       gda_sql_identifier_quote (g_value_get_string (value), 
creator->priv->cnc, NULL,
+                               priv->quoted_catalog =
+                                       gda_sql_identifier_quote (g_value_get_string (value), priv->cnc, NULL,
                                                                  FALSE, FALSE);
                        }
                        break;
                case PROP_SCHEMA:
-                       if (creator->priv->schema)
-                               gda_value_free (creator->priv->schema);
-                       creator->priv->schema = NULL;
-                       g_free (creator->priv->quoted_schema);
-                       creator->priv->quoted_schema = NULL;
+                       if (priv->schema)
+                               gda_value_free (priv->schema);
+                       priv->schema = NULL;
+                       g_free (priv->quoted_schema);
+                       priv->quoted_schema = NULL;
                        if (g_value_get_string (value) && *g_value_get_string (value)) {
-                               creator->priv->schema = gda_value_copy (value);
-                               if (!creator->priv->cnc)
+                               priv->schema = gda_value_copy (value);
+                               if (!priv->cnc)
                                        g_warning ("The \"schema\" property should be set after the \"cnc\" 
one");
-                               creator->priv->quoted_schema =
-                                       gda_sql_identifier_quote (g_value_get_string (value), 
creator->priv->cnc, NULL,
+                               priv->quoted_schema =
+                                       gda_sql_identifier_quote (g_value_get_string (value), priv->cnc, NULL,
                                                                  FALSE, FALSE);
                        }
                        break;
@@ -316,7 +264,6 @@ raw_ddl_creator_set_property (GObject *object,
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
                        break;
                }
-       }
 }
 
 static void
@@ -327,21 +274,21 @@ raw_ddl_creator_get_property (GObject *object,
 {
        RawDDLCreator *creator;
        creator = RAW_DDL_CREATOR (object);
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (creator);
 
-       if (creator->priv) {
                switch (param_id) {
                case PROP_CNC_OBJECT:
-                       g_value_set_object (value, (GObject *) creator->priv->cnc);
+                       g_value_set_object (value, (GObject *) priv->cnc);
                        break;
                case PROP_CATALOG:
-                       if (creator->priv->catalog)
-                               g_value_set_string (value, g_value_get_string (creator->priv->catalog));
+                       if (priv->catalog)
+                               g_value_set_string (value, g_value_get_string (priv->catalog));
                        else
                                g_value_set_string (value, NULL);
                        break;
                case PROP_SCHEMA:
-                       if (creator->priv->schema)
-                               g_value_set_string (value, g_value_get_string (creator->priv->schema));
+                       if (priv->schema)
+                               g_value_set_string (value, g_value_get_string (priv->schema));
                        else
                                g_value_set_string (value, NULL);
                        break;
@@ -349,7 +296,6 @@ raw_ddl_creator_get_property (GObject *object,
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
                        break;
                }
-       }
 }
 
 /**
@@ -379,16 +325,17 @@ raw_ddl_creator_set_dest_from_file (RawDDLCreator *ddlc, const gchar *xml_spec_f
 {
        g_return_val_if_fail (RAW_IS_DDL_CREATOR (ddlc), FALSE);
        g_return_val_if_fail (xml_spec_file && *xml_spec_file, FALSE);
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (ddlc);
 
-       if (ddlc->priv->d_mstruct)
-               g_object_unref (ddlc->priv->d_mstruct);
+       if (priv->d_mstruct)
+               g_object_unref (priv->d_mstruct);
 
-       ddlc->priv->d_mstruct = (GdaMetaStruct*) g_object_new (GDA_TYPE_META_STRUCT, NULL);
+       priv->d_mstruct = (GdaMetaStruct*) g_object_new (GDA_TYPE_META_STRUCT, NULL);
 
-       if (!gda_meta_struct_load_from_xml_file (ddlc->priv->d_mstruct, NULL, NULL, xml_spec_file, error) ||
+       if (!gda_meta_struct_load_from_xml_file (priv->d_mstruct, NULL, NULL, xml_spec_file, error) ||
            !load_customization (ddlc, xml_spec_file, error)) {
-               g_object_unref (ddlc->priv->d_mstruct);
-               ddlc->priv->d_mstruct = NULL;
+               g_object_unref (priv->d_mstruct);
+               priv->d_mstruct = NULL;
                return FALSE;
        }
        else
@@ -400,6 +347,7 @@ load_customization (RawDDLCreator *ddlc, const gchar *xml_spec_file, GError **er
 {
        xmlNodePtr node;
        xmlDocPtr doc;
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (ddlc);
 
        /* load information schema's structure XML file */
        doc = xmlParseFile (xml_spec_file);
@@ -458,7 +406,7 @@ load_customization (RawDDLCreator *ddlc, const gchar *xml_spec_file, GError **er
                                                        val->repl = g_strdup ((gchar *) tmp);
                                                        xmlFree (tmp);
                                                }
-                                               g_hash_table_insert (ddlc->priv->provider_specifics, key, 
val);
+                                               g_hash_table_insert (priv->provider_specifics, key, val);
                                                /*g_print ("RULE: %s, %s, %s => %s\n", key->prov,
                                                  key->path, key->expr, val->repl);*/
                                        }
@@ -534,6 +482,7 @@ create_server_operation_for_table (RawDDLCreator *ddlc, GdaServerProvider *prov,
        GSList *list;
        gint index;
        const gchar *repl;
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (ddlc);
 
        op = gda_server_provider_create_operation (prov, cnc, GDA_SERVER_OPERATION_CREATE_TABLE, NULL, error);
        if (!op)
@@ -547,7 +496,7 @@ create_server_operation_for_table (RawDDLCreator *ddlc, GdaServerProvider *prov,
                if (! gda_server_operation_set_value_at (op, tcol->column_name, error,
                                                         "/FIELDS_A/@COLUMN_NAME/%d", index))
                        goto onerror;
-               repl = provider_specific_match (ddlc->priv->provider_specifics, prov, tcol->column_type ? 
tcol->column_type : "string",
+               repl = provider_specific_match (priv->provider_specifics, prov, tcol->column_type ? 
tcol->column_type : "string",
                                                "/FIELDS_A/@COLUMN_TYPE");
                if (! gda_server_operation_set_value_at (op, repl ? repl : "string", error,
                                                         "/FIELDS_A/@COLUMN_TYPE/%d", index))
@@ -579,7 +528,7 @@ create_server_operation_for_table (RawDDLCreator *ddlc, GdaServerProvider *prov,
                if (!fdata.allok)
                        goto onerror;
 
-               repl = provider_specific_match (ddlc->priv->provider_specifics, prov, "dummy", 
"/FIELDS_A/@COLUMN_PKEY");
+               repl = provider_specific_match (priv->provider_specifics, prov, "dummy", 
"/FIELDS_A/@COLUMN_PKEY");
                if (repl) {
                        if (! gda_server_operation_set_value_at (op, tcol->pkey ? "TRUE" : "FALSE", error,
                                                                 "/FIELDS_A/@COLUMN_PKEY/%d", index))
@@ -682,17 +631,18 @@ raw_ddl_creator_get_sql (RawDDLCreator *ddlc, GError **error)
        GString *string;
        gchar *sql;
        g_return_val_if_fail (RAW_IS_DDL_CREATOR (ddlc), NULL);
-       g_return_val_if_fail (ddlc->priv, NULL);
-       if (!ddlc->priv->cnc) {
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (ddlc);
+
+       if (!priv->cnc) {
                g_set_error (error, RAW_DDL_CREATOR_ERROR, RAW_DDL_CREATOR_NO_CONNECTION_ERROR,
                             "%s", "No connection specified");
                return NULL;
        }
 
        /* render operations to SQL */
-       GdaServerProvider *prov = gda_connection_get_provider (ddlc->priv->cnc);
+       GdaServerProvider *prov = gda_connection_get_provider (priv->cnc);
        GSList *objlist, *list;
-       objlist = gda_meta_struct_get_all_db_objects (ddlc->priv->d_mstruct);
+       objlist = gda_meta_struct_get_all_db_objects (priv->d_mstruct);
 
        string = g_string_new ("");
        for (list = objlist; list; list = list->next) {
@@ -704,7 +654,7 @@ raw_ddl_creator_get_sql (RawDDLCreator *ddlc, GError **error)
                        return NULL;
                }
                else {
-                       sql = gda_server_provider_render_operation (prov, ddlc->priv->cnc, op, error);
+                       sql = gda_server_provider_render_operation (prov, priv->cnc, op, error);
                        if (!sql) {
                                g_string_free (string, TRUE);
                                return NULL;
@@ -737,34 +687,35 @@ gboolean
 raw_ddl_creator_execute (RawDDLCreator *ddlc, GError **error)
 {
        g_return_val_if_fail (RAW_IS_DDL_CREATOR (ddlc), FALSE);
-       g_return_val_if_fail (ddlc->priv, FALSE);
-       if (!ddlc->priv->cnc) {
+  RawDDLCreatorPrivate *priv = raw_ddl_creator_get_instance_private (ddlc);
+
+       if (!priv->cnc) {
                g_set_error (error, RAW_DDL_CREATOR_ERROR, RAW_DDL_CREATOR_NO_CONNECTION_ERROR,
                             "%s", "No connection specified");
                return FALSE;
        }
-       if (!ddlc->priv->d_mstruct) {
+       if (!priv->d_mstruct) {
                g_set_error (error, RAW_DDL_CREATOR_ERROR, RAW_DDL_CREATOR_NO_CONNECTION_ERROR,
                             "%s", "No destination database objects specified");
                return FALSE;
        }
 
        /* begin transaction */
-       if (!gda_connection_begin_transaction (ddlc->priv->cnc, NULL, GDA_TRANSACTION_ISOLATION_UNKNOWN,
+       if (!gda_connection_begin_transaction (priv->cnc, NULL, GDA_TRANSACTION_ISOLATION_UNKNOWN,
                                               error))
                return FALSE;
 
        /* execute operations */
-       GdaServerProvider *prov = gda_connection_get_provider (ddlc->priv->cnc);
+       GdaServerProvider *prov = gda_connection_get_provider (priv->cnc);
        GSList *objlist, *list;
-       objlist = gda_meta_struct_get_all_db_objects (ddlc->priv->d_mstruct);
+       objlist = gda_meta_struct_get_all_db_objects (priv->d_mstruct);
        for (list = objlist; list; list = list->next) {
                GdaServerOperation *op;
                op = prepare_dbo_server_operation (ddlc, prov, NULL, GDA_META_DB_OBJECT (list->data), error);
                if (!op)
                        goto onerror;
                else {
-                       if (!gda_server_provider_perform_operation (prov, ddlc->priv->cnc, op, error)) {
+                       if (!gda_server_provider_perform_operation (prov, priv->cnc, op, error)) {
                                g_object_unref (op);
                                goto onerror;
                        }
@@ -772,13 +723,13 @@ raw_ddl_creator_execute (RawDDLCreator *ddlc, GError **error)
                g_object_unref (op);
        }
 
-       if (!gda_connection_commit_transaction (ddlc->priv->cnc, NULL, error))
+       if (!gda_connection_commit_transaction (priv->cnc, NULL, error))
                goto onerror;
 
        return TRUE;
 
  onerror:
-       gda_connection_rollback_transaction (ddlc->priv->cnc, NULL, NULL);
+       gda_connection_rollback_transaction (priv->cnc, NULL, NULL);
        return FALSE;
 }
 
diff --git a/tests/raw-ddl-creator.h b/tests/raw-ddl-creator.h
index 6daca3f59..11dd741a5 100644
--- a/tests/raw-ddl-creator.h
+++ b/tests/raw-ddl-creator.h
@@ -26,15 +26,15 @@
 
 G_BEGIN_DECLS
 
-typedef struct _RawDDLCreator        RawDDLCreator;
-typedef struct _RawDDLCreatorClass   RawDDLCreatorClass;
-typedef struct _RawDDLCreatorPrivate RawDDLCreatorPrivate;
-typedef struct _RawDDLCreatorClassPrivate RawDDLCreatorClassPrivate;
-
 #define RAW_TYPE_DDL_CREATOR          (raw_ddl_creator_get_type())
-#define RAW_DDL_CREATOR(obj)          G_TYPE_CHECK_INSTANCE_CAST (obj, raw_ddl_creator_get_type(), 
RawDDLCreator)
-#define RAW_DDL_CREATOR_CLASS(klass)  G_TYPE_CHECK_CLASS_CAST (klass, raw_ddl_creator_get_type (), 
RawDDLCreatorClass)
-#define RAW_IS_DDL_CREATOR(obj)       G_TYPE_CHECK_INSTANCE_TYPE (obj, raw_ddl_creator_get_type ())
+
+G_DECLARE_DERIVABLE_TYPE(RawDDLCreator, raw_ddl_creator, RAW, DDL_CREATOR, GObject)
+
+/* struct for the object's class */
+struct _RawDDLCreatorClass
+{
+       GObjectClass              parent_class;
+};
 
 /* error reporting */
 extern GQuark raw_ddl_creator_error_quark (void);
@@ -47,20 +47,7 @@ typedef enum {
 } RawDDLCreatorError;
 
 
-/* struct for the object's data */
-struct _RawDDLCreator
-{
-       GObject               object;
-       RawDDLCreatorPrivate  *priv;
-};
-
-/* struct for the object's class */
-struct _RawDDLCreatorClass
-{
-       GObjectClass              parent_class;
-};
 
-GType             raw_ddl_creator_get_type             (void) G_GNUC_CONST;
 RawDDLCreator    *raw_ddl_creator_new                  (void);
 
 gboolean          raw_ddl_creator_set_dest_from_file   (RawDDLCreator *ddlc, const gchar *xml_spec_file,


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