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);

}
