/* GDA library * Copyright (C) 1998 - 2005 The GNOME Foundation. * * AUTHORS: * Rodrigo Moya * Bas Driessen * Vivien Malerba * * This Library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this Library; see the file COPYING.LIB. If not, * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined(__gda_server_provider_h__) # define __gda_server_provider_h__ #include #include #include #include #include #include #include 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)) /* * struct to hold any information specific to the provider used */ struct _GdaServerProviderInfo { gchar *provider_name; /* equal to the return of gda_connection_get_provider() */ /* * TRUE if all comparisons of names can be done on the lower case versions of the objects names */ gboolean is_case_insensitive; /* * TRUE to suppose that there are implicit casts available for data types which have * the same gda type */ gboolean implicit_data_types_casts; /* * TRUE if writing "... FROM mytable AS alias..." is ok, and FALSE if we need to write this as * "... FROM mytable alias..." */ gboolean alias_needs_as_keyword; }; struct _GdaServerProvider { GObject object; GdaServerProviderPrivate *priv; }; struct _GdaServerProviderClass { GObjectClass parent_class; /* signals */ void (* last_connection_gone) (GdaServerProvider *provider); /* virtual methods */ /* provider information */ const gchar *(* get_version) (GdaServerProvider *provider); const gchar *(* get_server_version) (GdaServerProvider *provider, GdaConnection *cnc); GdaServerProviderInfo *(* get_info) (GdaServerProvider *provider, GdaConnection *cnc); gboolean (* supports) (GdaServerProvider *provider, GdaConnection *cnc, GdaConnectionFeature feature); GdaDataModel *(* get_schema) (GdaServerProvider *provider, GdaConnection *cnc, GdaConnectionSchema schema, GdaParameterList *params); /* types and values manipulation */ GdaDataHandler *(* get_data_handler) (GdaServerProvider *provider, GdaConnection *cnc, GdaValueType gda_type, const gchar *dbms_type); GdaValue *(* string_to_value) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *string, GdaValueType prefered_type, gchar **dbms_type); const gchar *(*get_def_dbms_type) (GdaServerProvider *provider, GdaConnection *cnc, GdaValueType gda_type); /* connections management */ gboolean (* open_connection) (GdaServerProvider *provider, GdaConnection *cnc, GdaQuarkList *params, const gchar *username, const gchar *password); gboolean (* reset_connection) (GdaServerProvider *provider, GdaConnection *cnc); gboolean (* close_connection) (GdaServerProvider *provider, GdaConnection *cnc); const gchar *(* get_database) (GdaServerProvider *provider, GdaConnection *cnc); gboolean (* change_database) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); /* actions with parameters */ gchar *(* get_specs) (GdaServerProvider *provider, GdaClientSpecsType type); gboolean (* perform_action_params) (GdaServerProvider *provider, GdaParameterList *params, GdaClientSpecsType type, GError **error); /* database creation and destruction */ gboolean (* create_database_cnc) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); gboolean (* drop_database_cnc) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); /* tables creation and destroying */ gboolean (* create_table) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *table_name, const GList *attributes_list, const GList *index_list); gboolean (* drop_table) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *table_name); /* index creation and destroying */ gboolean (* create_index) (GdaServerProvider *provider, GdaConnection *cnc, const GdaDataModelIndex *index, const gchar *table_name); gboolean (* drop_index) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *index_name, gboolean primary_key, const gchar *table_name); /* commands */ GList *(* execute_command) (GdaServerProvider *provider, GdaConnection *cnc, GdaCommand *cmd, GdaParameterList *params); char *(* get_last_insert_id) (GdaServerProvider *provider, GdaConnection *cnc, GdaDataModel *recset); /* transactions */ gboolean (* begin_transaction) (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); gboolean (* commit_transaction) (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); gboolean (* rollback_transaction) (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); /* blobs */ GdaBlob *(* create_blob) (GdaServerProvider *provider, GdaConnection *cnc); GdaBlob *(* fetch_blob) (GdaServerProvider *provider, GdaConnection *cnc, const gchar *sql_id); }; GType gda_server_provider_get_type (void); /* provider information */ const gchar *gda_server_provider_get_version (GdaServerProvider *provider); const gchar *gda_server_provider_get_server_version (GdaServerProvider *provider, GdaConnection *cnc); GdaServerProviderInfo *gda_server_provider_get_info (GdaServerProvider *provider, GdaConnection *cnc); gboolean gda_server_provider_supports (GdaServerProvider *provider, GdaConnection *cnc, GdaConnectionFeature feature); GdaDataModel *gda_server_provider_get_schema (GdaServerProvider *provider, GdaConnection *cnc, GdaConnectionSchema schema, GdaParameterList *params, GError **error); /* types and values manipulation */ GdaDataHandler *gda_server_provider_get_data_handler_gda (GdaServerProvider *provider, GdaConnection *cnc, GdaValueType for_type); GdaDataHandler *gda_server_provider_get_data_handler_dbms (GdaServerProvider *provider, GdaConnection *cnc, const gchar *for_type); GdaValue *gda_server_provider_string_to_value (GdaServerProvider *provider, GdaConnection *cnc, const gchar *string, GdaValueType prefered_type, gchar **dbms_type); gchar *gda_server_provider_value_to_sql_string (GdaServerProvider *provider, GdaConnection *cnc, GdaValue *from); const gchar *gda_server_provider_get_default_dbms_type (GdaServerProvider *provider, GdaConnection *cnc, GdaValueType gda_type); /* connections management */ gboolean gda_server_provider_open_connection (GdaServerProvider *provider, GdaConnection *cnc, GdaQuarkList *params, const gchar *username, const gchar *password); gboolean gda_server_provider_reset_connection (GdaServerProvider *provider, GdaConnection *cnc); gboolean gda_server_provider_close_connection (GdaServerProvider *provider, GdaConnection *cnc); const gchar *gda_server_provider_get_database (GdaServerProvider *provider, GdaConnection *cnc); gboolean gda_server_provider_change_database (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); /* actions with parameters */ gchar *gda_server_provider_get_specs (GdaServerProvider *provider, GdaClientSpecsType action_type); gboolean gda_server_provider_perform_action_params (GdaServerProvider *provider, GdaParameterList *params, GdaClientSpecsType action_type, GError **error); gboolean gda_server_provider_create_database_cnc (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); gboolean gda_server_provider_drop_database_cnc (GdaServerProvider *provider, GdaConnection *cnc, const gchar *name); gboolean gda_server_provider_create_table (GdaServerProvider *provider, GdaConnection *cnc, const gchar *table_name, const GList *attributes_list, const GList *index_list); gboolean gda_server_provider_drop_table (GdaServerProvider *provider, GdaConnection *cnc, const gchar *table_name); gboolean gda_server_provider_create_index (GdaServerProvider *provider, GdaConnection *cnc, const GdaDataModelIndex *index, const gchar *table_name); gboolean gda_server_provider_drop_index (GdaServerProvider *provider, GdaConnection *cnc, const gchar *index_name, gboolean primary_key, const gchar *table_name); GList *gda_server_provider_execute_command (GdaServerProvider *provider, GdaConnection *cnc, GdaCommand *cmd, GdaParameterList *params); gchar *gda_server_provider_get_last_insert_id (GdaServerProvider *provider, GdaConnection *cnc, GdaDataModel *recset); gboolean gda_server_provider_begin_transaction (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); gboolean gda_server_provider_commit_transaction (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); gboolean gda_server_provider_rollback_transaction (GdaServerProvider *provider, GdaConnection *cnc, GdaTransaction *xaction); GdaBlob *gda_server_provider_create_blob (GdaServerProvider *provider, GdaConnection *cnc); GdaBlob *gda_server_provider_fetch_blob_by_id (GdaServerProvider *provider, GdaConnection *cnc, const gchar *sql_id); G_END_DECLS #endif