Commit 08e10a97 authored by venu@myvenu.com's avatar venu@myvenu.com

Added mysql_fetch_column function

Added MYSQL_TYPE_NULL as a dummy bind case for fetch buffers
Fix for offset based re-fetch using mysql_fetch_column
Misc cleanups for ODBC compatibility
parent 55f2e018
...@@ -494,7 +494,7 @@ enum mysql_st_timestamp_type { MYSQL_TIMESTAMP_NONE, MYSQL_TIMESTAMP_DATE, ...@@ -494,7 +494,7 @@ enum mysql_st_timestamp_type { MYSQL_TIMESTAMP_NONE, MYSQL_TIMESTAMP_DATE,
typedef struct mysql_st_time typedef struct mysql_st_time
{ {
unsigned int year,month,day,hour,minute,second; unsigned int year,month,day,hour,minute,second;
unsigned long second_part; unsigned long second_part;
my_bool neg; my_bool neg;
enum mysql_st_timestamp_type time_type; enum mysql_st_timestamp_type time_type;
...@@ -505,16 +505,19 @@ typedef struct mysql_st_time ...@@ -505,16 +505,19 @@ typedef struct mysql_st_time
/* bind structure */ /* bind structure */
typedef struct st_mysql_bind typedef struct st_mysql_bind
{ {
unsigned long *length; /* output length pointer */ unsigned long *length; /* output length pointer */
my_bool *is_null; /* Pointer to null indicators */ my_bool *is_null; /* Pointer to null indicators */
char *buffer; /* buffer to get/put data */ char *buffer; /* buffer to get/put data */
enum enum_field_types buffer_type; /* buffer type */ enum enum_field_types buffer_type; /* buffer type */
/* Must be set for string/blob data */ unsigned long buffer_length; /* buffer length, must be set for str/binary */
unsigned long buffer_length; /* buffer length */
/* Following are for internal use. Set by mysql_bind_param */
/* The following are for internal use. Set by mysql_bind_param */ unsigned char *inter_buffer; /* for the current data position */
unsigned int param_number; /* For null count and error messages */ unsigned long offset; /* offset position for char/binary fetch */
my_bool long_data_used; /* If used with mysql_send_long_data */ unsigned int param_number; /* For null count and error messages */
my_bool long_data_used; /* If used with mysql_send_long_data */
my_bool binary_data; /* data buffer is binary */
my_bool null_field; /* NULL data cache flag */
void (*store_param_func)(NET *net, struct st_mysql_bind *param); void (*store_param_func)(NET *net, struct st_mysql_bind *param);
void (*fetch_result)(struct st_mysql_bind *, unsigned char **row); void (*fetch_result)(struct st_mysql_bind *, unsigned char **row);
} MYSQL_BIND; } MYSQL_BIND;
...@@ -523,25 +526,28 @@ typedef struct st_mysql_bind ...@@ -523,25 +526,28 @@ typedef struct st_mysql_bind
/* statement handler */ /* statement handler */
typedef struct st_mysql_stmt typedef struct st_mysql_stmt
{ {
MYSQL *mysql; /* connection handle */ MYSQL *mysql; /* connection handle */
MYSQL_BIND *params; /* input parameters */ MYSQL_BIND *params; /* input parameters */
MYSQL_RES *result; /* resultset */ MYSQL_RES *result; /* resultset */
MYSQL_BIND *bind; /* row binding */ MYSQL_BIND *bind; /* row binding */
MYSQL_FIELD *fields; /* prepare meta info */ MYSQL_FIELD *fields; /* prepare meta info */
LIST list; /* list to keep track of all stmts */ LIST list; /* list to keep track of all stmts */
char *query; /* query buffer */ unsigned char *current_row; /* unbuffered row */
MEM_ROOT mem_root; /* root allocations */ unsigned char *last_fetched_buffer; /* last fetched column buffer */
unsigned long param_count; /* parameters count */ char *query; /* query buffer */
unsigned long field_count; /* fields count */ MEM_ROOT mem_root; /* root allocations */
unsigned long stmt_id; /* Id for prepared statement */ my_ulonglong last_fetched_column; /* last fetched column */
unsigned int last_errno; /* error code */ unsigned long param_count; /* parameters count */
enum PREP_STMT_STATE state; /* statement state */ unsigned long field_count; /* fields count */
char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ unsigned long stmt_id; /* Id for prepared statement */
my_bool long_alloced; /* flag to indicate long alloced */ unsigned int last_errno; /* error code */
my_bool send_types_to_server; /* Types sent to server */ enum PREP_STMT_STATE state; /* statement state */
my_bool param_buffers; /* param bound buffers */ char last_error[MYSQL_ERRMSG_SIZE]; /* error message */
my_bool res_buffers; /* output bound buffers */ my_bool long_alloced; /* flag to indicate long alloced */
my_bool result_buffered; /* Results buffered */ my_bool send_types_to_server; /* Types sent to server */
my_bool param_buffers; /* param bound buffers */
my_bool res_buffers; /* output bound buffers */
my_bool result_buffered; /* Results buffered */
} MYSQL_STMT; } MYSQL_STMT;
...@@ -558,6 +564,9 @@ my_bool STDCALL mysql_commit(MYSQL * mysql); ...@@ -558,6 +564,9 @@ my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql); my_bool STDCALL mysql_rollback(MYSQL * mysql);
my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
int STDCALL mysql_fetch(MYSQL_STMT *stmt); int STDCALL mysql_fetch(MYSQL_STMT *stmt);
int STDCALL mysql_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
my_ulonglong column,
unsigned long offset);
my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt, my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt,
unsigned int param_number, unsigned int param_number,
const char *data, const char *data,
......
This diff is collapsed.
...@@ -112,13 +112,22 @@ EXPORTS ...@@ -112,13 +112,22 @@ EXPORTS
mysql_param_count mysql_param_count
mysql_bind_param mysql_bind_param
mysql_bind_result mysql_bind_result
mysql_param_result
mysql_prepare_result mysql_prepare_result
mysql_stmt_close mysql_stmt_close
mysql_stmt_error mysql_stmt_error
mysql_stmt_errno mysql_stmt_errno
mysql_fetch mysql_fetch
mysql_fetch_column
mysql_send_long_data mysql_send_long_data
mysql_next_result mysql_next_result
mysql_stmt_affected_rows
mysql_stmt_store_result
mysql_stmt_data_seek
mysql_stmt_row_seek
mysql_stmt_row_tell
mysql_stmt_num_rows
mysql_more_results
mysql_commit mysql_commit
mysql_rollback mysql_rollback
mysql_autocommit mysql_autocommit
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment