2003-05-31 15:15:46 +05:00
|
|
|
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
|
|
|
|
|
|
|
|
extern const char *unknown_sqlstate;
|
2003-06-05 23:19:56 +03:00
|
|
|
extern const char *not_error_sqlstate;
|
2003-05-31 15:15:46 +05:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
|
|
|
|
my_bool default_value, uint server_capabilities);
|
|
|
|
void free_rows(MYSQL_DATA *cur);
|
Intermediate commit of client library (cleanups + fixes of 3 items from
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
2004-03-16 01:04:04 +03:00
|
|
|
void flush_use_result(MYSQL *mysql);
|
2003-05-31 15:15:46 +05:00
|
|
|
my_bool mysql_autenticate(MYSQL *mysql, const char *passwd);
|
|
|
|
void free_old_query(MYSQL *mysql);
|
|
|
|
void end_server(MYSQL *mysql);
|
|
|
|
my_bool mysql_reconnect(MYSQL *mysql);
|
2003-06-17 21:32:31 +05:00
|
|
|
void mysql_read_default_options(struct st_mysql_options *options,
|
|
|
|
const char *filename,const char *group);
|
2003-11-20 22:06:25 +02:00
|
|
|
my_bool
|
2003-09-17 15:18:18 +05:00
|
|
|
cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|
|
|
const char *header, ulong header_length,
|
|
|
|
const char *arg, ulong arg_length, my_bool skip_check);
|
|
|
|
|
|
|
|
void set_stmt_errmsg(MYSQL_STMT * stmt, const char *err, int errcode,
|
|
|
|
const char *sqlstate);
|
2004-03-12 18:53:45 +03:00
|
|
|
void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
|
2003-05-31 15:15:46 +05:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
|
|
|
|
|