1 /* 2 * Copyright (C) 2009 - 2012 Vivien Malerba <malerba@gnome-db.org> 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 2 7 * of the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 17 */ 18 19 #ifndef __BROWSER_CONNECTION_H_ 20 #define __BROWSER_CONNECTION_H_ 21 22 #include <libgda/libgda.h> 23 #include "../tools-favorites.h" 24 #include "decl.h" 25 #include "support.h" 26 #ifdef HAVE_LDAP 27 #include <libgda/sqlite/virtual/gda-ldap-connection.h> 28 #endif 29 30 G_BEGIN_DECLS 31 32 #define BROWSER_TYPE_CONNECTION (browser_connection_get_type()) 33 #define BROWSER_CONNECTION(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, browser_connection_get_type(), BrowserConnection) 34 #define BROWSER_CONNECTION_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, browser_connection_get_type (), BrowserConnectionClass) 35 #define BROWSER_IS_CONNECTION(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, browser_connection_get_type ()) 36 37 typedef struct _BrowserConnectionClass BrowserConnectionClass; 38 typedef struct _BrowserConnectionPrivate BrowserConnectionPrivate; 39 40 /* struct for the object's data */ 41 struct _BrowserConnection 42 { 43 GObject object; 44 BrowserConnectionPrivate *priv; 45 }; 46 47 /* struct for the object's class */ 48 struct _BrowserConnectionClass 49 { 50 GObjectClass parent_class; 51 52 /* signals */ 53 void (*busy) (BrowserConnection *bcnc, gboolean is_busy, const gchar *reason); 54 void (*meta_changed) (BrowserConnection *bcnc, GdaMetaStruct *mstruct); 55 void (*favorites_changed) (BrowserConnection *bcnc); 56 void (*transaction_status_changed) (BrowserConnection *bcnc); 57 void (*table_column_pref_changed) (BrowserConnection *bcnc, GdaMetaTable *table, 58 GdaMetaTableColumn *column, 59 const gchar *attr_name, const gchar *value); 60 }; 61 62 /** 63 * SECTION:browser-connection 64 * @short_description: An opened connection 65 * @title: BrowserConnection 66 * @stability: Stable 67 * @see_also: 68 * 69 * The #BrowserConnection object wraps a #GdaConnection with some 70 * additionnal features. The wrapped #GdaConnection is only accessible from within 71 * the #BrowserConnection object, so to use a connection, you have to use the 72 * #BrowserConnection's methods. 73 */ 74 75 GType browser_connection_get_type (void) G_GNUC_CONST; 76 77 BrowserConnection *browser_connection_new (GdaConnection *cnc); 78 const gchar *browser_connection_get_name (BrowserConnection *bcnc); 79 gchar *browser_connection_get_long_name (BrowserConnection *bcnc); 80 const GdaDsnInfo *browser_connection_get_information (BrowserConnection *bcnc); 81 82 gboolean browser_connection_is_busy (BrowserConnection *bcnc, gchar **out_reason); 83 gboolean browser_connection_is_virtual (BrowserConnection *bcnc); 84 void browser_connection_update_meta_data (BrowserConnection *bcnc); 85 void browser_connection_meta_data_changed (BrowserConnection *bcnc); 86 GdaMetaStruct *browser_connection_get_meta_struct (BrowserConnection *bcnc); 87 GdaMetaStore *browser_connection_get_meta_store (BrowserConnection *bcnc); 88 const gchar *browser_connection_get_dictionary_file (BrowserConnection *bcnc); 89 90 ToolsFavorites *browser_connection_get_favorites (BrowserConnection *bcnc); 91 92 gchar **browser_connection_get_completions (BrowserConnection *bcnc, const gchar *sql, 93 gint start, gint end); 94 95 /** 96 * BrowserConnectionJobCallback: 97 * @bcnc: the #BrowserConnection 98 * @out_result: the execution result 99 * @data: a pointer passed when calling the execution function such as browser_connection_ldap_describe_entry() 100 * @error: the error returned, if any 101 * 102 * Callback function called when a job (not a statement execution job) is finished. 103 * the out_result is not used by the BrowserConnection anymore after this function has been 104 * called, so you need to keep it or free it. 105 * 106 * @error should not be modified. 107 */ 108 typedef void (*BrowserConnectionJobCallback) (BrowserConnection *bcnc, 109 gpointer out_result, gpointer data, GError *error); 110 #define BROWSER_CONNECTION_JOB_CALLBACK(x) ((BrowserConnectionJobCallback)(x)) 111 void browser_connection_job_cancel (BrowserConnection *bcnc, guint job_id); 112 113 /* 114 * statements's manipulations 115 */ 116 GdaSqlParser *browser_connection_create_parser (BrowserConnection *bcnc); 117 gchar *browser_connection_render_pretty_sql (BrowserConnection *bcnc, 118 GdaStatement *stmt); 119 guint browser_connection_execute_statement (BrowserConnection *bcnc, 120 GdaStatement *stmt, 121 GdaSet *params, 122 GdaStatementModelUsage model_usage, 123 gboolean need_last_insert_row, 124 GError **error); 125 guint browser_connection_rerun_select (BrowserConnection *bcnc, 126 GdaDataModel *model, 127 GError **error); 128 GObject *browser_connection_execution_get_result (BrowserConnection *bcnc, 129 guint exec_id, 130 GdaSet **last_insert_row, GError **error); 131 gboolean browser_connection_normalize_sql_statement(BrowserConnection *bcnc, 132 GdaSqlStatement *sqlst, GError **error); 133 gboolean browser_connection_check_sql_statement_validify (BrowserConnection *bcnc, 134 GdaSqlStatement *sqlst, GError **error); 135 /** 136 * BrowserConnectionExecuteCallback 137 * 138 * Callback function called by browser_connection_execute_statement_cb(). If you need to keep 139 * some of the arguments for a later usage, you need to ref/copy them. 140 * 141 * None of the passed arguments must not be modified 142 */ 143 typedef void (*BrowserConnectionExecuteCallback) (BrowserConnection *bcnc, 144 guint exec_id, 145 GObject *out_result, 146 GdaSet *out_last_inserted_row, GError *error, 147 gpointer data); 148 149 guint browser_connection_execute_statement_cb (BrowserConnection *bcnc, 150 GdaStatement *stmt, 151 GdaSet *params, 152 GdaStatementModelUsage model_usage, 153 gboolean need_last_insert_row, 154 BrowserConnectionExecuteCallback callback, 155 gpointer data, 156 GError **error); 157 guint browser_connection_rerun_select_cb (BrowserConnection *bcnc, 158 GdaDataModel *model, 159 BrowserConnectionExecuteCallback callback, 160 gpointer data, 161 GError **error); 162 163 164 /* 165 * transactions 166 */ 167 GdaTransactionStatus *browser_connection_get_transaction_status (BrowserConnection *bcnc); 168 gboolean browser_connection_begin (BrowserConnection *bcnc, GError **error); 169 gboolean browser_connection_commit (BrowserConnection *bcnc, GError **error); 170 gboolean browser_connection_rollback (BrowserConnection *bcnc, GError **error); 171 172 /* 173 * preferences 174 */ 175 #define BROWSER_CONNECTION_COLUMN_PLUGIN "PLUGIN" 176 gboolean browser_connection_set_table_column_attribute (BrowserConnection *bcnc, 177 GdaMetaTable *table, 178 GdaMetaTableColumn *column, 179 const gchar *attr_name, 180 const gchar *value, GError **error); 181 gchar *browser_connection_get_table_column_attribute (BrowserConnection *bcnc, 182 GdaMetaTable *table, 183 GdaMetaTableColumn *column, 184 const gchar *attr_name, 185 GError **error); 186 187 void browser_connection_define_ui_plugins_for_batch(BrowserConnection *bcnc, 188 GdaBatch *batch, GdaSet *params); 189 void browser_connection_define_ui_plugins_for_stmt (BrowserConnection *bcnc, 190 GdaStatement *stmt, GdaSet *params); 191 192 /* 193 * Variables used at various places and for which a copy of the last recent value 194 * is stored in the BrowserConnection object 195 */ 196 void browser_connection_keep_variables (BrowserConnection *bcnc, GdaSet *set); 197 void browser_connection_load_variables (BrowserConnection *bcnc, GdaSet *set); 198 199 /* 200 * LDAP 201 */ 202 gboolean browser_connection_is_ldap (BrowserConnection *bcnc); 203 #ifdef HAVE_LDAP 204 const gchar *browser_connection_ldap_get_base_dn (BrowserConnection *bcnc); 205 guint browser_connection_ldap_search (BrowserConnection *bcnc, 206 const gchar *base_dn, const gchar *filter, 207 const gchar *attributes, GdaLdapSearchScope scope, 208 BrowserConnectionJobCallback callback, 209 gpointer cb_data, GError **error); 210 guint browser_connection_ldap_describe_entry (BrowserConnection *bcnc, const gchar *dn, 211 BrowserConnectionJobCallback callback, 212 gpointer cb_data, GError **error); 213 guint browser_connection_ldap_get_entry_children (BrowserConnection *bcnc, const gchar *dn, 214 gchar **attributes, 215 BrowserConnectionJobCallback callback, 216 gpointer cb_data, GError **error); 217 guint browser_connection_ldap_icon_for_dn (BrowserConnection *bcnc, const gchar *dn, 218 BrowserConnectionJobCallback callback, 219 gpointer cb_data, GError **error); 220 GdkPixbuf *browser_connection_ldap_icon_for_class (GdaLdapAttribute *objectclass); 221 gboolean browser_connection_describe_table (BrowserConnection *bcnc, const gchar *table_name, 222 const gchar **out_base_dn, const gchar **out_filter, 223 const gchar **out_attributes, 224 GdaLdapSearchScope *out_scope, GError **error); 225 226 GdaLdapClass *browser_connection_get_class_info (BrowserConnection *bcnc, const gchar *classname); 227 const GSList *browser_connection_get_top_classes (BrowserConnection *bcnc); 228 229 gboolean browser_connection_declare_table (BrowserConnection *bcnc, 230 const gchar *table_name, 231 const gchar *base_dn, 232 const gchar *filter, 233 const gchar *attributes, 234 GdaLdapSearchScope scope, 235 GError **error); 236 gboolean browser_connection_undeclare_table (BrowserConnection *bcnc, 237 const gchar *table_name, 238 GError **error); 239 240 #endif 241 242 G_END_DECLS 243 244 #endif 245