static gboolean exec_statement (GdaConnection *cnc, GdaStatement *stmt, GdaSet *plist, GError **error) { GObject *exec_res; exec_res = gda_connection_statement_execute (cnc, stmt, plist, GDA_STATEMENT_MODEL_RANDOM_ACCESS, NULL, error); if (!exec_res) return FALSE; if (GDA_IS_DATA_MODEL (exec_res)) { g_print ("Query returned a GdaDataModel...\n"); gda_data_model_dump ((GdaDataModel*) exec_res, stdout); } else { if (GDA_IS_SET (exec_res)) { GSList *list; g_print ("Query returned a GdaSet:\n"); for (list = GDA_SET (exec_res)->holders; list; list = list->next) { gchar *str; str = gda_holder_get_value_str (GDA_HOLDER (list->data), NULL); g_print (" %s => %s\n", gda_holder_get_id (GDA_HOLDER (list->data)), str); g_free (str); } } else g_print ("Query returned a %s object\n", G_OBJECT_TYPE_NAME (exec_res)); } return TRUE; }
/** * gda_tree_mgr_select_new: * @cnc: a #GdaConnection object * @stmt: a #GdaStatement object representing a SELECT statement * @params: a #GdaSet object representing fixed parameters which are to be used when executing @stmt * * Creates a new #GdaTreeMgrSelect object which will add one tree node for each row in * the #GdaDataModel resulting from the execution of @stmt. * * Returns: (transfer full): a new #GdaTreeManager object * * Since: 4.2 */ GdaTreeManager* gda_tree_mgr_select_new (GdaConnection *cnc, GdaStatement *stmt, GdaSet *params) { g_return_val_if_fail (GDA_IS_CONNECTION (cnc), NULL); g_return_val_if_fail (GDA_IS_STATEMENT (stmt), NULL); g_return_val_if_fail (gda_statement_get_statement_type (stmt) == GDA_SQL_STATEMENT_SELECT, NULL); g_return_val_if_fail (!params || GDA_IS_SET (params), NULL); return (GdaTreeManager*) g_object_new (GDA_TYPE_TREE_MGR_SELECT, "connection", cnc, "statement", stmt, "params", params, NULL); }
/** * gda_repetitive_statement_append_set: * @rstmt: a #GdaRepetitiveStatement object * @values: a #GdaSet object with the values to be used * @make_copy: %TRUE if @values is copied, and %FALSE if @values is only ref'ed * * Specifies that @rstmt be executed one time with the values contained in @values. * * A new #GdaSet to be used as the @values argument can be obtained using * gda_repetitive_statement_get_template_set(). * * Returns: a new #GdaRepetitiveStatement object * * Since: 4.2 */ gboolean gda_repetitive_statement_append_set (GdaRepetitiveStatement *rstmt, GdaSet *values, gboolean make_copy) { GdaSet *set; g_return_val_if_fail (GDA_IS_REPETITIVE_STATEMENT(rstmt), FALSE); g_return_val_if_fail (GDA_IS_SET (values), FALSE); GdaRepetitiveStatementPrivate *priv = gda_repetitive_statement_get_instance_private (rstmt); if (make_copy) set = gda_set_copy (values); else set = g_object_ref (values); priv->values_sets = g_slist_prepend (priv->values_sets, set); return TRUE; }
/** * gda_tools_favorites_get_actions * @bfav: a #ToolsFavorites * @bcnc: a #BrowserConnection * @set: a #GdaSet * * Get a list of #ToolsFavoriteAction which can be executed with the data in @set. * * Returns: a new list of #ToolsFavoriteAction, free list with gda_tools_favorites_free_actions() */ GSList * gda_tools_favorites_get_actions (ToolsFavorites *bfav, BrowserConnection *bcnc, GdaSet *set) { GSList *fav_list, *list, *retlist = NULL; g_return_val_if_fail (GDA_TOOLS_IS_FAVORITES (bfav), NULL); g_return_val_if_fail (BROWSER_IS_CONNECTION (bcnc), NULL); g_return_val_if_fail (!set || GDA_IS_SET (set), NULL); fav_list = gda_tools_favorites_list (bfav, 0, GDA_TOOLS_FAVORITES_ACTIONS, -1, NULL); if (! fav_list) return NULL; for (list = fav_list; list; list = list->next) { ToolsFavoritesAttributes *fa = (ToolsFavoritesAttributes*) list->data; ToolsFavoritesAttributes qfa; if (! g_str_has_prefix (fa->contents, "QUERY")) { g_warning ("Malformed action contents '%s', please report error to " "http://bugzilla.gnome.org/ for the \"libgda\" product", fa->contents); continue; } if (gda_tools_favorites_get (bfav, atoi (fa->contents + 5), &qfa, NULL)) { GdaSet *params; GSList *plist; GdaBatch *batch; GdaStatement *stmt = NULL; GdaSqlParser *parser; const gchar *remain; const GSList *stmt_list; gint nb_bound = 0; parser = browser_connection_create_parser (bcnc); batch = gda_sql_parser_parse_string_as_batch (parser, qfa.contents, &remain, NULL); g_object_unref (parser); if (!batch) { gda_tools_favorites_reset_attributes (&qfa); continue; } stmt_list = gda_batch_get_statements (batch); for (plist = (GSList*) stmt_list; plist; plist = plist->next) { if (! gda_statement_is_useless (GDA_STATEMENT (plist->data))) { if (stmt) break; else stmt = g_object_ref (GDA_STATEMENT (plist->data)); } } g_object_unref (batch); if (!stmt || plist) { gda_tools_favorites_reset_attributes (&qfa); continue; } if (! gda_statement_get_parameters (stmt, ¶ms, NULL) || !params) { g_object_unref (stmt); gda_tools_favorites_reset_attributes (&qfa); continue; } browser_connection_define_ui_plugins_for_stmt (bcnc, stmt, params); for (plist = params->holders; plist; plist = plist->next) { /* try to find holder in @set */ GdaHolder *req_holder, *in_holder; req_holder = GDA_HOLDER (plist->data); in_holder = gda_set_get_holder (set, gda_holder_get_id (req_holder)); if (in_holder && gda_holder_set_bind (req_holder, in_holder, NULL)) { /* bound this holder to the oune found */ nb_bound++; } } if (nb_bound > 0) { /* at least 1 holder was found=> keep the action */ ToolsFavoriteAction *act; act = g_new0 (ToolsFavoriteAction, 1); retlist = g_slist_insert_sorted (retlist, act, (GCompareFunc) actions_sort_func); act->params = g_object_ref (params); act->id = fa->id; act->name = g_strdup (fa->name); act->stmt = g_object_ref (stmt); act->nb_bound = nb_bound; /*g_print ("Action identified: ID=%d Bound=%d name=[%s] SQL=[%s]\n", act->id, act->nb_bound, act->name, qfa.contents);*/ } g_object_unref (stmt); g_object_unref (params); gda_tools_favorites_reset_attributes (&qfa); } } gda_tools_favorites_free_list (fav_list); return retlist; }