Changeset 7651
- Timestamp:
- Jun 22, 2006, 4:57:04 PM (20 years ago)
- Location:
- trunk/psLib/src/db
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/db/psDB.c
r7644 r7651 12 12 * @author Joshua Hoblitt 13 13 * 14 * @version $Revision: 1.6 1$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-06-23 0 1:51:48$14 * @version $Revision: 1.62 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-06-23 02:57:04 $ 16 16 * 17 17 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 573 573 const psArray *rowSet) 574 574 { 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); 591 578 592 579 // we are assuming that all rows in the set have an identical with reguard … … 595 582 596 583 // Generate SQL query string 597 query = psDBGenerateInsertRowSQL(tableName, row);584 char *query = psDBGenerateInsertRowSQL(tableName, row); 598 585 if (!query) { 599 586 psError(PS_ERR_UNEXPECTED_NULL, false, PS_ERRORTEXT_psDB_QUERY_GEN_FAIL); … … 601 588 } 602 589 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"); 611 592 psFree(query); 612 593 return false; … … 614 595 615 596 psFree(query); 616 617 // how many place holders are in our query618 paramCount = mysql_stmt_param_count(stmt);619 620 // structure large enough to hold one field of data per place holder621 psDBMysqlRow *mysqlRow = psDBMysqlRowAlloc(paramCount);622 623 // loop over rows624 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 rows661 662 psFree(mysqlRow);663 mysql_stmt_close(stmt);664 597 665 598 return true; … … 734 667 const char *tableName, 735 668 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); 749 674 750 675 // Generate SQL query to update row 751 query = psDBGenerateUpdateRowSQL(tableName, where, values);676 char *query = psDBGenerateUpdateRowSQL(tableName, where, values); 752 677 if (!query) { 753 678 psError(PS_ERR_UNEXPECTED_NULL, false, PS_ERRORTEXT_psDB_QUERY_GEN_FAIL); … … 755 680 } 756 681 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"); 768 690 return -1; 769 691 } 770 psFree(query);771 772 // how many place holders are in our query773 paramCount = mysql_stmt_param_count(stmt);774 775 // structure large enough to hold one field of data per place holder776 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 commit804 rowsAffected = mysql_stmt_affected_rows(stmt);805 806 mysql_stmt_close(stmt);807 692 808 693 return rowsAffected; -
trunk/psLib/src/db/psDB.h
r7644 r7651 10 10 * @author Joshua Hoblitt 11 11 * 12 * @version $Revision: 1. 19$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-06-23 0 1:51:48$12 * @version $Revision: 1.20 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-06-23 02:57:04 $ 14 14 * 15 15 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 281 281 const char *tableName, ///< Table name 282 282 const psMetadata *where, ///< Row match criteria 283 const psMetadata *values///< new field values283 psMetadata *values ///< new field values 284 284 ); 285 285
Note:
See TracChangeset
for help on using the changeset viewer.
