Diff for /embedaddon/php/ext/pdo_mysql/mysql_statement.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:47:59 version 1.1.1.2, 2012/05/29 12:34:41
Line 59  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS Line 59  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
                 pefree(S->einfo.errmsg, stmt->dbh->is_persistent);                  pefree(S->einfo.errmsg, stmt->dbh->is_persistent);
                 S->einfo.errmsg = NULL;                  S->einfo.errmsg = NULL;
         }          }
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         if (S->stmt) {          if (S->stmt) {
                 pdo_mysql_stmt_close(S->stmt);                  pdo_mysql_stmt_close(S->stmt);
                 S->stmt = NULL;                  S->stmt = NULL;
         }          }
 #endif /* HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND */  
   
 #ifndef PDO_USE_MYSQLND  #ifndef PDO_USE_MYSQLND
         if (S->params) {          if (S->params) {
Line 77  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS Line 75  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
                 efree(S->in_length);                  efree(S->in_length);
         }          }
   
 #endif /* PDO_USE_MYSQLND */  
   
 #ifdef HAVE_MYSQL_STMT_PREPARE  
         if (S->bound_result)           if (S->bound_result) 
         {          {
                 int i;                  int i;
Line 91  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS Line 86  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
                 efree(S->out_null);                  efree(S->out_null);
                 efree(S->out_length);                  efree(S->out_length);
         }          }
#endif /* HAVE_MYSQL_STMT_PREPARE */#endif
   
   
 #if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND  
         if (S->H->server) {          if (S->H->server) {
                 while (mysql_more_results(S->H->server)) {                  while (mysql_more_results(S->H->server)) {
                         MYSQL_RES *res;                          MYSQL_RES *res;
Line 107  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS Line 101  static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
                                 mysql_free_result(res);                                  mysql_free_result(res);
                         }                          }
                 }                  }
        }               }
#endif /* HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND */
 #if PDO_USE_MYSQLND  #if PDO_USE_MYSQLND
         if (!S->stmt && S->current_data) {          if (!S->stmt && S->current_data) {
                 mnd_free(S->current_data);                  mnd_free(S->current_data);
Line 131  static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *s Line 125  static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *s
 }  }
 /* }}} */  /* }}} */
   
#ifdef HAVE_MYSQL_STMT_PREPAREstatic int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 {
         pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
         pdo_mysql_db_handle *H = S->H;
         my_ulonglong row_count;
         PDO_DBG_ENTER("pdo_mysql_fill_stmt_from_result");
 
         row_count = mysql_affected_rows(H->server);
         if (row_count == (my_ulonglong)-1) {
                 /* we either have a query that returned a result set or an error occured
                    lets see if we have access to a result set */
                 if (!H->buffered) {
                         S->result = mysql_use_result(H->server);
                 } else {
                         S->result = mysql_store_result(H->server);
                 }
                 if (NULL == S->result) {
                         pdo_mysql_error_stmt(stmt);
                         PDO_DBG_RETURN(0);
                 }
 
                 stmt->row_count = (long) mysql_num_rows(S->result);
                 stmt->column_count = (int) mysql_num_fields(S->result);
                 S->fields = mysql_fetch_fields(S->result);
         } else {
                 /* this was a DML or DDL query (INSERT, UPDATE, DELETE, ... */
                 stmt->row_count = (long) row_count;
         }
 
         PDO_DBG_RETURN(1);
 }
 /* }}} */
 
 #ifndef PDO_USE_MYSQLND
 static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */  static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 {  {
         pdo_mysql_stmt *S = stmt->driver_data;          pdo_mysql_stmt *S = stmt->driver_data;
Line 289  static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR Line 316  static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
 {  {
         pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;          pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
         pdo_mysql_db_handle *H = S->H;          pdo_mysql_db_handle *H = S->H;
         my_ulonglong row_count;  
         PDO_DBG_ENTER("pdo_mysql_stmt_execute");          PDO_DBG_ENTER("pdo_mysql_stmt_execute");
         PDO_DBG_INF_FMT("stmt=%p", S->stmt);          PDO_DBG_INF_FMT("stmt=%p", S->stmt);
   
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         if (S->stmt) {          if (S->stmt) {
                 PDO_DBG_RETURN(pdo_mysql_stmt_execute_prepared(stmt));                  PDO_DBG_RETURN(pdo_mysql_stmt_execute_prepared(stmt));
         }          }
 #endif  
                   
         /* ensure that we free any previous unfetched results */          /* ensure that we free any previous unfetched results */
         if (S->result) {          if (S->result) {
Line 310  static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR Line 334  static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
                 PDO_DBG_RETURN(0);                  PDO_DBG_RETURN(0);
         }          }
   
        row_count = mysql_affected_rows(H->server);        PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC));
        if (row_count == (my_ulonglong)-1) { 
                /* we either have a query that returned a result set or an error occured 
                   lets see if we have access to a result set */ 
                if (!H->buffered) { 
                        S->result = mysql_use_result(H->server); 
                } else { 
                        S->result = mysql_store_result(H->server); 
                } 
                if (NULL == S->result) { 
                        pdo_mysql_error_stmt(stmt); 
                        PDO_DBG_RETURN(0); 
                } 
 
                stmt->row_count = (long) mysql_num_rows(S->result); 
                stmt->column_count = (int) mysql_num_fields(S->result); 
                S->fields = mysql_fetch_fields(S->result); 
 
        } else { 
                /* this was a DML or DDL query (INSERT, UPDATE, DELETE, ... */ 
                stmt->row_count = (long) row_count; 
        } 
 
        PDO_DBG_RETURN(1); 
 }  }
 /* }}} */  /* }}} */
   
 static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */  static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */
 {  {
 #if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND  
         pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;          pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;
         pdo_mysql_db_handle *H = S->H;          pdo_mysql_db_handle *H = S->H;
         long row_count;          long row_count;
Line 401  static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt Line 401  static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
 #endif  #endif
   
 /* ensure that we free any previous unfetched results */  /* ensure that we free any previous unfetched results */
#if HAVE_MYSQL_STMT_PREPARE#ifndef PDO_USE_MYSQLND
         if (S->stmt) {          if (S->stmt) {
                 stmt->column_count = (int)mysql_num_fields(S->result);                  stmt->column_count = (int)mysql_num_fields(S->result);
                 mysql_stmt_free_result(S->stmt);                  mysql_stmt_free_result(S->stmt);
Line 421  static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt Line 421  static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
                 /* No more results */                  /* No more results */
                 PDO_DBG_RETURN(0);                  PDO_DBG_RETURN(0);
         } else {          } else {
                if (!H->buffered) {                PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC));
                        S->result = mysql_use_result(H->server); 
                        row_count = 0; 
                } else { 
                        S->result = mysql_store_result(H->server); 
                        if ((long)-1 == (row_count = (long) mysql_affected_rows(H->server))) { 
                                pdo_mysql_error_stmt(stmt); 
                                PDO_DBG_RETURN(0); 
                        } 
                } 
 
                if (NULL == S->result) { 
                        PDO_DBG_RETURN(0); 
                } 
 
                stmt->row_count = row_count; 
                stmt->column_count = (int) mysql_num_fields(S->result); 
                S->fields = mysql_fetch_fields(S->result); 
                PDO_DBG_RETURN(1); 
         }          }
 #else  
         strcpy(stmt->error_code, "HYC00");  
         PDO_DBG_RETURN(0);  
 #endif /* HAVE_MYSQL_STMT_PREPARE */  
 }  }
 /* }}} */  /* }}} */
   
Line 466  static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, Line 444  static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
 #ifndef PDO_USE_MYSQLND  #ifndef PDO_USE_MYSQLND
         PDO_MYSQL_PARAM_BIND *b;          PDO_MYSQL_PARAM_BIND *b;
 #endif  #endif
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data;           pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; 
   
         PDO_DBG_ENTER("pdo_mysql_stmt_param_hook");          PDO_DBG_ENTER("pdo_mysql_stmt_param_hook");
Line 598  static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt, Line 575  static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
                         break;                          break;
                 }                  }
         }          }
#endif /* HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND */
         PDO_DBG_RETURN(1);          PDO_DBG_RETURN(1);
 }  }
 /* }}} */  /* }}} */
Line 619  static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum Line 596  static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
                 PDO_DBG_RETURN(1);                  PDO_DBG_RETURN(1);
         }          }
 #else  #else
 #       if HAVE_MYSQL_STMT_PREPARE  
         int ret;          int ret;
                   
         if (S->stmt) {          if (S->stmt) {
Line 640  static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum Line 616  static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
   
                 PDO_DBG_RETURN(1);                  PDO_DBG_RETURN(1);
         }          }
 #       endif /* HAVE_MYSQL_STMT_PREPARE */  
 #endif /* PDO_USE_MYSQLND */  #endif /* PDO_USE_MYSQLND */
                   
         if (!S->result) {          if (!S->result) {
Line 731  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in Line 706  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
         }          }
   
         /* With mysqlnd data is stored inside mysqlnd, not S->current_data */          /* With mysqlnd data is stored inside mysqlnd, not S->current_data */
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         if (!S->stmt) {          if (!S->stmt) {
 #endif  
                 if (S->current_data == NULL || !S->result) {                  if (S->current_data == NULL || !S->result) {
                         PDO_DBG_RETURN(0);                          PDO_DBG_RETURN(0);
                 }                  }
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         }          }
#endif
         if (colno >= stmt->column_count) {          if (colno >= stmt->column_count) {
                 /* error invalid column */                  /* error invalid column */
                 PDO_DBG_RETURN(0);                  PDO_DBG_RETURN(0);
Line 751  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in Line 723  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
                 *len = sizeof(zval);                  *len = sizeof(zval);
                 PDO_DBG_RETURN(1);                  PDO_DBG_RETURN(1);
         }          }
#elif HAVE_MYSQL_STMT_PREPARE#else
         if (S->stmt) {          if (S->stmt) {
                 if (S->out_null[colno]) {                  if (S->out_null[colno]) {
                         *ptr = NULL;                          *ptr = NULL;
Line 769  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in Line 741  static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
                 *len = S->out_length[colno];                  *len = S->out_length[colno];
                 PDO_DBG_RETURN(1);                  PDO_DBG_RETURN(1);
         }          }
#endif /* PDO_USE_MYSQLND else HAVE_MYSQL_STMT_PREPARE */#endif
         *ptr = S->current_data[colno];          *ptr = S->current_data[colno];
         *len = S->current_lengths[colno];          *len = S->current_lengths[colno];
         PDO_DBG_RETURN(1);          PDO_DBG_RETURN(1);
Line 887  static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, l Line 859  static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, l
 #endif  #endif
                   
         add_assoc_zval(return_value, "flags", flags);          add_assoc_zval(return_value, "flags", flags);
        add_assoc_string(return_value, "table",(char *) (F->table?F->table:""), 1);        add_assoc_string(return_value, "table", (char *) (F->table?F->table:""), 1);
         PDO_DBG_RETURN(SUCCESS);          PDO_DBG_RETURN(SUCCESS);
 } /* }}} */  } /* }}} */
   
Line 901  static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st Line 873  static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
                 mysql_free_result(S->result);                  mysql_free_result(S->result);
                 S->result = NULL;                  S->result = NULL;
         }          }
 #if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND  
         if (S->stmt) {          if (S->stmt) {
                 int retval;                  int retval;
                 retval = mysql_stmt_free_result(S->stmt);                  retval = mysql_stmt_free_result(S->stmt);
                 PDO_DBG_RETURN(retval ? 0 : 1);                  PDO_DBG_RETURN(retval ? 0 : 1);
         }          }
 #endif  
   
 #if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND  
         while (mysql_more_results(S->H->server)) {          while (mysql_more_results(S->H->server)) {
                 MYSQL_RES *res;                  MYSQL_RES *res;
                 if (mysql_next_result(S->H->server) != 0) {                  if (mysql_next_result(S->H->server) != 0) {
Line 920  static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st Line 889  static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
                         mysql_free_result(res);                          mysql_free_result(res);
                 }                  }
         }          }
 #endif  
         PDO_DBG_RETURN(1);          PDO_DBG_RETURN(1);
 }  }
 /* }}} */  /* }}} */

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>