List:Commits« Previous MessageNext Message »
From:kroki Date:November 22 2006 11:08am
Subject:bk commit into 5.1 tree (kroki:1.2376)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of tomash. When tomash does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-11-22 14:08:43+03:00, kroki@stripped +2 -0
  Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0-bug21635
  into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.1-bug21635
  MERGE: 1.1810.2292.1

  sql/item_sum.cc@stripped, 2006-11-22 14:06:40+03:00, kroki@stripped +0 -0
    Auto merged
    MERGE: 1.170.1.16

  tests/mysql_client_test.c@stripped, 2006-11-22 14:08:40+03:00, kroki@stripped +68 -68
    Manual merge.
    MERGE: 1.167.24.1

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	kroki
# Host:	moonlight.intranet
# Root:	/home/tomash/src/mysql_ab/mysql-5.1-bug21635/RESYNC

--- 1.196/sql/item_sum.cc	2006-11-22 14:08:50 +03:00
+++ 1.197/sql/item_sum.cc	2006-11-22 14:08:50 +03:00
@@ -322,9 +322,13 @@ void Item_sum::make_field(Send_field *tm
   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;
   }

--- 1.228/tests/mysql_client_test.c	2006-11-22 14:08:50 +03:00
+++ 1.229/tests/mysql_client_test.c	2006-11-22 14:08:50 +03:00
@@ -15586,6 +15586,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
 */
 
@@ -15864,6 +15931,7 @@ static struct my_tests_st my_tests[]= {
   { "test_bug21206", test_bug21206 },
   { "test_bug21726", test_bug21726 },
   { "test_bug23383", test_bug23383 },
+  { "test_bug21635", test_bug21635 },
   { 0, 0 }
 };
 
Thread
bk commit into 5.1 tree (kroki:1.2376)kroki22 Nov