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
4eee50de
Commit
4eee50de
authored
Jul 05, 2006
by
acurtis@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/p2-bug8706.3-merge-5.0
parents
d0146162
e29cc5d5
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
188 additions
and
40 deletions
+188
-40
myisam/mi_check.c
myisam/mi_check.c
+3
-2
myisam/mi_create.c
myisam/mi_create.c
+17
-0
myisam/mi_delete_table.c
myisam/mi_delete_table.c
+18
-6
myisam/mi_dynrec.c
myisam/mi_dynrec.c
+3
-0
myisam/mi_key.c
myisam/mi_key.c
+1
-1
myisam/rt_index.c
myisam/rt_index.c
+5
-3
myisam/rt_mbr.c
myisam/rt_mbr.c
+5
-1
mysql-test/r/federated.result
mysql-test/r/federated.result
+16
-0
mysql-test/r/gis-rtree.result
mysql-test/r/gis-rtree.result
+40
-0
mysql-test/t/federated.test
mysql-test/t/federated.test
+19
-0
mysql-test/t/gis-rtree.test
mysql-test/t/gis-rtree.test
+44
-0
sql/ha_federated.cc
sql/ha_federated.cc
+17
-27
No files found.
myisam/mi_check.c
View file @
4eee50de
...
...
@@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
#ifdef HAVE_RTREE_KEYS
(
keyinfo
->
flag
&
HA_SPATIAL
)
?
rtree_find_first
(
info
,
key
,
info
->
lastkey
,
key_length
,
SEARCH_SAME
)
:
MBR_EQUAL
|
MBR_DATA
)
:
#endif
_mi_search
(
info
,
keyinfo
,
info
->
lastkey
,
key_length
,
SEARCH_SAME
,
info
->
s
->
state
.
key_root
[
key
]);
if
(
search_result
)
{
mi_check_print_error
(
param
,
"Record at: %10s Can't find key for index: %2d"
,
mi_check_print_error
(
param
,
"Record at: %10s "
"Can't find key for index: %2d"
,
llstr
(
start_recpos
,
llbuff
),
key
+
1
);
if
(
error
++
>
MAXERR
||
!
(
param
->
testflag
&
T_VERBOSE
))
goto
err2
;
...
...
myisam/mi_create.c
View file @
4eee50de
...
...
@@ -59,6 +59,8 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
my_off_t
key_root
[
MI_MAX_POSSIBLE_KEY
],
key_del
[
MI_MAX_KEY_BLOCK_SIZE
];
MI_CREATE_INFO
tmp_create_info
;
DBUG_ENTER
(
"mi_create"
);
DBUG_PRINT
(
"enter"
,
(
"keys: %u columns: %u uniques: %u flags: %u"
,
keys
,
columns
,
uniques
,
flags
));
if
(
!
ci
)
{
...
...
@@ -471,6 +473,16 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
uniques
*
MI_UNIQUEDEF_SIZE
+
(
key_segs
+
unique_key_parts
)
*
HA_KEYSEG_SIZE
+
columns
*
MI_COLUMNDEF_SIZE
);
DBUG_PRINT
(
"info"
,
(
"info_length: %u"
,
info_length
));
/* There are only 16 bits for the total header length. */
if
(
info_length
>
65535
)
{
my_printf_error
(
0
,
"MyISAM table '%s' has too many columns and/or "
"indexes and/or unique constraints."
,
MYF
(
0
),
name
+
dirname_length
(
name
));
my_errno
=
HA_WRONG_CREATE_OPTION
;
goto
err
;
}
bmove
(
share
.
state
.
header
.
file_version
,(
byte
*
)
myisam_file_magic
,
4
);
ci
->
old_options
=
options
|
(
ci
->
old_options
&
HA_OPTION_TEMP_COMPRESS_RECORD
?
...
...
@@ -620,6 +632,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
errpos
=
3
;
}
DBUG_PRINT
(
"info"
,
(
"write state info and base info"
));
if
(
mi_state_info_write
(
file
,
&
share
.
state
,
2
)
||
mi_base_info_write
(
file
,
&
share
.
base
))
goto
err
;
...
...
@@ -633,6 +646,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
#endif
/* Write key and keyseg definitions */
DBUG_PRINT
(
"info"
,
(
"write key and keyseg definitions"
));
for
(
i
=
0
;
i
<
share
.
base
.
keys
-
uniques
;
i
++
)
{
uint
sp_segs
=
(
keydefs
[
i
].
flag
&
HA_SPATIAL
)
?
2
*
SPDIMS
:
0
;
...
...
@@ -683,6 +697,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
}
/* Save unique definition */
DBUG_PRINT
(
"info"
,
(
"write unique definitions"
));
for
(
i
=
0
;
i
<
share
.
state
.
header
.
uniques
;
i
++
)
{
HA_KEYSEG
*
keyseg_end
;
...
...
@@ -713,6 +728,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
goto
err
;
}
}
DBUG_PRINT
(
"info"
,
(
"write field definitions"
));
for
(
i
=
0
;
i
<
share
.
base
.
fields
;
i
++
)
if
(
mi_recinfo_write
(
file
,
&
recinfo
[
i
]))
goto
err
;
...
...
@@ -727,6 +743,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
#endif
/* Enlarge files */
DBUG_PRINT
(
"info"
,
(
"enlarge to keystart: %lu"
,
(
ulong
)
share
.
base
.
keystart
));
if
(
my_chsize
(
file
,(
ulong
)
share
.
base
.
keystart
,
0
,
MYF
(
0
)))
goto
err
;
...
...
myisam/mi_delete_table.c
View file @
4eee50de
...
...
@@ -34,12 +34,24 @@ int mi_delete_table(const char *name)
#ifdef USE_RAID
{
MI_INFO
*
info
;
/* we use 'open_for_repair' to be able to delete a crashed table */
if
(
!
(
info
=
mi_open
(
name
,
O_RDONLY
,
HA_OPEN_FOR_REPAIR
)))
DBUG_RETURN
(
my_errno
);
raid_type
=
info
->
s
->
base
.
raid_type
;
raid_chunks
=
info
->
s
->
base
.
raid_chunks
;
mi_close
(
info
);
/*
When built with RAID support, we need to determine if this table
makes use of the raid feature. If yes, we need to remove all raid
chunks. This is done with my_raid_delete(). Unfortunately it is
necessary to open the table just to check this. We use
'open_for_repair' to be able to open even a crashed table. If even
this open fails, we assume no raid configuration for this table
and try to remove the normal data file only. This may however
leave the raid chunks behind.
*/
if
(
!
(
info
=
mi_open
(
name
,
O_RDONLY
,
HA_OPEN_FOR_REPAIR
)))
raid_type
=
0
;
else
{
raid_type
=
info
->
s
->
base
.
raid_type
;
raid_chunks
=
info
->
s
->
base
.
raid_chunks
;
mi_close
(
info
);
}
}
#ifdef EXTRA_DEBUG
check_table_is_closed
(
name
,
"delete"
);
...
...
myisam/mi_dynrec.c
View file @
4eee50de
...
...
@@ -1155,6 +1155,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
info
->
rec_cache
.
pos_in_file
<=
block_info
.
next_filepos
&&
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
))
...
...
myisam/mi_key.c
View file @
4eee50de
...
...
@@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
TODO: nulls processing
*/
#ifdef HAVE_SPATIAL
return
sp_make_key
(
info
,
keynr
,
key
,
record
,
filepos
);
DBUG_RETURN
(
sp_make_key
(
info
,
keynr
,
key
,
record
,
filepos
)
);
#else
DBUG_ASSERT
(
0
);
/* mi_open should check that this never happens*/
#endif
...
...
myisam/rt_index.c
View file @
4eee50de
...
...
@@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
return
-
1
;
}
/* Save searched key */
memcpy
(
info
->
first_mbr_key
,
key
,
keyinfo
->
keylength
-
info
->
s
->
base
.
rec_reflength
);
/*
Save searched key, include data pointer.
The data pointer is required if the search_flag contains MBR_DATA.
*/
memcpy
(
info
->
first_mbr_key
,
key
,
keyinfo
->
keylength
);
info
->
last_rkey_length
=
key_length
;
info
->
rtree_recursion_depth
=
-
1
;
...
...
myisam/rt_mbr.c
View file @
4eee50de
...
...
@@ -52,10 +52,14 @@
if (EQUAL_CMP(amin, amax, bmin, bmax)) \
return 1; \
} \
else
/* if (nextflag & MBR_DISJOINT) */
\
else
if (nextflag & MBR_DISJOINT)
\
{ \
if (DISJOINT_CMP(amin, amax, bmin, bmax)) \
return 1; \
}\
else
/* if unknown comparison operator */
\
{ \
DBUG_ASSERT(0); \
}
#define RT_CMP_KORR(type, korr_func, len, nextflag) \
...
...
mysql-test/r/federated.result
View file @
4eee50de
...
...
@@ -1689,6 +1689,22 @@ id c1 c2
9 abc ppc
drop table federated.t1, federated.t2;
drop table federated.t1, federated.t2;
create table t1 (id int not null auto_increment primary key, val int);
create table t1
(id int not null auto_increment primary key, val int) engine=federated
connection='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
insert into t1 values (1,0),(2,0);
update t1 set val = NULL where id = 1;
select * from t1;
id val
1 NULL
2 0
select * from t1;
id val
1 NULL
2 0
drop table t1;
drop table t1;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
...
...
mysql-test/r/gis-rtree.result
View file @
4eee50de
...
...
@@ -816,3 +816,43 @@ check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
mysql-test/t/federated.test
View file @
4eee50de
...
...
@@ -1365,4 +1365,23 @@ drop table federated.t1, federated.t2;
connection
slave
;
drop
table
federated
.
t1
,
federated
.
t2
;
#
# Bug #16494: Updates that set a column to NULL fail sometimes
#
connection
slave
;
create
table
t1
(
id
int
not
null
auto_increment
primary
key
,
val
int
);
connection
master
;
--
replace_result
$SLAVE_MYPORT
SLAVE_PORT
eval
create
table
t1
(
id
int
not
null
auto_increment
primary
key
,
val
int
)
engine
=
federated
connection
=
'mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1'
;
insert
into
t1
values
(
1
,
0
),(
2
,
0
);
update
t1
set
val
=
NULL
where
id
=
1
;
select
*
from
t1
;
connection
slave
;
select
*
from
t1
;
drop
table
t1
;
connection
master
;
drop
table
t1
;
source
include
/
federated_cleanup
.
inc
;
mysql-test/t/gis-rtree.test
View file @
4eee50de
...
...
@@ -187,4 +187,48 @@ check table t1 extended;
drop
table
t1
;
#
# Bug#17877 - Corrupted spatial index
#
CREATE
TABLE
t1
(
c1
geometry
NOT
NULL
default
''
,
SPATIAL
KEY
i1
(
c1
(
32
))
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
# This showed a missing key.
CHECK
TABLE
t1
EXTENDED
;
DROP
TABLE
t1
;
#
CREATE
TABLE
t1
(
c1
geometry
NOT
NULL
default
''
,
SPATIAL
KEY
i1
(
c1
(
32
))
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'
));
# This is the same as the first insert to get a non-unique key.
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
# This showed (and still shows) OK.
CHECK
TABLE
t1
EXTENDED
;
DROP
TABLE
t1
;
# End of 4.1 tests
sql/ha_federated.cc
View file @
4eee50de
...
...
@@ -1810,19 +1810,13 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
/*
buffers for following strings
*/
char
old_field_value_buffer
[
STRING_BUFFER_USUAL_SIZE
];
char
new_field_value_buffer
[
STRING_BUFFER_USUAL_SIZE
];
char
field_value_buffer
[
STRING_BUFFER_USUAL_SIZE
];
char
update_buffer
[
FEDERATED_QUERY_BUFFER_SIZE
];
char
where_buffer
[
FEDERATED_QUERY_BUFFER_SIZE
];
/* stores the value to be replaced of the field were are updating */
String
old_field_value
(
old_field_value_buffer
,
sizeof
(
old_field_value_buffer
),
&
my_charset_bin
);
/* stores the new value of the field */
String
new_field_value
(
new_field_value_buffer
,
sizeof
(
new_field_value_buffer
),
&
my_charset_bin
);
/* Work area for field values */
String
field_value
(
field_value_buffer
,
sizeof
(
field_value_buffer
),
&
my_charset_bin
);
/* stores the update query */
String
update_string
(
update_buffer
,
sizeof
(
update_buffer
),
...
...
@@ -1835,8 +1829,7 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
/*
set string lengths to 0 to avoid misc chars in string
*/
old_field_value
.
length
(
0
);
new_field_value
.
length
(
0
);
field_value
.
length
(
0
);
update_string
.
length
(
0
);
where_string
.
length
(
0
);
...
...
@@ -1850,8 +1843,8 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
In this loop, we want to match column names to values being inserted
(while building INSERT statement).
Iterate through table->field (new data) and share->old_fi
le
d (old_data)
using the same index to create
d an SQL UPDATE statement, n
ew data is
Iterate through table->field (new data) and share->old_fi
el
d (old_data)
using the same index to create
an SQL UPDATE statement. N
ew data is
used to create SET field=value and old data is used to create WHERE
field=oldvalue
*/
...
...
@@ -1863,30 +1856,28 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
update_string
.
append
(
FEDERATED_EQ
);
if
((
*
field
)
->
is_null
())
new_field_value
.
append
(
FEDERATED_NULL
);
update_string
.
append
(
FEDERATED_NULL
);
else
{
/* otherwise = */
(
*
field
)
->
val_str
(
&
new_field_value
);
(
*
field
)
->
quote_data
(
&
new_field_value
);
if
(
!
field_in_record_is_null
(
table
,
*
field
,
(
char
*
)
old_data
))
where_string
.
append
(
FEDERATED_EQ
);
(
*
field
)
->
val_str
(
&
field_value
);
(
*
field
)
->
quote_data
(
&
field_value
);
update_string
.
append
(
field_value
);
field_value
.
length
(
0
);
}
if
(
field_in_record_is_null
(
table
,
*
field
,
(
char
*
)
old_data
))
where_string
.
append
(
FEDERATED_ISNULL
);
else
{
(
*
field
)
->
val_str
(
&
old_field_value
,
where_string
.
append
(
FEDERATED_EQ
);
(
*
field
)
->
val_str
(
&
field_value
,
(
char
*
)
(
old_data
+
(
*
field
)
->
offset
()));
(
*
field
)
->
quote_data
(
&
old_field_value
);
where_string
.
append
(
old_field_value
);
(
*
field
)
->
quote_data
(
&
field_value
);
where_string
.
append
(
field_value
);
field_value
.
length
(
0
);
}
update_string
.
append
(
new_field_value
);
new_field_value
.
length
(
0
);
/*
Only append conjunctions if we have another field in which
to iterate
...
...
@@ -1896,7 +1887,6 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
update_string
.
append
(
FEDERATED_COMMA
);
where_string
.
append
(
FEDERATED_AND
);
}
old_field_value
.
length
(
0
);
}
update_string
.
append
(
FEDERATED_WHERE
);
update_string
.
append
(
where_string
);
...
...
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