Commit 33d63bec authored by unknown's avatar unknown
Browse files

Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-runtime

into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-bug21635


tests/mysql_client_test.c:
  Manual merge.
parents 75432f3f 18770d2f
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -71,9 +71,13 @@ void Item_sum::make_field(Send_field *tmp_field)
  if (args[0]->type() == Item::FIELD_ITEM && keep_field_type())
  {
    ((Item_field*) args[0])->field->make_field(tmp_field);
    tmp_field->db_name=(char*)"";
    tmp_field->org_table_name=tmp_field->table_name=(char*)"";
    tmp_field->org_col_name=tmp_field->col_name=name;
    /* For expressions only col_name should be non-empty string. */
    char *empty_string= (char*)"";
    tmp_field->db_name= empty_string;
    tmp_field->org_table_name= empty_string;
    tmp_field->table_name= empty_string;
    tmp_field->org_col_name= empty_string;
    tmp_field->col_name= name;
    if (maybe_null)
      tmp_field->flags&= ~NOT_NULL_FLAG;
  }
+68 −0
Original line number Diff line number Diff line
@@ -12026,6 +12026,73 @@ static void test_bug23383()
}


/*
  BUG#21635: MYSQL_FIELD struct's member strings seem to misbehave for
  expression cols

  Check that for MIN(), MAX(), COUNT() only MYSQL_FIELD::name is set
  to either expression or its alias, and db, org_table, table,
  org_name fields are empty strings.
*/
static void test_bug21635()
{
  const char *expr[]=
  {
    "MIN(i)", "MIN(i)",
    "MIN(i) AS A1", "A1",
    "MAX(i)", "MAX(i)",
    "MAX(i) AS A2", "A2",
    "COUNT(i)", "COUNT(i)",
    "COUNT(i) AS A3", "A3",
  };
  const char *query_end;
  MYSQL_RES *result;
  MYSQL_FIELD *field;
  unsigned int field_count, i;
  int rc;

  DBUG_ENTER("test_bug21635");
  myheader("test_bug21635");

  query_end= strxmov(query, "SELECT ", NullS);
  for (i= 0; i < sizeof(expr) / sizeof(*expr) / 2; ++i)
    query_end= strxmov(query_end, expr[i * 2], ", ", NullS);
  query_end= strxmov(query_end - 2, " FROM t1 GROUP BY i", NullS);
  DIE_UNLESS(query_end - query < MAX_TEST_QUERY_LENGTH);

  rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
  myquery(rc);
  rc= mysql_query(mysql, "CREATE TABLE t1 (i INT)");
  myquery(rc);
  rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
  myquery(rc);

  rc= mysql_real_query(mysql, query, query_end - query);
  myquery(rc);

  result= mysql_use_result(mysql);
  DIE_UNLESS(result);

  field_count= mysql_field_count(mysql);
  for (i= 0; i < field_count; ++i)
  {
    field= mysql_fetch_field_direct(result, i);
    printf("%s -> %s ... ", expr[i * 2], field->name);
    fflush(stdout);
    DIE_UNLESS(field->db[0] == 0 && field->org_table[0] == 0 &&
               field->table[0] == 0 && field->org_name[0] == 0);
    DIE_UNLESS(strcmp(field->name, expr[i * 2 + 1]) == 0);
    puts("OK");
  }

  mysql_free_result(result);
  rc= mysql_query(mysql, "DROP TABLE t1");
  myquery(rc);

  DBUG_VOID_RETURN;
}


/*
  Read and parse arguments and MySQL options from my.cnf
*/
@@ -12254,6 +12321,7 @@ static struct my_tests_st my_tests[]= {
  { "test_bug20152", test_bug20152 },
  { "test_bug21726", test_bug21726 },
  { "test_bug23383", test_bug23383 },
  { "test_bug21635", test_bug21635 },
  { 0, 0 }
};