/** * gda_server_provider_perform_operation_default: * @provider: a #GdaServerProvider object * @cnc: (allow-none): a #GdaConnection object which will be used to perform an action, or %NULL * @op: a #GdaServerOperation object * @error: a place to store an error, or %NULL * * Performs the operation described by @op, using the SQL from the rendering of the operation * * Returns: %TRUE if no error occurred */ gboolean gda_server_provider_perform_operation_default (GdaServerProvider *provider, GdaConnection *cnc, GdaServerOperation *op, GError **error) { gchar *sql; GdaBatch *batch; const GSList *list; gboolean retval = TRUE; sql = gda_server_provider_render_operation (provider, cnc, op, error); if (!sql) return FALSE; GdaSqlParser *parser; parser = gda_server_provider_internal_get_parser (provider); /* no ref held! */ batch = gda_sql_parser_parse_string_as_batch (parser, sql, NULL, error); g_free (sql); if (!batch) return FALSE; for (list = gda_batch_get_statements (batch); list; list = list->next) { if (gda_connection_statement_execute_non_select (cnc, GDA_STATEMENT (list->data), NULL, NULL, error) == -1) { retval = FALSE; break; } } g_object_unref (batch); return retval; }
static void gda_capi_provider_init (GdaCapiProvider *capi_prv, G_GNUC_UNUSED GdaCapiProviderClass *klass) { g_mutex_lock (&init_mutex); if (!internal_stmt) { InternalStatementItem i; GdaSqlParser *parser; parser = gda_server_provider_internal_get_parser ((GdaServerProvider*) capi_prv); internal_stmt = g_new0 (GdaStatement *, sizeof (internal_sql) / sizeof (gchar*)); for (i = INTERNAL_STMT1; i < sizeof (internal_sql) / sizeof (gchar*); i++) { internal_stmt[i] = gda_sql_parser_parse_string (parser, internal_sql[i], NULL, NULL); if (!internal_stmt[i]) g_error ("Could not parse internal statement: %s\n", internal_sql[i]); } }