Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
8dd07d32
Commit
8dd07d32
authored
Nov 04, 2008
by
Mattias Jonsson
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
c82ff582
c6115db4
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
49 additions
and
57 deletions
+49
-57
mysql-test/r/partition_mgm_err.result
mysql-test/r/partition_mgm_err.result
+8
-0
mysql-test/t/partition_mgm_err.test
mysql-test/t/partition_mgm_err.test
+12
-0
sql/ha_partition.cc
sql/ha_partition.cc
+8
-20
sql/ha_partition.h
sql/ha_partition.h
+1
-2
sql/sql_lex.h
sql/sql_lex.h
+3
-6
sql/sql_partition.cc
sql/sql_partition.cc
+6
-20
sql/sql_table.cc
sql/sql_table.cc
+7
-5
sql/sql_yacc.yy
sql/sql_yacc.yy
+4
-4
No files found.
mysql-test/r/partition_mgm_err.result
View file @
8dd07d32
...
@@ -84,6 +84,14 @@ ALTER TABLE t1 DROP PARTITION x1;
...
@@ -84,6 +84,14 @@ ALTER TABLE t1 DROP PARTITION x1;
ERROR HY000: Partition management on a not partitioned table is not possible
ERROR HY000: Partition management on a not partitioned table is not possible
ALTER TABLE t1 COALESCE PARTITION 1;
ALTER TABLE t1 COALESCE PARTITION 1;
ERROR HY000: Partition management on a not partitioned table is not possible
ERROR HY000: Partition management on a not partitioned table is not possible
ALTER TABLE t1 ANALYZE PARTITION p1;
ERROR HY000: Partition management on a not partitioned table is not possible
ALTER TABLE t1 CHECK PARTITION p1;
ERROR HY000: Partition management on a not partitioned table is not possible
ALTER TABLE t1 OPTIMIZE PARTITION p1;
ERROR HY000: Partition management on a not partitioned table is not possible
ALTER TABLE t1 REPAIR PARTITION p1;
ERROR HY000: Partition management on a not partitioned table is not possible
DROP TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a int)
CREATE TABLE t1 (a int)
PARTITION BY KEY (a)
PARTITION BY KEY (a)
...
...
mysql-test/t/partition_mgm_err.test
View file @
8dd07d32
...
@@ -125,6 +125,18 @@ ALTER TABLE t1 DROP PARTITION x1;
...
@@ -125,6 +125,18 @@ ALTER TABLE t1 DROP PARTITION x1;
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
ALTER
TABLE
t1
COALESCE
PARTITION
1
;
ALTER
TABLE
t1
COALESCE
PARTITION
1
;
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
ALTER
TABLE
t1
ANALYZE
PARTITION
p1
;
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
ALTER
TABLE
t1
CHECK
PARTITION
p1
;
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
ALTER
TABLE
t1
OPTIMIZE
PARTITION
p1
;
--
error
ER_PARTITION_MGMT_ON_NONPARTITIONED
ALTER
TABLE
t1
REPAIR
PARTITION
p1
;
DROP
TABLE
t1
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
(
a
int
)
CREATE
TABLE
t1
(
a
int
)
...
...
sql/ha_partition.cc
View file @
8dd07d32
...
@@ -877,10 +877,7 @@ int ha_partition::optimize(THD *thd, HA_CHECK_OPT *check_opt)
...
@@ -877,10 +877,7 @@ int ha_partition::optimize(THD *thd, HA_CHECK_OPT *check_opt)
{
{
DBUG_ENTER
(
"ha_partition::optimize"
);
DBUG_ENTER
(
"ha_partition::optimize"
);
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
OPTIMIZE_PARTS
));
OPTIMIZE_PARTS
,
thd
->
lex
->
alter_info
.
flags
&
ALTER_OPTIMIZE_PARTITION
?
FALSE
:
TRUE
));
}
}
...
@@ -901,10 +898,7 @@ int ha_partition::analyze(THD *thd, HA_CHECK_OPT *check_opt)
...
@@ -901,10 +898,7 @@ int ha_partition::analyze(THD *thd, HA_CHECK_OPT *check_opt)
{
{
DBUG_ENTER
(
"ha_partition::analyze"
);
DBUG_ENTER
(
"ha_partition::analyze"
);
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
ANALYZE_PARTS
));
ANALYZE_PARTS
,
thd
->
lex
->
alter_info
.
flags
&
ALTER_ANALYZE_PARTITION
?
FALSE
:
TRUE
));
}
}
...
@@ -925,10 +919,7 @@ int ha_partition::check(THD *thd, HA_CHECK_OPT *check_opt)
...
@@ -925,10 +919,7 @@ int ha_partition::check(THD *thd, HA_CHECK_OPT *check_opt)
{
{
DBUG_ENTER
(
"ha_partition::check"
);
DBUG_ENTER
(
"ha_partition::check"
);
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
CHECK_PARTS
));
CHECK_PARTS
,
thd
->
lex
->
alter_info
.
flags
&
ALTER_CHECK_PARTITION
?
FALSE
:
TRUE
));
}
}
...
@@ -949,12 +940,10 @@ int ha_partition::repair(THD *thd, HA_CHECK_OPT *check_opt)
...
@@ -949,12 +940,10 @@ int ha_partition::repair(THD *thd, HA_CHECK_OPT *check_opt)
{
{
DBUG_ENTER
(
"ha_partition::repair"
);
DBUG_ENTER
(
"ha_partition::repair"
);
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
DBUG_RETURN
(
handle_opt_partitions
(
thd
,
check_opt
,
REPAIR_PARTS
));
REPAIR_PARTS
,
thd
->
lex
->
alter_info
.
flags
&
ALTER_REPAIR_PARTITION
?
FALSE
:
TRUE
));
}
}
/*
/*
Handle optimize/analyze/check/repair of one partition
Handle optimize/analyze/check/repair of one partition
...
@@ -1057,7 +1046,6 @@ static bool print_admin_msg(THD* thd, const char* msg_type,
...
@@ -1057,7 +1046,6 @@ static bool print_admin_msg(THD* thd, const char* msg_type,
thd Thread object
thd Thread object
check_opt Options
check_opt Options
flag Optimize/Analyze/Check/Repair flag
flag Optimize/Analyze/Check/Repair flag
all_parts All partitions or only a subset
RETURN VALUE
RETURN VALUE
>0 Failure
>0 Failure
...
@@ -1065,7 +1053,7 @@ static bool print_admin_msg(THD* thd, const char* msg_type,
...
@@ -1065,7 +1053,7 @@ static bool print_admin_msg(THD* thd, const char* msg_type,
*/
*/
int
ha_partition
::
handle_opt_partitions
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
,
int
ha_partition
::
handle_opt_partitions
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
,
uint
flag
,
bool
all_parts
)
uint
flag
)
{
{
List_iterator
<
partition_element
>
part_it
(
m_part_info
->
partitions
);
List_iterator
<
partition_element
>
part_it
(
m_part_info
->
partitions
);
uint
no_parts
=
m_part_info
->
no_parts
;
uint
no_parts
=
m_part_info
->
no_parts
;
...
@@ -1073,7 +1061,7 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
...
@@ -1073,7 +1061,7 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
uint
i
=
0
;
uint
i
=
0
;
int
error
;
int
error
;
DBUG_ENTER
(
"ha_partition::handle_opt_partitions"
);
DBUG_ENTER
(
"ha_partition::handle_opt_partitions"
);
DBUG_PRINT
(
"enter"
,
(
"
all_parts %u, flag= %u"
,
all_parts
,
flag
));
DBUG_PRINT
(
"enter"
,
(
"
flag= %u"
,
flag
));
do
do
{
{
...
@@ -1082,7 +1070,7 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
...
@@ -1082,7 +1070,7 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
when ALTER TABLE <CMD> PARTITION ...
when ALTER TABLE <CMD> PARTITION ...
it should only do named partitions, otherwise all partitions
it should only do named partitions, otherwise all partitions
*/
*/
if
(
all_parts
||
if
(
!
(
thd
->
lex
->
alter_info
.
flags
&
ALTER_ADMIN_PARTITION
)
||
part_elem
->
part_state
==
PART_CHANGED
)
part_elem
->
part_state
==
PART_CHANGED
)
{
{
if
(
m_is_sub_partitioned
)
if
(
m_is_sub_partitioned
)
...
...
sql/ha_partition.h
View file @
8dd07d32
...
@@ -1003,8 +1003,7 @@ public:
...
@@ -1003,8 +1003,7 @@ public:
virtual
bool
is_crashed
()
const
;
virtual
bool
is_crashed
()
const
;
private:
private:
int
handle_opt_partitions
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
,
int
handle_opt_partitions
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
,
uint
flags
);
uint
flags
,
bool
all_parts
);
public:
public:
/*
/*
-------------------------------------------------------------------------
-------------------------------------------------------------------------
...
...
sql/sql_lex.h
View file @
8dd07d32
...
@@ -843,15 +843,12 @@ inline bool st_select_lex_unit::is_union ()
...
@@ -843,15 +843,12 @@ inline bool st_select_lex_unit::is_union ()
#define ALTER_COALESCE_PARTITION (1L << 15)
#define ALTER_COALESCE_PARTITION (1L << 15)
#define ALTER_REORGANIZE_PARTITION (1L << 16)
#define ALTER_REORGANIZE_PARTITION (1L << 16)
#define ALTER_PARTITION (1L << 17)
#define ALTER_PARTITION (1L << 17)
#define ALTER_
OPTIMIZE_PARTITION
(1L << 18)
#define ALTER_
ADMIN_PARTITION
(1L << 18)
#define ALTER_TABLE_REORG (1L << 19)
#define ALTER_TABLE_REORG (1L << 19)
#define ALTER_REBUILD_PARTITION (1L << 20)
#define ALTER_REBUILD_PARTITION (1L << 20)
#define ALTER_ALL_PARTITION (1L << 21)
#define ALTER_ALL_PARTITION (1L << 21)
#define ALTER_ANALYZE_PARTITION (1L << 22)
#define ALTER_REMOVE_PARTITIONING (1L << 22)
#define ALTER_CHECK_PARTITION (1L << 23)
#define ALTER_FOREIGN_KEY (1L << 23)
#define ALTER_REPAIR_PARTITION (1L << 24)
#define ALTER_REMOVE_PARTITIONING (1L << 25)
#define ALTER_FOREIGN_KEY (1L << 26)
enum
enum_alter_table_change_level
enum
enum_alter_table_change_level
{
{
...
...
sql/sql_partition.cc
View file @
8dd07d32
...
@@ -4195,12 +4195,13 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
...
@@ -4195,12 +4195,13 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
!
(
thd
->
work_part_info
=
thd
->
lex
->
part_info
->
get_clone
()))
!
(
thd
->
work_part_info
=
thd
->
lex
->
part_info
->
get_clone
()))
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
/* ALTER_ADMIN_PARTITION is handled in mysql_admin_table */
DBUG_ASSERT
(
!
(
alter_info
->
flags
&
ALTER_ADMIN_PARTITION
));
if
(
alter_info
->
flags
&
if
(
alter_info
->
flags
&
(
ALTER_ADD_PARTITION
|
ALTER_DROP_PARTITION
|
(
ALTER_ADD_PARTITION
|
ALTER_DROP_PARTITION
|
ALTER_COALESCE_PARTITION
|
ALTER_REORGANIZE_PARTITION
|
ALTER_COALESCE_PARTITION
|
ALTER_REORGANIZE_PARTITION
|
ALTER_TABLE_REORG
|
ALTER_OPTIMIZE_PARTITION
|
ALTER_TABLE_REORG
|
ALTER_REBUILD_PARTITION
))
ALTER_CHECK_PARTITION
|
ALTER_ANALYZE_PARTITION
|
ALTER_REPAIR_PARTITION
|
ALTER_REBUILD_PARTITION
))
{
{
partition_info
*
tab_part_info
=
table
->
part_info
;
partition_info
*
tab_part_info
=
table
->
part_info
;
partition_info
*
alt_part_info
=
thd
->
work_part_info
;
partition_info
*
alt_part_info
=
thd
->
work_part_info
;
...
@@ -4591,11 +4592,7 @@ that are reorganised.
...
@@ -4591,11 +4592,7 @@ that are reorganised.
}
}
tab_part_info
->
no_parts
-=
no_parts_dropped
;
tab_part_info
->
no_parts
-=
no_parts_dropped
;
}
}
else
if
((
alter_info
->
flags
&
ALTER_OPTIMIZE_PARTITION
)
||
else
if
(
alter_info
->
flags
&
ALTER_REBUILD_PARTITION
)
(
alter_info
->
flags
&
ALTER_ANALYZE_PARTITION
)
||
(
alter_info
->
flags
&
ALTER_CHECK_PARTITION
)
||
(
alter_info
->
flags
&
ALTER_REPAIR_PARTITION
)
||
(
alter_info
->
flags
&
ALTER_REBUILD_PARTITION
))
{
{
uint
no_parts_found
;
uint
no_parts_found
;
uint
no_parts_opt
=
alter_info
->
partition_names
.
elements
;
uint
no_parts_opt
=
alter_info
->
partition_names
.
elements
;
...
@@ -4603,18 +4600,7 @@ that are reorganised.
...
@@ -4603,18 +4600,7 @@ that are reorganised.
if
(
no_parts_found
!=
no_parts_opt
&&
if
(
no_parts_found
!=
no_parts_opt
&&
(
!
(
alter_info
->
flags
&
ALTER_ALL_PARTITION
)))
(
!
(
alter_info
->
flags
&
ALTER_ALL_PARTITION
)))
{
{
const
char
*
ptr
;
my_error
(
ER_DROP_PARTITION_NON_EXISTENT
,
MYF
(
0
),
"REBUILD"
);
if
(
alter_info
->
flags
&
ALTER_OPTIMIZE_PARTITION
)
ptr
=
"OPTIMIZE"
;
else
if
(
alter_info
->
flags
&
ALTER_ANALYZE_PARTITION
)
ptr
=
"ANALYZE"
;
else
if
(
alter_info
->
flags
&
ALTER_CHECK_PARTITION
)
ptr
=
"CHECK"
;
else
if
(
alter_info
->
flags
&
ALTER_REPAIR_PARTITION
)
ptr
=
"REPAIR"
;
else
ptr
=
"REBUILD"
;
my_error
(
ER_DROP_PARTITION_NON_EXISTENT
,
MYF
(
0
),
ptr
);
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
}
}
if
(
!
(
*
fast_alter_partition
))
if
(
!
(
*
fast_alter_partition
))
...
...
sql/sql_table.cc
View file @
8dd07d32
...
@@ -4198,7 +4198,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
...
@@ -4198,7 +4198,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
table
->
next_local
=
save_next_local
;
table
->
next_local
=
save_next_local
;
thd
->
open_options
&=
~
extra_open_options
;
thd
->
open_options
&=
~
extra_open_options
;
#ifdef WITH_PARTITION_STORAGE_ENGINE
#ifdef WITH_PARTITION_STORAGE_ENGINE
if
(
table
->
table
&&
table
->
table
->
part_info
)
if
(
table
->
table
)
{
{
/*
/*
Set up which partitions that should be processed
Set up which partitions that should be processed
...
@@ -4206,11 +4206,13 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
...
@@ -4206,11 +4206,13 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
*/
*/
Alter_info
*
alter_info
=
&
lex
->
alter_info
;
Alter_info
*
alter_info
=
&
lex
->
alter_info
;
if
(
alter_info
->
flags
&
ALTER_ANALYZE_PARTITION
||
if
(
alter_info
->
flags
&
ALTER_ADMIN_PARTITION
)
alter_info
->
flags
&
ALTER_CHECK_PARTITION
||
alter_info
->
flags
&
ALTER_OPTIMIZE_PARTITION
||
alter_info
->
flags
&
ALTER_REPAIR_PARTITION
)
{
{
if
(
!
table
->
table
->
part_info
)
{
my_error
(
ER_PARTITION_MGMT_ON_NONPARTITIONED
,
MYF
(
0
));
DBUG_RETURN
(
TRUE
);
}
uint
no_parts_found
;
uint
no_parts_found
;
uint
no_parts_opt
=
alter_info
->
partition_names
.
elements
;
uint
no_parts_opt
=
alter_info
->
partition_names
.
elements
;
no_parts_found
=
set_part_state
(
alter_info
,
table
->
table
->
part_info
,
no_parts_found
=
set_part_state
(
alter_info
,
table
->
table
->
part_info
,
...
...
sql/sql_yacc.yy
View file @
8dd07d32
...
@@ -5658,7 +5658,7 @@ alter_commands:
...
@@ -5658,7 +5658,7 @@ alter_commands:
{
{
LEX *lex= Lex;
LEX *lex= Lex;
lex->sql_command = SQLCOM_OPTIMIZE;
lex->sql_command = SQLCOM_OPTIMIZE;
lex->alter_info.flags|= ALTER_
OPTIMIZE
_PARTITION;
lex->alter_info.flags|= ALTER_
ADMIN
_PARTITION;
lex->no_write_to_binlog= $3;
lex->no_write_to_binlog= $3;
lex->check_opt.init();
lex->check_opt.init();
}
}
...
@@ -5668,7 +5668,7 @@ alter_commands:
...
@@ -5668,7 +5668,7 @@ alter_commands:
{
{
LEX *lex= Lex;
LEX *lex= Lex;
lex->sql_command = SQLCOM_ANALYZE;
lex->sql_command = SQLCOM_ANALYZE;
lex->alter_info.flags|= ALTER_A
NALYZE
_PARTITION;
lex->alter_info.flags|= ALTER_A
DMIN
_PARTITION;
lex->no_write_to_binlog= $3;
lex->no_write_to_binlog= $3;
lex->check_opt.init();
lex->check_opt.init();
}
}
...
@@ -5676,7 +5676,7 @@ alter_commands:
...
@@ -5676,7 +5676,7 @@ alter_commands:
{
{
LEX *lex= Lex;
LEX *lex= Lex;
lex->sql_command = SQLCOM_CHECK;
lex->sql_command = SQLCOM_CHECK;
lex->alter_info.flags|= ALTER_
CHECK
_PARTITION;
lex->alter_info.flags|= ALTER_
ADMIN
_PARTITION;
lex->check_opt.init();
lex->check_opt.init();
}
}
opt_mi_check_type
opt_mi_check_type
...
@@ -5685,7 +5685,7 @@ alter_commands:
...
@@ -5685,7 +5685,7 @@ alter_commands:
{
{
LEX *lex= Lex;
LEX *lex= Lex;
lex->sql_command = SQLCOM_REPAIR;
lex->sql_command = SQLCOM_REPAIR;
lex->alter_info.flags|= ALTER_
REPAIR
_PARTITION;
lex->alter_info.flags|= ALTER_
ADMIN
_PARTITION;
lex->no_write_to_binlog= $3;
lex->no_write_to_binlog= $3;
lex->check_opt.init();
lex->check_opt.init();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment