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
8643070c
Commit
8643070c
authored
Mar 25, 2006
by
dlenev@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/home/dlenev/mysql-5.1-merges
parents
3205f004
988d55f1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
107 additions
and
15 deletions
+107
-15
mysql-test/r/ndb_partition_key.result
mysql-test/r/ndb_partition_key.result
+18
-0
mysql-test/t/disabled.def
mysql-test/t/disabled.def
+1
-1
mysql-test/t/ndb_partition_key.test
mysql-test/t/ndb_partition_key.test
+25
-0
sql/sql_partition.cc
sql/sql_partition.cc
+28
-5
sql/sql_table.cc
sql/sql_table.cc
+35
-9
No files found.
mysql-test/r/ndb_partition_key.result
View file @
8643070c
...
...
@@ -165,3 +165,21 @@ ENGINE=NDB
PARTITION BY KEY(c3) PARTITIONS 5;
ALTER TABLE t1 COALESCE PARTITION 4;
DROP TABLE t1;
CREATE TABLE t1 (
c1 MEDIUMINT NOT NULL AUTO_INCREMENT,
c2 TEXT NOT NULL,
c3 INT NOT NULL,
PRIMARY KEY(c1,c3))
ENGINE=NDB
PARTITION BY KEY(c3) PARTITIONS 5;
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
DROP TABLE t1;
CREATE TABLE t1 (
c1 MEDIUMINT NOT NULL AUTO_INCREMENT,
c2 TEXT NOT NULL,
c3 INT NOT NULL,
PRIMARY KEY(c1,c3))
ENGINE=NDB
PARTITION BY KEY(c3);
ALTER TABLE t1 ADD COLUMN c4 INT AFTER c1;
DROP TABLE t1;
mysql-test/t/disabled.def
View file @
8643070c
...
...
@@ -19,7 +19,7 @@ ndb_autodiscover2 : Needs to be fixed w.r.t binlog
ndb_binlog_ddl_multi : Bug #18490 cluster: binlog events lost on remote mysqld (asynchronous)
#ndb_binlog_multi : Results are not deterministic, Tomas will fix
ndb_load : Bug#17233
#
partition_03ndb : Bug#16385
partition_03ndb : Bug#16385
ps_7ndb : dbug assert in RBR mode when executing test suite
#rpl_bit_npk : Bug#13418
#rpl_ddl : Bug#15963 SBR does not show "Definer" correctly
...
...
mysql-test/t/ndb_partition_key.test
View file @
8643070c
...
...
@@ -153,3 +153,28 @@ b'0',
ALTER
TABLE
t1
COALESCE
PARTITION
4
;
DROP
TABLE
t1
;
#
# BUG 16806: ALTER TABLE fails
#
CREATE
TABLE
t1
(
c1
MEDIUMINT
NOT
NULL
AUTO_INCREMENT
,
c2
TEXT
NOT
NULL
,
c3
INT
NOT
NULL
,
PRIMARY
KEY
(
c1
,
c3
))
ENGINE
=
NDB
PARTITION
BY
KEY
(
c3
)
PARTITIONS
5
;
ALTER
TABLE
t1
ADD
COLUMN
c4
INT
AFTER
c1
;
DROP
TABLE
t1
;
CREATE
TABLE
t1
(
c1
MEDIUMINT
NOT
NULL
AUTO_INCREMENT
,
c2
TEXT
NOT
NULL
,
c3
INT
NOT
NULL
,
PRIMARY
KEY
(
c1
,
c3
))
ENGINE
=
NDB
PARTITION
BY
KEY
(
c3
);
ALTER
TABLE
t1
ADD
COLUMN
c4
INT
AFTER
c1
;
DROP
TABLE
t1
;
sql/sql_partition.cc
View file @
8643070c
...
...
@@ -199,13 +199,15 @@ bool is_name_in_list(char *name,
*/
bool
partition_default_handling
(
TABLE
*
table
,
partition_info
*
part_info
,
bool
is_create_table_ind
,
const
char
*
normalized_path
)
{
DBUG_ENTER
(
"partition_default_handling"
);
if
(
part_info
->
use_default_no_partitions
)
{
if
(
table
->
file
->
get_no_parts
(
normalized_path
,
&
part_info
->
no_parts
))
if
(
!
is_create_table_ind
&&
table
->
file
->
get_no_parts
(
normalized_path
,
&
part_info
->
no_parts
))
{
DBUG_RETURN
(
TRUE
);
}
...
...
@@ -214,7 +216,8 @@ bool partition_default_handling(TABLE *table, partition_info *part_info,
part_info
->
use_default_no_subpartitions
)
{
uint
no_parts
;
if
(
table
->
file
->
get_no_parts
(
normalized_path
,
&
no_parts
))
if
(
!
is_create_table_ind
&&
(
table
->
file
->
get_no_parts
(
normalized_path
,
&
no_parts
)))
{
DBUG_RETURN
(
TRUE
);
}
...
...
@@ -1737,9 +1740,11 @@ bool fix_partition_func(THD *thd, const char* name, TABLE *table,
db_name
=
&
db_name_string
[
home_dir_length
];
tables
.
db
=
db_name
;
if
(
!
is_create_table_ind
)
if
(
!
is_create_table_ind
||
thd
->
lex
->
sql_command
!=
SQLCOM_CREATE_TABLE
)
{
if
(
partition_default_handling
(
table
,
part_info
,
is_create_table_ind
,
table
->
s
->
normalized_path
.
str
))
{
DBUG_RETURN
(
TRUE
);
...
...
@@ -3742,7 +3747,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
DBUG_PRINT
(
"info"
,
(
"default engine = %d, default_db_type = %d"
,
ha_legacy_type
(
part_info
->
default_engine_type
),
ha_legacy_type
(
default_db_type
)));
if
(
is_create_table_ind
)
if
(
is_create_table_ind
&&
old_lex
->
sql_command
==
SQLCOM_CREATE_TABLE
)
{
if
(
old_lex
->
like_name
)
{
...
...
@@ -3756,14 +3761,32 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
char
*
src_table
=
table_ident
->
table
.
str
;
char
buf
[
FN_REFLEN
];
build_table_filename
(
buf
,
sizeof
(
buf
),
src_db
,
src_table
,
""
);
if
(
partition_default_handling
(
table
,
part_info
,
buf
))
if
(
partition_default_handling
(
table
,
part_info
,
FALSE
,
buf
))
{
result
=
TRUE
;
goto
end
;
}
}
else
{
/*
When we come here we are doing a create table. In this case we
have already done some preparatory work on the old part_info
object. We don't really need this new partition_info object.
Thus we go back to the old partition info object.
We need to free any memory objects allocated on item_free_list
by the parser since we are keeping the old info from the first
parser call in CREATE TABLE.
We'll ensure that this object isn't put into table cache also
just to ensure we don't get into strange situations with the
item objects.
*/
free_items
(
thd
->
free_list
);
part_info
=
thd
->
work_part_info
;
thd
->
free_list
=
NULL
;
table
->
s
->
version
=
0UL
;
}
}
table
->
part_info
=
part_info
;
table
->
file
->
set_part_info
(
part_info
);
...
...
sql/sql_table.cc
View file @
8643070c
...
...
@@ -2130,15 +2130,6 @@ bool mysql_create_table_internal(THD *thd,
goto
err
;
part_info
->
part_info_string
=
part_syntax_buf
;
part_info
->
part_info_len
=
syntax_len
;
if
(
create_info
->
db_type
!=
engine_type
)
{
delete
file
;
if
(
!
(
file
=
get_new_handler
((
TABLE_SHARE
*
)
0
,
thd
->
mem_root
,
engine_type
)))
{
mem_alloc_error
(
sizeof
(
handler
));
DBUG_RETURN
(
TRUE
);
}
}
if
((
!
(
engine_type
->
partition_flags
&&
engine_type
->
partition_flags
()
&
HA_CAN_PARTITION
))
||
create_info
->
db_type
==
&
partition_hton
)
...
...
@@ -2155,6 +2146,41 @@ bool mysql_create_table_internal(THD *thd,
{
DBUG_RETURN
(
TRUE
);
}
/*
If we have default number of partitions or subpartitions we
might require to set-up the part_info object such that it
creates a proper .par file. The current part_info object is
only used to create the frm-file and .par-file.
*/
if
(
part_info
->
use_default_no_partitions
&&
part_info
->
no_parts
&&
(
int
)
part_info
->
no_parts
!=
file
->
get_default_no_partitions
(
0ULL
))
{
uint
i
;
List_iterator
<
partition_element
>
part_it
(
part_info
->
partitions
);
part_it
++
;
DBUG_ASSERT
(
thd
->
lex
->
sql_command
!=
SQLCOM_CREATE_TABLE
);
for
(
i
=
1
;
i
<
part_info
->
partitions
.
elements
;
i
++
)
(
part_it
++
)
->
part_state
=
PART_TO_BE_DROPPED
;
}
else
if
(
part_info
->
is_sub_partitioned
()
&&
part_info
->
use_default_no_subpartitions
&&
part_info
->
no_subparts
&&
(
int
)
part_info
->
no_subparts
!=
file
->
get_default_no_partitions
(
0ULL
))
{
DBUG_ASSERT
(
thd
->
lex
->
sql_command
!=
SQLCOM_CREATE_TABLE
);
part_info
->
no_subparts
=
file
->
get_default_no_partitions
(
0ULL
);
}
}
else
if
(
create_info
->
db_type
!=
engine_type
)
{
delete
file
;
if
(
!
(
file
=
get_new_handler
((
TABLE_SHARE
*
)
0
,
thd
->
mem_root
,
engine_type
)))
{
mem_alloc_error
(
sizeof
(
handler
));
DBUG_RETURN
(
TRUE
);
}
}
}
#endif
...
...
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