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
e2d4aa2c
Commit
e2d4aa2c
authored
Aug 14, 2006
by
acurtis/antony@xiphis.org/ltantony.xiphis.org
Browse files
Options
Browse Files
Download
Plain Diff
Merge xiphis.org:/home/antony/work2/mysql-5.0-engines
into xiphis.org:/home/antony/work2/mysql-5.0-merge
parents
c43a3328
6b962942
Changes
23
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
303 additions
and
79 deletions
+303
-79
myisam/mi_dynrec.c
myisam/mi_dynrec.c
+130
-29
mysql-test/r/auto_increment.result
mysql-test/r/auto_increment.result
+2
-2
mysql-test/r/create.result
mysql-test/r/create.result
+1
-1
mysql-test/r/federated.result
mysql-test/r/federated.result
+27
-0
mysql-test/r/insert.result
mysql-test/r/insert.result
+1
-1
mysql-test/r/insert_select.result
mysql-test/r/insert_select.result
+2
-2
mysql-test/r/key.result
mysql-test/r/key.result
+2
-2
mysql-test/r/null.result
mysql-test/r/null.result
+9
-9
mysql-test/r/null_key.result
mysql-test/r/null_key.result
+1
-1
mysql-test/r/ps_2myisam.result
mysql-test/r/ps_2myisam.result
+1
-1
mysql-test/r/ps_3innodb.result
mysql-test/r/ps_3innodb.result
+1
-1
mysql-test/r/ps_4heap.result
mysql-test/r/ps_4heap.result
+1
-1
mysql-test/r/ps_5merge.result
mysql-test/r/ps_5merge.result
+2
-2
mysql-test/r/ps_6bdb.result
mysql-test/r/ps_6bdb.result
+1
-1
mysql-test/r/ps_7ndb.result
mysql-test/r/ps_7ndb.result
+1
-1
mysql-test/r/strict.result
mysql-test/r/strict.result
+9
-9
mysql-test/r/view.result
mysql-test/r/view.result
+1
-1
mysql-test/r/warnings.result
mysql-test/r/warnings.result
+4
-4
mysql-test/t/federated.test
mysql-test/t/federated.test
+45
-0
sql/examples/ha_tina.cc
sql/examples/ha_tina.cc
+56
-8
sql/ha_federated.cc
sql/ha_federated.cc
+1
-0
sql/ha_federated.h
sql/ha_federated.h
+3
-1
sql/share/errmsg.txt
sql/share/errmsg.txt
+2
-2
No files found.
myisam/mi_dynrec.c
View file @
e2d4aa2c
...
...
@@ -1130,12 +1130,41 @@ void _my_store_blob_length(byte *pos,uint pack_length,uint length)
}
/* Read record from datafile */
/* Returns 0 if ok, -1 if error */
/*
Read record from datafile.
SYNOPSIS
_mi_read_dynamic_record()
info MI_INFO pointer to table.
filepos From where to read the record.
buf Destination for record.
NOTE
If a write buffer is active, it needs to be flushed if its contents
intersects with the record to read. We always check if the position
of the first byte of the write buffer is lower than the position
past the last byte to read. In theory this is also true if the write
buffer is completely below the read segment. That is, if there is no
intersection. But this case is unusual. We flush anyway. Only if the
first byte in the write buffer is above the last byte to read, we do
not flush.
A dynamic record may need several reads. So this check must be done
before every read. Reading a dynamic record starts with reading the
block header. If the record does not fit into the free space of the
header, the block may be longer than the header. In this case a
second read is necessary. These one or two reads repeat for every
part of the record.
RETURN
0 OK
-1 Error
*/
int
_mi_read_dynamic_record
(
MI_INFO
*
info
,
my_off_t
filepos
,
byte
*
buf
)
{
int
flag
;
int
block_of_record
;
uint
b_type
,
left_length
;
byte
*
to
;
MI_BLOCK_INFO
block_info
;
...
...
@@ -1147,20 +1176,19 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
LINT_INIT
(
to
);
LINT_INIT
(
left_length
);
file
=
info
->
dfile
;
block_
info
.
next_filepos
=
filepos
;
/* for easyer loop
*/
flag
=
block_info
.
second_read
=
0
;
block_
of_record
=
0
;
/* First block of record is numbered as zero.
*/
block_info
.
second_read
=
0
;
do
{
/* A corrupted table can have wrong pointers. (Bug# 19835) */
if
(
filepos
==
HA_OFFSET_ERROR
)
goto
panic
;
if
(
info
->
opt_flag
&
WRITE_CACHE_USED
&&
info
->
rec_cache
.
pos_in_file
<
=
block_info
.
next_filepos
&&
info
->
rec_cache
.
pos_in_file
<
filepos
+
MI_BLOCK_INFO_HEADER_LENGTH
&&
flush_io_cache
(
&
info
->
rec_cache
))
goto
err
;
/* A corrupted table can have wrong pointers. (Bug# 19835) */
if
(
block_info
.
next_filepos
==
HA_OFFSET_ERROR
)
goto
panic
;
info
->
rec_cache
.
seek_not_done
=
1
;
if
((
b_type
=
_mi_get_block_info
(
&
block_info
,
file
,
block_info
.
next_filepos
))
if
((
b_type
=
_mi_get_block_info
(
&
block_info
,
file
,
filepos
))
&
(
BLOCK_DELETED
|
BLOCK_ERROR
|
BLOCK_SYNC_ERROR
|
BLOCK_FATAL_ERROR
))
{
...
...
@@ -1168,9 +1196,8 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
my_errno
=
HA_ERR_RECORD_DELETED
;
goto
err
;
}
if
(
flag
==
0
)
/* First block */
if
(
block_of_record
++
==
0
)
/* First block */
{
flag
=
1
;
if
(
block_info
.
rec_len
>
(
uint
)
info
->
s
->
base
.
max_pack_length
)
goto
panic
;
if
(
info
->
s
->
base
.
blobs
)
...
...
@@ -1185,11 +1212,35 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
}
if
(
left_length
<
block_info
.
data_len
||
!
block_info
.
data_len
)
goto
panic
;
/* Wrong linked record */
if
(
my_pread
(
file
,(
byte
*
)
to
,
block_info
.
data_len
,
block_info
.
filepos
,
MYF
(
MY_NABP
)))
goto
panic
;
left_length
-=
block_info
.
data_len
;
to
+=
block_info
.
data_len
;
/* copy information that is already read */
{
uint
offset
=
(
uint
)
(
block_info
.
filepos
-
filepos
);
uint
prefetch_len
=
(
sizeof
(
block_info
.
header
)
-
offset
);
filepos
+=
sizeof
(
block_info
.
header
);
if
(
prefetch_len
>
block_info
.
data_len
)
prefetch_len
=
block_info
.
data_len
;
if
(
prefetch_len
)
{
memcpy
((
byte
*
)
to
,
block_info
.
header
+
offset
,
prefetch_len
);
block_info
.
data_len
-=
prefetch_len
;
left_length
-=
prefetch_len
;
to
+=
prefetch_len
;
}
}
/* read rest of record from file */
if
(
block_info
.
data_len
)
{
if
(
info
->
opt_flag
&
WRITE_CACHE_USED
&&
info
->
rec_cache
.
pos_in_file
<
filepos
+
block_info
.
data_len
&&
flush_io_cache
(
&
info
->
rec_cache
))
goto
err
;
if
(
my_read
(
file
,
(
byte
*
)
to
,
block_info
.
data_len
,
MYF
(
MY_NABP
)))
goto
panic
;
left_length
-=
block_info
.
data_len
;
to
+=
block_info
.
data_len
;
}
filepos
=
block_info
.
next_filepos
;
}
while
(
left_length
);
info
->
update
|=
HA_STATE_AKTIV
;
/* We have a aktive record */
...
...
@@ -1346,11 +1397,45 @@ err:
}
/*
Read record from datafile.
SYNOPSIS
_mi_read_rnd_dynamic_record()
info MI_INFO pointer to table.
buf Destination for record.
filepos From where to read the record.
skip_deleted_blocks If to repeat reading until a non-deleted
record is found.
NOTE
If a write buffer is active, it needs to be flushed if its contents
intersects with the record to read. We always check if the position
of the first byte of the write buffer is lower than the position
past the last byte to read. In theory this is also true if the write
buffer is completely below the read segment. That is, if there is no
intersection. But this case is unusual. We flush anyway. Only if the
first byte in the write buffer is above the last byte to read, we do
not flush.
A dynamic record may need several reads. So this check must be done
before every read. Reading a dynamic record starts with reading the
block header. If the record does not fit into the free space of the
header, the block may be longer than the header. In this case a
second read is necessary. These one or two reads repeat for every
part of the record.
RETURN
0 OK
!= 0 Error
*/
int
_mi_read_rnd_dynamic_record
(
MI_INFO
*
info
,
byte
*
buf
,
register
my_off_t
filepos
,
my_bool
skip_deleted_blocks
)
{
int
flag
,
info_read
,
save_errno
;
int
block_of_record
,
info_read
,
save_errno
;
uint
left_len
,
b_type
;
byte
*
to
;
MI_BLOCK_INFO
block_info
;
...
...
@@ -1376,7 +1461,8 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
else
info_read
=
1
;
/* memory-keyinfoblock is ok */
flag
=
block_info
.
second_read
=
0
;
block_of_record
=
0
;
/* First block of record is numbered as zero. */
block_info
.
second_read
=
0
;
left_len
=
1
;
do
{
...
...
@@ -1399,15 +1485,15 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
{
if
(
_mi_read_cache
(
&
info
->
rec_cache
,(
byte
*
)
block_info
.
header
,
filepos
,
sizeof
(
block_info
.
header
),
(
!
flag
&&
skip_deleted_blocks
?
READING_NEXT
:
0
)
|
READING_HEADER
))
(
!
block_of_record
&&
skip_deleted_blocks
?
READING_NEXT
:
0
)
|
READING_HEADER
))
goto
panic
;
b_type
=
_mi_get_block_info
(
&
block_info
,
-
1
,
filepos
);
}
else
{
if
(
info
->
opt_flag
&
WRITE_CACHE_USED
&&
info
->
rec_cache
.
pos_in_file
<
=
filepos
&&
info
->
rec_cache
.
pos_in_file
<
filepos
+
MI_BLOCK_INFO_HEADER_LENGTH
&&
flush_io_cache
(
&
info
->
rec_cache
))
DBUG_RETURN
(
my_errno
);
info
->
rec_cache
.
seek_not_done
=
1
;
...
...
@@ -1432,7 +1518,7 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
}
goto
err
;
}
if
(
flag
==
0
)
/* First block */
if
(
block_of_record
==
0
)
/* First block */
{
if
(
block_info
.
rec_len
>
(
uint
)
share
->
base
.
max_pack_length
)
goto
panic
;
...
...
@@ -1465,7 +1551,7 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
left_len
-=
tmp_length
;
to
+=
tmp_length
;
filepos
+=
tmp_length
;
}
}
}
/* read rest of record from file */
if
(
block_info
.
data_len
)
...
...
@@ -1474,11 +1560,17 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
{
if
(
_mi_read_cache
(
&
info
->
rec_cache
,(
byte
*
)
to
,
filepos
,
block_info
.
data_len
,
(
!
flag
&&
skip_deleted_blocks
)
?
READING_NEXT
:
0
))
(
!
block_of_record
&&
skip_deleted_blocks
)
?
READING_NEXT
:
0
))
goto
panic
;
}
else
{
if
(
info
->
opt_flag
&
WRITE_CACHE_USED
&&
info
->
rec_cache
.
pos_in_file
<
block_info
.
filepos
+
block_info
.
data_len
&&
flush_io_cache
(
&
info
->
rec_cache
))
goto
err
;
/* VOID(my_seek(info->dfile,filepos,MY_SEEK_SET,MYF(0))); */
if
(
my_read
(
info
->
dfile
,(
byte
*
)
to
,
block_info
.
data_len
,
MYF
(
MY_NABP
)))
{
...
...
@@ -1488,10 +1580,14 @@ int _mi_read_rnd_dynamic_record(MI_INFO *info, byte *buf,
}
}
}
if
(
flag
++
==
0
)
/*
Increment block-of-record counter. If it was the first block,
remember the position behind the block for the next call.
*/
if
(
block_of_record
++
==
0
)
{
info
->
nextpos
=
block_info
.
filepos
+
block_info
.
block_len
;
skip_deleted_blocks
=
0
;
info
->
nextpos
=
block_info
.
filepos
+
block_info
.
block_len
;
skip_deleted_blocks
=
0
;
}
left_len
-=
block_info
.
data_len
;
to
+=
block_info
.
data_len
;
...
...
@@ -1523,6 +1619,11 @@ uint _mi_get_block_info(MI_BLOCK_INFO *info, File file, my_off_t filepos)
if
(
file
>=
0
)
{
/*
We do not use my_pread() here because we want to have the file
pointer set to the end of the header after this function.
my_pread() may leave the file pointer untouched.
*/
VOID
(
my_seek
(
file
,
filepos
,
MY_SEEK_SET
,
MYF
(
0
)));
if
(
my_read
(
file
,(
char
*
)
header
,
sizeof
(
info
->
header
),
MYF
(
0
))
!=
sizeof
(
info
->
header
))
...
...
mysql-test/r/auto_increment.result
View file @
e2d4aa2c
...
...
@@ -232,7 +232,7 @@ a b
delete from t1 where a=0;
update t1 set a=NULL where b=6;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 4
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 4
update t1 set a=300 where b=7;
SET SQL_MODE='';
insert into t1(a,b)values(NULL,8);
...
...
@@ -274,7 +274,7 @@ a b
delete from t1 where a=0;
update t1 set a=NULL where b=13;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 9
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 9
update t1 set a=500 where b=14;
select * from t1 order by b;
a b
...
...
mysql-test/r/create.result
View file @
e2d4aa2c
...
...
@@ -13,7 +13,7 @@ Warnings:
Note 1050 Table 't1' already exists
insert into t1 values (""),(null);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'b' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'b' at row 2
select * from t1;
b
...
...
mysql-test/r/federated.result
View file @
e2d4aa2c
...
...
@@ -1788,6 +1788,33 @@ length(a)
5000
drop table t1;
drop table t1;
DROP TABLE IF EXISTS federated.test;
CREATE TABLE federated.test (
`i` int(11) NOT NULL,
`j` int(11) NOT NULL,
`c` varchar(30) default NULL,
PRIMARY KEY (`i`,`j`),
UNIQUE KEY `i` (`i`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS federated.test1;
DROP TABLE IF EXISTS federated.test2;
create table federated.test1 (
i int not null,
j int not null,
c varchar(30),
primary key (i,j),
unique key (i, c))
engine = federated
connection='mysql://root@127.0.0.1:SLAVE_PORT/federated/test';
create table federated.test2 (
i int default null,
j int not null,
c varchar(30),
key (i))
engine = federated
connection='mysql://root@127.0.0.1:SLAVE_PORT/federated/test';
drop table federated.test1, federated.test2;
drop table federated.test;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
...
...
mysql-test/r/insert.result
View file @
e2d4aa2c
...
...
@@ -63,7 +63,7 @@ insert into t1 values(NULL);
ERROR 23000: Column 'id' cannot be null
insert into t1 values (1), (NULL), (2);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'id' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'id' at row 2
select * from t1;
id
1
...
...
mysql-test/r/insert_select.result
View file @
e2d4aa2c
...
...
@@ -606,8 +606,8 @@ NULL 2 100
create table t2(No int not null, Field int not null, Count int not null);
insert into t2 Select null, Field, Count From t1 Where Month=20030901 and Type=2;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'No' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'No' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'No' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'No' at row 2
select * from t2;
No Field Count
0 1 100
...
...
mysql-test/r/key.result
View file @
e2d4aa2c
...
...
@@ -159,8 +159,8 @@ CREATE TABLE t1 (c CHAR(10) NOT NULL,i INT NOT NULL AUTO_INCREMENT,
UNIQUE (c,i));
INSERT INTO t1 (c) VALUES (NULL),(NULL);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'c' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'c' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'c' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'c' at row 2
SELECT * FROM t1;
c i
1
...
...
mysql-test/r/null.result
View file @
e2d4aa2c
...
...
@@ -97,39 +97,39 @@ Warnings:
Warning 1265 Data truncated for column 'd' at row 1
UPDATE t1 SET d=NULL;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'd' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'd' at row 1
INSERT INTO t1 (a) values (null);
ERROR 23000: Column 'a' cannot be null
INSERT INTO t1 (a) values (1/null);
ERROR 23000: Column 'a' cannot be null
INSERT INTO t1 (a) values (null),(null);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 2
INSERT INTO t1 (b) values (null);
ERROR 23000: Column 'b' cannot be null
INSERT INTO t1 (b) values (1/null);
ERROR 23000: Column 'b' cannot be null
INSERT INTO t1 (b) values (null),(null);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'b' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'b' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'b' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'b' at row 2
INSERT INTO t1 (c) values (null);
ERROR 23000: Column 'c' cannot be null
INSERT INTO t1 (c) values (1/null);
ERROR 23000: Column 'c' cannot be null
INSERT INTO t1 (c) values (null),(null);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'c' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'c' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'c' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'c' at row 2
INSERT INTO t1 (d) values (null);
ERROR 23000: Column 'd' cannot be null
INSERT INTO t1 (d) values (1/null);
ERROR 23000: Column 'd' cannot be null
INSERT INTO t1 (d) values (null),(null);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'd' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'd' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'd' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'd' at row 2
select * from t1;
a b c d
0 0000-00-00 00:00:00 0
...
...
mysql-test/r/null_key.result
View file @
e2d4aa2c
...
...
@@ -342,7 +342,7 @@ index (id2)
);
insert into t1 values(null,null),(1,1);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'id2' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'id2' at row 1
select * from t1;
id id2
NULL 0
...
...
mysql-test/r/ps_2myisam.result
View file @
e2d4aa2c
...
...
@@ -1304,7 +1304,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/ps_3innodb.result
View file @
e2d4aa2c
...
...
@@ -1287,7 +1287,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/ps_4heap.result
View file @
e2d4aa2c
...
...
@@ -1288,7 +1288,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/ps_5merge.result
View file @
e2d4aa2c
...
...
@@ -1330,7 +1330,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
@@ -4344,7 +4344,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/ps_6bdb.result
View file @
e2d4aa2c
...
...
@@ -1287,7 +1287,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/ps_7ndb.result
View file @
e2d4aa2c
...
...
@@ -1287,7 +1287,7 @@ set @arg00=NULL;
set @arg01=2;
execute stmt1 using @arg00, @arg01;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
select a,b from t1 order by a;
a b
0 two
...
...
mysql-test/r/strict.result
View file @
e2d4aa2c
...
...
@@ -997,16 +997,16 @@ ERROR 23000: Column 'col2' cannot be null
INSERT INTO t1 VALUES (103,'',NULL);
ERROR 23000: Column 'col3' cannot be null
UPDATE t1 SET col1=NULL WHERE col1 =100;
ERROR 22004: Column
set to default value; NULL supplied to
NOT NULL column 'col1' at row 1
ERROR 22004: Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col1' at row 1
UPDATE t1 SET col2 =NULL WHERE col2 ='hello';
ERROR 22004: Column
set to default value; NULL supplied to
NOT NULL column 'col2' at row 1
ERROR 22004: Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col2' at row 1
UPDATE t1 SET col2 =NULL where col3 IS NOT NULL;
ERROR 22004: Column
set to default value; NULL supplied to
NOT NULL column 'col2' at row 1
ERROR 22004: Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col2' at row 1
INSERT IGNORE INTO t1 values (NULL,NULL,NULL);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'col1' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'col2' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'col3' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col1' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col2' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col3' at row 1
SELECT * FROM t1;
col1 col2 col3
100 hello 2004-08-20
...
...
@@ -1031,11 +1031,11 @@ ERROR HY000: Field 'col2' doesn't have a default value
INSERT INTO t1 (col1) SELECT 1;
ERROR HY000: Field 'col2' doesn't have a default value
INSERT INTO t1 SELECT 1,NULL;
ERROR 22004: Column
set to default value; NULL supplied to
NOT NULL column 'col2' at row 1
ERROR 22004: Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col2' at row 1
INSERT IGNORE INTO t1 values (NULL,NULL);
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'col1' at row 1
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'col2' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col1' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'col2' at row 1
INSERT IGNORE INTO t1 (col1) values (3);
Warnings:
Warning 1364 Field 'col2' doesn't have a default value
...
...
mysql-test/r/view.result
View file @
e2d4aa2c
...
...
@@ -1495,7 +1495,7 @@ insert into v3(b) values (10);
insert into v3(a) select a from t2;
insert into v3(b) select b from t2;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 2
insert into v3(a) values (1) on duplicate key update a=a+10000+VALUES(a);
select * from t1;
a b
...
...
mysql-test/r/warnings.result
View file @
e2d4aa2c
...
...
@@ -72,7 +72,7 @@ drop table t1;
create table t1(a tinyint, b int not null, c date, d char(5));
load data infile '../std_data_ln/warnings_loaddata.dat' into table t1 fields terminated by ',';
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'b' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'b' at row 2
Warning 1265 Data truncated for column 'd' at row 3
Warning 1265 Data truncated for column 'c' at row 4
Warning 1261 Row 5 doesn't contain data for all columns
...
...
@@ -86,7 +86,7 @@ drop table t1;
create table t1(a tinyint NOT NULL, b tinyint unsigned, c char(5));
insert into t1 values(NULL,100,'mysql'),(10,-1,'mysql ab'),(500,256,'open source'),(20,NULL,'test');
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 1
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 1
Warning 1264 Out of range value adjusted for column 'b' at row 2
Warning 1265 Data truncated for column 'c' at row 2
Warning 1264 Out of range value adjusted for column 'a' at row 3
...
...
@@ -99,7 +99,7 @@ Warning 1265 Data truncated for column 'c' at row 2
alter table t1 add d char(2);
update t1 set a=NULL where a=10;
Warnings:
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 2
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 2
update t1 set c='mysql ab' where c='test';
Warnings:
Warning 1265 Data truncated for column 'c' at row 4
...
...
@@ -115,7 +115,7 @@ Warnings:
Warning 1265 Data truncated for column 'b' at row 1
Warning 1265 Data truncated for column 'b' at row 2
Warning 1265 Data truncated for column 'b' at row 3
Warning 1263 Column
set to default value; NULL supplied to
NOT NULL column 'a' at row 4
Warning 1263 Column
was set to data type implicit default; NULL supplied for
NOT NULL column 'a' at row 4
Warning 1265 Data truncated for column 'b' at row 4
insert into t2(b) values('mysqlab');
Warnings:
...
...
mysql-test/t/federated.test
View file @
e2d4aa2c
...
...
@@ -1499,4 +1499,49 @@ drop table t1;
connection
master
;
drop
table
t1
;
#
# BUG #15133: unique index with nullable value not accepted in federated table
#
connection
slave
;
--
disable_warnings
DROP
TABLE
IF
EXISTS
federated
.
test
;
CREATE
TABLE
federated
.
test
(
`i`
int
(
11
)
NOT
NULL
,
`j`
int
(
11
)
NOT
NULL
,
`c`
varchar
(
30
)
default
NULL
,
PRIMARY
KEY
(
`i`
,
`j`
),
UNIQUE
KEY
`i`
(
`i`
,
`c`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
latin1
;
--
enable_warnings
connection
master
;
--
disable_warnings
DROP
TABLE
IF
EXISTS
federated
.
test1
;
DROP
TABLE
IF
EXISTS
federated
.
test2
;
--
enable_warnings
--
replace_result
$SLAVE_MYPORT
SLAVE_PORT
eval
create
table
federated
.
test1
(
i
int
not
null
,
j
int
not
null
,
c
varchar
(
30
),
primary
key
(
i
,
j
),
unique
key
(
i
,
c
))
engine
=
federated
connection
=
'mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/test'
;
--
replace_result
$SLAVE_MYPORT
SLAVE_PORT
eval
create
table
federated
.
test2
(
i
int
default
null
,
j
int
not
null
,
c
varchar
(
30
),
key
(
i
))
engine
=
federated
connection
=
'mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/test'
;
drop
table
federated
.
test1
,
federated
.
test2
;
connection
slave
;
drop
table
federated
.
test
;
source
include
/
federated_cleanup
.
inc
;
sql/examples/ha_tina.cc
View file @
e2d4aa2c
...
...
@@ -101,13 +101,34 @@ static byte* tina_get_key(TINA_SHARE *share,uint *length,
return
(
byte
*
)
share
->
table_name
;
}
int
free_mmap
(
TINA_SHARE
*
share
)
{
DBUG_ENTER
(
"ha_tina::free_mmap"
);
if
(
share
->
mapped_file
)
{
/*
Invalidate the mapped in pages. Some operating systems (eg OpenBSD)
would reuse already cached pages even if the file has been altered
using fd based I/O. This may be optimized by perhaps only invalidating
the last page but optimization of deprecated code is not important.
*/
msync
(
share
->
mapped_file
,
0
,
MS_INVALIDATE
);
if
(
munmap
(
share
->
mapped_file
,
share
->
file_stat
.
st_size
))
DBUG_RETURN
(
1
);
}
share
->
mapped_file
=
NULL
;
DBUG_RETURN
(
0
);
}
/*
Reloads the mmap file.
*/
int
get_mmap
(
TINA_SHARE
*
share
,
int
write
)
{
DBUG_ENTER
(
"ha_tina::get_mmap"
);
if
(
share
->
mapped_file
&&
munmap
(
share
->
mapped_file
,
share
->
file_stat
.
st_size
))
if
(
free_mmap
(
share
))
DBUG_RETURN
(
1
);
if
(
my_fstat
(
share
->
data_file
,
&
share
->
file_stat
,
MYF
(
MY_WME
))
==
-
1
)
...
...
@@ -230,8 +251,7 @@ static int free_share(TINA_SHARE *share)
int
result_code
=
0
;
if
(
!--
share
->
use_count
){
/* Drop the mapped file */
if
(
share
->
mapped_file
)
munmap
(
share
->
mapped_file
,
share
->
file_stat
.
st_size
);
free_mmap
(
share
);
result_code
=
my_close
(
share
->
data_file
,
MYF
(
0
));
hash_delete
(
&
tina_open_tables
,
(
byte
*
)
share
);
thr_lock_delete
(
&
share
->
lock
);
...
...
@@ -493,6 +513,13 @@ int ha_tina::write_row(byte * buf)
size
=
encode_quote
(
buf
);
/*
we are going to alter the file so we must invalidate the in memory pages
otherwise we risk a race between the in memory pages and the disk pages.
*/
if
(
free_mmap
(
share
))
DBUG_RETURN
(
-
1
);
if
(
my_write
(
share
->
data_file
,
buffer
.
ptr
(),
size
,
MYF
(
MY_WME
|
MY_NABP
)))
DBUG_RETURN
(
-
1
);
...
...
@@ -534,8 +561,26 @@ int ha_tina::update_row(const byte * old_data, byte * new_data)
if
(
chain_append
())
DBUG_RETURN
(
-
1
);
/*
we are going to alter the file so we must invalidate the in memory pages
otherwise we risk a race between the in memory pages and the disk pages.
*/
if
(
free_mmap
(
share
))
DBUG_RETURN
(
-
1
);
if
(
my_write
(
share
->
data_file
,
buffer
.
ptr
(),
size
,
MYF
(
MY_WME
|
MY_NABP
)))
DBUG_RETURN
(
-
1
);
/*
Ok, this is means that we will be doing potentially bad things
during a bulk update on some OS'es. Ideally, we should extend the length
of the file, redo the mmap and then write all the updated rows. Upon
finishing the bulk update, truncate the file length to the final length.
Since this code is all being deprecated, not point now to optimize.
*/
if
(
get_mmap
(
share
,
0
)
>
0
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
0
);
}
...
...
@@ -812,15 +857,14 @@ int ha_tina::rnd_end()
length
=
length
-
(
size_t
)(
ptr
->
end
-
ptr
->
begin
);
}
/*
Truncate the file to the new size
*/
if
(
my_chsize
(
share
->
data_file
,
length
,
0
,
MYF
(
MY_WME
)
))
/*
Invalidate all cached mmap pages
*/
if
(
free_mmap
(
share
))
DBUG_RETURN
(
-
1
);
if
(
munmap
(
share
->
mapped_file
,
length
))
/* Truncate the file to the new size */
if
(
my_chsize
(
share
->
data_file
,
length
,
0
,
MYF
(
MY_WME
)))
DBUG_RETURN
(
-
1
);
/* We set it to null so that get_mmap() won't try to unmap it */
share
->
mapped_file
=
NULL
;
if
(
get_mmap
(
share
,
0
)
>
0
)
DBUG_RETURN
(
-
1
);
}
...
...
@@ -838,6 +882,10 @@ int ha_tina::delete_all_rows()
if
(
!
records_is_known
)
return
(
my_errno
=
HA_ERR_WRONG_COMMAND
);
/* Invalidate all cached mmap pages */
if
(
free_mmap
(
share
))
DBUG_RETURN
(
-
1
);
int
rc
=
my_chsize
(
share
->
data_file
,
0
,
0
,
MYF
(
MY_WME
));
if
(
get_mmap
(
share
,
0
)
>
0
)
...
...
sql/ha_federated.cc
View file @
e2d4aa2c
...
...
@@ -332,6 +332,7 @@
*/
#include "mysql_priv.h"
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
...
...
sql/ha_federated.h
View file @
e2d4aa2c
...
...
@@ -196,7 +196,9 @@ public:
/* fix server to be able to get remote server table flags */
return
(
HA_NOT_EXACT_COUNT
|
HA_PRIMARY_KEY_IN_READ_INDEX
|
HA_FILE_BASED
|
HA_REC_NOT_IN_SEQ
|
HA_AUTO_PART_KEY
|
HA_CAN_INDEX_BLOBS
|
HA_NO_PREFIX_CHAR_KEYS
);
HA_AUTO_PART_KEY
|
HA_CAN_INDEX_BLOBS
|
HA_NO_PREFIX_CHAR_KEYS
|
HA_NULL_IN_KEY
);
}
/*
This is a bitmap of flags that says how the storage engine
...
...
sql/share/errmsg.txt
View file @
e2d4aa2c
...
...
@@ -4893,8 +4893,8 @@ ER_WARN_TOO_MANY_RECORDS 01000
por "Conta de registro maior que a conta de coluna na linha %ld"
spa "Lnea %ld fu truncada; La misma contine mas datos que las que existen en las columnas de entrada"
ER_WARN_NULL_TO_NOTNULL 22004
eng "Column
set to default value; NULL supplied to
NOT NULL column '%s' at row %ld"
ger "Feld auf
Vorgabewert gesetzt,
da NULL fr NOT-NULL-Feld '%s' in Zeile %ld angegeben"
eng "Column
was set to data type implicit default; NULL supplied for
NOT NULL column '%s' at row %ld"
ger "Feld auf
Datentyp-spezifischen Vorgabewert gesetzt;
da NULL fr NOT-NULL-Feld '%s' in Zeile %ld angegeben"
por "Dado truncado, NULL fornecido para NOT NULL coluna '%s' na linha %ld"
spa "Datos truncado, NULL suministrado para NOT NULL columna '%s' en la lnea %ld"
ER_WARN_DATA_OUT_OF_RANGE 22003
...
...
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