mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Misc cleanups + pure coverage test + Monty's comments
This commit is contained in:
@ -3951,6 +3951,27 @@ mysql_prepare_result(MYSQL_STMT *stmt)
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
/*
|
||||
Returns parameter columns meta information in the form of
|
||||
resultset.
|
||||
*/
|
||||
|
||||
MYSQL_RES * STDCALL
|
||||
mysql_param_result(MYSQL_STMT *stmt)
|
||||
{
|
||||
DBUG_ENTER("mysql_param_result");
|
||||
|
||||
if (!stmt->param_count)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
/*
|
||||
TODO: Fix this when server sends the information.
|
||||
Till then keep a dummy prototype
|
||||
*/
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************************************************
|
||||
Prepare-execute, and param handling
|
||||
@ -4638,7 +4659,7 @@ static void send_data_long(MYSQL_BIND *param, longlong value)
|
||||
}
|
||||
default:
|
||||
{
|
||||
uint length= sprintf(buffer,"%lld",value);
|
||||
uint length= (uint)(longlong10_to_str(value,buffer,10)-buffer);
|
||||
*param->length= length;
|
||||
buffer[length]='\0';
|
||||
}
|
||||
@ -4678,7 +4699,7 @@ static void send_data_double(MYSQL_BIND *param, double value)
|
||||
}
|
||||
default:
|
||||
{
|
||||
uint length= sprintf(buffer,"%g",value);
|
||||
uint length= my_sprintf(buffer,(buffer,"%g",value));
|
||||
*param->length= length;
|
||||
buffer[length]='\0';
|
||||
}
|
||||
@ -5216,7 +5237,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
||||
{
|
||||
MYSQL *mysql= stmt->mysql;
|
||||
MYSQL_RES *result;
|
||||
DBUG_ENTER("mysql_stmt_tore_result");
|
||||
DBUG_ENTER("mysql_stmt_store_result");
|
||||
|
||||
mysql= mysql->last_used_con;
|
||||
|
||||
@ -5224,9 +5245,8 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
||||
DBUG_RETURN(0);
|
||||
if (mysql->status != MYSQL_STATUS_GET_RESULT)
|
||||
{
|
||||
strmov(mysql->net.last_error,
|
||||
ER(mysql->net.last_errno= CR_COMMANDS_OUT_OF_SYNC));
|
||||
DBUG_RETURN(0);
|
||||
set_stmt_error(stmt, CR_COMMANDS_OUT_OF_SYNC);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
mysql->status= MYSQL_STATUS_READY; /* server is ready */
|
||||
if (!(result= (MYSQL_RES*) my_malloc((uint) (sizeof(MYSQL_RES)+
|
||||
@ -5234,8 +5254,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
|
||||
stmt->field_count),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
{
|
||||
mysql->net.last_errno= CR_OUT_OF_MEMORY;
|
||||
strmov(mysql->net.last_error, ER(mysql->net.last_errno));
|
||||
set_stmt_error(stmt, CR_OUT_OF_MEMORY);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
stmt->result_buffered= 1;
|
||||
|
@ -1592,7 +1592,7 @@ static void test_select()
|
||||
nData=10;
|
||||
strcpy(szData,(char *)"venu");
|
||||
bind[1].buffer_type=FIELD_TYPE_STRING;
|
||||
bind[1].buffer=(char *)&szData;
|
||||
bind[1].buffer=(char *)szData;
|
||||
bind[1].buffer_length= 4;
|
||||
bind[1].length= &length[1];
|
||||
length[1]= 4;
|
||||
@ -2480,7 +2480,7 @@ static void test_bind_result_ext()
|
||||
bind[5].buffer=(char *)&d_data;
|
||||
|
||||
bind[6].buffer_type=MYSQL_TYPE_STRING;
|
||||
bind[6].buffer= (char *)&szData;
|
||||
bind[6].buffer= (char *)szData;
|
||||
bind[6].buffer_length= sizeof(szData);
|
||||
bind[6].length= &szLength;
|
||||
|
||||
@ -4946,6 +4946,154 @@ static void test_date_dt()
|
||||
test_bind_date_conv(2);
|
||||
}
|
||||
|
||||
/*
|
||||
Misc tests to keep pure coverage happy
|
||||
*/
|
||||
static void test_pure_coverage()
|
||||
{
|
||||
MYSQL_STMT *stmt;
|
||||
MYSQL_BIND bind[1];
|
||||
int rc;
|
||||
ulong length;
|
||||
|
||||
myheader("test_pure_coverage");
|
||||
|
||||
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_pure");
|
||||
myquery(rc);
|
||||
|
||||
rc = mysql_query(mysql,"CREATE TABLE test_pure(c1 int, c2 varchar(20))");
|
||||
myquery(rc);
|
||||
|
||||
stmt = mysql_prepare(mysql,"insert into test_pure(c67788) values(10)",100);
|
||||
mystmt_init_r(stmt);
|
||||
|
||||
stmt = mysql_prepare(mysql,"insert into test_pure(c2) values(?)",100);
|
||||
mystmt_init(stmt);
|
||||
|
||||
rc = mysql_execute(stmt);
|
||||
mystmt_r(stmt, rc);/* No parameters supplied */
|
||||
|
||||
bind[0].length= &length;
|
||||
bind[0].is_null= 0;
|
||||
bind[0].buffer_length= 0;
|
||||
|
||||
bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
|
||||
rc = mysql_bind_param(stmt, bind);
|
||||
mystmt_r(stmt, rc); /* unsupported buffer type */
|
||||
|
||||
bind[0].buffer_type= MYSQL_TYPE_STRING;
|
||||
rc = mysql_bind_param(stmt, bind);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_send_long_data(stmt, 20, (char *)"venu", 4);
|
||||
mystmt_r(stmt, rc); /* wrong param number */
|
||||
|
||||
rc = mysql_stmt_store_result(stmt);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
mysql_stmt_close(stmt);
|
||||
|
||||
stmt = mysql_prepare(mysql,"select * from test_pure",100);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_execute(stmt);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_stmt_store_result(stmt);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_stmt_store_result(stmt);
|
||||
mystmt_r(stmt, rc); /* commands out of sync */
|
||||
|
||||
mysql_stmt_close(stmt);
|
||||
|
||||
mysql_query(mysql,"DROP TABLE test_pure");
|
||||
mysql_commit(mysql);
|
||||
}
|
||||
|
||||
/*
|
||||
test for string buffer fetch
|
||||
*/
|
||||
|
||||
static void test_buffers()
|
||||
{
|
||||
MYSQL_STMT *stmt;
|
||||
MYSQL_BIND bind[1];
|
||||
int rc;
|
||||
ulong length;
|
||||
my_bool is_null;
|
||||
char buffer[20];
|
||||
|
||||
myheader("test_buffers");
|
||||
|
||||
rc = mysql_query(mysql,"DROP TABLE IF EXISTS test_buffer");
|
||||
myquery(rc);
|
||||
|
||||
rc = mysql_query(mysql,"CREATE TABLE test_buffer(str varchar(20))");
|
||||
myquery(rc);
|
||||
|
||||
rc = mysql_query(mysql,"insert into test_buffer values('MySQL')\
|
||||
,('Database'),('Open-Source'),('Popular')");
|
||||
myquery(rc);
|
||||
|
||||
stmt = mysql_prepare(mysql,"select str from test_buffer",100);
|
||||
mystmt_init(stmt);
|
||||
|
||||
rc = mysql_execute(stmt);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
bind[0].length= &length;
|
||||
bind[0].is_null= &is_null;
|
||||
bind[0].buffer_length= 1;
|
||||
bind[0].buffer_type= MYSQL_TYPE_STRING;
|
||||
bind[0].buffer= (char *)buffer;
|
||||
|
||||
rc = mysql_bind_result(stmt, bind);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_stmt_store_result(stmt);
|
||||
mystmt(stmt, rc);
|
||||
|
||||
buffer[1]='X';
|
||||
rc = mysql_fetch(stmt);
|
||||
mystmt(stmt, rc);
|
||||
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
|
||||
myassert(buffer[0] == 'M');
|
||||
myassert(buffer[1] == 'X');
|
||||
myassert(length == 5);
|
||||
|
||||
bind[0].buffer_length=8;
|
||||
rc = mysql_bind_result(stmt, bind);/* re-bind */
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_fetch(stmt);
|
||||
mystmt(stmt, rc);
|
||||
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
|
||||
myassert(strncmp(buffer,"Database",8) == 0);
|
||||
myassert(length == 8);
|
||||
|
||||
bind[0].buffer_length=12;
|
||||
rc = mysql_bind_result(stmt, bind);/* re-bind */
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_fetch(stmt);
|
||||
mystmt(stmt, rc);
|
||||
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
|
||||
myassert(strcmp(buffer,"Open-Source") == 0);
|
||||
myassert(length == 11);
|
||||
|
||||
bind[0].buffer_length=6;
|
||||
rc = mysql_bind_result(stmt, bind);/* re-bind */
|
||||
mystmt(stmt, rc);
|
||||
|
||||
rc = mysql_fetch(stmt);
|
||||
mystmt(stmt, rc);
|
||||
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
|
||||
myassert(strncmp(buffer,"Popula",6) == 0);
|
||||
myassert(length == 7);
|
||||
|
||||
mysql_stmt_close(stmt);
|
||||
}
|
||||
|
||||
static struct my_option myctest_long_options[] =
|
||||
{
|
||||
@ -5065,11 +5213,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
/* Start of tests */
|
||||
test_count= 0;
|
||||
|
||||
test_select_show(); /* test show syntax */
|
||||
test_prepare_alter(); /* change table schema in middle of prepare */
|
||||
test_manual_sample(); /* sample in the manual */
|
||||
test_bind_result(); /* result bind test */
|
||||
|
||||
test_fetch_null(); /* to fetch null data */
|
||||
test_fetch_date(); /* to fetch date,time and timestamp */
|
||||
test_fetch_str(); /* to fetch string to all types */
|
||||
@ -5086,7 +5230,6 @@ int main(int argc, char **argv)
|
||||
test_select(); /* simple select test */
|
||||
test_select_version(); /* select with variables */
|
||||
test_select_simple(); /* simple select prepare */
|
||||
test_set_variable(); /* set variable prepare */
|
||||
#if NOT_USED
|
||||
/*
|
||||
Enable this tests from 4.1.1 when mysql_param_result() is
|
||||
@ -5096,28 +5239,20 @@ int main(int argc, char **argv)
|
||||
test_update_meta(); /* update param meta information */
|
||||
test_insert_meta(); /* insert param meta information */
|
||||
#endif
|
||||
test_simple_update(); /* simple update test */
|
||||
test_func_fields(); /* test for new 4.1 MYSQL_FIELD members */
|
||||
test_long_data(); /* test for sending text data in chunks */
|
||||
test_insert(); /* simple insert test - prepare */
|
||||
test_set_variable(); /* prepare with set variables */
|
||||
test_tran_innodb(); /* test for mysql_commit(), rollback() and
|
||||
autocommit() */
|
||||
test_select_show(); /* prepare - show test */
|
||||
test_simple_update(); /* simple prepare - update */
|
||||
test_prepare_noparam(); /* prepare without parameters */
|
||||
test_insert(); /* prepare with insert */
|
||||
test_bind_result(); /* result bind test */
|
||||
test_long_data(); /* long data handling in pieces */
|
||||
test_prepare_simple(); /* simple prepare */
|
||||
test_prepare(); /* prepare test */
|
||||
test_null(); /* test null data handling */
|
||||
test_debug_example(); /* some debugging case */
|
||||
test_update(); /* prepare-update test */
|
||||
test_simple_update(); /* simple prepare with update */
|
||||
test_long_data(); /* long data handling in pieces */
|
||||
test_simple_delete(); /* prepare with delete */
|
||||
test_field_names(); /* test for field names */
|
||||
test_double_compare(); /* float comparision */
|
||||
client_query(); /* simple client query test */
|
||||
client_store_result(); /* usage of mysql_store_result() */
|
||||
@ -5126,8 +5261,6 @@ int main(int argc, char **argv)
|
||||
test_tran_innodb(); /* transaction test on InnoDB table type */
|
||||
test_prepare_ext(); /* test prepare with all types conversion -- TODO */
|
||||
test_prepare_syntax(); /* syntax check for prepares */
|
||||
test_prepare_field_result(); /* prepare meta info */
|
||||
test_prepare_resultset(); /* prepare meta info test */
|
||||
test_field_names(); /* test for field names */
|
||||
test_field_flags(); /* test to help .NET provider team */
|
||||
test_long_data_str(); /* long data handling */
|
||||
@ -5136,7 +5269,6 @@ int main(int argc, char **argv)
|
||||
test_warnings(); /* show warnings test */
|
||||
test_errors(); /* show errors test */
|
||||
test_prepare_resultset();/* prepare meta info test */
|
||||
test_func_fields(); /* FUNCTION field info */
|
||||
/*test_stmt_close(); */ /* mysql_stmt_close() test -- hangs */
|
||||
test_prepare_field_result(); /* prepare meta info */
|
||||
test_multi_stmt(); /* multi stmt test -TODO*/
|
||||
@ -5144,13 +5276,16 @@ int main(int argc, char **argv)
|
||||
test_store_result(); /* test the store_result */
|
||||
test_store_result1(); /* test store result without buffers */
|
||||
test_store_result2(); /* test store result for misc case */
|
||||
test_multi_stmt(); /* test multi stmt */
|
||||
test_subselect(); /* test subselect prepare -TODO*/
|
||||
test_date(); /* test the MYSQL_TIME conversion */
|
||||
test_date_date(); /* test conversion from DATE to all */
|
||||
test_date_time(); /* test conversion from TIME to all */
|
||||
test_date_ts() ; /* test conversion from TIMESTAMP to all */
|
||||
test_date_dt() ; /* test conversion from DATETIME to all */
|
||||
test_prepare_alter(); /* change table schema in middle of prepare */
|
||||
test_manual_sample(); /* sample in the manual */
|
||||
test_pure_coverage(); /* keep pure coverage happy */
|
||||
test_buffers(); /* misc buffer handling */
|
||||
/* End of tests */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user