Skip to content

Commit 97c4cd5

Browse files
author
Nisha Gopalakrishnan
committed
Merge branch 'mysql-5.5' into mysql-5.6
2 parents 2f5d887 + be901b6 commit 97c4cd5

File tree

4 files changed

+229
-140
lines changed

4 files changed

+229
-140
lines changed

sql/ha_partition.cc

Lines changed: 101 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ int ha_partition::create(const char *name, TABLE *table_arg,
703703
HA_CREATE_INFO *create_info)
704704
{
705705
int error;
706-
char name_buff[FN_REFLEN], name_lc_buff[FN_REFLEN];
706+
char name_buff[FN_REFLEN + 1], name_lc_buff[FN_REFLEN + 1];
707707
char *name_buffer_ptr;
708708
const char *path;
709709
uint i;
@@ -745,8 +745,10 @@ int ha_partition::create(const char *name, TABLE *table_arg,
745745
for (j= 0; j < m_part_info->num_subparts; j++)
746746
{
747747
part_elem= sub_it++;
748-
create_partition_name(name_buff, path, name_buffer_ptr,
749-
NORMAL_PART_NAME, FALSE);
748+
if ((error= create_partition_name(name_buff, path, name_buffer_ptr,
749+
NORMAL_PART_NAME, FALSE)))
750+
goto create_error;
751+
750752
if ((error= set_up_table_before_create(table_arg, name_buff,
751753
create_info, part_elem)) ||
752754
((error= (*file)->ha_create(name_buff, table_arg, create_info))))
@@ -758,8 +760,10 @@ int ha_partition::create(const char *name, TABLE *table_arg,
758760
}
759761
else
760762
{
761-
create_partition_name(name_buff, path, name_buffer_ptr,
762-
NORMAL_PART_NAME, FALSE);
763+
if ((create_partition_name(name_buff, path, name_buffer_ptr,
764+
NORMAL_PART_NAME, FALSE)))
765+
goto create_error;
766+
763767
if ((error= set_up_table_before_create(table_arg, name_buff,
764768
create_info, part_elem)) ||
765769
((error= (*file)->ha_create(name_buff, table_arg, create_info))))
@@ -775,9 +779,9 @@ int ha_partition::create(const char *name, TABLE *table_arg,
775779
name_buffer_ptr= m_name_buffer_ptr;
776780
for (abort_file= file, file= m_file; file < abort_file; file++)
777781
{
778-
create_partition_name(name_buff, path, name_buffer_ptr, NORMAL_PART_NAME,
779-
FALSE);
780-
(void) (*file)->ha_delete_table((const char*) name_buff);
782+
if (!create_partition_name(name_buff, path, name_buffer_ptr, NORMAL_PART_NAME,
783+
FALSE))
784+
(void) (*file)->ha_delete_table((const char*) name_buff);
781785
name_buffer_ptr= strend(name_buffer_ptr) + 1;
782786
}
783787
handler::delete_table(name);
@@ -804,7 +808,7 @@ int ha_partition::create(const char *name, TABLE *table_arg,
804808
int ha_partition::drop_partitions(const char *path)
805809
{
806810
List_iterator<partition_element> part_it(m_part_info->partitions);
807-
char part_name_buff[FN_REFLEN];
811+
char part_name_buff[FN_REFLEN + 1];
808812
uint num_parts= m_part_info->partitions.elements;
809813
uint num_subparts= m_part_info->num_subparts;
810814
uint i= 0;
@@ -837,9 +841,12 @@ int ha_partition::drop_partitions(const char *path)
837841
{
838842
partition_element *sub_elem= sub_it++;
839843
part= i * num_subparts + j;
840-
create_subpartition_name(part_name_buff, path,
841-
part_elem->partition_name,
842-
sub_elem->partition_name, name_variant);
844+
if ((ret_error= create_subpartition_name(part_name_buff, path,
845+
part_elem->partition_name,
846+
sub_elem->partition_name,
847+
name_variant)))
848+
error= ret_error;
849+
843850
file= m_file[part];
844851
DBUG_PRINT("info", ("Drop subpartition %s", part_name_buff));
845852
if ((ret_error= file->ha_delete_table(part_name_buff)))
@@ -850,9 +857,11 @@ int ha_partition::drop_partitions(const char *path)
850857
}
851858
else
852859
{
853-
create_partition_name(part_name_buff, path,
854-
part_elem->partition_name, name_variant,
855-
TRUE);
860+
if ((ret_error= create_partition_name(part_name_buff, path,
861+
part_elem->partition_name,
862+
name_variant, TRUE)))
863+
error= ret_error;
864+
856865
file= m_file[i];
857866
DBUG_PRINT("info", ("Drop partition %s", part_name_buff));
858867
if ((ret_error= file->ha_delete_table(part_name_buff)))
@@ -937,10 +946,12 @@ int ha_partition::rename_partitions(const char *path)
937946
{
938947
sub_elem= sub_it++;
939948
file= m_reorged_file[part_count++];
940-
create_subpartition_name(norm_name_buff, path,
941-
part_elem->partition_name,
942-
sub_elem->partition_name,
943-
NORMAL_PART_NAME);
949+
if ((ret_error= create_subpartition_name(norm_name_buff, path,
950+
part_elem->partition_name,
951+
sub_elem->partition_name,
952+
NORMAL_PART_NAME)))
953+
error= ret_error;
954+
944955
DBUG_PRINT("info", ("Delete subpartition %s", norm_name_buff));
945956
if ((ret_error= file->ha_delete_table(norm_name_buff)))
946957
error= ret_error;
@@ -953,9 +964,11 @@ int ha_partition::rename_partitions(const char *path)
953964
else
954965
{
955966
file= m_reorged_file[part_count++];
956-
create_partition_name(norm_name_buff, path,
957-
part_elem->partition_name, NORMAL_PART_NAME,
958-
TRUE);
967+
if ((ret_error= create_partition_name(norm_name_buff, path,
968+
part_elem->partition_name,
969+
NORMAL_PART_NAME, TRUE)))
970+
error= ret_error;
971+
959972
DBUG_PRINT("info", ("Delete partition %s", norm_name_buff));
960973
if ((ret_error= file->ha_delete_table(norm_name_buff)))
961974
error= ret_error;
@@ -1005,10 +1018,12 @@ int ha_partition::rename_partitions(const char *path)
10051018
{
10061019
sub_elem= sub_it++;
10071020
part= i * num_subparts + j;
1008-
create_subpartition_name(norm_name_buff, path,
1009-
part_elem->partition_name,
1010-
sub_elem->partition_name,
1011-
NORMAL_PART_NAME);
1021+
if ((ret_error= create_subpartition_name(norm_name_buff, path,
1022+
part_elem->partition_name,
1023+
sub_elem->partition_name,
1024+
NORMAL_PART_NAME)))
1025+
error= ret_error;
1026+
10121027
if (part_elem->part_state == PART_IS_CHANGED)
10131028
{
10141029
file= m_reorged_file[part_count++];
@@ -1020,10 +1035,12 @@ int ha_partition::rename_partitions(const char *path)
10201035
(void) sync_ddl_log();
10211036
}
10221037
file= m_new_file[part];
1023-
create_subpartition_name(part_name_buff, path,
1024-
part_elem->partition_name,
1025-
sub_elem->partition_name,
1026-
TEMP_PART_NAME);
1038+
if ((ret_error= create_subpartition_name(part_name_buff, path,
1039+
part_elem->partition_name,
1040+
sub_elem->partition_name,
1041+
TEMP_PART_NAME)))
1042+
error= ret_error;
1043+
10271044
DBUG_PRINT("info", ("Rename subpartition from %s to %s",
10281045
part_name_buff, norm_name_buff));
10291046
if ((ret_error= file->ha_rename_table(part_name_buff,
@@ -1037,9 +1054,11 @@ int ha_partition::rename_partitions(const char *path)
10371054
}
10381055
else
10391056
{
1040-
create_partition_name(norm_name_buff, path,
1041-
part_elem->partition_name, NORMAL_PART_NAME,
1042-
TRUE);
1057+
if ((ret_error= create_partition_name(norm_name_buff, path,
1058+
part_elem->partition_name,
1059+
NORMAL_PART_NAME, TRUE)))
1060+
error= ret_error;
1061+
10431062
if (part_elem->part_state == PART_IS_CHANGED)
10441063
{
10451064
file= m_reorged_file[part_count++];
@@ -1051,9 +1070,10 @@ int ha_partition::rename_partitions(const char *path)
10511070
(void) sync_ddl_log();
10521071
}
10531072
file= m_new_file[i];
1054-
create_partition_name(part_name_buff, path,
1055-
part_elem->partition_name, TEMP_PART_NAME,
1056-
TRUE);
1073+
if ((error= create_partition_name(part_name_buff, path,
1074+
part_elem->partition_name,
1075+
TEMP_PART_NAME, TRUE)))
1076+
error= ret_error;
10571077
DBUG_PRINT("info", ("Rename partition from %s to %s",
10581078
part_name_buff, norm_name_buff));
10591079
if ((ret_error= file->ha_rename_table(part_name_buff,
@@ -1676,7 +1696,7 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
16761696
{
16771697
List_iterator<partition_element> part_it(m_part_info->partitions);
16781698
List_iterator <partition_element> t_it(m_part_info->temp_partitions);
1679-
char part_name_buff[FN_REFLEN];
1699+
char part_name_buff[FN_REFLEN + 1];
16801700
uint num_parts= m_part_info->partitions.elements;
16811701
uint num_subparts= m_part_info->num_subparts;
16821702
uint i= 0;
@@ -1904,10 +1924,15 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
19041924
do
19051925
{
19061926
partition_element *sub_elem= sub_it++;
1907-
create_subpartition_name(part_name_buff, path,
1908-
part_elem->partition_name,
1909-
sub_elem->partition_name,
1910-
name_variant);
1927+
if ((error= create_subpartition_name(part_name_buff, path,
1928+
part_elem->partition_name,
1929+
sub_elem->partition_name,
1930+
name_variant)))
1931+
{
1932+
cleanup_new_partition(part_count);
1933+
DBUG_RETURN(error);
1934+
}
1935+
19111936
part= i * num_subparts + j;
19121937
DBUG_PRINT("info", ("Add subpartition %s", part_name_buff));
19131938
if ((error= prepare_new_partition(table, create_info,
@@ -1925,9 +1950,14 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
19251950
}
19261951
else
19271952
{
1928-
create_partition_name(part_name_buff, path,
1929-
part_elem->partition_name, name_variant,
1930-
TRUE);
1953+
if ((error= create_partition_name(part_name_buff, path,
1954+
part_elem->partition_name,
1955+
name_variant, TRUE)))
1956+
{
1957+
cleanup_new_partition(part_count);
1958+
DBUG_RETURN(error);
1959+
}
1960+
19311961
DBUG_PRINT("info", ("Add partition %s", part_name_buff));
19321962
if ((error= prepare_new_partition(table, create_info,
19331963
new_file_array[i],
@@ -2296,8 +2326,8 @@ int ha_partition::del_ren_table(const char *from, const char *to)
22962326
{
22972327
int save_error= 0;
22982328
int error= HA_ERR_INTERNAL_ERROR;
2299-
char from_buff[FN_REFLEN], to_buff[FN_REFLEN], from_lc_buff[FN_REFLEN],
2300-
to_lc_buff[FN_REFLEN], buff[FN_REFLEN];
2329+
char from_buff[FN_REFLEN + 1], to_buff[FN_REFLEN + 1], from_lc_buff[FN_REFLEN + 1],
2330+
to_lc_buff[FN_REFLEN + 1], buff[FN_REFLEN + 1];
23012331
char *name_buffer_ptr;
23022332
const char *from_path;
23032333
const char *to_path= NULL;
@@ -2337,13 +2367,16 @@ int ha_partition::del_ren_table(const char *from, const char *to)
23372367
i= 0;
23382368
do
23392369
{
2340-
create_partition_name(from_buff, from_path, name_buffer_ptr,
2341-
NORMAL_PART_NAME, FALSE);
2370+
if ((error= create_partition_name(from_buff, from_path, name_buffer_ptr,
2371+
NORMAL_PART_NAME, FALSE)))
2372+
goto rename_error;
23422373

23432374
if (to != NULL)
23442375
{ // Rename branch
2345-
create_partition_name(to_buff, to_path, name_buffer_ptr,
2346-
NORMAL_PART_NAME, FALSE);
2376+
if ((error= create_partition_name(to_buff, to_path, name_buffer_ptr,
2377+
NORMAL_PART_NAME, FALSE)))
2378+
goto rename_error;
2379+
23472380
error= (*file)->ha_rename_table(from_buff, to_buff);
23482381
if (error)
23492382
goto rename_error;
@@ -2384,12 +2417,12 @@ int ha_partition::del_ren_table(const char *from, const char *to)
23842417
for (abort_file= file, file= m_file; file < abort_file; file++)
23852418
{
23862419
/* Revert the rename, back from 'to' to the original 'from' */
2387-
create_partition_name(from_buff, from_path, name_buffer_ptr,
2388-
NORMAL_PART_NAME, FALSE);
2389-
create_partition_name(to_buff, to_path, name_buffer_ptr,
2390-
NORMAL_PART_NAME, FALSE);
2391-
/* Ignore error here */
2392-
(void) (*file)->ha_rename_table(to_buff, from_buff);
2420+
if (!create_partition_name(from_buff, from_path, name_buffer_ptr,
2421+
NORMAL_PART_NAME, FALSE))
2422+
if (!create_partition_name(to_buff, to_path, name_buffer_ptr,
2423+
NORMAL_PART_NAME, FALSE))
2424+
/* Ignore error here */
2425+
(void) (*file)->ha_rename_table(to_buff, from_buff);
23932426
name_buffer_ptr= strend(name_buffer_ptr) + 1;
23942427
}
23952428
DBUG_RETURN(error);
@@ -3266,7 +3299,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
32663299
char *name_buffer_ptr;
32673300
int error= HA_ERR_INITIALIZATION;
32683301
handler **file;
3269-
char name_buff[FN_REFLEN];
3302+
char name_buff[FN_REFLEN + 1];
32703303
ulonglong check_table_flags;
32713304
DBUG_ENTER("ha_partition::open");
32723305

@@ -3320,8 +3353,13 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
33203353
file= m_is_clone_of->m_file;
33213354
for (i= 0; i < m_tot_parts; i++)
33223355
{
3323-
create_partition_name(name_buff, name, name_buffer_ptr, NORMAL_PART_NAME,
3324-
FALSE);
3356+
if ((error= create_partition_name(name_buff, name, name_buffer_ptr,
3357+
NORMAL_PART_NAME, FALSE)))
3358+
{
3359+
file= &m_file[i];
3360+
goto err_handler;
3361+
}
3362+
33253363
/* ::clone() will also set ha_share from the original. */
33263364
if (!(m_file[i]= file[i]->clone(name_buff, m_clone_mem_root)))
33273365
{
@@ -3337,8 +3375,10 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
33373375
file= m_file;
33383376
do
33393377
{
3340-
create_partition_name(name_buff, name, name_buffer_ptr, NORMAL_PART_NAME,
3341-
FALSE);
3378+
if ((error= create_partition_name(name_buff, name, name_buffer_ptr,
3379+
NORMAL_PART_NAME, FALSE)))
3380+
goto err_handler;
3381+
33423382
if ((error= (*file)->ha_open(table, name_buff, mode,
33433383
test_if_locked | HA_OPEN_NO_PSI_CALL)))
33443384
goto err_handler;

sql/partition_info.cc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -912,10 +912,11 @@ partition_element *partition_info::get_part_elem(const char *partition_name,
912912
sub_part_elem->partition_name, partition_name))
913913
{
914914
if (file_name)
915-
create_subpartition_name(file_name, "",
916-
part_elem->partition_name,
917-
partition_name,
918-
NORMAL_PART_NAME);
915+
if (create_subpartition_name(file_name, "",
916+
part_elem->partition_name,
917+
partition_name,
918+
NORMAL_PART_NAME))
919+
DBUG_RETURN(NULL);
919920
*part_id= j + (i * num_subparts);
920921
DBUG_RETURN(sub_part_elem);
921922
}
@@ -930,8 +931,9 @@ partition_element *partition_info::get_part_elem(const char *partition_name,
930931
part_elem->partition_name, partition_name))
931932
{
932933
if (file_name)
933-
create_partition_name(file_name, "", partition_name,
934-
NORMAL_PART_NAME, TRUE);
934+
if (create_partition_name(file_name, "", partition_name,
935+
NORMAL_PART_NAME, TRUE))
936+
DBUG_RETURN(NULL);
935937
*part_id= i;
936938
DBUG_RETURN(part_elem);
937939
}

0 commit comments

Comments
 (0)