static void test_union3() { MYSQL_STMT *stmt; MYSQL_BIND bind[MAX_RES_FIELDS]; MYSQL_RES *prepare_meta_result; my_bool is_null[MAX_RES_FIELDS]; char data[MAX_RES_FIELDS][MAX_FIELD_DATA_SIZE]; ulong length[MAX_RES_FIELDS]; int i, rc; uint field_count; uint row_count= 0; char my_val[MAX_FIELD_DATA_SIZE]; char my_stmt[255]; myheader("test_union3"); strcpy(my_val, "abc"); /* verify, that the following functions sequence works correct */ strcpy(my_stmt, "select ? as my_col" ); fprintf(stdout, "statement is '%s' \n", my_stmt); stmt= mysql_simple_prepare(mysql, my_stmt); check_stmt(stmt); verify_param_count(stmt,1); for(i= 0; i < MAX_RES_FIELDS; i++) { bind[i].buffer_type= MYSQL_TYPE_STRING; bind[i].buffer_length= MAX_FIELD_DATA_SIZE; bind[i].length= &length[i]; bind[i].buffer= (char*) data[i]; bind[i].is_null= &is_null[i]; } strcpy(data[0], my_val); length[0]= strlen(data[0]); prepare_meta_result= mysql_stmt_result_metadata(stmt); if (!prepare_meta_result) { fprintf(stderr, " mysql_stmt_result_metadata(), returned no meta information\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } field_count= 1; verify_field_count(prepare_meta_result, field_count); /* includes mysql_num_fields */ rc= mysql_stmt_bind_param(stmt, bind); myquery(rc); fprintf(stdout, "\n\nvalue of parameter is '%s'", data[0]); rc= mysql_stmt_execute(stmt); check_execute(stmt, rc); rc= mysql_stmt_bind_result(stmt, bind); check_execute(stmt, rc); /* initialize result buffers */ strcpy(data[0], "init"); length[0]= strlen(data[0]); rc= mysql_stmt_store_result(stmt); check_execute(stmt, rc); /* Fetch all rows */ row_count= 0; fprintf(stdout, "\n\nFetching results ...\n"); while (!mysql_stmt_fetch(stmt)) { row_count++; fprintf(stdout, " row %d\n", row_count); /* column 1 */ fprintf(stdout, " column1 (string) : "); if (is_null[0]) fprintf(stdout, " NULL\n"); else fprintf(stdout, " %s (%lu)\n", data[0], length[0]); fprintf(stdout, "\n"); if ( strcmp(data[0],my_val) != 0 ) { fprintf(stdout, " *** ERROR: the column content is wrong *** \n"); fprintf(stdout, " expected '%s' got '%s' \n", my_val, data[0]); exit(1); } } if ( row_count != 1 ) { fprintf(stdout, " *** ERROR: the number of rows is wrong *** \n"); fprintf(stdout, " expected %d got %d \n", 1, row_count); exit(1); } mysql_stmt_close(stmt); strcpy(my_stmt, "select ? as my_col union distinct select ?" ); fprintf(stdout, "statement is '%s' \n", my_stmt); stmt= mysql_simple_prepare(mysql, my_stmt); check_stmt(stmt); verify_param_count(stmt,2); for(i=0; i < MAX_RES_FIELDS; i++) { bind[i].buffer_type= MYSQL_TYPE_STRING; bind[i].buffer_length= MAX_FIELD_DATA_SIZE; bind[i].length= &length[i]; bind[i].buffer= (char*) data[i]; bind[i].is_null= &is_null[i]; strcpy(data[i], my_val); length[i]= strlen(data[i]); } prepare_meta_result= mysql_stmt_result_metadata(stmt); if (!prepare_meta_result) { fprintf(stderr, " mysql_stmt_result_metadata(), returned no meta information\n"); fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); exit(0); } verify_field_count(prepare_meta_result, 1); /* includes mysql_num_fields */ rc= mysql_stmt_bind_param(stmt, bind); myquery(rc); fprintf(stdout, "\n\nvalues of parameters are '%s' '%s'", data[0], data[1]); rc= mysql_stmt_execute(stmt); check_execute(stmt, rc); rc= mysql_stmt_bind_result(stmt, bind); check_execute(stmt, rc); rc= mysql_stmt_store_result(stmt); check_execute(stmt, rc); /* initialize result buffers */ for(i=0; i < MAX_RES_FIELDS; i++) { strcpy(data[i], "init"); length[i]= strlen(data[i]); } /* Fetch all rows */ row_count= 0; fprintf(stdout, "\n\nFetching results ...\n"); while (!mysql_stmt_fetch(stmt)) { row_count++; fprintf(stdout, " row %d\n", row_count); /* column 1 */ fprintf(stdout, " column1 (string) : "); if (is_null[0]) fprintf(stdout, " NULL\n"); else fprintf(stdout, " %s (%lu)\n", data[0], length[0]); fprintf(stdout, "\n"); if ( strcmp(data[0],my_val) != 0 ) { fprintf(stdout, " *** ERROR: the column content is wrong *** \n"); fprintf(stdout, " expected '%s' got '%s' \n", my_val, data[0]); exit(1); } } if ( row_count != 1 ) { fprintf(stdout, " *** ERROR: the number of rows is wrong *** \n"); fprintf(stdout, " expected %d got %d \n", 1, row_count); exit(1); } mysql_stmt_close(stmt); }