GdaVconnectionHub

GdaVconnectionHub — Virtual connection which bind together connections

Synopsis

struct              GdaVconnectionHub;
void                (*GdaVConnectionHubFunc)            (GdaConnection *cnc,
                                                         const gchar *ns,
                                                         gpointer data);
gboolean            gda_vconnection_hub_add             (GdaVconnectionHub *hub,
                                                         GdaConnection *cnc,
                                                         const gchar *ns,
                                                         GError **error);
gboolean            gda_vconnection_hub_remove          (GdaVconnectionHub *hub,
                                                         GdaConnection *cnc,
                                                         GError **error);
GdaConnection *     gda_vconnection_hub_get_connection  (GdaVconnectionHub *hub,
                                                         const gchar *ns);
void                gda_vconnection_hub_foreach         (GdaVconnectionHub *hub,
                                                         GdaVConnectionHubFunc func,
                                                         gpointer data);

Object Hierarchy

  GObject
   +----GdaConnection
         +----GdaVirtualConnection
               +----GdaVconnectionDataModel
                     +----GdaVconnectionHub

Implemented Interfaces

GdaVconnectionHub implements GdaLockable.

Description

The GdaVconnectionHub object "binds" together the tables from other (opened) connections to make it possible to run SQL queries on data from several connections at once.

A GdaVconnectionHub connection can bind several other connections, each separated in its own namespace (which is specified when adding a connection using gda_vconnection_hub_add()).

For example if a connection A has two tables 'table_1' and 'table_2', then after gda_vconnection_hub_add() has been called with A as connection argument and with a "c1" namespace, then in the corresponding GdaVconnectionHub connection, table 'table_1' must be referred to as 'c1.table_1' and 'table_2' must be referred to as 'c1.table_2'.

Note that virtual connections have some inherent limitations [3]due to the implementation.

Details

struct GdaVconnectionHub

struct GdaVconnectionHub;


GdaVConnectionHubFunc ()

void                (*GdaVConnectionHubFunc)            (GdaConnection *cnc,
                                                         const gchar *ns,
                                                         gpointer data);


gda_vconnection_hub_add ()

gboolean            gda_vconnection_hub_add             (GdaVconnectionHub *hub,
                                                         GdaConnection *cnc,
                                                         const gchar *ns,
                                                         GError **error);

Make all the tables of cnc appear as tables (of the same name) in the hub connection. If the ns is not NULL, then within hub, the tables will be accessible using the 'ns.table_name' notation.

Within any instance of hub, there can be only one added connection where ns is NULL.

hub :

a GdaVconnectionHub connection

cnc :

a GdaConnection

ns :

a namespace, or NULL. [allow-none]

error :

a place to store errors, or NULL

Returns :

TRUE if no error occurred

gda_vconnection_hub_remove ()

gboolean            gda_vconnection_hub_remove          (GdaVconnectionHub *hub,
                                                         GdaConnection *cnc,
                                                         GError **error);

Remove all the tables in hub representing cnc's tables.

hub :

a GdaVconnectionHub connection

cnc :

a GdaConnection

error :

a place to store errors, or NULL

Returns :

TRUE if no error occurred

gda_vconnection_hub_get_connection ()

GdaConnection *     gda_vconnection_hub_get_connection  (GdaVconnectionHub *hub,
                                                         const gchar *ns);

Find the GdaConnection object in hub associated to the ns name space

hub :

a GdaVconnectionHub connection

ns :

a name space, or NULL. [allow-none]

Returns :

the GdaConnection, or NULL if no connection is associated to ns

gda_vconnection_hub_foreach ()

void                gda_vconnection_hub_foreach         (GdaVconnectionHub *hub,
                                                         GdaVConnectionHubFunc func,
                                                         gpointer data);

Call func for each GdaConnection represented in hub.

hub :

a GdaVconnectionHub connection

func :

a GdaVconnectionDataModelFunc function pointer

data :

data to pass to func calls


[3] As virtual connections are implemented using SQLite's virtual table features, the SQL dialect which can be used is the SQLite one (see the SQL as Understood By SQLite page), and there are a few limitations inherent to this implementation (see link for more information).

Also note that it is possible to create temporary tables in virtual connections using "CREATE TEMP TABLE..." statements, but the contents of such tables will be lost once the connection is closed.