IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 7651


Ignore:
Timestamp:
Jun 22, 2006, 4:57:04 PM (20 years ago)
Author:
jhoblitt
Message:

change psDBInsertRows() to use p_psDBRunQueryPrepared()
change psDBUpdateRows() to use p_psDBRunQueryPrepared()

Location:
trunk/psLib/src/db
Files:
2 edited

Legend:

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

    r7644 r7651  
    1212 *  @author Joshua Hoblitt
    1313 *
    14  *  @version $Revision: 1.61 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2006-06-23 01:51:48 $
     14 *  @version $Revision: 1.62 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2006-06-23 02:57:04 $
    1616 *
    1717 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    573573                    const psArray *rowSet)
    574574{
    575     char            *query;             // SQL query
    576     MYSQL_STMT      *stmt;              // prepared db statement
    577     unsigned long   paramCount;         // number of placeholders in query
    578     psU64           j;                  // row index
    579 
    580     // Verify database connections is set up
    581     if(dbh == NULL) {
    582         psError(PS_ERR_UNEXPECTED_NULL,true,PS_ERRORTEXT_psDB_INVALID_PSDB);
    583         return false;
    584     }
    585 
    586     // Verify row array is non-NULL
    587     if(rowSet == NULL) {
    588         psError(PS_ERR_UNEXPECTED_NULL,true,PS_ERRORTEXT_psDB_INSERT_ROW_FAIL);
    589         return false;
    590     }
     575    PS_ASSERT_PTR_NON_NULL(dbh, false);
     576    PS_ASSERT_PTR_NON_NULL(tableName, false);
     577    PS_ASSERT_PTR_NON_NULL(rowSet, false);
    591578
    592579    // we are assuming that all rows in the set have an identical with reguard
     
    595582
    596583    // Generate SQL query string
    597     query = psDBGenerateInsertRowSQL(tableName, row);
     584    char *query = psDBGenerateInsertRowSQL(tableName, row);
    598585    if (!query) {
    599586        psError(PS_ERR_UNEXPECTED_NULL, false, PS_ERRORTEXT_psDB_QUERY_GEN_FAIL);
     
    601588    }
    602589
    603     // Prepare SQL statement
    604     stmt = mysql_stmt_init(dbh->mysql);
    605     if (!stmt) {
    606         psAbort(__func__, "mysql_stmt_init(), out of memory.");
    607     }
    608     if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query))) {
    609         psError(PS_ERR_UNKNOWN, true, "Failed to prepare query.  Error: %s", mysql_stmt_error(stmt));
    610         mysql_stmt_close(stmt);
     590    if (p_psDBRunQueryPrepared(dbh, rowSet, query) < 0) {
     591        psError(PS_ERR_UNEXPECTED_NULL, false, "insert failed");
    611592        psFree(query);
    612593        return false;
     
    614595
    615596    psFree(query);
    616 
    617     // how many place holders are in our query
    618     paramCount = mysql_stmt_param_count(stmt);
    619 
    620     // structure large enough to hold one field of data per place holder
    621     psDBMysqlRow *mysqlRow = psDBMysqlRowAlloc(paramCount);
    622 
    623     // loop over rows
    624     for (j = 0; j < rowSet->n; j++) {
    625         psMetadata *rowData = rowSet->data[j];
    626 
    627         if (!psDBPackMySQLRow(mysqlRow, rowData)) {
    628             psError(PS_ERR_UNKNOWN, false, "Failed to pack params into bind structure.");
    629 
    630             mysql_rollback(dbh->mysql);
    631 
    632             psFree(mysqlRow);
    633             mysql_stmt_close(stmt);
    634 
    635             return false;
    636         }
    637 
    638         if (mysql_stmt_bind_param(stmt, mysqlRow->bind)) {
    639             psError(PS_ERR_UNKNOWN, true, "Failed to bind params.  Error: %s", mysql_stmt_error(stmt));
    640 
    641             mysql_rollback(dbh->mysql);
    642 
    643             psFree(mysqlRow);
    644             mysql_stmt_close(stmt);
    645 
    646             return false;
    647         }
    648 
    649         if (mysql_stmt_execute(stmt)) {
    650             psError(PS_ERR_UNKNOWN, true, "Failed to execute prepared statement.  Error: %s",
    651                     mysql_stmt_error(stmt));
    652 
    653             mysql_rollback(dbh->mysql);
    654 
    655             psFree(mysqlRow);
    656             mysql_stmt_close(stmt);
    657 
    658             return false;
    659         }
    660     } // end loop over rows
    661 
    662     psFree(mysqlRow);
    663     mysql_stmt_close(stmt);
    664597
    665598    return true;
     
    734667                    const char *tableName,
    735668                    const psMetadata *where,
    736                     const psMetadata *values)
    737 {
    738     char            *query;
    739     MYSQL_STMT      *stmt;              // prepared db statement
    740     unsigned long   paramCount;         // number of placeholders in query
    741     MYSQL_BIND      *bind;              // field values to insert
    742     my_ulonglong    rowsAffected;       // number of rows affected by query
    743 
    744     // Verify database object is not NULL
    745     if(dbh == NULL) {
    746         psError(PS_ERR_UNEXPECTED_NULL,true,PS_ERRORTEXT_psDB_INVALID_PSDB);
    747         return -1;
    748     }
     669                    psMetadata *values)
     670{
     671    PS_ASSERT_PTR_NON_NULL(dbh, -1);
     672    PS_ASSERT_PTR_NON_NULL(tableName, -1);
     673    PS_ASSERT_PTR_NON_NULL(values, -1);
    749674
    750675    // Generate SQL query to update row
    751     query = psDBGenerateUpdateRowSQL(tableName, where, values);
     676    char *query = psDBGenerateUpdateRowSQL(tableName, where, values);
    752677    if (!query) {
    753678        psError(PS_ERR_UNEXPECTED_NULL, false, PS_ERRORTEXT_psDB_QUERY_GEN_FAIL);
     
    755680    }
    756681
    757     // Initialize SQL statement
    758     stmt = mysql_stmt_init(dbh->mysql);
    759     if (!stmt) {
    760         psAbort(__func__, "mysql_stmt_init(), out of memory.");
    761     }
    762 
    763     // Prepare SQL statement
    764     if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query))) {
    765         psError(PS_ERR_UNKNOWN, true, PS_ERRORTEXT_psDB_SQL_PREPARE_FAIL, mysql_stmt_error(stmt));
    766         mysql_stmt_close(stmt);
    767         psFree(query);
     682    psArray *rowData = psArrayAlloc(1);
     683    psArrayAdd(rowData, 0, values);
     684
     685    long rowsAffected = p_psDBRunQueryPrepared(dbh, rowData, query);
     686    psFree(rowData);
     687    psFree(query);
     688    if (rowsAffected < 0) {
     689        psError(PS_ERR_UNEXPECTED_NULL, false, "update failed");
    768690        return -1;
    769691    }
    770     psFree(query);
    771 
    772     // how many place holders are in our query
    773     paramCount = mysql_stmt_param_count(stmt);
    774 
    775     // structure large enough to hold one field of data per place holder
    776     psDBMysqlRow *mysqlRow = psDBMysqlRowAlloc(paramCount);
    777 
    778     if (!psDBPackMySQLRow(mysqlRow, values)) {
    779         psFree(mysqlRow);
    780         mysql_stmt_close(stmt);
    781         return -1;
    782     }
    783 
    784     if (mysql_stmt_bind_param(stmt, bind)) {
    785         psError(PS_ERR_UNKNOWN, true, "Failed to bind params.  Error: %s", mysql_stmt_error(stmt));
    786         mysql_rollback(dbh->mysql);
    787         psFree(mysqlRow);
    788         mysql_stmt_close(stmt);
    789         return -1;
    790     }
    791 
    792     if (mysql_stmt_execute(stmt)) {
    793         psError(PS_ERR_UNKNOWN, true, "Failed to execute prepared statement.  Error: %s",
    794                 mysql_stmt_error(stmt));
    795         mysql_rollback(dbh->mysql);
    796         psFree(mysqlRow);
    797         mysql_stmt_close(stmt);
    798         return -1;
    799     }
    800 
    801     psFree(mysqlRow);
    802 
    803     // mysql_stmt_affected_rows() must be called before a commit
    804     rowsAffected = mysql_stmt_affected_rows(stmt);
    805 
    806     mysql_stmt_close(stmt);
    807692
    808693    return rowsAffected;
  • trunk/psLib/src/db/psDB.h

    r7644 r7651  
    1010 *  @author Joshua Hoblitt
    1111 *
    12  *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-06-23 01:51:48 $
     12 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-06-23 02:57:04 $
    1414 *
    1515 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    281281    const char *tableName,             ///< Table name
    282282    const psMetadata *where,           ///< Row match criteria
    283     const psMetadata *values           ///< new field values
     283    psMetadata *values                 ///< new field values
    284284);
    285285
Note: See TracChangeset for help on using the changeset viewer.