@@ -973,6 +973,19 @@ mysql_list_tables(MYSQL *mysql, const char *wild)
973973 DBUG_RETURN (mysql_store_result (mysql ));
974974}
975975
976+ MYSQL_FIELD * STDCALL cli_list_fields (MYSQL * mysql )
977+ {
978+ MYSQL_DATA * query ;
979+ if (!(query = cli_read_rows (mysql ,(MYSQL_FIELD * ) 0 ,
980+ protocol_41 (mysql ) ? 8 : 6 )))
981+ return NULL ;
982+
983+ mysql -> field_count = query -> rows ;
984+ return unpack_fields (query ,& mysql -> field_alloc ,
985+ query -> rows , 1 , mysql -> server_capabilities );
986+ }
987+
988+
976989/**************************************************************************
977990 List all fields in a table
978991 If wild is given then only the fields matching wild is returned
@@ -981,36 +994,29 @@ mysql_list_tables(MYSQL *mysql, const char *wild)
981994**************************************************************************/
982995
983996MYSQL_RES * STDCALL
984- cli_list_fields (MYSQL * mysql , const char * table , const char * wild )
997+ mysql_list_fields (MYSQL * mysql , const char * table , const char * wild )
985998{
986- MYSQL_RES * result ;
987- MYSQL_DATA * query ;
999+ MYSQL_RES * result ;
1000+ MYSQL_FIELD * fields ;
9881001 char buff [257 ],* end ;
9891002 DBUG_ENTER ("mysql_list_fields" );
9901003 DBUG_PRINT ("enter" ,("table: '%s' wild: '%s'" ,table ,wild ? wild : "" ));
9911004
992- LINT_INIT (query );
993-
9941005 end = strmake (strmake (buff , table ,128 )+ 1 ,wild ? wild : "" ,128 );
1006+ free_old_query (mysql );
9951007 if (simple_command (mysql ,COM_FIELD_LIST ,buff ,(ulong ) (end - buff ),1 ) ||
996- !(query = read_rows (mysql ,(MYSQL_FIELD * ) 0 ,
997- protocol_41 (mysql ) ? 8 : 6 )))
1008+ !(fields = (* mysql -> methods -> list_fields )(mysql )))
9981009 DBUG_RETURN (NULL );
9991010
1000- free_old_query (mysql );
10011011 if (!(result = (MYSQL_RES * ) my_malloc (sizeof (MYSQL_RES ),
10021012 MYF (MY_WME | MY_ZEROFILL ))))
1003- {
1004- free_rows (query );
10051013 DBUG_RETURN (NULL );
1006- }
1014+
10071015 result -> methods = mysql -> methods ;
10081016 result -> field_alloc = mysql -> field_alloc ;
10091017 mysql -> fields = 0 ;
1010- result -> field_count = (uint ) query -> rows ;
1011- result -> fields = unpack_fields (query ,& result -> field_alloc ,
1012- result -> field_count , 1 ,
1013- mysql -> server_capabilities );
1018+ result -> field_count = mysql -> field_count ;
1019+ result -> fields = fields ;
10141020 result -> eof = 1 ;
10151021 DBUG_RETURN (result );
10161022}
@@ -1031,8 +1037,8 @@ mysql_list_processes(MYSQL *mysql)
10311037 free_old_query (mysql );
10321038 pos = (uchar * ) mysql -> net .read_pos ;
10331039 field_count = (uint ) net_field_length (& pos );
1034- if (!(fields = read_rows (mysql ,(MYSQL_FIELD * ) 0 ,
1035- protocol_41 (mysql ) ? 7 : 5 )))
1040+ if (!(fields = ( * mysql -> methods -> read_rows ) (mysql ,(MYSQL_FIELD * ) 0 ,
1041+ protocol_41 (mysql ) ? 7 : 5 )))
10361042 DBUG_RETURN (NULL );
10371043 if (!(mysql -> fields = unpack_fields (fields ,& mysql -> field_alloc ,field_count ,0 ,
10381044 mysql -> server_capabilities )))
@@ -1569,7 +1575,7 @@ my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
15691575 uint field_count ;
15701576 ulong length , param_count ;
15711577 MYSQL_DATA * fields_data ;
1572- DBUG_ENTER ("cli_read_prepare_result " );
1578+ DBUG_ENTER ("read_prepare_result " );
15731579
15741580 mysql = mysql -> last_used_con ;
15751581 if ((length = net_safe_read (mysql )) == packet_error )
@@ -1586,7 +1592,7 @@ my_bool STDCALL cli_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
15861592 mysql -> server_status |= SERVER_STATUS_IN_TRANS ;
15871593
15881594 mysql -> extra_info = net_field_length_ll (& pos );
1589- if (!(fields_data = read_rows (mysql , (MYSQL_FIELD * ) 0 , 7 )))
1595+ if (!(fields_data = ( * mysql -> methods -> read_rows ) (mysql ,(MYSQL_FIELD * )0 , 7 )))
15901596 DBUG_RETURN (1 );
15911597 if (!(stmt -> fields = unpack_fields (fields_data ,& stmt -> mem_root ,
15921598 field_count ,0 ,
@@ -1638,17 +1644,17 @@ mysql_prepare(MYSQL *mysql, const char *query, ulong length)
16381644 }
16391645
16401646 init_alloc_root (& stmt -> mem_root ,8192 ,0 );
1641- if ((* mysql -> read_prepare_result )(mysql , stmt ))
1647+ if ((* mysql -> methods -> read_prepare_result )(mysql , stmt ))
16421648 {
16431649 stmt_close (stmt , 1 );
16441650 DBUG_RETURN (0 );
16451651 }
16461652 if (!(stmt -> params = (MYSQL_BIND * ) alloc_root (& stmt -> mem_root ,
16471653 sizeof (MYSQL_BIND )*
1648- (param_count +
1649- field_count ))))
1654+ (stmt -> param_count +
1655+ stmt -> field_count ))))
16501656 set_stmt_error (stmt , CR_OUT_OF_MEMORY , unknown_sqlstate );
1651- stmt -> bind = stmt -> params + param_count ;
1657+ stmt -> bind = stmt -> params + stmt -> param_count ;
16521658
16531659 stmt -> state = MY_ST_PREPARE ;
16541660 stmt -> mysql = mysql ;
0 commit comments