summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authorhf@deer.(none) <>2003-09-16 17:29:29 +0500
committerhf@deer.(none) <>2003-09-16 17:29:29 +0500
commit744fc5a5be4f733cd1db4dc1d5e433362a775215 (patch)
tree098e3697ba9872629019067cfa1a61ad3165dd3c /libmysql
parent1932b40c139163ab8bb79444393363220f2b5c94 (diff)
parentefd2e122ef3a300a44637f26a76fa92ffe02c6b8 (diff)
downloadmariadb-git-744fc5a5be4f733cd1db4dc1d5e433362a775215.tar.gz
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.stmt
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/client_settings.h13
-rw-r--r--libmysql/libmysql.c64
2 files changed, 46 insertions, 31 deletions
diff --git a/libmysql/client_settings.h b/libmysql/client_settings.h
index 9cafd7182d0..2ad10bdc84c 100644
--- a/libmysql/client_settings.h
+++ b/libmysql/client_settings.h
@@ -41,5 +41,16 @@ my_bool send_file_to_server(MYSQL *mysql, const char *filename);
#define reset_sigpipe(mysql)
#endif
-MYSQL_RES * STDCALL cli_list_fields(MYSQL *mysql, const char *table, const char *wild);
+void mysql_read_default_options(struct st_mysql_options *options,
+ const char *filename,const char *group);
+MYSQL * STDCALL
+cli_mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
+ const char *passwd, const char *db,
+ uint port, const char *unix_socket,ulong client_flag);
+void STDCALL cli_mysql_close(MYSQL *mysql);
+
+MYSQL_FIELD * STDCALL cli_list_fields(MYSQL *mysql);
+my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt);
+MYSQL_DATA *cli_read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
+ uint fields);
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 68f596c833d..56b8a1a14e8 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -973,6 +973,19 @@ mysql_list_tables(MYSQL *mysql, const char *wild)
DBUG_RETURN (mysql_store_result(mysql));
}
+MYSQL_FIELD * STDCALL cli_list_fields(MYSQL *mysql)
+{
+ MYSQL_DATA *query;
+ if (!(query= cli_read_rows(mysql,(MYSQL_FIELD*) 0,
+ protocol_41(mysql) ? 8 : 6)))
+ return NULL;
+
+ mysql->field_count= query->rows;
+ return unpack_fields(query,&mysql->field_alloc,
+ query->rows, 1, mysql->server_capabilities);
+}
+
+
/**************************************************************************
List all fields in a table
If wild is given then only the fields matching wild is returned
@@ -981,36 +994,29 @@ mysql_list_tables(MYSQL *mysql, const char *wild)
**************************************************************************/
MYSQL_RES * STDCALL
-cli_list_fields(MYSQL *mysql, const char *table, const char *wild)
+mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
{
- MYSQL_RES *result;
- MYSQL_DATA *query;
+ MYSQL_RES *result;
+ MYSQL_FIELD *fields;
char buff[257],*end;
DBUG_ENTER("mysql_list_fields");
DBUG_PRINT("enter",("table: '%s' wild: '%s'",table,wild ? wild : ""));
- LINT_INIT(query);
-
end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128);
+ free_old_query(mysql);
if (simple_command(mysql,COM_FIELD_LIST,buff,(ulong) (end-buff),1) ||
- !(query = read_rows(mysql,(MYSQL_FIELD*) 0,
- protocol_41(mysql) ? 8 : 6)))
+ !(fields= (*mysql->methods->list_fields)(mysql)))
DBUG_RETURN(NULL);
- free_old_query(mysql);
if (!(result = (MYSQL_RES *) my_malloc(sizeof(MYSQL_RES),
MYF(MY_WME | MY_ZEROFILL))))
- {
- free_rows(query);
DBUG_RETURN(NULL);
- }
+
result->methods= mysql->methods;
result->field_alloc=mysql->field_alloc;
mysql->fields=0;
- result->field_count = (uint) query->rows;
- result->fields= unpack_fields(query,&result->field_alloc,
- result->field_count, 1,
- mysql->server_capabilities);
+ result->field_count = mysql->field_count;
+ result->fields= fields;
result->eof=1;
DBUG_RETURN(result);
}
@@ -1031,8 +1037,8 @@ mysql_list_processes(MYSQL *mysql)
free_old_query(mysql);
pos=(uchar*) mysql->net.read_pos;
field_count=(uint) net_field_length(&pos);
- if (!(fields = read_rows(mysql,(MYSQL_FIELD*) 0,
- protocol_41(mysql) ? 7 : 5)))
+ if (!(fields = (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*) 0,
+ protocol_41(mysql) ? 7 : 5)))
DBUG_RETURN(NULL);
if (!(mysql->fields=unpack_fields(fields,&mysql->field_alloc,field_count,0,
mysql->server_capabilities)))
@@ -1563,7 +1569,7 @@ static my_bool my_realloc_str(NET *net, ulong length)
1 error
*/
-static my_bool read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
+my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
{
uchar *pos;
uint field_count;
@@ -1586,25 +1592,15 @@ static my_bool read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
mysql->server_status|= SERVER_STATUS_IN_TRANS;
mysql->extra_info= net_field_length_ll(&pos);
- if (!(fields_data= read_rows(mysql, (MYSQL_FIELD*) 0, 7)))
+ if (!(fields_data= (*mysql->methods->read_rows)(mysql,(MYSQL_FIELD*)0,7)))
DBUG_RETURN(1);
if (!(stmt->fields= unpack_fields(fields_data,&stmt->mem_root,
field_count,0,
mysql->server_capabilities)))
DBUG_RETURN(1);
}
- if (!(stmt->params= (MYSQL_BIND *) alloc_root(&stmt->mem_root,
- sizeof(MYSQL_BIND)*
- (param_count +
- field_count))))
- {
- set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
- DBUG_RETURN(0);
- }
- stmt->bind= (stmt->params + param_count);
stmt->field_count= (uint) field_count;
stmt->param_count= (ulong) param_count;
- mysql->status= MYSQL_STATUS_READY;
DBUG_RETURN(0);
}
@@ -1648,14 +1644,22 @@ mysql_prepare(MYSQL *mysql, const char *query, ulong length)
}
init_alloc_root(&stmt->mem_root,8192,0);
- if (read_prepare_result(mysql, stmt))
+ if ((*mysql->methods->read_prepare_result)(mysql, stmt))
{
stmt_close(stmt, 1);
DBUG_RETURN(0);
}
+ if (!(stmt->params= (MYSQL_BIND *) alloc_root(&stmt->mem_root,
+ sizeof(MYSQL_BIND)*
+ (stmt->param_count +
+ stmt->field_count))))
+ set_stmt_error(stmt, CR_OUT_OF_MEMORY, unknown_sqlstate);
+ stmt->bind= stmt->params + stmt->param_count;
+
stmt->state= MY_ST_PREPARE;
stmt->mysql= mysql;
mysql->stmts= list_add(mysql->stmts, &stmt->list);
+ mysql->status= MYSQL_STATUS_READY;
stmt->list.data= stmt;
DBUG_PRINT("info", ("Parameter count: %ld", stmt->param_count));
DBUG_RETURN(stmt);