[gnome-db] Proveedores GDA para Firebird y PostgreSQL



Hola,

Quiero consultar las características que soporta un proveedor sin
tener que estar conectado. Para ello llamo al método "supports"
cargando previamente el módulo del proveedor. El problema es que casi
todos los proveedores me permiten pasar NULL el la conexión excepto el
Firebird:

/* supports handler for the GdaFirebirdProvider class */
static gboolean
gda_firebird_provider_supports (GdaServerProvider *provider,
                                GdaConnection *cnc,
                                GdaConnectionFeature feature)
{
        g_return_val_if_fail (GDA_IS_FIREBIRD_PROVIDER (provider), FALSE);
>>>  g_return_val_if_fail (GDA_IS_CONNECTION (cnc), FALSE);

        switch (feature) {
                case GDA_CONNECTION_FEATURE_VIEWS:
                case GDA_CONNECTION_FEATURE_SQL:
                case GDA_CONNECTION_FEATURE_TRANSACTIONS:
                case GDA_CONNECTION_FEATURE_AGGREGATES:
                        return TRUE;
                case GDA_CONNECTION_FEATURE_TRIGGERS:
                case GDA_CONNECTION_FEATURE_INDEXES:
                case GDA_CONNECTION_FEATURE_PROCEDURES:
                case GDA_CONNECTION_FEATURE_USERS:
                case GDA_CONNECTION_FEATURE_BLOBS:
                default:
                        break;
        }

        return FALSE;
}

¿Existe la posibilidad que esta línea desaparezca en futuras
versiones?, pues realmente "cnc" no se usa aquí. Y en general este
método se accede mediante el API de GDA que ya hace esta comprobación
(gda_connections_supports).

Otro problema que veo es que el proveedor de PostgreSQL NO hace esta
verificación:

static gboolean gda_postgres_provider_supports (GdaServerProvider *provider,
                                                GdaConnection *cnc,
                                                GdaConnectionFeature feature)
{
        GdaPostgresProvider *pgprv = (GdaPostgresProvider *) provider;
        GdaPostgresConnectionData *priv_data;

        g_return_val_if_fail (GDA_IS_POSTGRES_PROVIDER (pgprv), FALSE);

        switch (feature) {
        case GDA_CONNECTION_FEATURE_AGGREGATES :
        case GDA_CONNECTION_FEATURE_INDEXES :
        case GDA_CONNECTION_FEATURE_INHERITANCE :
        case GDA_CONNECTION_FEATURE_PROCEDURES :
        case GDA_CONNECTION_FEATURE_SEQUENCES :
        case GDA_CONNECTION_FEATURE_SQL :
        case GDA_CONNECTION_FEATURE_TRANSACTIONS :
        case GDA_CONNECTION_FEATURE_TRIGGERS :
        case GDA_CONNECTION_FEATURE_USERS :
        case GDA_CONNECTION_FEATURE_VIEWS :
        case GDA_CONNECTION_FEATURE_BLOBS :
                return TRUE;
        case GDA_CONNECTION_FEATURE_NAMESPACES :
                priv_data = g_object_get_data (G_OBJECT (cnc),
OBJECT_DATA_POSTGRES_HANDLE);
                if (priv_data->version_float >= 7.3)
                        return TRUE;
        default :
                break;
        }

        return FALSE;
}

Sin embargo la usa para consultar la característica
GDA_CONNECTION_FEATURE_NAMESPACES. La pregunta es: ¿Existe la
posibilidad que si en algún momento se agregue este comprobación se
haga sólo justo antes de usarla?, es decir justo antes de la línea
"priv_data = g_object_get_data (G_OBJECT (cnc)".

Por último. Luego de cargar el módulo, llamo al método
"plugin_create_provider" para crear una instancia del proveedor y
poder consultalo. El problema es que luego de hacer esto quiero
descargar el módulo con g_modulo_unload pero el tipo GLib
"GdaXXXProvider" queda registrado, hay alguna forma de
"desregistrarlo"?.

Gracias
-- 
Juan Manuel Mouriz
Buenos Aires
Argentina


-- 
Juan Manuel Mouriz
Buenos Aires
Argentina



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