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
9805b66d
Commit
9805b66d
authored
Jul 21, 2002
by
serg@sergbook.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge work:/home/bk/mysql-4.0
into sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.0
parents
c8f89bb6
e20d9e06
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
112 additions
and
28 deletions
+112
-28
Docs/manual.texi
Docs/manual.texi
+14
-8
include/my_sys.h
include/my_sys.h
+1
-2
include/myisam.h
include/myisam.h
+1
-1
myisam/mi_check.c
myisam/mi_check.c
+2
-2
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 @
9805b66d
...
...
@@ -37782,8 +37782,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
...
...
@@ -37823,13 +37823,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:
...
...
@@ -37856,6 +37856,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
...
...
@@ -37883,8 +37887,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
...
...
@@ -49694,6 +49698,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
@item
Added OLAP functionality.
include/my_sys.h
View file @
9805b66d
...
...
@@ -323,8 +323,7 @@ typedef struct st_io_cache_share
int
count
;
/* actual IO_CACHE that filled the buffer */
struct
st_io_cache
*
active
;
/* the following will be implemented whenever the need arises */
#ifdef NOT_IMPLEMENTED
#ifdef NOT_YET_IMPLEMENTED
/* whether the structure should be free'd */
my_bool
alloced
;
#endif
...
...
include/myisam.h
View file @
9805b66d
...
...
@@ -358,7 +358,7 @@ typedef struct st_sort_info
MI_CHECK
*
param
;
enum
data_file_type
new_data_file_type
;
SORT_KEY_BLOCKS
*
key_block
,
*
key_block_end
;
uint
kei
,
total_keys
;
uint
current_key
,
total_keys
;
my_off_t
filelength
,
dupp
,
buff_length
;
ha_rows
max_records
;
char
*
buff
;
...
...
myisam/mi_check.c
View file @
9805b66d
...
...
@@ -3223,7 +3223,7 @@ static int sort_delete_record(MI_SORT_PARAM *sort_param)
old_file
=
info
->
dfile
;
info
->
dfile
=
info
->
rec_cache
.
file
;
if
(
sort_info
->
kei
)
if
(
sort_info
->
current_key
)
{
key
=
info
->
lastkey
+
info
->
s
->
base
.
max_key_length
;
if
((
error
=
(
*
info
->
s
->
read_rnd
)(
info
,
sort_param
->
record
,
info
->
lastpos
,
0
))
&&
...
...
@@ -3234,7 +3234,7 @@ static int sort_delete_record(MI_SORT_PARAM *sort_param)
DBUG_RETURN
(
1
);
}
for
(
i
=
0
;
i
<
sort_info
->
kei
;
i
++
)
for
(
i
=
0
;
i
<
sort_info
->
current_key
;
i
++
)
{
uint
key_length
=
_mi_make_key
(
info
,
i
,
key
,
sort_param
->
record
,
info
->
lastpos
);
if
(
_mi_ck_delete
(
info
,
i
,
key
,
key_length
))
...
...
mysql-test/r/merge.result
View file @
9805b66d
...
...
@@ -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 @
9805b66d
...
...
@@ -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 @
9805b66d
...
...
@@ -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 @
9805b66d
...
...
@@ -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