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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
e20d9e06
Commit
e20d9e06
authored
Jul 21, 2002
by
serg@sergbook.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
AUTO_INCREMENT support for MERGE
HA_AUTO_PART_KEY support for handler parent class
parent
0642d54a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
23 deletions
+108
-23
Docs/manual.texi
Docs/manual.texi
+14
-8
mysql-test/r/merge.result
mysql-test/r/merge.result
+77
-10
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+1
-2
sql/ha_myisammrg.h
sql/ha_myisammrg.h
+1
-1
sql/handler.cc
sql/handler.cc
+15
-2
No files found.
Docs/manual.texi
View file @
e20d9e06
...
...
@@ -37793,8 +37793,8 @@ The disadvantages with @code{MERGE} tables are:
@itemize @bullet
@item
You can only use identical @code{MyISAM} tables for a @code{MERGE} table.
@item
@code{AUTO_INCREMENT} columns are not automatically updated on @code{INSERT}.
@
c @
item
@c
@c
ode{AUTO_INCREMENT} columns are not automatically updated on @code{INSERT}.
@item
@code{REPLACE} doesn't work.
@item
...
...
@@ -37834,13 +37834,13 @@ CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1");
INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2");
CREATE TABLE total (a INT
NOT NULL, message CHAR(20), KEY(a
))
CREATE TABLE total (a INT
AUTO_INCREMENT PRIMARY KEY, message CHAR(20
))
TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
@end example
Note that we didn't create a @code{UNIQUE} or @code{PRIMARY KEY} in the
@code{total} table as the key isn't going to be unique in the @code{total}
table.
@c
Note that we didn't create a @code{UNIQUE} or @code{PRIMARY KEY} in the
@c
@c
ode{total} table as the key isn't going to be unique in the @code{total}
@c
table.
Note that you can also manipulate the @file{.MRG} file directly from
the outside of the MySQL server:
...
...
@@ -37867,6 +37867,10 @@ mysql> SELECT * FROM total;
+---+---------+
@end example
Note that the @code{a} column, though declared as @code{PRIMARY KEY},
is not really unique, as @code{MERGE} table cannot enforce uniqueness
over a set of underlying @code{MyISAM} tables.
To remap a @code{MERGE} table you can do one of the following:
@itemize @bullet
...
...
@@ -37894,8 +37898,8 @@ The following are the known problems with @code{MERGE} tables:
A @code{MERGE} table cannot maintain @code{UNIQUE} constraints over the
whole table. When you do @code{INSERT}, the data goes into the first or
last table (according to @code{INSERT_METHOD=xxx}) and this @code{MyISAM}
table ensures that the data are unique, but it knows nothing about
the
first @code{MyISAM} table
.
table ensures that the data are unique, but it knows nothing about
others @code{MyISAM} tables
.
@item
@code{DELETE FROM merge_table} used without a @code{WHERE}
will only clear the mapping for the table, not delete everything in the
...
...
@@ -49699,6 +49703,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet
@item
Fixed a bug that made the pager option in the mysql client non-functional.
@item
Added full @code{AUTO_INCREMENT} support to @code{MERGE} tables.
@end itemize
mysql-test/r/merge.result
View file @
e20d9e06
...
...
@@ -275,12 +275,12 @@ a b
1 2
drop table t3,t1,t2;
drop table if exists t6, t5, t4, t3, t2, t1;
create table t1 (a int not null, b int not null
,
key(a,b));
create table t2 (a int not null, b int not null
,
key(a,b));
create table t1 (a int not null, b int not null
auto_increment, primary
key(a,b));
create table t2 (a int not null, b int not null
auto_increment, primary
key(a,b));
create table t3 (a int not null, b int not null, key(a,b)) UNION=(t1,t2) INSERT_METHOD=NO;
create table t4 (a int not null, b int not null, key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=NO;
create table t5 (a int not null, b int not null
,
key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=FIRST;
create table t6 (a int not null, b int not null
,
key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
create table t5 (a int not null, b int not null
auto_increment, primary
key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=FIRST;
create table t6 (a int not null, b int not null
auto_increment, primary
key(a,b)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
show create table t3;
Table Create Table
t3 CREATE TABLE `t3` (
...
...
@@ -299,18 +299,18 @@ show create table t5;
Table Create Table
t5 CREATE TABLE `t5` (
`a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL
default '0'
,
KEY `a`
(`a`,`b`)
`b` int(11) NOT NULL
auto_increment
,
PRIMARY KEY
(`a`,`b`)
) TYPE=MRG_MyISAM INSERT_METHOD=FIRST UNION=(t1,t2)
show create table t6;
Table Create Table
t6 CREATE TABLE `t6` (
`a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL
default '0'
,
KEY `a`
(`a`,`b`)
`b` int(11) NOT NULL
auto_increment
,
PRIMARY KEY
(`a`,`b`)
) TYPE=MRG_MyISAM INSERT_METHOD=LAST UNION=(t1,t2)
insert into t1 values (1,
1),(1,2),(1,3),(1,4
);
insert into t2 values (2,
1),(2,2),(2,3),(2,4
);
insert into t1 values (1,
NULL),(1,NULL),(1,NULL),(1,NULL
);
insert into t2 values (2,
NULL),(2,NULL),(2,NULL),(2,NULL
);
select * from t3 order by b,a limit 3;
a b
select * from t4 order by b,a limit 3;
...
...
@@ -461,6 +461,73 @@ a b
5 2
6 1
6 2
select 1;
1
1
insert into t5 values (1,NULL),(5,NULL);
insert into t6 values (2,NULL),(6,NULL);
select * from t1 order by a,b;
a b
1 1
1 2
1 3
1 4
1 5
4 1
4 2
5 1
5 2
5 3
select * from t2 order by a,b;
a b
2 1
2 2
2 3
2 4
2 5
6 1
6 2
6 3
select * from t5 order by a,b;
a b
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
4 1
4 2
5 1
5 2
5 3
6 1
6 2
6 3
select * from t6 order by a,b;
a b
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
4 1
4 2
5 1
5 2
5 3
6 1
6 2
6 3
drop table if exists t6, t5, t4, t3, t2, t1;
CREATE TABLE t1 ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0', PRIMARY KEY (a,b)) TYPE=MyISAM;
INSERT INTO t1 VALUES (1,1), (2,1);
...
...
sql/ha_myisammrg.cc
View file @
e20d9e06
...
...
@@ -75,8 +75,7 @@ int ha_myisammrg::write_row(byte * buf)
if
(
table
->
time_stamp
)
update_timestamp
(
buf
+
table
->
time_stamp
-
1
);
if
(
table
->
next_number_field
&&
buf
==
table
->
record
[
0
])
return
(
my_errno
=
HA_ERR_WRONG_COMMAND
);
// update_auto_increment(); - [phi] have to check this before allowing it
update_auto_increment
();
return
myrg_write
(
file
,
buf
);
}
...
...
sql/ha_myisammrg.h
View file @
e20d9e06
...
...
@@ -34,7 +34,7 @@ class ha_myisammrg: public handler
const
char
**
bas_ext
()
const
;
ulong
table_flags
()
const
{
return
(
HA_REC_NOT_IN_SEQ
|
HA_READ_RND_SAME
|
return
(
HA_REC_NOT_IN_SEQ
|
HA_READ_RND_SAME
|
HA_AUTO_PART_KEY
|
HA_KEYPOS_TO_RNDPOS
|
HA_LASTKEY_ORDER
|
HA_NULL_KEY
|
HA_BLOB_KEY
);
}
...
...
sql/handler.cc
View file @
e20d9e06
...
...
@@ -628,16 +628,29 @@ longlong handler::get_auto_increment()
{
longlong
nr
;
int
error
;
(
void
)
extra
(
HA_EXTRA_KEYREAD
);
index_init
(
table
->
next_number_index
);
error
=
index_last
(
table
->
record
[
1
]);
if
(
!
table
->
next_number_key_offset
)
{
// Autoincrement at key-start
error
=
index_last
(
table
->
record
[
1
]);
}
else
{
byte
key
[
MAX_KEY_LENGTH
];
key_copy
(
key
,
table
,
table
->
next_number_index
,
table
->
next_number_key_offset
);
error
=
index_read
(
table
->
record
[
1
],
key
,
table
->
next_number_key_offset
,
HA_READ_PREFIX_LAST
);
}
if
(
error
)
nr
=
1
;
else
nr
=
(
longlong
)
table
->
next_number_field
->
val_int_offset
(
table
->
rec_buff_length
)
+
1
;
(
void
)
extra
(
HA_EXTRA_NO_KEYREAD
);
index_end
();
(
void
)
extra
(
HA_EXTRA_NO_KEYREAD
);
return
nr
;
}
...
...
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