• unknown's avatar
    Intermediate commit of client library (cleanups + fixes of 3 items from · 321422c8
    unknown authored
    flaws list)
    TODO: 
     * verify that no sequence of API calls produces SIGSEGV.
     That is, verify that mysql_stmt_init  -> mysql_stmt_fetch is OK,
     or mysql_stmt_prepare -> mysql_stmt_fetch_column is OK and sets
     meaningful error.
     * remove alloc_stmt_fields call
     * revise stmt->state codes and statement states.
     * there are other items in prepared statements 'to fix' document.
    
    Done:
     - cleanups and comments
     - revision of prepared statement error codes.
     - mysql_stmt_prepare is now can always be called (that is, you can reprepare
       a statement)
     - new implementation of mysql_stmt_close and fetch cancellation
    
    
    include/errmsg.h:
      - CR_NOT_ALL_PARAMS_BOUND - this error code wasn't used until now. 
        Apparently it was added in advance, but then interface of
        mysql_stmt_bind_param changed. Now it's not possible to bind only some
        parameters - either all or none of parameters are bound.
        This error code  is renamed to CR_PARAMS_NOT_BOUND
      - CR_FETCH_CANCELLED - error code set on server side when fetch from 
        MYSQL_RES or MYSQL_STMT (in blocking mode) was cancelled because of
        intercepting call to mysql_stmt_close
      - CR_NO_DATA - this is proposed error code to return from 
        mysql_stmt_fetch_column if no row was fetched (by any type of fetch).
        We always can fall back to CR_COMMANDS_OUT_OF_SYNC though.
        Need reviewer's opinion on this one.
    include/mysql.h:
      - added unbuffered_fetch_owner member to MYSQL to point to MYSQL_RES 
        or MYSQL_STMT which is used to fetch result at the moment.
        This is to be able to set CR_FETCH_CANCELLED error without fantoms.
      - added unbuffered_fetch_cancelled boolean variable to MYSQL_STMT and 
        MYSQL_RES structures
      - rename PREP_STMT_STATE -> enum enum_mysql_stmt_state
      - members of MYSQL_STMT ordered by size.
      - removed members of MYSQL_STMT: current_row, result_buffered,
        last_fetched_column, last_fetched_buffer, query
      - renamed members of MYSQL_STMT: param_buffers -> bind_param_done, 
        res_buffers -> bind_result_done
      - now mysql_stmt_fetch calls stmt->read_row_func to read row either from 
        buffer or from network.
    include/sql_common.h:
      declaration for flush_use_result
    libmysql/client_settings.h:
      stmt_close declaration removed
    libmysql/errmsg.c:
      Error messages for changed and added error codes.
    libmysql/libmysql.c:
      Many changes:
      - some unused variables removed
      - cleanups
      - better error reporting
      - some function calls commented
      - alloc_stmt_fields is now called right after execute, to not read
        mysql->fields of some other statement
      - new implementation of mysql_stmt_fetch - this is also with cursor
        fetch in mind (to implement cursor fetch I'll just need to write
        special read_row function for it, so this change will be local)
      - implementation of fetch cancellation, including complete rewrite of
        mysql_stmt_close
      - now mysql_stmt_free_result doesn't free results of other statements.
    sql-common/client.c:
      - implementation of flush_use_result
      - implementation of fetch cancellation
      - changed behaviour of mysql_close in regard to mysql_stmt_close - now 
        mysql_close just set stmt->mysql to 0
    321422c8
sql_common.h 1.81 KB