[libgda/metat: 2/9] server-provider: now supports G_DECLARE/G_DEFINE for g_autoptr()
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgda/metat: 2/9] server-provider: now supports G_DECLARE/G_DEFINE for g_autoptr()
- Date: Wed, 7 Nov 2018 15:36:47 +0000 (UTC)
commit f6e206ab77ec03a15d003256916a6f884a9454de
Author: Daniel Espinosa <esodan gmail com>
Date: Mon Aug 20 12:30:09 2018 -0500
server-provider: now supports G_DECLARE/G_DEFINE for g_autoptr()
libgda/gda-server-provider-extra.c | 418 +-------------------------
libgda/gda-server-provider-private.h | 11 -
libgda/gda-server-provider.c | 563 ++++++++++++++++++++++++++++++-----
libgda/gda-server-provider.h | 25 +-
libgda/sqlite/gda-sqlite-provider.h | 3 +-
5 files changed, 492 insertions(+), 528 deletions(-)
---
diff --git a/libgda/gda-server-provider-extra.c b/libgda/gda-server-provider-extra.c
index 1fcf987db..933924b61 100644
--- a/libgda/gda-server-provider-extra.c
+++ b/libgda/gda-server-provider-extra.c
@@ -39,420 +39,4 @@
#include <libgda/handlers/gda-handler-string.h>
#include <libgda/handlers/gda-handler-type.h>
-/**
- * gda_server_provider_internal_get_parser:
- * @prov: a #GdaServerProvider
- *
- * This is a factory method to get a unique instance of a #GdaSqlParser object
- * for each #GdaServerProvider object
- * Don't unref it.
- *
- * Returns: (transfer none): a #GdaSqlParser
- */
-GdaSqlParser *
-gda_server_provider_internal_get_parser (GdaServerProvider *prov)
-{
- g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
- if (prov->priv->parser)
- return prov->priv->parser;
- prov->priv->parser = gda_server_provider_create_parser (prov, NULL);
- if (!prov->priv->parser)
- prov->priv->parser = gda_sql_parser_new ();
- return prov->priv->parser;
-}
-
-/**
- * gda_server_provider_perform_operation_default:
- * @provider: a #GdaServerProvider object
- * @cnc: (allow-none): a #GdaConnection object which will be used to perform an action, or %NULL
- * @op: a #GdaServerOperation object
- * @error: a place to store an error, or %NULL
- *
- * Performs the operation described by @op, using the SQL from the rendering of the operation
- *
- * Returns: %TRUE if no error occurred
- */
-gboolean
-gda_server_provider_perform_operation_default (GdaServerProvider *provider, GdaConnection *cnc,
- GdaServerOperation *op, GError **error)
-{
- gchar *sql;
- GdaBatch *batch;
- const GSList *list;
- gboolean retval = TRUE;
-
- sql = gda_server_provider_render_operation (provider, cnc, op, error);
- if (!sql)
- return FALSE;
-
- GdaSqlParser *parser;
- parser = gda_server_provider_internal_get_parser (provider); /* no ref held! */
- batch = gda_sql_parser_parse_string_as_batch (parser, sql, NULL, error);
- g_free (sql);
- if (!batch)
- return FALSE;
-
- for (list = gda_batch_get_statements (batch); list; list = list->next) {
- if (gda_connection_statement_execute_non_select (cnc, GDA_STATEMENT (list->data), NULL, NULL,
error) == -1) {
- retval = FALSE;
- break;
- }
- }
- g_object_unref (batch);
-
- return retval;
-}
-
-/**
- * gda_server_provider_handler_use_default:
- * @provider: a server provider
- * @type: a #GType
- *
- * Reserved to database provider's implementations. This method defines a default data handler for
- * @provider, and returns that #GdaDataHandler.
- *
- * Returns: (transfer none): a #GdaDataHandler, or %NULL
- *
- * Since: 5.2
- */
-GdaDataHandler *
-gda_server_provider_handler_use_default (GdaServerProvider *provider, GType type)
-{
- GdaDataHandler *dh = NULL;
- g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (provider), NULL);
- if ((type == G_TYPE_INT64) ||
- (type == G_TYPE_UINT64) ||
- (type == G_TYPE_DOUBLE) ||
- (type == G_TYPE_INT) ||
- (type == GDA_TYPE_NUMERIC) ||
- (type == G_TYPE_FLOAT) ||
- (type == GDA_TYPE_SHORT) ||
- (type == GDA_TYPE_USHORT) ||
- (type == G_TYPE_CHAR) ||
- (type == G_TYPE_UCHAR) ||
- (type == G_TYPE_UINT) ||
- (type == G_TYPE_LONG) ||
- (type == G_TYPE_ULONG)) {
- dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
- if (!dh) {
- dh = gda_handler_numerical_new ();
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_INT64, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UINT64, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_DOUBLE, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_INT, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_NUMERIC, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_FLOAT, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_SHORT, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_USHORT, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_CHAR, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UCHAR, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UINT, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_ULONG, NULL);
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_LONG, NULL);
- g_object_unref (dh);
- }
- }
- else if ((type == GDA_TYPE_BINARY) ||
- (type == GDA_TYPE_BLOB)) {
- /* no default binary data handler, it's too database specific */
- dh = NULL;
- }
- else if (type == G_TYPE_BOOLEAN) {
- dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
- if (!dh) {
- dh = gda_handler_boolean_new ();
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_BOOLEAN, NULL);
- g_object_unref (dh);
- }
- }
- else if ((type == GDA_TYPE_TIME) ||
- (type == G_TYPE_DATE_TIME) ||
- (type == G_TYPE_DATE)) {
- /* no default time related data handler, it's too database specific */
- dh = NULL;
- }
- else if (type == G_TYPE_STRING) {
- dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
- if (!dh) {
- dh = gda_handler_string_new ();
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_STRING, NULL);
- g_object_unref (dh);
- }
- }
- else if (type == G_TYPE_GTYPE) {
- dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
- if (!dh) {
- dh = gda_handler_type_new ();
- gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_GTYPE, NULL);
- g_object_unref (dh);
- }
- }
-
- return dh;
-}
-
-static gboolean
-param_to_null_foreach (GdaSqlAnyPart *part, G_GNUC_UNUSED gpointer data, G_GNUC_UNUSED GError **error)
-{
- if (part->type == GDA_SQL_ANY_EXPR) {
- GdaSqlExpr *expr = (GdaSqlExpr*) part;
- if (expr->param_spec) {
- GType type = expr->param_spec->g_type;
- gda_sql_param_spec_free (expr->param_spec);
- expr->param_spec = NULL;
-
- if (!expr->value) {
- if (type != GDA_TYPE_NULL)
- expr->value = gda_value_new_from_string ("0", type);
- else
- g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 0);
- }
- }
- }
- return TRUE;
-}
-
-/**
- * gda_select_alter_select_for_empty:
- * @stmt: a SELECT #GdaStatement
- * @error: (allow-none): a place to store errors, or %NULL
- *
- * Creates a new #GdaStatement, selecting the same data as @stmt, but which always returns an
- * empty (no row) data model. This is use dy database providers' implementations.
- *
- * Returns: (transfer full): a new #GdaStatement
- */
-GdaStatement *
-gda_select_alter_select_for_empty (GdaStatement *stmt, G_GNUC_UNUSED GError **error)
-{
- GdaStatement *estmt;
- GdaSqlStatement *sqlst;
- GdaSqlStatementSelect *stsel;
-
- g_assert (gda_statement_get_statement_type (stmt) == GDA_SQL_STATEMENT_SELECT);
- g_object_get (G_OBJECT (stmt), "structure", &sqlst, NULL);
- g_assert (sqlst);
-
- if (sqlst->sql) {
- g_free (sqlst->sql);
- sqlst->sql = NULL;
- }
- stsel = (GdaSqlStatementSelect*) sqlst->contents;
-
- /* set the WHERE condition to "1 = 0" */
- GdaSqlExpr *expr, *cond = stsel->where_cond;
- GdaSqlOperation *op;
- if (cond)
- gda_sql_expr_free (cond);
- cond = gda_sql_expr_new (GDA_SQL_ANY_PART (stsel));
- stsel->where_cond = cond;
- op = gda_sql_operation_new (GDA_SQL_ANY_PART (cond));
- cond->cond = op;
- op->operator_type = GDA_SQL_OPERATOR_TYPE_EQ;
- expr = gda_sql_expr_new (GDA_SQL_ANY_PART (op));
- op->operands = g_slist_prepend (NULL, expr);
- g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 1);
- expr = gda_sql_expr_new (GDA_SQL_ANY_PART (op));
- op->operands = g_slist_prepend (op->operands, expr);
- g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 0);
-
- /* replace any selected field which has a parameter with NULL */
- gda_sql_any_part_foreach (GDA_SQL_ANY_PART (stsel), (GdaSqlForeachFunc) param_to_null_foreach,
- NULL, NULL);
-
- /* create new statement */
- estmt = g_object_new (GDA_TYPE_STATEMENT, "structure", sqlst, NULL);
- gda_sql_statement_free (sqlst);
- return estmt;
-}
-
-/**
- * gda_server_provider_handler_find:
- * @prov: a #GdaServerProvider
- * @cnc: (allow-none): a #GdaConnection
- * @g_type: a #GType
- * @dbms_type: (allow-none): a database type
- *
- * Reserved to database provider's implementations: get the #GdaDataHandler associated to @prov
- * for connection @cnc. You probably want to use gda_server_provider_get_data_handler_g_type().
- *
- * Returns: (transfer none): the requested #GdaDataHandler, or %NULL if none found
- */
-GdaDataHandler *
-gda_server_provider_handler_find (GdaServerProvider *prov, GdaConnection *cnc,
- GType g_type, const gchar *dbms_type)
-{
- g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
- if (cnc)
- g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
-
- GdaDataHandler *dh;
- GdaServerProviderHandlerInfo info;
-
- info.cnc = cnc;
- info.g_type = g_type;
- info.dbms_type = (gchar *) dbms_type;
- dh = g_hash_table_lookup (prov->priv->data_handlers, &info);
- if (!dh) {
- /* try without the connection specification */
- info.cnc = NULL;
- dh = g_hash_table_lookup (prov->priv->data_handlers, &info);
- }
-
- return dh;
-}
-
-void
-gda_server_provider_handler_declare (GdaServerProvider *prov, GdaDataHandler *dh,
- GdaConnection *cnc,
- GType g_type, const gchar *dbms_type)
-{
- GdaServerProviderHandlerInfo *info;
- g_return_if_fail (GDA_IS_SERVER_PROVIDER (prov));
- g_return_if_fail (GDA_IS_DATA_HANDLER (dh));
-
- info = g_new (GdaServerProviderHandlerInfo, 1);
- info->cnc = cnc;
- info->g_type = g_type;
- info->dbms_type = dbms_type ? g_strdup (dbms_type) : NULL;
-
- g_hash_table_insert (prov->priv->data_handlers, info, dh);
- g_object_ref (dh);
-}
-
-static gboolean
-handlers_clear_for_cnc_fh (GdaServerProviderHandlerInfo *key, GdaDataHandler *value, GdaConnection *cnc)
-{
- return (key->cnc == cnc) ? TRUE : FALSE;
-}
-
-/*
- * Removes any #GdaServerProviderHandlerInfo associated to @cnc */
-void
-_gda_server_provider_handlers_clear_for_cnc (GdaServerProvider *prov, GdaConnection *cnc)
-{
- g_return_if_fail (GDA_IS_SERVER_PROVIDER (prov));
- g_return_if_fail (GDA_IS_CONNECTION (cnc));
- g_hash_table_foreach_remove (prov->priv->data_handlers, (GHRFunc) handlers_clear_for_cnc_fh, cnc);
-}
-
-/**
- * gda_server_provider_find_file:
- * @prov: a #GdaServerProvider
- * @inst_dir: directory where @prov is installed
- * @filename: name of the file to find
- *
- * Finds the location of a @filename. This function should only be used by database provider's
- * implementations
- *
- * Returns: (transfer full): the complete path to @filename, or %NULL if not found
- */
-gchar *
-gda_server_provider_find_file (GdaServerProvider *prov, const gchar *inst_dir, const gchar *filename)
-{
- gchar *file = NULL;
- const gchar *dirname;
-
- g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
- dirname = g_object_get_data (G_OBJECT (prov), "GDA_PROVIDER_DIR");
- if (dirname)
- file = g_build_filename (dirname, filename, NULL);
-
- if (!file ||
- (file && !g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))) {
- g_free (file);
- file = g_build_filename (inst_dir, filename, NULL);
- if (! g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
- g_free (file);
- file = NULL;
- if (dirname) {
- /* look in the parent dir, to handle the case where the lib is in a .libs dir
*/
- file = g_build_filename (dirname, "..", filename, NULL);
- if (! g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
- g_free (file);
- file = NULL;
- }
- }
- }
- }
-
- return file;
-}
-
-/**
- * gda_server_provider_load_file_contents:
- * @inst_dir: directory where the database provider has been installed
- * @data_dir: DATA directory to look for ($prefix/share)
- * @filename: name of the file to load
- *
- * Loads and returns the contents of @filename, which is searched in several places
- * This function should only be used by database provider's
- * implementations
- *
- * Returns: (transfer full): a new string containing @filename's contents, or %NULL if not found or if an
error occurred
- */
-gchar *
-gda_server_provider_load_file_contents (const gchar *inst_dir, const gchar *data_dir, const gchar *filename)
-{
- gchar *contents, *file;
-
- file = g_build_filename (inst_dir, filename, NULL);
-
- if (g_file_get_contents (file, &contents, NULL, NULL))
- goto theend;
-
- g_free (file);
- file = g_build_filename (inst_dir, "..", filename, NULL);
- if (g_file_get_contents (file, &contents, NULL, NULL))
- goto theend;
-
- g_free (file);
- file = g_build_filename (data_dir, filename, NULL);
- if (g_file_get_contents (file, &contents, NULL, NULL))
- goto theend;
-
- g_free (file);
- file = g_build_filename (inst_dir, "..", "..", "..", "share", "libgda-6.0", filename, NULL);
- if (g_file_get_contents (file, &contents, NULL, NULL))
- goto theend;
- contents = NULL;
-
- theend:
- g_free (file);
- return contents;
-}
-
-/**
- * gda_server_provider_load_resource_contents:
- * @prov_name: the provider's name
- * @resource: the name of the resource to load
- *
- * Loads and returns the contents of the specified resource.
- * This function should only be used by database provider's implementations
- *
- * Returns: (transfer full): a new string containing the resource's contents, or %NULL if not found or if an
error occurred
- *
- * Since: 6.0
- */
-gchar *
-gda_server_provider_load_resource_contents (const gchar *prov_name, const gchar *resource)
-{
- g_return_val_if_fail (prov_name, NULL);
- g_return_val_if_fail (resource, NULL);
-
- gchar *rname;
- rname = g_strdup_printf ("/spec/%s/%s", prov_name, resource);
-
- GBytes *bytes;
- bytes = g_resources_lookup_data (rname, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
- g_free (rname);
- if (!bytes) {
- g_warning ("Resource: /spec/%s/%s, not found for provider", prov_name, resource);
- return NULL;
- }
-
- gchar *retval;
- retval = g_strdup ((const gchar*) g_bytes_get_data (bytes, NULL));
- g_bytes_unref (bytes);
- return retval;
-}
+/* Moved to gda-server-provider.c */
diff --git a/libgda/gda-server-provider-private.h b/libgda/gda-server-provider-private.h
index e20f23c20..24ee178e4 100644
--- a/libgda/gda-server-provider-private.h
+++ b/libgda/gda-server-provider-private.h
@@ -26,17 +26,6 @@
#include <libgda/gda-meta-store.h>
#include <libgda/gda-server-provider-impl.h>
-/*
- * provider's private information
- */
-struct _GdaServerProviderPrivate {
- GHashTable *data_handlers; /* key = a GdaServerProviderHandlerInfo pointer, value = a
GdaDataHandler */
- GdaSqlParser *parser;
-
- GHashTable *jobs_hash; /* key = a job ID, value = a # */
-};
-
-
/*
* Getting the GMainContext to use with the GdaWorker
*/
diff --git a/libgda/gda-server-provider.c b/libgda/gda-server-provider.c
index 2294c003f..3ef16e24d 100644
--- a/libgda/gda-server-provider.c
+++ b/libgda/gda-server-provider.c
@@ -14,7 +14,7 @@
* Copyright (C) 2008 Przemysław Grzegorczyk <pgrzegorczyk gmail com>
* Copyright (C) 2010 David King <davidk openismus com>
* Copyright (C) 2010 Jonh Wendell <jwendell gnome org>
- * Copyright (C) 2012 Daniel Espinosa <despinosa src gnome org>
+ * Copyright (C) 2012, 2018 Daniel Espinosa <despinosa src gnome org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -42,6 +42,7 @@
#include <libgda/gda-util.h>
#include <libgda/gda-set.h>
#include <sql-parser/gda-sql-parser.h>
+#include <gio/gio.h>
#include <string.h>
#include <glib/gi18n-lib.h>
#include <libgda/gda-lockable.h>
@@ -50,13 +51,22 @@
#include <libgda/gda-debug-macros.h>
#include "providers-support/gda-data-select-priv.h"
+/*
+ * provider's private information
+ */
+struct _GdaServerProviderPrivate {
+ GHashTable *data_handlers; /* key = a GdaServerProviderHandlerInfo pointer, value = a
GdaDataHandler */
+ GdaSqlParser *parser;
+
+ GHashTable *jobs_hash; /* key = a job ID, value = a # */
+};
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(GdaServerProvider, gda_server_provider, G_TYPE_OBJECT)
+
#define CLASS(provider) (GDA_SERVER_PROVIDER_CLASS (G_OBJECT_GET_CLASS (provider)))
#define GDA_DEBUG_VIRTUAL
#undef GDA_DEBUG_VIRTUAL
-static void gda_server_provider_class_init (GdaServerProviderClass *klass);
-static void gda_server_provider_init (GdaServerProvider *provider,
- GdaServerProviderClass *klass);
static void gda_server_provider_finalize (GObject *object);
static void gda_server_provider_constructed (GObject *object);
@@ -69,8 +79,6 @@ static void gda_server_provider_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
-static GObjectClass *parent_class = NULL;
-
/* properties */
enum {
PROP_0,
@@ -94,8 +102,6 @@ gda_server_provider_class_init (GdaServerProviderClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- parent_class = g_type_class_peek_parent (klass);
-
object_class->finalize = gda_server_provider_finalize;
object_class->constructed = gda_server_provider_constructed;
@@ -140,17 +146,16 @@ static void worker_data_free (WorkerData *wd);
static void
-gda_server_provider_init (GdaServerProvider *provider,
- G_GNUC_UNUSED GdaServerProviderClass *klass)
+gda_server_provider_init (GdaServerProvider *provider)
{
g_return_if_fail (GDA_IS_SERVER_PROVIDER (provider));
- provider->priv = g_new0 (GdaServerProviderPrivate, 1);
- provider->priv->data_handlers = g_hash_table_new_full ((GHashFunc)
gda_server_provider_handler_info_hash_func,
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
+ priv->data_handlers = g_hash_table_new_full ((GHashFunc) gda_server_provider_handler_info_hash_func,
(GEqualFunc)
gda_server_provider_handler_info_equal_func,
(GDestroyNotify)
gda_server_provider_handler_info_free,
(GDestroyNotify) g_object_unref);
- provider->priv->jobs_hash = NULL;
+ priv->jobs_hash = NULL;
}
static void
@@ -158,21 +163,18 @@ gda_server_provider_finalize (GObject *object)
{
GdaServerProvider *provider = (GdaServerProvider *) object;
g_return_if_fail (GDA_IS_SERVER_PROVIDER (provider));
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
/* free memory */
- if (provider->priv) {
- g_hash_table_destroy (provider->priv->data_handlers);
- if (provider->priv->jobs_hash)
- g_hash_table_destroy (provider->priv->jobs_hash);
- if (provider->priv->parser)
- g_object_unref (provider->priv->parser);
+ g_hash_table_destroy (priv->data_handlers);
+ if (priv->jobs_hash)
+ g_hash_table_destroy (priv->jobs_hash);
+ if (priv->parser)
+ g_object_unref (priv->parser);
- g_free (provider->priv);
- provider->priv = NULL;
- }
/* chain to parent class */
- parent_class->finalize (object);
+ G_OBJECT_CLASS (gda_server_provider_parent_class)->finalize (object);
}
/*
@@ -183,10 +185,11 @@ gda_server_provider_constructed (GObject *object)
{
GdaServerProvider *provider = (GdaServerProvider *) object;
g_return_if_fail (GDA_IS_SERVER_PROVIDER (provider));
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
const char* gtype_name = G_OBJECT_TYPE_NAME (object);
/*g_print ("Provider %p (%s) constructed\n", provider, G_OBJECT_CLASS_NAME (G_OBJECT_GET_CLASS
(object)));*/
- if (!provider->priv)
+ if (!priv)
g_warning ("Internal error after creation of %s: provider's private part is missing",
gtype_name);
else {
GdaServerProviderBase *fset;
@@ -247,13 +250,13 @@ gda_server_provider_constructed (GObject *object)
}
}
- if (GDA_IS_SERVER_PROVIDER_CLASS (parent_class)) {
+ if (GDA_IS_SERVER_PROVIDER_CLASS (gda_server_provider_parent_class)) {
if (! CLASS (provider)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_META])
CLASS (provider)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_META] =
- GDA_SERVER_PROVIDER_CLASS (parent_class)->functions_sets
[GDA_SERVER_PROVIDER_FUNCTIONS_META];
+ GDA_SERVER_PROVIDER_CLASS
(gda_server_provider_parent_class)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_META];
if (! CLASS (provider)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_XA])
CLASS (provider)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_XA] =
- GDA_SERVER_PROVIDER_CLASS (parent_class)->functions_sets
[GDA_SERVER_PROVIDER_FUNCTIONS_XA];
+ GDA_SERVER_PROVIDER_CLASS
(gda_server_provider_parent_class)->functions_sets [GDA_SERVER_PROVIDER_FUNCTIONS_XA];
}
GdaServerProviderXa *xaset;
@@ -282,36 +285,9 @@ gda_server_provider_constructed (GObject *object)
}
/* chain to parent class */
- parent_class->constructed (object);
+ G_OBJECT_CLASS (gda_server_provider_parent_class)->constructed (object);
}
-GType
-gda_server_provider_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0)) {
- static GMutex registering;
- static const GTypeInfo info = {
- sizeof (GdaServerProviderClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gda_server_provider_class_init,
- NULL,
- NULL,
- sizeof (GdaServerProvider),
- 0,
- (GInstanceInitFunc) gda_server_provider_init,
- 0
- };
- g_mutex_lock (®istering);
- if (type == 0)
- type = g_type_register_static (G_TYPE_OBJECT, "GdaServerProvider", &info,
G_TYPE_FLAG_ABSTRACT);
- g_mutex_unlock (®istering);
- }
-
- return type;
-}
static void
gda_server_provider_set_property (GObject *object,
@@ -321,30 +297,28 @@ gda_server_provider_set_property (GObject *object,
GdaServerProvider *prov;
prov = GDA_SERVER_PROVIDER (object);
- if (prov->priv) {
- switch (param_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
- }
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+ switch (param_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
}
static void
gda_server_provider_get_property (GObject *object,
- guint param_id,
- G_GNUC_UNUSED GValue *value,
- GParamSpec *pspec) {
- GdaServerProvider *prov;
-
- prov = GDA_SERVER_PROVIDER (object);
- if (prov->priv) {
- switch (param_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
- }
+ guint param_id,
+ G_GNUC_UNUSED GValue *value,
+ GParamSpec *pspec) {
+ GdaServerProvider *prov;
+
+ prov = GDA_SERVER_PROVIDER (object);
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+ switch (param_id) {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
}
/**
@@ -2155,6 +2129,8 @@ _gda_server_provider_open_connection (GdaServerProvider *provider, GdaConnection
g_return_val_if_fail (! gda_connection_is_opened (cnc), TRUE);
g_return_val_if_fail (params, FALSE);
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
+
if (out_job_id)
*out_job_id = 0;
g_return_val_if_fail ((cb_func && out_job_id) || (!cb_func && !out_job_id), FALSE);
@@ -2184,8 +2160,8 @@ _gda_server_provider_open_connection (GdaServerProvider *provider, GdaConnection
return FALSE;
}
- if (!provider->priv->jobs_hash)
- provider->priv->jobs_hash = g_hash_table_new_full (g_int_hash, g_int_equal,
+ if (!priv->jobs_hash)
+ priv->jobs_hash = g_hash_table_new_full (g_int_hash, g_int_equal,
NULL, (GDestroyNotify)
worker_data_free);
}
@@ -2218,7 +2194,7 @@ _gda_server_provider_open_connection (GdaServerProvider *provider, GdaConnection
wd->job_type = JOB_OPEN_CONNECTION;
wd->job_data = (gpointer) jdata;
wd->job_data_destroy_func = (GDestroyNotify) WorkerOpenConnectionData_free;
- g_hash_table_insert (provider->priv->jobs_hash, & wd->job_id, wd);
+ g_hash_table_insert (priv->jobs_hash, & wd->job_id, wd);
*out_job_id = job_id;
return TRUE; /* no error, LOCK on CNC is kept */
}
@@ -3873,9 +3849,10 @@ _gda_server_provider_xa_recover (GdaServerProvider *provider, GdaConnection *cnc
static void
server_provider_job_done_callback (GdaWorker *worker, guint job_id, gpointer result, GError *error,
GdaServerProvider *provider)
{
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (provider);
WorkerData *wd = NULL;
- if (provider->priv->jobs_hash)
- wd = g_hash_table_lookup (provider->priv->jobs_hash, &job_id);
+ if (priv->jobs_hash)
+ wd = g_hash_table_lookup (priv->jobs_hash, &job_id);
g_assert (wd);
switch (wd->job_type) {
@@ -3891,5 +3868,429 @@ server_provider_job_done_callback (GdaWorker *worker, guint job_id, gpointer res
g_assert_not_reached ();
}
- g_hash_table_remove (provider->priv->jobs_hash, &job_id); /* will call worker_data_free() */
+ g_hash_table_remove (priv->jobs_hash, &job_id); /* will call worker_data_free() */
+}
+
+/* Code from gda-server-provider-extra.c */
+
+/**
+ * gda_server_provider_internal_get_parser:
+ * @prov: a #GdaServerProvider
+ *
+ * This is a factory method to get a unique instance of a #GdaSqlParser object
+ * for each #GdaServerProvider object
+ * Don't unref it.
+ *
+ * Returns: (transfer none): a #GdaSqlParser
+ */
+GdaSqlParser *
+gda_server_provider_internal_get_parser (GdaServerProvider *prov)
+{
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+ g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
+ if (priv->parser)
+ return priv->parser;
+ priv->parser = gda_server_provider_create_parser (prov, NULL);
+ if (!priv->parser)
+ priv->parser = gda_sql_parser_new ();
+ return priv->parser;
+}
+
+/**
+ * gda_server_provider_perform_operation_default:
+ * @provider: a #GdaServerProvider object
+ * @cnc: (allow-none): a #GdaConnection object which will be used to perform an action, or %NULL
+ * @op: a #GdaServerOperation object
+ * @error: a place to store an error, or %NULL
+ *
+ * Performs the operation described by @op, using the SQL from the rendering of the operation
+ *
+ * Returns: %TRUE if no error occurred
+ */
+gboolean
+gda_server_provider_perform_operation_default (GdaServerProvider *provider, GdaConnection *cnc,
+ GdaServerOperation *op, GError **error)
+{
+ gchar *sql;
+ GdaBatch *batch;
+ const GSList *list;
+ gboolean retval = TRUE;
+
+ sql = gda_server_provider_render_operation (provider, cnc, op, error);
+ if (!sql)
+ return FALSE;
+
+ GdaSqlParser *parser;
+ parser = gda_server_provider_internal_get_parser (provider); /* no ref held! */
+ batch = gda_sql_parser_parse_string_as_batch (parser, sql, NULL, error);
+ g_free (sql);
+ if (!batch)
+ return FALSE;
+
+ for (list = gda_batch_get_statements (batch); list; list = list->next) {
+ if (gda_connection_statement_execute_non_select (cnc, GDA_STATEMENT (list->data), NULL, NULL,
error) == -1) {
+ retval = FALSE;
+ break;
+ }
+ }
+ g_object_unref (batch);
+
+ return retval;
+}
+
+/**
+ * gda_server_provider_handler_use_default:
+ * @provider: a server provider
+ * @type: a #GType
+ *
+ * Reserved to database provider's implementations. This method defines a default data handler for
+ * @provider, and returns that #GdaDataHandler.
+ *
+ * Returns: (transfer none): a #GdaDataHandler, or %NULL
+ *
+ * Since: 5.2
+ */
+GdaDataHandler *
+gda_server_provider_handler_use_default (GdaServerProvider *provider, GType type)
+{
+ GdaDataHandler *dh = NULL;
+ g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (provider), NULL);
+ if ((type == G_TYPE_INT64) ||
+ (type == G_TYPE_UINT64) ||
+ (type == G_TYPE_DOUBLE) ||
+ (type == G_TYPE_INT) ||
+ (type == GDA_TYPE_NUMERIC) ||
+ (type == G_TYPE_FLOAT) ||
+ (type == GDA_TYPE_SHORT) ||
+ (type == GDA_TYPE_USHORT) ||
+ (type == G_TYPE_CHAR) ||
+ (type == G_TYPE_UCHAR) ||
+ (type == G_TYPE_UINT) ||
+ (type == G_TYPE_LONG) ||
+ (type == G_TYPE_ULONG)) {
+ dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
+ if (!dh) {
+ dh = gda_handler_numerical_new ();
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_INT64, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UINT64, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_DOUBLE, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_INT, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_NUMERIC, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_FLOAT, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_SHORT, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, GDA_TYPE_USHORT, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_CHAR, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UCHAR, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_UINT, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_ULONG, NULL);
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_LONG, NULL);
+ g_object_unref (dh);
+ }
+ }
+ else if ((type == GDA_TYPE_BINARY) ||
+ (type == GDA_TYPE_BLOB)) {
+ /* no default binary data handler, it's too database specific */
+ dh = NULL;
+ }
+ else if (type == G_TYPE_BOOLEAN) {
+ dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
+ if (!dh) {
+ dh = gda_handler_boolean_new ();
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_BOOLEAN, NULL);
+ g_object_unref (dh);
+ }
+ }
+ else if ((type == GDA_TYPE_TIME) ||
+ (type == G_TYPE_DATE_TIME) ||
+ (type == G_TYPE_DATE)) {
+ /* no default time related data handler, it's too database specific */
+ dh = NULL;
+ }
+ else if (type == G_TYPE_STRING) {
+ dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
+ if (!dh) {
+ dh = gda_handler_string_new ();
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_STRING, NULL);
+ g_object_unref (dh);
+ }
+ }
+ else if (type == G_TYPE_GTYPE) {
+ dh = gda_server_provider_handler_find (provider, NULL, type, NULL);
+ if (!dh) {
+ dh = gda_handler_type_new ();
+ gda_server_provider_handler_declare (provider, dh, NULL, G_TYPE_GTYPE, NULL);
+ g_object_unref (dh);
+ }
+ }
+
+ return dh;
+}
+
+static gboolean
+param_to_null_foreach (GdaSqlAnyPart *part, G_GNUC_UNUSED gpointer data, G_GNUC_UNUSED GError **error)
+{
+ if (part->type == GDA_SQL_ANY_EXPR) {
+ GdaSqlExpr *expr = (GdaSqlExpr*) part;
+ if (expr->param_spec) {
+ GType type = expr->param_spec->g_type;
+ gda_sql_param_spec_free (expr->param_spec);
+ expr->param_spec = NULL;
+
+ if (!expr->value) {
+ if (type != GDA_TYPE_NULL)
+ expr->value = gda_value_new_from_string ("0", type);
+ else
+ g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 0);
+ }
+ }
+ }
+ return TRUE;
+}
+
+/**
+ * gda_select_alter_select_for_empty:
+ * @stmt: a SELECT #GdaStatement
+ * @error: (allow-none): a place to store errors, or %NULL
+ *
+ * Creates a new #GdaStatement, selecting the same data as @stmt, but which always returns an
+ * empty (no row) data model. This is use dy database providers' implementations.
+ *
+ * Returns: (transfer full): a new #GdaStatement
+ */
+GdaStatement *
+gda_select_alter_select_for_empty (GdaStatement *stmt, G_GNUC_UNUSED GError **error)
+{
+ GdaStatement *estmt;
+ GdaSqlStatement *sqlst;
+ GdaSqlStatementSelect *stsel;
+
+ g_assert (gda_statement_get_statement_type (stmt) == GDA_SQL_STATEMENT_SELECT);
+ g_object_get (G_OBJECT (stmt), "structure", &sqlst, NULL);
+ g_assert (sqlst);
+
+ if (sqlst->sql) {
+ g_free (sqlst->sql);
+ sqlst->sql = NULL;
+ }
+ stsel = (GdaSqlStatementSelect*) sqlst->contents;
+
+ /* set the WHERE condition to "1 = 0" */
+ GdaSqlExpr *expr, *cond = stsel->where_cond;
+ GdaSqlOperation *op;
+ if (cond)
+ gda_sql_expr_free (cond);
+ cond = gda_sql_expr_new (GDA_SQL_ANY_PART (stsel));
+ stsel->where_cond = cond;
+ op = gda_sql_operation_new (GDA_SQL_ANY_PART (cond));
+ cond->cond = op;
+ op->operator_type = GDA_SQL_OPERATOR_TYPE_EQ;
+ expr = gda_sql_expr_new (GDA_SQL_ANY_PART (op));
+ op->operands = g_slist_prepend (NULL, expr);
+ g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 1);
+ expr = gda_sql_expr_new (GDA_SQL_ANY_PART (op));
+ op->operands = g_slist_prepend (op->operands, expr);
+ g_value_set_int ((expr->value = gda_value_new (G_TYPE_INT)), 0);
+
+ /* replace any selected field which has a parameter with NULL */
+ gda_sql_any_part_foreach (GDA_SQL_ANY_PART (stsel), (GdaSqlForeachFunc) param_to_null_foreach,
+ NULL, NULL);
+
+ /* create new statement */
+ estmt = g_object_new (GDA_TYPE_STATEMENT, "structure", sqlst, NULL);
+ gda_sql_statement_free (sqlst);
+ return estmt;
+}
+
+/**
+ * gda_server_provider_handler_find:
+ * @prov: a #GdaServerProvider
+ * @cnc: (allow-none): a #GdaConnection
+ * @g_type: a #GType
+ * @dbms_type: (allow-none): a database type
+ *
+ * Reserved to database provider's implementations: get the #GdaDataHandler associated to @prov
+ * for connection @cnc. You probably want to use gda_server_provider_get_data_handler_g_type().
+ *
+ * Returns: (transfer none): the requested #GdaDataHandler, or %NULL if none found
+ */
+GdaDataHandler *
+gda_server_provider_handler_find (GdaServerProvider *prov, GdaConnection *cnc,
+ GType g_type, const gchar *dbms_type)
+{
+ g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+ if (cnc)
+ g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL);
+
+ GdaDataHandler *dh;
+ GdaServerProviderHandlerInfo info;
+
+ info.cnc = cnc;
+ info.g_type = g_type;
+ info.dbms_type = (gchar *) dbms_type;
+ dh = g_hash_table_lookup (priv->data_handlers, &info);
+ if (!dh) {
+ /* try without the connection specification */
+ info.cnc = NULL;
+ dh = g_hash_table_lookup (priv->data_handlers, &info);
+ }
+
+ return dh;
+}
+
+void
+gda_server_provider_handler_declare (GdaServerProvider *prov, GdaDataHandler *dh,
+ GdaConnection *cnc,
+ GType g_type, const gchar *dbms_type)
+{
+ GdaServerProviderHandlerInfo *info;
+ g_return_if_fail (GDA_IS_SERVER_PROVIDER (prov));
+ g_return_if_fail (GDA_IS_DATA_HANDLER (dh));
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+
+ info = g_new (GdaServerProviderHandlerInfo, 1);
+ info->cnc = cnc;
+ info->g_type = g_type;
+ info->dbms_type = dbms_type ? g_strdup (dbms_type) : NULL;
+
+ g_hash_table_insert (priv->data_handlers, info, dh);
+ g_object_ref (dh);
+}
+
+static gboolean
+handlers_clear_for_cnc_fh (GdaServerProviderHandlerInfo *key, GdaDataHandler *value, GdaConnection *cnc)
+{
+ return (key->cnc == cnc) ? TRUE : FALSE;
+}
+
+/*
+ * Removes any #GdaServerProviderHandlerInfo associated to @cnc */
+void
+_gda_server_provider_handlers_clear_for_cnc (GdaServerProvider *prov, GdaConnection *cnc)
+{
+ g_return_if_fail (GDA_IS_SERVER_PROVIDER (prov));
+ g_return_if_fail (GDA_IS_CONNECTION (cnc));
+ GdaServerProviderPrivate *priv = gda_server_provider_get_instance_private (prov);
+ g_hash_table_foreach_remove (priv->data_handlers, (GHRFunc) handlers_clear_for_cnc_fh, cnc);
+}
+
+/**
+ * gda_server_provider_find_file:
+ * @prov: a #GdaServerProvider
+ * @inst_dir: directory where @prov is installed
+ * @filename: name of the file to find
+ *
+ * Finds the location of a @filename. This function should only be used by database provider's
+ * implementations
+ *
+ * Returns: (transfer full): the complete path to @filename, or %NULL if not found
+ */
+gchar *
+gda_server_provider_find_file (GdaServerProvider *prov, const gchar *inst_dir, const gchar *filename)
+{
+ gchar *file = NULL;
+ const gchar *dirname;
+
+ g_return_val_if_fail (GDA_IS_SERVER_PROVIDER (prov), NULL);
+ dirname = g_object_get_data (G_OBJECT (prov), "GDA_PROVIDER_DIR");
+ if (dirname)
+ file = g_build_filename (dirname, filename, NULL);
+
+ if (!file ||
+ (file && !g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))) {
+ g_free (file);
+ file = g_build_filename (inst_dir, filename, NULL);
+ if (! g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+ g_free (file);
+ file = NULL;
+ if (dirname) {
+ /* look in the parent dir, to handle the case where the lib is in a .libs dir
*/
+ file = g_build_filename (dirname, "..", filename, NULL);
+ if (! g_file_test (file, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
+ g_free (file);
+ file = NULL;
+ }
+ }
+ }
+ }
+
+ return file;
+}
+
+/**
+ * gda_server_provider_load_file_contents:
+ * @inst_dir: directory where the database provider has been installed
+ * @data_dir: DATA directory to look for ($prefix/share)
+ * @filename: name of the file to load
+ *
+ * Loads and returns the contents of @filename, which is searched in several places
+ * This function should only be used by database provider's
+ * implementations
+ *
+ * Returns: (transfer full): a new string containing @filename's contents, or %NULL if not found or if an
error occurred
+ */
+gchar *
+gda_server_provider_load_file_contents (const gchar *inst_dir, const gchar *data_dir, const gchar *filename)
+{
+ gchar *contents, *file;
+
+ file = g_build_filename (inst_dir, filename, NULL);
+
+ if (g_file_get_contents (file, &contents, NULL, NULL))
+ goto theend;
+
+ g_free (file);
+ file = g_build_filename (inst_dir, "..", filename, NULL);
+ if (g_file_get_contents (file, &contents, NULL, NULL))
+ goto theend;
+
+ g_free (file);
+ file = g_build_filename (data_dir, filename, NULL);
+ if (g_file_get_contents (file, &contents, NULL, NULL))
+ goto theend;
+
+ g_free (file);
+ file = g_build_filename (inst_dir, "..", "..", "..", "share", "libgda-6.0", filename, NULL);
+ if (g_file_get_contents (file, &contents, NULL, NULL))
+ goto theend;
+ contents = NULL;
+
+ theend:
+ g_free (file);
+ return contents;
+}
+
+/**
+ * gda_server_provider_load_resource_contents:
+ * @prov_name: the provider's name
+ * @resource: the name of the resource to load
+ *
+ * Loads and returns the contents of the specified resource.
+ * This function should only be used by database provider's implementations
+ *
+ * Returns: (transfer full): a new string containing the resource's contents, or %NULL if not found or if an
error occurred
+ *
+ * Since: 6.0
+ */
+gchar *
+gda_server_provider_load_resource_contents (const gchar *prov_name, const gchar *resource)
+{
+ g_return_val_if_fail (prov_name, NULL);
+ g_return_val_if_fail (resource, NULL);
+
+ gchar *rname;
+ rname = g_strdup_printf ("/spec/%s/%s", prov_name, resource);
+
+ GBytes *bytes;
+ bytes = g_resources_lookup_data (rname, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
+ g_free (rname);
+ if (!bytes) {
+ g_warning ("Resource: /spec/%s/%s, not found for provider", prov_name, resource);
+ return NULL;
+ }
+
+ gchar *retval;
+ retval = g_strdup ((const gchar*) g_bytes_get_data (bytes, NULL));
+ g_bytes_unref (bytes);
+ return retval;
}
diff --git a/libgda/gda-server-provider.h b/libgda/gda-server-provider.h
index 243ca2ad4..d182c4a99 100644
--- a/libgda/gda-server-provider.h
+++ b/libgda/gda-server-provider.h
@@ -39,10 +39,14 @@
G_BEGIN_DECLS
#define GDA_TYPE_SERVER_PROVIDER (gda_server_provider_get_type())
-#define GDA_SERVER_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, GDA_TYPE_SERVER_PROVIDER,
GdaServerProvider))
-#define GDA_SERVER_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, GDA_TYPE_SERVER_PROVIDER,
GdaServerProviderClass))
-#define GDA_IS_SERVER_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, GDA_TYPE_SERVER_PROVIDER))
-#define GDA_IS_SERVER_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GDA_TYPE_SERVER_PROVIDER))
+
+G_DECLARE_DERIVABLE_TYPE(GdaServerProvider, gda_server_provider, GDA, SERVER_PROVIDER, GObject)
+
+struct _GdaServerProviderClass {
+ GObjectClass parent_class;
+ gpointer functions_sets[8];
+};
+
/* error reporting */
extern GQuark gda_server_provider_error_quark (void);
@@ -66,17 +70,6 @@ typedef enum
GDA_SERVER_PROVIDER_FILE_NOT_FOUND_ERROR
} GdaServerProviderError;
-struct _GdaServerProvider {
- GObject object;
- GdaServerProviderPrivate *priv;
-};
-
-typedef struct _GdaServerProviderClassPrivate GdaServerProviderClassPrivate;
-struct _GdaServerProviderClass {
- GObjectClass parent_class;
- gpointer functions_sets[8];
-};
-
/**
* SECTION:gda-server-provider
* @short_description: Base class for all the DBMS providers
@@ -91,8 +84,6 @@ struct _GdaServerProviderClass {
* about how to implement the virtual methods.
*/
-GType gda_server_provider_get_type (void) G_GNUC_CONST;
-
/* provider information */
const gchar *gda_server_provider_get_name (GdaServerProvider *provider);
const gchar *gda_server_provider_get_version (GdaServerProvider *provider);
diff --git a/libgda/sqlite/gda-sqlite-provider.h b/libgda/sqlite/gda-sqlite-provider.h
index ade766912..24fb250e6 100644
--- a/libgda/sqlite/gda-sqlite-provider.h
+++ b/libgda/sqlite/gda-sqlite-provider.h
@@ -37,7 +37,6 @@ typedef struct _GdaSqliteProviderClass GdaSqliteProviderClass;
struct _GdaSqliteProvider {
GdaServerProvider provider;
};
-
struct _GdaSqliteProviderClass {
GdaServerProviderClass parent_class;
@@ -46,10 +45,10 @@ struct _GdaSqliteProviderClass {
void (*_gda_reserved2) (void);
};
+
G_BEGIN_DECLS
GType gda_sqlite_provider_get_type (void) G_GNUC_CONST;
-
G_END_DECLS
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]