Commit 42d7e8c0 authored by unknown's avatar unknown
Browse files

BUG#18750: Various problems with partition names, quotation marks


mysql-test/r/partition.result:
  Added new test cases
mysql-test/t/partition.test:
  Added new test cases
sql/partition_info.cc:
  Check partition names that they don't have trailing spaces
sql/share/errmsg.txt:
  Added error code for wrong partition names
sql/sql_partition.cc:
  New method to add partition name strings, ignore OPTION_SHOW_QUOTE_CREATE
sql/sql_show.cc:
  require_quotes had a bug with identifiers that consisted of only digits,
  these are allowed identifiers but must be quoted and require_quote didn't
  tell this.
sql/sql_yacc.yy:
  Partition names should identifers and not ident_or_text
parent a514095a
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -839,4 +839,21 @@ SHOW TABLE STATUS;
Name	Engine	Version	Row_format	Rows	Avg_row_length	Data_length	Max_data_length	Index_length	Data_free	Auto_increment	Create_time	Update_time	Check_time	Collation	Checksum	Create_options	Comment
t1	MyISAM	10	Dynamic	0	0	0	0	0	0	NULL	NULL	NULL	NULL	latin1_swedish_ci	NULL	partitioned	
DROP TABLE t1;
create table t1 (a int)
partition by list (a)
(partition `s1 s2` values in (0));
drop table t1;
create table t1 (a int)
partition by list (a)
(partition `7` values in (0));
drop table t1;
create table t1 (a int)
partition by list (a)
(partition `s1 s2 ` values in (0));
ERROR HY000: Incorrect partition name
create table t1 (a int)
partition by list (a)
subpartition by hash (a)
(partition p1 values in (0) (subpartition `p1 p2 `));
ERROR HY000: Incorrect partition name
End of 5.1 tests
+24 −0
Original line number Diff line number Diff line
@@ -956,4 +956,28 @@ PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM);
SHOW TABLE STATUS;
DROP TABLE t1;

#
#BUG 18750 Problems with partition names
#
create table t1 (a int)
partition by list (a)
(partition `s1 s2` values in (0));
drop table t1;

create table t1 (a int)
partition by list (a)
(partition `7` values in (0));
drop table t1;

--error ER_WRONG_PARTITION_NAME
create table t1 (a int)
partition by list (a)
(partition `s1 s2 ` values in (0));

--error ER_WRONG_PARTITION_NAME
create table t1 (a int)
partition by list (a)
subpartition by hash (a)
(partition p1 values in (0) (subpartition `p1 p2 `));

--echo End of 5.1 tests
+12 −0
Original line number Diff line number Diff line
@@ -696,6 +696,12 @@ bool partition_info::check_partition_info(handlerton **eng_type,
      partition_element *part_elem= part_it++;
      if (!is_sub_partitioned())
      {
        if (check_table_name(part_elem->partition_name,
                             strlen(part_elem->partition_name)))
        {
          my_error(ER_WRONG_PARTITION_NAME, MYF(0));
          goto end;
        }
        if (part_elem->engine_type == NULL)
          part_elem->engine_type= default_engine_type;
        DBUG_PRINT("info", ("engine = %d",
@@ -709,6 +715,12 @@ bool partition_info::check_partition_info(handlerton **eng_type,
        do
        {
          part_elem= sub_it++;
          if (check_table_name(part_elem->partition_name,
                               strlen(part_elem->partition_name)))
          {
            my_error(ER_WRONG_PARTITION_NAME, MYF(0));
            goto end;
          }
          if (part_elem->engine_type == NULL)
            part_elem->engine_type= default_engine_type;
          DBUG_PRINT("info", ("engine = %u",
+3 −0
Original line number Diff line number Diff line
@@ -5826,3 +5826,6 @@ ER_NDB_CANT_SWITCH_BINLOG_FORMAT
	eng "The NDB cluster engine does not support changing the binlog format on the fly yet"
ER_PARTITION_NO_TEMPORARY
	eng "Cannot create temporary table with partitions"
ER_WRONG_PARTITION_NAME
        eng "Incorrect partition name"
        swe "Felaktigt partitionsnamn"
+17 −2
Original line number Diff line number Diff line
@@ -1614,6 +1614,21 @@ static int add_key_partition(File fptr, List<char> field_list)
  return err;
}

static int add_name_string(File fptr, const char *name)
{
  int err;
  String name_string("", 0, system_charset_info);
  THD *thd= current_thd;
  ulonglong save_options= thd->options;

  thd->options= 0;
  append_identifier(thd, &name_string, name,
                    strlen(name));
  thd->options= save_options;
  err= add_string_object(fptr, &name_string);
  return err;
}

static int add_int(File fptr, longlong number)
{
  llstr(number, buff);
@@ -1912,7 +1927,7 @@ char *generate_partition_syntax(partition_info *part_info,
          part_info->part_state_len= part_state_id+1;
        }
        err+= add_partition(fptr);
        err+= add_string(fptr, part_elem->partition_name);
        err+= add_name_string(fptr, part_elem->partition_name);
        err+= add_space(fptr);
        err+= add_partition_values(fptr, part_info, part_elem);
        if (!part_info->is_sub_partitioned())
@@ -1928,7 +1943,7 @@ char *generate_partition_syntax(partition_info *part_info,
          {
            part_elem= sub_it++;
            err+= add_subpartition(fptr);
            err+= add_string(fptr, part_elem->partition_name);
            err+= add_name_string(fptr, part_elem->partition_name);
            err+= add_space(fptr);
            err+= add_partition_options(fptr, part_elem);
            if (j != (no_subparts-1))
Loading