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
afc64075
Commit
afc64075
authored
Sep 23, 2009
by
Georgi Kodinov
Browse files
Options
Browse Files
Download
Plain Diff
automerge
parents
af92ff6b
ecea4e9a
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
93 additions
and
6 deletions
+93
-6
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+19
-0
mysql-test/t/myisam.test
mysql-test/t/myisam.test
+15
-0
sql/ha_partition.cc
sql/ha_partition.cc
+49
-3
sql/ha_partition.h
sql/ha_partition.h
+2
-1
sql/sql_table.cc
sql/sql_table.cc
+8
-2
No files found.
mysql-test/r/myisam.result
View file @
afc64075
...
...
@@ -2252,4 +2252,23 @@ h+0 d + 0 e g + 0
1 1 3 0
1 1 4 0
DROP TABLE t1;
#
# Test of BUG#35570 CHECKSUM TABLE unreliable if LINESTRING field
#
(same content / differen checksum)
#
CREATE TABLE t1 (line LINESTRING NOT NULL) engine=myisam;
INSERT INTO t1 VALUES (GeomFromText("POINT(0 0)"));
checksum table t1;
Table Checksum
test.t1 326284887
CREATE TABLE t2 (line LINESTRING NOT NULL) engine=myisam;
INSERT INTO t2 VALUES (GeomFromText("POINT(0 0)"));
checksum table t2;
Table Checksum
test.t2 326284887
CREATE TABLE t3 select * from t1;
checksum table t3;
Table Checksum
test.t3 326284887
drop table t1,t2,t3;
End of 5.1 tests
mysql-test/t/myisam.test
View file @
afc64075
...
...
@@ -1503,5 +1503,20 @@ SELECT h+0, d + 0, e, g + 0 FROM t1;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Test of BUG#35570 CHECKSUM TABLE unreliable if LINESTRING field
--
echo
# (same content / differen checksum)
--
echo
#
CREATE
TABLE
t1
(
line
LINESTRING
NOT
NULL
)
engine
=
myisam
;
INSERT
INTO
t1
VALUES
(
GeomFromText
(
"POINT(0 0)"
));
checksum
table
t1
;
CREATE
TABLE
t2
(
line
LINESTRING
NOT
NULL
)
engine
=
myisam
;
INSERT
INTO
t2
VALUES
(
GeomFromText
(
"POINT(0 0)"
));
checksum
table
t2
;
CREATE
TABLE
t3
select
*
from
t1
;
checksum
table
t3
;
drop
table
t1
,
t2
,
t3
;
--
echo
End
of
5.1
tests
sql/ha_partition.cc
View file @
afc64075
...
...
@@ -3037,7 +3037,7 @@ int ha_partition::write_row(uchar * buf)
}
m_last_part
=
part_id
;
DBUG_PRINT
(
"info"
,
(
"Insert in partition %d"
,
part_id
));
start_part_bulk_insert
(
part_id
);
start_part_bulk_insert
(
thd
,
part_id
);
tmp_disable_binlog
(
thd
);
/* Do not replicate the low-level changes. */
error
=
m_file
[
part_id
]
->
ha_write_row
(
buf
);
...
...
@@ -3101,7 +3101,7 @@ int ha_partition::update_row(const uchar *old_data, uchar *new_data)
}
m_last_part
=
new_part_id
;
start_part_bulk_insert
(
new_part_id
);
start_part_bulk_insert
(
thd
,
new_part_id
);
if
(
new_part_id
==
old_part_id
)
{
DBUG_PRINT
(
"info"
,
(
"Update in partition %d"
,
new_part_id
));
...
...
@@ -3282,17 +3282,63 @@ void ha_partition::start_bulk_insert(ha_rows rows)
Check if start_bulk_insert has been called for this partition,
if not, call it and mark it called
*/
void
ha_partition
::
start_part_bulk_insert
(
uint
part_id
)
void
ha_partition
::
start_part_bulk_insert
(
THD
*
thd
,
uint
part_id
)
{
long
old_buffer_size
;
if
(
!
bitmap_is_set
(
&
m_bulk_insert_started
,
part_id
)
&&
bitmap_is_set
(
&
m_bulk_insert_started
,
m_tot_parts
))
{
old_buffer_size
=
thd
->
variables
.
read_buff_size
;
/* Update read_buffer_size for this partition */
thd
->
variables
.
read_buff_size
=
estimate_read_buffer_size
(
old_buffer_size
);
m_file
[
part_id
]
->
ha_start_bulk_insert
(
guess_bulk_insert_rows
());
bitmap_set_bit
(
&
m_bulk_insert_started
,
part_id
);
thd
->
variables
.
read_buff_size
=
old_buffer_size
;
}
m_bulk_inserted_rows
++
;
}
/*
Estimate the read buffer size for each partition.
SYNOPSIS
ha_partition::estimate_read_buffer_size()
original_size read buffer size originally set for the server
RETURN VALUE
estimated buffer size.
DESCRIPTION
If the estimated number of rows to insert is less than 10 (but not 0)
the new buffer size is same as original buffer size.
In case of first partition of when partition function is monotonic
new buffer size is same as the original buffer size.
For rest of the partition total buffer of 10*original_size is divided
equally if number of partition is more than 10 other wise each partition
will be allowed to use original buffer size.
*/
long
ha_partition
::
estimate_read_buffer_size
(
long
original_size
)
{
/*
If number of rows to insert is less than 10, but not 0,
return original buffer size.
*/
if
(
estimation_rows_to_insert
&&
(
estimation_rows_to_insert
<
10
))
return
(
original_size
);
/*
If first insert/partition and monotonic partition function,
allow using buffer size originally set.
*/
if
(
!
m_bulk_inserted_rows
&&
m_part_func_monotonicity_info
!=
NON_MONOTONIC
&&
m_tot_parts
>
1
)
return
original_size
;
/*
Allow total buffer used in all partition to go up to 10*read_buffer_size.
11*read_buffer_size in case of monotonic partition function.
*/
if
(
m_tot_parts
<
10
)
return
original_size
;
return
(
original_size
*
10
/
m_tot_parts
);
}
/*
Try to predict the number of inserts into this partition.
...
...
sql/ha_partition.h
View file @
afc64075
...
...
@@ -367,7 +367,8 @@ class ha_partition :public handler
virtual
int
end_bulk_insert
();
private:
ha_rows
guess_bulk_insert_rows
();
void
start_part_bulk_insert
(
uint
part_id
);
void
start_part_bulk_insert
(
THD
*
thd
,
uint
part_id
);
long
estimate_read_buffer_size
(
long
original_size
);
public:
virtual
bool
is_fatal_error
(
int
error
,
uint
flags
)
...
...
sql/sql_table.cc
View file @
afc64075
...
...
@@ -7897,8 +7897,14 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables,
for
(
uint
i
=
0
;
i
<
t
->
s
->
fields
;
i
++
)
{
Field
*
f
=
t
->
field
[
i
];
if
((
f
->
type
()
==
MYSQL_TYPE_BLOB
)
||
(
f
->
type
()
==
MYSQL_TYPE_VARCHAR
))
enum_field_types
field_type
=
f
->
type
();
/*
BLOB and VARCHAR have pointers in their field, we must convert
to string; GEOMETRY is implemented on top of BLOB.
*/
if
((
field_type
==
MYSQL_TYPE_BLOB
)
||
(
field_type
==
MYSQL_TYPE_VARCHAR
)
||
(
field_type
==
MYSQL_TYPE_GEOMETRY
))
{
String
tmp
;
f
->
val_str
(
&
tmp
);
...
...
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