diff options
Diffstat (limited to 'tests/client_test.c')
-rw-r--r-- | tests/client_test.c | 207 |
1 files changed, 195 insertions, 12 deletions
diff --git a/tests/client_test.c b/tests/client_test.c index 0ba4b4e564c..c568fb4e0a3 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -510,7 +510,8 @@ static void verify_col_data(const char *table, const char *col, static void verify_prepare_field(MYSQL_RES *result, unsigned int no,const char *name, const char *org_name, enum enum_field_types type, const char *table, - const char *org_table, const char *db) + const char *org_table, const char *db, + unsigned long length) { MYSQL_FIELD *field; @@ -526,6 +527,9 @@ static void verify_prepare_field(MYSQL_RES *result, fprintf(stdout,"\n table :`%s`\t(expected: `%s`)", field->table, table); fprintf(stdout,"\n org_table:`%s`\t(expected: `%s`)", field->org_table, org_table); fprintf(stdout,"\n database :`%s`\t(expected: `%s`)", field->db, db); + fprintf(stdout,"\n length :`%ld`\t(expected: `%ld`)", field->length, length); + fprintf(stdout,"\n maxlength:`%ld`", field->max_length); + fprintf(stdout,"\n charsetnr:`%d`", field->charsetnr); fprintf(stdout,"\n"); myassert(strcmp(field->name,name) == 0); myassert(strcmp(field->org_name,org_name) == 0); @@ -533,6 +537,7 @@ static void verify_prepare_field(MYSQL_RES *result, myassert(strcmp(field->table,table) == 0); myassert(strcmp(field->org_table,org_table) == 0); myassert(strcmp(field->db,db) == 0); + myassert(field->length == length); } /* @@ -969,15 +974,15 @@ static void test_prepare_field_result() fprintf(stdout,"\n\n field attributes:\n"); verify_prepare_field(result,0,"int_c","int_c",MYSQL_TYPE_LONG, - "t1","test_prepare_field_result",current_db); + "t1","test_prepare_field_result",current_db,11); verify_prepare_field(result,1,"var_c","var_c",MYSQL_TYPE_VAR_STRING, - "t1","test_prepare_field_result",current_db); + "t1","test_prepare_field_result",current_db,50); verify_prepare_field(result,2,"date","date_c",MYSQL_TYPE_DATE, - "t1","test_prepare_field_result",current_db); + "t1","test_prepare_field_result",current_db,10); verify_prepare_field(result,3,"ts_c","ts_c",MYSQL_TYPE_TIMESTAMP, - "t1","test_prepare_field_result",current_db); + "t1","test_prepare_field_result",current_db,19); verify_prepare_field(result,4,"char_c","char_c",MYSQL_TYPE_STRING, - "t1","test_prepare_field_result",current_db); + "t1","test_prepare_field_result",current_db,3); verify_field_count(result, 5); mysql_free_result(result); @@ -4813,8 +4818,6 @@ static void test_subselect() #if TO_BE_FIXED_IN_SERVER MYSQL_STMT *stmt; int rc; - int id; - ulong length; MYSQL_BIND bind[1]; myheader("test_subselect"); @@ -4849,9 +4852,33 @@ static void test_subselect() /* fetch */ bind[0].buffer_type= FIELD_TYPE_LONG; bind[0].buffer= (char *) &id; - bind[0].length= &length; + bind[0].length= 0; bind[0].is_null= 0; - length= 0; + + stmt = mysql_prepare(mysql, "INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id=?", 100); + mystmt_init(stmt); + + rc = mysql_bind_param(stmt,bind); + mystmt(stmt, rc); + + rc = mysql_bind_result(stmt,bind); + mystmt(stmt, rc); + + id = 2; + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + verify_st_affected_rows(stmt, 1); + + id = 9; + rc = mysql_execute(stmt); + mystmt(stmt, rc); + + verify_st_affected_rows(stmt, 0); + + mysql_stmt_close(stmt); + + myassert(3 == my_stmt_result("SELECT * FROM test_sub2",50)); strmov((char *)query , "SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=?)"); myassert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=8)",100)); @@ -4873,7 +4900,7 @@ static void test_subselect() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d (%lu)",id, length); + fprintf(stdout,"\n row 1: %d",id); myassert(id == 1); rc = mysql_fetch(stmt); @@ -4886,7 +4913,7 @@ static void test_subselect() rc = mysql_fetch(stmt); mystmt(stmt,rc); - fprintf(stdout,"\n row 1: %d (%lu)",id, length); + fprintf(stdout,"\n row 1: %d",id); myassert(id == 0); rc = mysql_fetch(stmt); @@ -5720,6 +5747,161 @@ static void test_stiny_bug() mysql_stmt_close(stmt); } +/******************************************************** +* to test misc field information, bug: #74 * +*********************************************************/ +static void test_field_misc() +{ + MYSQL_STMT *stmt; + MYSQL_RES *result; + MYSQL_BIND bind[1]; + char table_type[NAME_LEN]; + ulong type_length; + int rc; + + myheader("test_field_misc"); + + rc = mysql_query(mysql,"SELECT @@autocommit"); + myquery(rc); + + result = mysql_store_result(mysql); + mytest(result); + + myassert(1 == my_process_result_set(result)); + + verify_prepare_field(result,0, + "@@autocommit","", /* field and its org name */ + MYSQL_TYPE_LONGLONG, /* field type */ + "", "", /* table and its org name */ + "",1); /* db name, length(its bool flag)*/ + + mysql_free_result(result); + + stmt = mysql_prepare(mysql,"SELECT @@autocommit",20); + mystmt_init(stmt); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + result = mysql_prepare_result(stmt); + mytest(result); + + myassert(1 == my_process_stmt_result(stmt)); + + verify_prepare_field(result,0, + "@@autocommit","", /* field and its org name */ + MYSQL_TYPE_LONGLONG, /* field type */ + "", "", /* table and its org name */ + "",1); /* db name, length(its bool flag)*/ + + mysql_free_result(result); + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "SELECT @@table_type", 30); + mystmt_init(stmt); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + bind[0].buffer_type= MYSQL_TYPE_STRING; + bind[0].buffer= table_type; + bind[0].length= &type_length; + bind[0].is_null= 0; + bind[0].buffer_length= NAME_LEN; + + rc = mysql_bind_result(stmt, bind); + mystmt(stmt,rc); + + rc = mysql_fetch(stmt); + mystmt(stmt,rc); + fprintf(stdout,"\n default table type: %s(%ld)", table_type, type_length); + + rc = mysql_fetch(stmt); + myassert(rc == MYSQL_NO_DATA); + + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "SELECT @@table_type", 30); + mystmt_init(stmt); + + result = mysql_prepare_result(stmt); + mytest(result); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + myassert(1 == my_process_stmt_result(stmt)); + + verify_prepare_field(result,0, + "@@table_type","", /* field and its org name */ + MYSQL_TYPE_STRING, /* field type */ + "", "", /* table and its org name */ + "",type_length); /* db name, length */ + + mysql_free_result(result); + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "SELECT @@max_error_count", 30); + mystmt_init(stmt); + + result = mysql_prepare_result(stmt); + mytest(result); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + myassert(1 == my_process_stmt_result(stmt)); + + verify_prepare_field(result,0, + "@@max_error_count","", /* field and its org name */ + MYSQL_TYPE_LONGLONG, /* field type */ + "", "", /* table and its org name */ + "",10); /* db name, length */ + + mysql_free_result(result); + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "SELECT @@max_allowed_packet", 30); + mystmt_init(stmt); + + result = mysql_prepare_result(stmt); + mytest(result); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + myassert(1 == my_process_stmt_result(stmt)); + + verify_prepare_field(result,0, + "@@max_allowed_packet","", /* field and its org name */ + MYSQL_TYPE_LONGLONG, /* field type */ + "", "", /* table and its org name */ + "",10); /* db name, length */ + + mysql_free_result(result); + mysql_stmt_close(stmt); + + stmt = mysql_prepare(mysql, "SELECT @@sql_warnings", 30); + mystmt_init(stmt); + + result = mysql_prepare_result(stmt); + mytest(result); + + rc = mysql_execute(stmt); + mystmt(stmt,rc); + + myassert(1 == my_process_stmt_result(stmt)); + + verify_prepare_field(result,0, + "@@sql_warnings","", /* field and its org name */ + MYSQL_TYPE_LONGLONG, /* field type */ + "", "", /* table and its org name */ + "",1); /* db name, length */ + + mysql_free_result(result); + mysql_stmt_close(stmt); +} + /* Read and parse arguments and MySQL options from my.cnf */ @@ -5937,6 +6119,7 @@ int main(int argc, char **argv) test_ushort_bug(); /* test a simple conv bug from php */ test_sshort_bug(); /* test a simple conv bug from php */ test_stiny_bug(); /* test a simple conv bug from php */ + test_field_misc(); /* check the field info for misc case, bug: #74 */ end_time= time((time_t *)0); total_time+= difftime(end_time, start_time); |