Libgda allows one to get the last inserted row right after an INSERT statement has been
executed. Libgda returns a new GdaSet object (which the caller
must unref when not needed anymore) which contains named values, one for each column of the
table in which data has been inserted. To get that object, pass a place holder to the
last_insert_row
of
gda_connection_statement_execute_non_select()
The following code example show how to use the returned GdaSet object:
GdaSet *last_row; GdaStatement *stmt; stmt = gda_sql_parser_parse_string (parser, "INSERT INTO mytable (name) VALUES ('joe')", NULL, NULL); if (gda_connection_statement_execute_non_select (connection, stmt, NULL, &last_row, &error) == -1) { g_warning ("Can't execute INSERT: %s\n", error && error->message ? error->message : "???"); if (error) g_error_free (error); } else { if (!last_row) g_print ("Last row not reported\n"); else { GSList *list; for (list = last_row->holders; list; list = list->next) { GdaHolder *h = GDA_HOLDER (list->data); gchar *str; str = gda_value_stringify (gda_holder_get_value (h)); g_print ("\t%s => %s\n", gda_holder_get_id (h), str); g_free (str); } g_object_unref (last_row); } g_object_unref (stmt);
Which gives the following output (considering that in the example the "mytable" table has two columns: an Id and a Name columns):
+0 => 1 +1 => joe