summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-09-21 20:16:36 +0200
committerSergei Golubchik <serg@mariadb.org>2018-09-21 20:22:14 +0200
commite7d152293d23e0ea1ba49ce225ef605f34c5a303 (patch)
tree917eb2f47edde2c8c717ce77d96c794c2cefbb2f
parente4b466aa3dcb4f4c87368e61ff5a790932ff5326 (diff)
downloadmariadb-git-e7d152293d23e0ea1ba49ce225ef605f34c5a303.tar.gz
MDEV-13089 identifier quoting in partitioning
cover ALTER TABLE
-rw-r--r--mysql-test/suite/parts/r/show_create.result6
-rw-r--r--mysql-test/suite/parts/t/show_create.test1
-rw-r--r--sql/ha_partition.cc6
-rw-r--r--sql/sql_partition.cc12
-rw-r--r--sql/sql_partition.h4
-rw-r--r--sql/sql_table.cc24
6 files changed, 28 insertions, 25 deletions
diff --git a/mysql-test/suite/parts/r/show_create.result b/mysql-test/suite/parts/r/show_create.result
index 596233fdf8b..17f89161f5e 100644
--- a/mysql-test/suite/parts/r/show_create.result
+++ b/mysql-test/suite/parts/r/show_create.result
@@ -109,9 +109,5 @@ alter table t1 add partition (partition p1 values less than (10));
set sql_mode= default;
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 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"p0" VALUES LESS THAN (5) ENGINE = MyISAM,
- PARTITION "p1" VALUES LESS THAN (10)' at line 2
-Warnings:
-Warning 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"p0" VALUES LESS THAN (5) ENGINE = MyISAM,
- PARTITION "p1" VALUES LESS THAN (10)' at line 2
+t1 MyISAM 10 Fixed 0 0 0 0 2048 0 NULL X X NULL latin1_swedish_ci NULL partitioned
drop table t1;
diff --git a/mysql-test/suite/parts/t/show_create.test b/mysql-test/suite/parts/t/show_create.test
index 4a54b6b41b3..3f62ee11757 100644
--- a/mysql-test/suite/parts/t/show_create.test
+++ b/mysql-test/suite/parts/t/show_create.test
@@ -47,5 +47,6 @@ create table t1 (a int) partition by range(a) (partition p0 values less than (5)
set sql_mode='ansi_quotes';
alter table t1 add partition (partition p1 values less than (10));
set sql_mode= default;
+--replace_column 12 X 13 X
show table status;
drop table t1;
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 43f936cf200..c05f55e457d 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -9092,11 +9092,9 @@ int ha_partition::check_for_upgrade(HA_CHECK_OPT *check_opt)
}
m_part_info->key_algorithm= partition_info::KEY_ALGORITHM_51;
if (skip_generation ||
- !(part_buf= generate_partition_syntax(thd, m_part_info,
+ !(part_buf= generate_partition_syntax_for_frm(thd, m_part_info,
&part_buf_len,
- true,
- NULL,
- NULL)) ||
+ NULL, NULL)) ||
print_admin_msg(thd, SQL_ADMIN_MSG_TEXT_SIZE + 1, "error",
table_share->db.str,
table->alias,
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index f5467e85f62..153c1e0ff2e 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -2219,6 +2219,18 @@ static int add_key_with_algorithm(String *str, partition_info *part_info)
return err;
}
+char *generate_partition_syntax_for_frm(THD *thd, partition_info *part_info,
+ uint *buf_length,
+ HA_CREATE_INFO *create_info,
+ Alter_info *alter_info)
+{
+ sql_mode_t old_mode= thd->variables.sql_mode;
+ thd->variables.sql_mode &= ~MODE_ANSI_QUOTES;
+ char *res= generate_partition_syntax(thd, part_info, buf_length,
+ true, create_info, alter_info);
+ thd->variables.sql_mode= old_mode;
+ return res;
+}
/*
Generate the partition syntax from the partition data structure.
diff --git a/sql/sql_partition.h b/sql/sql_partition.h
index acca6f61f01..d1eb208cbd1 100644
--- a/sql/sql_partition.h
+++ b/sql/sql_partition.h
@@ -272,6 +272,10 @@ char *generate_partition_syntax(THD *thd, partition_info *part_info,
bool show_partition_options,
HA_CREATE_INFO *create_info,
Alter_info *alter_info);
+char *generate_partition_syntax_for_frm(THD *thd, partition_info *part_info,
+ uint *buf_length,
+ HA_CREATE_INFO *create_info,
+ Alter_info *alter_info);
bool verify_data_with_partition(TABLE *table, TABLE *part_table,
uint32 part_id);
bool compare_partition_options(HA_CREATE_INFO *table_create_info,
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 4aed06e3590..02780e7d1e0 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -30,7 +30,6 @@
#include "strfunc.h" // find_type2, find_set
#include "sql_truncate.h" // regenerate_locked_table
#include "sql_partition.h" // mem_alloc_error,
- // generate_partition_syntax,
// partition_info
// NOT_A_PARTITION_ID
#include "sql_db.h" // load_db_opt_by_name
@@ -1820,13 +1819,10 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
partition_info *part_info= lpt->table->part_info;
if (part_info)
{
- if (!(part_syntax_buf= generate_partition_syntax(lpt->thd, part_info,
- &syntax_len, TRUE,
- lpt->create_info,
- lpt->alter_info)))
- {
+ part_syntax_buf= generate_partition_syntax_for_frm(lpt->thd, part_info,
+ &syntax_len, lpt->create_info, lpt->alter_info);
+ if (!part_syntax_buf)
DBUG_RETURN(TRUE);
- }
part_info->part_info_string= part_syntax_buf;
part_info->part_info_len= syntax_len;
}
@@ -1902,10 +1898,9 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
{
TABLE_SHARE *share= lpt->table->s;
char *tmp_part_syntax_str;
- if (!(part_syntax_buf= generate_partition_syntax(lpt->thd, part_info,
- &syntax_len, TRUE,
- lpt->create_info,
- lpt->alter_info)))
+ part_syntax_buf= generate_partition_syntax_for_frm(lpt->thd,
+ part_info, &syntax_len, lpt->create_info, lpt->alter_info);
+ if (!part_syntax_buf)
{
error= 1;
goto err;
@@ -4564,11 +4559,8 @@ handler *mysql_create_frm_image(THD *thd,
We reverse the partitioning parser and generate a standard format
for syntax stored in frm file.
*/
- sql_mode_t old_mode= thd->variables.sql_mode;
- thd->variables.sql_mode &= ~MODE_ANSI_QUOTES;
- part_syntax_buf= generate_partition_syntax(thd, part_info, &syntax_len,
- true, create_info, alter_info);
- thd->variables.sql_mode= old_mode;
+ part_syntax_buf= generate_partition_syntax_for_frm(thd, part_info,
+ &syntax_len, create_info, alter_info);
if (!part_syntax_buf)
goto err;
part_info->part_info_string= part_syntax_buf;