![]() |
![]() |
![]() |
GNOME Data Access 4 manual | ![]() |
---|---|---|---|---|
Top | Description | Object Hierarchy | Implemented Interfaces |
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
);
GObject +----GdaConnection +----GdaVirtualConnection +----GdaVconnectionDataModel +----GdaVconnectionHub
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.
void (*GdaVConnectionHubFunc) (GdaConnection *cnc
,const gchar *ns
,gpointer data
);
|
|
|
|
|
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
.
|
a GdaVconnectionHub connection |
|
a GdaConnection |
|
a namespace, or NULL
|
|
a place to store errors, or NULL
|
Returns : |
TRUE if no error occurred |
gboolean gda_vconnection_hub_remove (GdaVconnectionHub *hub
,GdaConnection *cnc
,GError **error
);
Remove all the tables in hub
representing cnc
's tables.
|
a GdaVconnectionHub connection |
|
a GdaConnection |
|
a place to store errors, or NULL
|
Returns : |
TRUE if no error occurred |
GdaConnection * gda_vconnection_hub_get_connection (GdaVconnectionHub *hub
,const gchar *ns
);
Find the GdaConnection object in hub
associated to the ns
name space
|
a GdaVconnectionHub connection |
|
a name space, or NULL
|
Returns : |
the GdaConnection, or NULL if no connection is associated to ns
|
void gda_vconnection_hub_foreach (GdaVconnectionHub *hub
,GdaVConnectionHubFunc func
,gpointer data
);
Call func
for each GdaConnection represented in hub
.
|
a GdaVconnectionHub connection |
|
a GdaVconnectionDataModelFunc function pointer |
|
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.