IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 4, 2006, 4:42:01 PM (20 years ago)
Author:
Paul Price
Message:

Applying patch from Josh Hoblitt: Patch to add transaction control to psdb

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/db/psDB.c

    r7050 r7070  
    1212 *  @author Joshua Hoblitt
    1313 *
    14  *  @version $Revision: 1.49 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2006-05-03 02:35:37 $
     14 *  @version $Revision: 1.50 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2006-05-05 02:42:01 $
    1616 *
    1717 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    123123    dbh->mysql = mysql;
    124124
     125    // explicit transactions default to false
     126    if (!psDBExplicitTrans(dbh, false)) {
     127        psError(PS_ERR_UNKNOWN, true,
     128                "failed to set transaction type", mysql_error(mysql));
     129
     130        mysql_close(mysql);
     131        psFree(dbh);
     132
     133        return NULL;
     134    }
     135
    125136    return dbh;
    126137}
     
    688699    } // end loop over rows
    689700
    690     // point of no return
    691     mysql_commit(dbh->mysql);
    692 
    693701    psFree(bind);
    694702    mysql_stmt_close(stmt);
     
    838846    rowsAffected = mysql_stmt_affected_rows(stmt);
    839847
    840     // point of no return
    841     mysql_commit(dbh->mysql);
    842 
    843848    mysql_stmt_close(stmt);
    844849
     
    879884    rows = (psS64)mysql_affected_rows(dbh->mysql);
    880885
    881     // point of no return
    882     mysql_commit(dbh->mysql);
    883 
    884886    return rows;
    885887}
     
    890892    return (long)mysql_insert_id(dbh->mysql);
    891893}
     894
     895bool psDBExplicitTrans(psDB *dbh, bool mode)
     896{
     897    // Verify database is not NULL
     898    if(dbh == NULL) {
     899        psError(PS_ERR_UNEXPECTED_NULL, true, PS_ERRORTEXT_psDB_INVALID_PSDB);
     900        return false;
     901    }
     902
     903    // mode needs to be inverted as autocommits are the opposide of explicit
     904    // transactions.
     905    // the return value also needs to be inverted for the same reason.
     906    // is it safe to assume my_bool always safely casts to bool?
     907    return !(bool)mysql_autocommit(dbh->mysql, !mode);
     908}
     909
     910bool psDBTransaction(psDB *dbh)
     911{
     912    // Verify database is not NULL
     913    if(dbh == NULL) {
     914        psError(PS_ERR_UNEXPECTED_NULL, true, PS_ERRORTEXT_psDB_INVALID_PSDB);
     915        return false;
     916    }
     917
     918    bool status = p_psDBRunQuery(dbh, "START TRANSACTION");
     919    if (!status) {
     920        psError(PS_ERR_UNKNOWN, false, "Failed to create new database.");
     921    }
     922
     923    return status;
     924}
     925
     926bool psDBCommit(psDB *dbh)
     927{
     928    // Verify database is not NULL
     929    if(dbh == NULL) {
     930        psError(PS_ERR_UNEXPECTED_NULL, true, PS_ERRORTEXT_psDB_INVALID_PSDB);
     931        return false;
     932    }
     933
     934    // is it safe to assume my_bool always safely casts to bool?
     935    return (bool)mysql_commit(dbh->mysql);
     936}
     937
     938bool psDBRollback(psDB *dbh)
     939{
     940    // Verify database is not NULL
     941    if(dbh == NULL) {
     942        psError(PS_ERR_UNEXPECTED_NULL, true, PS_ERRORTEXT_psDB_INVALID_PSDB);
     943        return false;
     944    }
     945
     946    // is it safe to assume my_bool always safely casts to bool?
     947    return (bool)mysql_rollback(dbh->mysql);
     948}
     949
    892950
    893951// database utility functions
Note: See TracChangeset for help on using the changeset viewer.