|  |  |  | GNOME Data Access manual |  | 
|---|
The special functions we need to do this are defined in the GdaTransaction, GdaConnection and GdaCommand classes, and they are:
gda_transaction_new ()
gda_command_set_transaction ()
Things you have to do to manage transactions are:
Create transaction
Change, if needed, the isolation level
Link transaction to a connection
For each command you want to execute:
Create command
Link transaction to command
Execute command
Free command
Commit or rollback transaction
Free transaction
Here you can see an example:
        void process_accounts(GdaConnection *connection)
        {
        GdaTransaction *transaction_one, *transaction_two;
        GdaCommand *command;
        
        transaction_one=gda_transaction_new("accounts1");
        gda_transaction_set_isolation_level(transaction_one,
        GDA_TRANSACTION_ISOLATION_SERIALIZABLE);
        gda_connection_begin_transaction(connection,transaction_one);
        
        command=gda_command_new (
        "UPDATE accounts SET balance=balance+50"
        "WHERE account_code=456",
        GDA_COMMAND_TYPE_SQL,
        GDA_COMMAND_OPTION_STOP_ON_ERRORS);
        gda_command_set_transaction(command,transaction_one);
        gda_connection_execute_non_query(connection,command,NULL);
        gda_command_free(command);
        
        command=gda_command_new (
        "UPDATE accounts SET balance=balance-50"
        "WHERE account_code=12",
        GDA_COMMAND_TYPE_SQL,
        GDA_COMMAND_OPTION_STOP_ON_ERRORS);
        gda_command_set_transaction(command,transaction_one);
        gda_connection_execute_non_query(connection,command,NULL);
        gda_command_free(command);
        
        gda_connection_commit_transaction(connection,transaction_one);
        g_object_unref(transaction_one);
        
        transaction_two=gda_transaction_new("accounts2");
        gda_transaction_set_isolation_level(transaction_two,
        GDA_TRANSACTION_ISOLATION_SERIALIZABLE);
        gda_connection_begin_transaction(connection,transaction_two);
        
        command=gda_command_new (
        "UPDATE accounts SET balance=balance+400"
        "WHERE account_code=456",
        GDA_COMMAND_TYPE_SQL,
        GDA_COMMAND_OPTION_STOP_ON_ERRORS);
        gda_command_set_transaction(command,transaction_two);
        gda_connection_execute_non_query(connection,command,NULL);
        gda_command_free(command);
        
        command=gda_command_new (
        "UPDATE accounts SET balance=balance-400"
        "WHERE account_code=12",
        GDA_COMMAND_TYPE_SQL,
        GDA_COMMAND_OPTION_STOP_ON_ERRORS);
        gda_command_set_transaction(command,transaction_two);
        gda_connection_execute_non_query(connection,command,NULL);
        gda_command_free(command);
        
        gda_connection_rollback_transaction(connection,transaction_two);
        g_object_unref(transaction_one);
        
        execute_sql_command(connection,"SELECT * FROM accounts");
        }
      
|  | Creates first transaction. | 
|  | Changes the isolation level. | 
|  | Links it to connection. | 
|  | Links command to transaction. | 
|  | Makes commit on transaction. | 
|  | Frees transaction. | 
|  | Makes rollback on second transaction. |