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
46613baf
Commit
46613baf
authored
Mar 15, 2005
by
ramil@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
A fix (bug #8489: Strange auto_increment behaviour with HEAP table).
parent
18343b94
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
82 additions
and
6 deletions
+82
-6
heap/hp_create.c
heap/hp_create.c
+2
-1
include/heap.h
include/heap.h
+1
-1
mysql-test/r/heap.result
mysql-test/r/heap.result
+42
-0
mysql-test/t/heap.test
mysql-test/t/heap.test
+29
-0
sql/ha_heap.cc
sql/ha_heap.cc
+8
-4
No files found.
heap/hp_create.c
View file @
46613baf
...
...
@@ -137,6 +137,8 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
keyinfo
->
write_key
=
hp_write_key
;
keyinfo
->
hash_buckets
=
0
;
}
if
((
keyinfo
->
flag
&
HA_AUTO_KEY
)
&&
create_info
->
with_auto_increment
)
share
->
auto_key
=
i
+
1
;
}
share
->
min_records
=
min_records
;
share
->
max_records
=
max_records
;
...
...
@@ -147,7 +149,6 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
share
->
keys
=
keys
;
share
->
max_key_length
=
max_length
;
share
->
changed
=
0
;
share
->
auto_key
=
create_info
->
auto_key
;
share
->
auto_key_type
=
create_info
->
auto_key_type
;
share
->
auto_increment
=
create_info
->
auto_increment
;
/* Must be allocated separately for rename to work */
...
...
include/heap.h
View file @
46613baf
...
...
@@ -183,10 +183,10 @@ typedef struct st_heap_info
typedef
struct
st_heap_create_info
{
uint
auto_key
;
uint
auto_key_type
;
ulong
max_table_size
;
ulonglong
auto_increment
;
my_bool
with_auto_increment
;
}
HP_CREATE_INFO
;
/* Prototypes for heap-functions */
...
...
mysql-test/r/heap.result
View file @
46613baf
...
...
@@ -249,3 +249,45 @@ a
3
2
drop table t1;
create table t1 (a bigint unsigned auto_increment primary key, b int,
key (b, a)) engine=heap;
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
insert t1 (b) values (1);
select * from t1;
a b
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
drop table t1;
create table t1 (a int not null, b int not null auto_increment,
primary key(a, b), key(b)) engine=heap;
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
insert t1 (a) values (1);
select * from t1;
a b
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
drop table t1;
mysql-test/t/heap.test
View file @
46613baf
...
...
@@ -195,3 +195,32 @@ delete from t1 where a is null;
insert
into
t1
values
(
'2'
),
(
'3'
);
select
*
from
t1
;
drop
table
t1
;
#
# Bug #8489: Strange auto_increment behaviour
#
create
table
t1
(
a
bigint
unsigned
auto_increment
primary
key
,
b
int
,
key
(
b
,
a
))
engine
=
heap
;
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
insert
t1
(
b
)
values
(
1
);
select
*
from
t1
;
drop
table
t1
;
create
table
t1
(
a
int
not
null
,
b
int
not
null
auto_increment
,
primary
key
(
a
,
b
),
key
(
b
))
engine
=
heap
;
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
insert
t1
(
a
)
values
(
1
);
select
*
from
t1
;
drop
table
t1
;
sql/ha_heap.cc
View file @
46613baf
...
...
@@ -446,6 +446,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
HA_KEYSEG
*
seg
;
char
buff
[
FN_REFLEN
];
int
error
;
bool
found_real_auto_increment
=
0
;
for
(
key
=
parts
=
0
;
key
<
table_arg
->
keys
;
key
++
)
parts
+=
table_arg
->
key_info
[
key
].
key_parts
;
...
...
@@ -506,17 +507,20 @@ int ha_heap::create(const char *name, TABLE *table_arg,
seg
->
null_bit
=
0
;
seg
->
null_pos
=
0
;
}
// We have to store field->key_type() as seg->type can differ from it
if
(
field
->
flags
&
AUTO_INCREMENT_FLAG
)
{
auto_key
=
key
+
1
;
auto_key_type
=
field
->
key_type
();
}
}
}
if
(
table_arg
->
found_next_number_field
)
{
keydef
[
table_arg
->
next_number_index
].
flag
|=
HA_AUTO_KEY
;
found_real_auto_increment
=
table_arg
->
next_number_key_offset
==
0
;
}
mem_per_row
+=
MY_ALIGN
(
table_arg
->
reclength
+
1
,
sizeof
(
char
*
));
HP_CREATE_INFO
hp_create_info
;
hp_create_info
.
auto_key
=
auto_key
;
hp_create_info
.
auto_key_type
=
auto_key_type
;
hp_create_info
.
with_auto_increment
=
found_real_auto_increment
;
hp_create_info
.
auto_increment
=
(
create_info
->
auto_increment_value
?
create_info
->
auto_increment_value
-
1
:
0
);
hp_create_info
.
max_table_size
=
current_thd
->
variables
.
max_heap_table_size
;
...
...
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