ext/Transaction.c in rubyfb-0.5.5 vs ext/Transaction.c in rubyfb-0.5.6

- old
+ new

@@ -1,30 +1,30 @@ /*------------------------------------------------------------------------------ * Transaction.c *----------------------------------------------------------------------------*/ /** * Copyright © Peter Wood, 2005 - * + * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with the - * License. You may obtain a copy of the License at + * License. You may obtain a copy of the License at * * http://www.mozilla.org/MPL/ - * + * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specificlanguage governing rights and limitations under the License. - * + * * The Original Code is the FireRuby extension for the Ruby language. - * - * The Initial Developer of the Original Code is Peter Wood. All Rights + * + * The Initial Developer of the Original Code is Peter Wood. All Rights * Reserved. * * @author Peter Wood * @version 1.0 */ - + /* Includes. */ #include "Transaction.h" #include "Common.h" #include "Connection.h" #include "ResultSet.h" @@ -43,23 +43,22 @@ /* Globals. */ VALUE cTransaction; /* Type definitions. */ -typedef struct -{ - isc_db_handle *database; - long length; - char *tpb; +typedef struct { + isc_db_handle *database; + long length; + char *tpb; } ISC_TEB; static char DEFAULT_TEB[] = {isc_tpb_version3, isc_tpb_write, isc_tpb_wait, isc_tpb_rec_version, isc_tpb_read_committed}; -static int DEFAULT_TEB_SIZE = 5; +static int DEFAULT_TEB_SIZE = 5; /** * This function provides for the allocation of a new object of the Transaction * class. @@ -67,70 +66,60 @@ * @param klass A reference to the Transaction Class object * * @return A reference to the newly allocated object. * */ -static VALUE allocateTransaction(VALUE klass) -{ - VALUE transaction = Qnil; - TransactionHandle *handle = ALLOC(TransactionHandle); - - if(handle != NULL) - { - handle->handle = 0; - transaction = Data_Wrap_Struct(klass, NULL, transactionFree, handle); - } - else - { - rb_raise(rb_eNoMemError, - "Memory allocation failure allocating a transaction."); - } - - return(transaction); +static VALUE allocateTransaction(VALUE klass) { + VALUE transaction = Qnil; + TransactionHandle *handle = ALLOC(TransactionHandle); + + if(handle != NULL) { + handle->handle = 0; + transaction = Data_Wrap_Struct(klass, NULL, transactionFree, handle); + } else { + rb_raise(rb_eNoMemError, + "Memory allocation failure allocating a transaction."); + } + + return(transaction); } /** * This function provides the initialize method for the Transaction class. * * @param self A reference to the new Transaction class instance. * @param connections Either a reference to a single Connection object or to - * an array of Connection objects that the transaction + * an array of Connection objects that the transaction * will apply to. * */ -static VALUE transactionInitialize(VALUE self, VALUE connections) -{ - TransactionHandle *transaction = NULL; - VALUE array = Qnil; - - /* Determine if an array has been passed as a parameter. */ - if(TYPE(connections) == T_ARRAY) - { - array = connections; - } - else if(TYPE(connections) == T_DATA && - RDATA(connections)->dfree == (RUBY_DATA_FUNC)connectionFree) - { - array = rb_ary_new(); - rb_ary_push(array, connections); - } - else - { - rb_fireruby_raise(NULL, - "Invalid connection parameter(s) for transaction."); - } - - /* Store the database details. */ - rb_iv_set(self, "@connections", array); - - /* Fetch the data structure and start the transaction. */ - Data_Get_Struct(self, TransactionHandle, transaction); - startTransaction(transaction, array, 0, NULL); - rb_tx_started(self, array); - - return(self); +static VALUE transactionInitialize(VALUE self, VALUE connections) { + TransactionHandle *transaction = NULL; + VALUE array = Qnil; + + /* Determine if an array has been passed as a parameter. */ + if(TYPE(connections) == T_ARRAY) { + array = connections; + } else if(TYPE(connections) == T_DATA && + RDATA(connections)->dfree == (RUBY_DATA_FUNC)connectionFree) { + array = rb_ary_new(); + rb_ary_push(array, connections); + } else { + rb_fireruby_raise(NULL, + "Invalid connection parameter(s) for transaction."); + } + + /* Store the database details. */ + rb_iv_set(self, "@connections", array); + + /* Fetch the data structure and start the transaction. */ + Data_Get_Struct(self, TransactionHandle, transaction); + startTransaction(transaction, array, 0, NULL); + rb_tx_started(self, array); + + return(self); } /** * This function provides the commit method for the Transaction class. @@ -138,41 +127,36 @@ * @param self A reference to the Transaction object being committed. * * @return A reference to self if successful, nil otherwise. * */ -static VALUE commitTransaction(VALUE self) -{ - TransactionHandle *transaction = NULL; - - Data_Get_Struct(self, TransactionHandle, transaction); - - /* Commit the transaction. */ - if(transaction->handle != 0) - { - ISC_STATUS status[20]; - - if(isc_commit_transaction(status, &transaction->handle) != 0) - { - /* Generate an error. */ - rb_fireruby_raise(status, "Error committing transaction."); - } - transaction->handle = 0; - } - else - { +static VALUE commitTransaction(VALUE self) { + TransactionHandle *transaction = NULL; + + Data_Get_Struct(self, TransactionHandle, transaction); + + /* Commit the transaction. */ + if(transaction->handle != 0) { + ISC_STATUS status[ISC_STATUS_LENGTH]; + + if(isc_commit_transaction(status, &transaction->handle) != 0) { /* Generate an error. */ - rb_fireruby_raise(NULL, "1. Transaction is not active."); - } - - /* Notify each connection of the transactions end. */ - rb_tx_released(rb_iv_get(self, "@connections"), self); - - /* Clear the connections list. */ - rb_iv_set(self, "@connections", rb_ary_new()); - - return(self); + rb_fireruby_raise(status, "Error committing transaction."); + } + transaction->handle = 0; + } else { + /* Generate an error. */ + rb_fireruby_raise(NULL, "1. Transaction is not active."); + } + + /* Notify each connection of the transactions end. */ + rb_tx_released(rb_iv_get(self, "@connections"), self); + + /* Clear the connections list. */ + rb_iv_set(self, "@connections", rb_ary_new()); + + return(self); } /** * This function provides the rollback method for the Transaction class. @@ -180,41 +164,36 @@ * @param self A reference to the Transaction object being rolled back. * * @return A reference to self if successful, nil otherwise. * */ -static VALUE rollbackTransaction(VALUE self) -{ - TransactionHandle *transaction = NULL; - - Data_Get_Struct(self, TransactionHandle, transaction); - - /* Roll back the transaction. */ - if(transaction->handle != 0) - { - ISC_STATUS status[20]; - - if(isc_rollback_transaction(status, &transaction->handle) != 0) - { - /* Generate an error. */ - rb_fireruby_raise(status, "Error rolling back transaction."); - } - transaction->handle = 0; - } - else - { +static VALUE rollbackTransaction(VALUE self) { + TransactionHandle *transaction = NULL; + + Data_Get_Struct(self, TransactionHandle, transaction); + + /* Roll back the transaction. */ + if(transaction->handle != 0) { + ISC_STATUS status[ISC_STATUS_LENGTH]; + + if(isc_rollback_transaction(status, &transaction->handle) != 0) { /* Generate an error. */ - rb_fireruby_raise(NULL, "2. Transaction is not active."); - } - - /* Notify each connection of the transactions end. */ - rb_tx_released(rb_iv_get(self, "@connections"), self); - - /* Clear the connections list. */ - rb_iv_set(self, "@connections", rb_ary_new()); - - return(self); + rb_fireruby_raise(status, "Error rolling back transaction."); + } + transaction->handle = 0; + } else { + /* Generate an error. */ + rb_fireruby_raise(NULL, "2. Transaction is not active."); + } + + /* Notify each connection of the transactions end. */ + rb_tx_released(rb_iv_get(self, "@connections"), self); + + /* Clear the connections list. */ + rb_iv_set(self, "@connections", rb_ary_new()); + + return(self); } /** * This function provides the active? method for the Transaction class. @@ -222,22 +201,20 @@ * @param self A reference to the Transcation object to perform the check for. * * @return Qtrue if the transaction is active, Qfalse otherwise. * */ -static VALUE transactionIsActive(VALUE self) -{ - VALUE result = Qfalse; - TransactionHandle *transaction = NULL; - - Data_Get_Struct(self, TransactionHandle, transaction); - if(transaction->handle != 0) - { - result = Qtrue; - } - - return(result); +static VALUE transactionIsActive(VALUE self) { + VALUE result = Qfalse; + TransactionHandle *transaction = NULL; + + Data_Get_Struct(self, TransactionHandle, transaction); + if(transaction->handle != 0) { + result = Qtrue; + } + + return(result); } /** * This function provides the accessor for the connections Transaction class @@ -245,16 +222,15 @@ * * @param self A reference to the Transaction object to fetch the connections * for. * * @return An Array containing the connections associated with the Transaction - * object. + * object. * */ -static VALUE getTransactionConnections(VALUE self) -{ - return(rb_iv_get(self, "@connections")); +static VALUE getTransactionConnections(VALUE self) { + return(rb_iv_get(self, "@connections")); } /** * This function provides the for? method of the Transaction class. @@ -265,34 +241,32 @@ * * @return Qtrue if the specified database is covered by the Transaction, * Qfalse otherwise. * */ -static VALUE isTransactionFor(VALUE self, VALUE connection) -{ - VALUE result = Qfalse, - array = rb_iv_get(self, "@connections"), - value = rb_funcall(array, rb_intern("size"), 0); - int size = 0, - index; - ConnectionHandle *instance = NULL; - TransactionHandle *transaction = NULL; - - size = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); - Data_Get_Struct(self, TransactionHandle, transaction); - Data_Get_Struct(connection, ConnectionHandle, instance); - - for(index = 0; index < size && result == Qfalse; index++) - { - ConnectionHandle *handle; - - value = rb_ary_entry(array, index); - Data_Get_Struct(value, ConnectionHandle, handle); - result = (handle == instance ? Qtrue : Qfalse); - } - - return(result); +static VALUE isTransactionFor(VALUE self, VALUE connection) { + VALUE result = Qfalse, + array = rb_iv_get(self, "@connections"), + value = rb_funcall(array, rb_intern("size"), 0); + int size = 0, + index; + ConnectionHandle *instance = NULL; + TransactionHandle *transaction = NULL; + + size = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); + Data_Get_Struct(self, TransactionHandle, transaction); + Data_Get_Struct(connection, ConnectionHandle, instance); + + for(index = 0; index < size && result == Qfalse; index++) { + ConnectionHandle *handle; + + value = rb_ary_entry(array, index); + Data_Get_Struct(value, ConnectionHandle, handle); + result = (handle == instance ? Qtrue : Qfalse); + } + + return(result); } /** * This function provides the execute method for the Transaction class. This @@ -304,61 +278,55 @@ * * @return A reference to a result set of the SQL statement represents a * query, nil otherwise. * */ -static VALUE executeOnTransaction(VALUE self, VALUE sql) -{ - VALUE results = Qnil, - list = rb_iv_get(self, "@connections"), - value = 0, - connection = Qnil, - statement = Qnil; - TransactionHandle *transaction = NULL; - int size = 0; - - /* Check that the transaction is active. */ - Data_Get_Struct(self, TransactionHandle, transaction); - if(transaction->handle == 0) - { - rb_fireruby_raise(NULL, "Executed called on inactive transaction."); - } - - /* Check that we have only one connection for the transaction. */ - value = rb_funcall(list, rb_intern("size"), 0); - size = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); - if(size > 1) - { - rb_fireruby_raise(NULL, - "Execute called on a transaction that spans multiple "\ - "connections. Unable to determine which connection to "\ - "execute the SQL statement through."); - } - - connection = rb_ary_entry(list, 0); - statement = rb_statement_new(connection, self, sql, INT2FIX(3)); - results = rb_execute_statement(statement); +static VALUE executeOnTransaction(VALUE self, VALUE sql) { + VALUE results = Qnil, + list = rb_iv_get(self, "@connections"), + value = 0, + connection = Qnil, + statement = Qnil; + TransactionHandle *transaction = NULL; + int size = 0; - if(results != Qnil && rb_obj_is_kind_of(results, rb_cInteger) == Qfalse) - { - if(rb_block_given_p()) - { - VALUE row = rb_funcall(results, rb_intern("fetch"), 0), - last = Qnil; - - while(row != Qnil) - { - last = rb_yield(row); - row = rb_funcall(results, rb_intern("fetch"), 0); - } - rb_funcall(results, rb_intern("close"), 0); - results = last; + /* Check that the transaction is active. */ + Data_Get_Struct(self, TransactionHandle, transaction); + if(transaction->handle == 0) { + rb_fireruby_raise(NULL, "Executed called on inactive transaction."); + } + + /* Check that we have only one connection for the transaction. */ + value = rb_funcall(list, rb_intern("size"), 0); + size = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); + if(size > 1) { + rb_fireruby_raise(NULL, + "Execute called on a transaction that spans multiple " \ + "connections. Unable to determine which connection to " \ + "execute the SQL statement through."); + } + + connection = rb_ary_entry(list, 0); + statement = rb_statement_new(connection, self, sql, INT2FIX(3)); + results = rb_execute_statement(statement); + + if(results != Qnil && rb_obj_is_kind_of(results, rb_cInteger) == Qfalse) { + if(rb_block_given_p()) { + VALUE row = rb_funcall(results, rb_intern("fetch"), 0), + last = Qnil; + + while(row != Qnil) { + last = rb_yield(row); + row = rb_funcall(results, rb_intern("fetch"), 0); } - } - rb_statement_close(statement); - - return(results); + rb_funcall(results, rb_intern("close"), 0); + results = last; + } + } + rb_statement_close(statement); + + return(results); } /** * This function creates a new Transaction object for a connection. This method @@ -372,80 +340,67 @@ * used in creating the transaction. * * @return A reference to the newly created Transaction object. * */ -static VALUE createTransaction(VALUE unused, VALUE connections, VALUE parameters) -{ - VALUE instance = Qnil, - list = Qnil; - TransactionHandle *transaction = ALLOC(TransactionHandle); - - if(transaction == NULL) - { - rb_raise(rb_eNoMemError, - "Memory allocation failure allocating a transaction."); - } - transaction->handle = 0; - - if(TYPE(connections) != T_ARRAY) - { - list = rb_ary_new(); - rb_ary_push(list, connections); - } - else - { - list = connections; - } - - if(TYPE(parameters) != T_ARRAY) - { - rb_fireruby_raise(NULL, - "Invalid transaction parameter set specified."); - } - - if(transaction != NULL) - { - VALUE value = rb_funcall(parameters, rb_intern("size"), 0); - long size = 0, - index; - char *buffer = NULL; - - size = TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value); - if((buffer = ALLOC_N(char, size)) != NULL) - { - for(index = 0; index < size; index++) - { - VALUE entry = rb_ary_entry(parameters, index); - int number = 0; - - number = TYPE(entry) == T_FIXNUM ? FIX2INT(entry) : NUM2INT(entry); - buffer[index] = number; - } - - startTransaction(transaction, list, size, buffer); - free(buffer); - - instance = Data_Wrap_Struct(cTransaction, NULL, transactionFree, - transaction); - rb_iv_set(instance, "@connections", list); - rb_tx_started(instance, connections); +static VALUE createTransaction(VALUE unused, VALUE connections, VALUE parameters) { + VALUE instance = Qnil, + list = Qnil; + TransactionHandle *transaction = ALLOC(TransactionHandle); + + if(transaction == NULL) { + rb_raise(rb_eNoMemError, + "Memory allocation failure allocating a transaction."); + } + transaction->handle = 0; + + if(TYPE(connections) != T_ARRAY) { + list = rb_ary_new(); + rb_ary_push(list, connections); + } else { + list = connections; + } + + if(TYPE(parameters) != T_ARRAY) { + rb_fireruby_raise(NULL, + "Invalid transaction parameter set specified."); + } + + if(transaction != NULL) { + VALUE value = rb_funcall(parameters, rb_intern("size"), 0); + long size = 0, + index; + char *buffer = NULL; + + size = TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value); + if((buffer = ALLOC_N(char, size)) != NULL) { + for(index = 0; index < size; index++) { + VALUE entry = rb_ary_entry(parameters, index); + int number = 0; + + number = TYPE(entry) == T_FIXNUM ? FIX2INT(entry) : NUM2INT(entry); + buffer[index] = number; } - else - { - rb_fireruby_raise(NULL, - "Memory allocation failure allocating transaction "\ - "parameter buffer."); - } - } - else - { - rb_raise(rb_eNoMemError, - "Memory allocation failure allocating transaction."); - } - - return(instance); + + startTransaction(transaction, list, size, buffer); + free(buffer); + + instance = Data_Wrap_Struct(cTransaction, NULL, transactionFree, + transaction); + rb_iv_set(instance, "@connections", list); + rb_tx_started(instance, connections); + } else { + rb_fireruby_raise(NULL, + "Memory allocation failure allocating transaction " \ + "parameter buffer."); + } + } else { + rb_raise(rb_eNoMemError, + "Memory allocation failure allocating transaction."); + } + + return(instance); } /** * This function begins a transaction on all of the database associated with @@ -461,112 +416,90 @@ * */ void startTransaction(TransactionHandle *transaction, VALUE connections, long size, - char *buffer) -{ - ISC_TEB *teb = NULL; - VALUE value = rb_funcall(connections, rb_intern("size"), 0), - head = rb_ary_entry(connections, 0); - short length = 0; - ConnectionHandle *first = NULL; - - /* Attempt a retrieval of the first connection. */ - if(value != Qnil) - { - /* Check that we have a connection. */ - if(TYPE(head) == T_DATA && - RDATA(head)->dfree == (RUBY_DATA_FUNC)connectionFree) - { - Data_Get_Struct(head, ConnectionHandle, first); - } - } - - /* Generate the list of connections. */ - length = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); - if(length > 0) - { - if((teb = ALLOC_N(ISC_TEB, length)) != NULL) - { - int i; - - for(i = 0; i < length; i++) - { - VALUE entry = rb_ary_entry(connections, i); - - /* Check that we have a connection. */ - if(TYPE(entry) == T_DATA && - RDATA(entry)->dfree == (RUBY_DATA_FUNC)connectionFree) - { - ConnectionHandle *connection = NULL; - - Data_Get_Struct(entry, ConnectionHandle, connection); - if(connection->handle != 0) - { - /* Store the connection details. */ - teb[i].database = &connection->handle; - if(size > 0) - { - teb[i].length = size; - teb[i].tpb = buffer; - } - else - { - teb[i].length = DEFAULT_TEB_SIZE; - teb[i].tpb = DEFAULT_TEB; - } - } - else - { - /* Clean up and raise an exception. */ - free(teb); - rb_fireruby_raise(NULL, - "Disconnected connection specified "\ - "starting a transaction."); - } + char *buffer) { + ISC_TEB *teb = NULL; + VALUE value = rb_funcall(connections, rb_intern("size"), 0), + head = rb_ary_entry(connections, 0); + short length = 0; + ConnectionHandle *first = NULL; + + /* Attempt a retrieval of the first connection. */ + if(value != Qnil) { + /* Check that we have a connection. */ + if(TYPE(head) == T_DATA && + RDATA(head)->dfree == (RUBY_DATA_FUNC)connectionFree) { + Data_Get_Struct(head, ConnectionHandle, first); + } + } + + /* Generate the list of connections. */ + length = (TYPE(value) == T_FIXNUM ? FIX2INT(value) : NUM2INT(value)); + if(length > 0) { + if((teb = ALLOC_N(ISC_TEB, length)) != NULL) { + int i; + + for(i = 0; i < length; i++) { + VALUE entry = rb_ary_entry(connections, i); + + /* Check that we have a connection. */ + if(TYPE(entry) == T_DATA && + RDATA(entry)->dfree == (RUBY_DATA_FUNC)connectionFree) { + ConnectionHandle *connection = NULL; + + Data_Get_Struct(entry, ConnectionHandle, connection); + if(connection->handle != 0) { + /* Store the connection details. */ + teb[i].database = &connection->handle; + if(size > 0) { + teb[i].length = size; + teb[i].tpb = buffer; + } else { + teb[i].length = DEFAULT_TEB_SIZE; + teb[i].tpb = DEFAULT_TEB; } - else - { - /* Clean up and thrown an exception. */ - free(teb); - rb_fireruby_raise(NULL, - "Invalid connection specified starting a "\ - "transaction."); - } - } + } else { + /* Clean up and raise an exception. */ + free(teb); + rb_fireruby_raise(NULL, + "Disconnected connection specified " \ + "starting a transaction."); + } + } else { + /* Clean up and thrown an exception. */ + free(teb); + rb_fireruby_raise(NULL, + "Invalid connection specified starting a " \ + "transaction."); + } } - else - { - rb_raise(rb_eNoMemError, - "Memory allocation error starting transaction."); - } - } - else - { - /* Generate an exception. */ - rb_fireruby_raise(NULL, "No connections specified for transaction."); - } - - /* Check that theres been no errors and that we have a connection list. */ - if(teb != NULL) - { - ISC_STATUS status[20]; - - /* Attempt a transaction start. */ - if(isc_start_multiple(status, &transaction->handle, length, teb) != 0) - { - /* Generate an error. */ - rb_fireruby_raise(status, "Error starting transaction."); - } - } - - /* Free the database details list if need be. */ - if(teb != NULL) - { - free(teb); - } + } else { + rb_raise(rb_eNoMemError, + "Memory allocation error starting transaction."); + } + } else { + /* Generate an exception. */ + rb_fireruby_raise(NULL, "No connections specified for transaction."); + } + + /* Check that theres been no errors and that we have a connection list. */ + if(teb != NULL) { + ISC_STATUS status[ISC_STATUS_LENGTH]; + + /* Attempt a transaction start. */ + if(isc_start_multiple(status, &transaction->handle, length, teb) != 0) { + /* Generate an error. */ + rb_fireruby_raise(status, "Error starting transaction."); + } + } + + /* Free the database details list if need be. */ + if(teb != NULL) { + free(teb); + } } /** * This function is used to integrate with the Ruby garbage collector to insure @@ -575,24 +508,21 @@ * * @param transaction A pointer to the TransactionHandle structure associated * with the Transaction object being collected. * */ -void transactionFree(void *transaction) -{ - if(transaction != NULL) - { - TransactionHandle *handle = (TransactionHandle *)transaction; - - if(handle->handle != 0) - { - ISC_STATUS status[20]; - - isc_rollback_transaction(status, &handle->handle); - } - free(handle); - } +void transactionFree(void *transaction) { + if(transaction != NULL) { + TransactionHandle *handle = (TransactionHandle *)transaction; + + if(handle->handle != 0) { + ISC_STATUS status[ISC_STATUS_LENGTH]; + + isc_rollback_transaction(status, &handle->handle); + } + free(handle); + } } /** * This function provides a programmatic method of creating a Transaction @@ -603,17 +533,16 @@ * to. * * @return A reference to the Transaction object, or nil if an error occurs. * */ -VALUE rb_transaction_new(VALUE connections) -{ - VALUE transaction = allocateTransaction(cTransaction); - - transactionInitialize(transaction, connections); - - return(transaction); +VALUE rb_transaction_new(VALUE connections) { + VALUE transaction = allocateTransaction(cTransaction); + + transactionInitialize(transaction, connections); + + return(transaction); } /** * This function provides a convenient means of checking whether a connection * is covered by a transaction. @@ -623,62 +552,59 @@ * * @return Non-zero if the connection is covered by the transaction, zero if * it is not. * */ -int coversConnection(VALUE transaction, VALUE connection) -{ - int result = 0; - VALUE boolean = isTransactionFor(transaction, connection); - - if(boolean == Qtrue) - { - result = 1; - } - - return(result); +int coversConnection(VALUE transaction, VALUE connection) { + int result = 0; + VALUE boolean = isTransactionFor(transaction, connection); + + if(boolean == Qtrue) { + result = 1; + } + + return(result); } /** * This function initializes the Transaction class within the Ruby environment. * The class is established under the module specified to the function. * * @param module A reference to the module to create the class within. * */ -void Init_Transaction(VALUE module) -{ - cTransaction = rb_define_class_under(module, "Transaction", rb_cObject); - rb_define_alloc_func(cTransaction, allocateTransaction); - rb_define_method(cTransaction, "initialize", transactionInitialize, 1); - rb_define_method(cTransaction, "initialize_copy", forbidObjectCopy, 1); - rb_define_method(cTransaction, "active?", transactionIsActive, 0); - rb_define_method(cTransaction, "commit", commitTransaction, 0); - rb_define_method(cTransaction, "rollback", rollbackTransaction, 0); - rb_define_method(cTransaction, "connections", getTransactionConnections, 0); - rb_define_method(cTransaction, "for_connection?", isTransactionFor, 1); - rb_define_module_function(cTransaction, "create", createTransaction, 2); - rb_define_method(cTransaction, "execute", executeOnTransaction, 1); - rb_define_const(cTransaction, "TPB_VERSION_1", INT2FIX(isc_tpb_version1)); - rb_define_const(cTransaction, "TPB_VERSION_3", INT2FIX(isc_tpb_version3)); - rb_define_const(cTransaction, "TPB_CONSISTENCY", INT2FIX(isc_tpb_consistency)); - rb_define_const(cTransaction, "TPB_CONCURRENCY", INT2FIX(isc_tpb_concurrency)); - rb_define_const(cTransaction, "TPB_SHARED", INT2FIX(isc_tpb_shared)); - rb_define_const(cTransaction, "TPB_PROTECTED", INT2FIX(isc_tpb_protected)); - rb_define_const(cTransaction, "TPB_EXCLUSIVE", INT2FIX(isc_tpb_exclusive)); - rb_define_const(cTransaction, "TPB_WAIT", INT2FIX(isc_tpb_wait)); - rb_define_const(cTransaction, "TPB_NO_WAIT", INT2FIX(isc_tpb_nowait)); - rb_define_const(cTransaction, "TPB_READ", INT2FIX(isc_tpb_read)); - rb_define_const(cTransaction, "TPB_WRITE", INT2FIX(isc_tpb_write)); - rb_define_const(cTransaction, "TPB_LOCK_READ", INT2FIX(isc_tpb_lock_read)); - rb_define_const(cTransaction, "TPB_LOCK_WRITE", INT2FIX(isc_tpb_lock_write)); - rb_define_const(cTransaction, "TPB_VERB_TIME", INT2FIX(isc_tpb_verb_time)); - rb_define_const(cTransaction, "TPB_COMMIT_TIME", INT2FIX(isc_tpb_commit_time)); - rb_define_const(cTransaction, "TPB_IGNORE_LIMBO", INT2FIX(isc_tpb_ignore_limbo)); - rb_define_const(cTransaction, "TPB_READ_COMMITTED", INT2FIX(isc_tpb_read_committed)); - rb_define_const(cTransaction, "TPB_AUTO_COMMIT", INT2FIX(isc_tpb_autocommit)); - rb_define_const(cTransaction, "TPB_REC_VERSION", INT2FIX(isc_tpb_rec_version)); - rb_define_const(cTransaction, "TPB_NO_REC_VERSION", INT2FIX(isc_tpb_no_rec_version)); - rb_define_const(cTransaction, "TPB_RESTART_REQUESTS", INT2FIX(isc_tpb_restart_requests)); - rb_define_const(cTransaction, "TPB_NO_AUTO_UNDO", INT2FIX(isc_tpb_no_auto_undo)); +void Init_Transaction(VALUE module) { + cTransaction = rb_define_class_under(module, "Transaction", rb_cObject); + rb_define_alloc_func(cTransaction, allocateTransaction); + rb_define_method(cTransaction, "initialize", transactionInitialize, 1); + rb_define_method(cTransaction, "initialize_copy", forbidObjectCopy, 1); + rb_define_method(cTransaction, "active?", transactionIsActive, 0); + rb_define_method(cTransaction, "commit", commitTransaction, 0); + rb_define_method(cTransaction, "rollback", rollbackTransaction, 0); + rb_define_method(cTransaction, "connections", getTransactionConnections, 0); + rb_define_method(cTransaction, "for_connection?", isTransactionFor, 1); + rb_define_module_function(cTransaction, "create", createTransaction, 2); + rb_define_method(cTransaction, "execute", executeOnTransaction, 1); + rb_define_const(cTransaction, "TPB_VERSION_1", INT2FIX(isc_tpb_version1)); + rb_define_const(cTransaction, "TPB_VERSION_3", INT2FIX(isc_tpb_version3)); + rb_define_const(cTransaction, "TPB_CONSISTENCY", INT2FIX(isc_tpb_consistency)); + rb_define_const(cTransaction, "TPB_CONCURRENCY", INT2FIX(isc_tpb_concurrency)); + rb_define_const(cTransaction, "TPB_SHARED", INT2FIX(isc_tpb_shared)); + rb_define_const(cTransaction, "TPB_PROTECTED", INT2FIX(isc_tpb_protected)); + rb_define_const(cTransaction, "TPB_EXCLUSIVE", INT2FIX(isc_tpb_exclusive)); + rb_define_const(cTransaction, "TPB_WAIT", INT2FIX(isc_tpb_wait)); + rb_define_const(cTransaction, "TPB_NO_WAIT", INT2FIX(isc_tpb_nowait)); + rb_define_const(cTransaction, "TPB_READ", INT2FIX(isc_tpb_read)); + rb_define_const(cTransaction, "TPB_WRITE", INT2FIX(isc_tpb_write)); + rb_define_const(cTransaction, "TPB_LOCK_READ", INT2FIX(isc_tpb_lock_read)); + rb_define_const(cTransaction, "TPB_LOCK_WRITE", INT2FIX(isc_tpb_lock_write)); + rb_define_const(cTransaction, "TPB_VERB_TIME", INT2FIX(isc_tpb_verb_time)); + rb_define_const(cTransaction, "TPB_COMMIT_TIME", INT2FIX(isc_tpb_commit_time)); + rb_define_const(cTransaction, "TPB_IGNORE_LIMBO", INT2FIX(isc_tpb_ignore_limbo)); + rb_define_const(cTransaction, "TPB_READ_COMMITTED", INT2FIX(isc_tpb_read_committed)); + rb_define_const(cTransaction, "TPB_AUTO_COMMIT", INT2FIX(isc_tpb_autocommit)); + rb_define_const(cTransaction, "TPB_REC_VERSION", INT2FIX(isc_tpb_rec_version)); + rb_define_const(cTransaction, "TPB_NO_REC_VERSION", INT2FIX(isc_tpb_no_rec_version)); + rb_define_const(cTransaction, "TPB_RESTART_REQUESTS", INT2FIX(isc_tpb_restart_requests)); + rb_define_const(cTransaction, "TPB_NO_AUTO_UNDO", INT2FIX(isc_tpb_no_auto_undo)); }