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
f343afe0
Commit
f343afe0
authored
Nov 27, 2009
by
Kent Boortz
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
ea19feeb
fa612924
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
116 additions
and
32 deletions
+116
-32
client/mysql.cc
client/mysql.cc
+2
-2
mysql-test/r/bug47671.result
mysql-test/r/bug47671.result
+13
-0
mysql-test/r/range.result
mysql-test/r/range.result
+33
-0
mysql-test/t/bug47671-master.opt
mysql-test/t/bug47671-master.opt
+1
-0
mysql-test/t/bug47671.test
mysql-test/t/bug47671.test
+6
-0
mysql-test/t/range.test
mysql-test/t/range.test
+33
-1
sql/opt_range.cc
sql/opt_range.cc
+28
-29
No files found.
client/mysql.cc
View file @
f343afe0
...
...
@@ -4335,7 +4335,7 @@ com_status(String *buffer __attribute__((unused)),
Don't remove "limit 1",
it is protection againts SQL_SELECT_LIMIT=0
*/
if
(
mysql_store_result_for_lazy
(
&
result
))
if
(
!
mysql_store_result_for_lazy
(
&
result
))
{
MYSQL_ROW
cur
=
mysql_fetch_row
(
result
);
if
(
cur
)
...
...
@@ -4379,7 +4379,7 @@ com_status(String *buffer __attribute__((unused)),
if
(
mysql_errno
(
&
mysql
)
==
CR_SERVER_GONE_ERROR
)
return
0
;
}
if
(
mysql_store_result_for_lazy
(
&
result
))
if
(
!
mysql_store_result_for_lazy
(
&
result
))
{
MYSQL_ROW
cur
=
mysql_fetch_row
(
result
);
if
(
cur
)
...
...
mysql-test/r/bug47671.result
0 → 100644
View file @
f343afe0
#
# Bug#47671 - wrong character-set after upgrade from 5.1.34 to 5.1.39
#
# Extract only charset information from 'status' command output using regex
--------------
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
--------------
mysql-test/r/range.result
View file @
f343afe0
...
...
@@ -1604,6 +1604,39 @@ str_to_date('', '%Y-%m-%d')
0000-00-00
DROP TABLE t1, t2;
#
# Bug#48459: valgrind errors with query using 'Range checked for each
# record'
#
CREATE TABLE t1 (
a INT,
b CHAR(2),
c INT,
d INT,
KEY ( c ),
KEY ( d, a, b ( 2 ) ),
KEY ( b ( 1 ) )
);
INSERT INTO t1 VALUES ( NULL, 'a', 1, 2 ), ( NULL, 'a', 1, 2 ),
( 1, 'a', 1, 2 ), ( 1, 'a', 1, 2 );
CREATE TABLE t2 (
a INT,
c INT,
e INT,
KEY ( e )
);
INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL );
# Should not give Valgrind warnings
SELECT 1
FROM t1, t2
WHERE t1.d <> '1' AND t1.b > '1'
AND t1.a = t2.a AND t1.c = t2.c;
1
1
1
1
1
DROP TABLE t1, t2;
#
# Bug #48665: sql-bench's insert test fails due to wrong result
#
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a));
...
...
mysql-test/t/bug47671-master.opt
0 → 100644
View file @
f343afe0
--default-character-set=utf8 --skip-character-set-client-handshake
mysql-test/t/bug47671.test
0 → 100644
View file @
f343afe0
--
echo
#
--
echo
# Bug#47671 - wrong character-set after upgrade from 5.1.34 to 5.1.39
--
echo
#
--
echo
# Extract only charset information from 'status' command output using regex
--
replace_regex
/.*
mysql
.*//
/
Connection
.*//
/
Current
.*//
/
SSL
.*//
/
Using
.*//
/
Server
version
.*//
/
Protocol
.*//
/
UNIX
.*//
/
Uptime
.*//
/
Threads
.*//
--
exec
$MYSQL
-
u
root
test
-
e
"status"
;
mysql-test/t/range.test
View file @
f343afe0
...
...
@@ -1260,6 +1260,39 @@ SELECT str_to_date('', '%Y-%m-%d');
DROP
TABLE
t1
,
t2
;
--
echo
#
--
echo
# Bug#48459: valgrind errors with query using 'Range checked for each
--
echo
# record'
--
echo
#
CREATE
TABLE
t1
(
a
INT
,
b
CHAR
(
2
),
c
INT
,
d
INT
,
KEY
(
c
),
KEY
(
d
,
a
,
b
(
2
)
),
KEY
(
b
(
1
)
)
);
INSERT
INTO
t1
VALUES
(
NULL
,
'a'
,
1
,
2
),
(
NULL
,
'a'
,
1
,
2
),
(
1
,
'a'
,
1
,
2
),
(
1
,
'a'
,
1
,
2
);
CREATE
TABLE
t2
(
a
INT
,
c
INT
,
e
INT
,
KEY
(
e
)
);
INSERT
INTO
t2
VALUES
(
1
,
1
,
NULL
),
(
1
,
1
,
NULL
);
--
echo
# Should not give Valgrind warnings
SELECT
1
FROM
t1
,
t2
WHERE
t1
.
d
<>
'1'
AND
t1
.
b
>
'1'
AND
t1
.
a
=
t2
.
a
AND
t1
.
c
=
t2
.
c
;
DROP
TABLE
t1
,
t2
;
--
echo
#
--
echo
# Bug #48665: sql-bench's insert test fails due to wrong result
...
...
@@ -1280,5 +1313,4 @@ SELECT * FROM t1 FORCE INDEX (PRIMARY)
DROP
TABLE
t1
;
--
echo
End
of
5.1
tests
sql/opt_range.cc
View file @
f343afe0
...
...
@@ -446,9 +446,9 @@ class SEL_ARG :public Sql_alloc
range_key
,
*
range_key_flag
);
*
range_key_flag
|=
key_tree
->
min_flag
;
if
(
key_tree
->
next_key_part
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
&&
!
(
*
range_key_flag
&
(
NO_MIN_RANGE
|
NEAR_MIN
))
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
)
!
(
*
range_key_flag
&
(
NO_MIN_RANGE
|
NEAR_MIN
)))
res
+=
key_tree
->
next_key_part
->
store_min_key
(
key
,
range_key
,
range_key_flag
);
return
res
;
...
...
@@ -462,9 +462,9 @@ class SEL_ARG :public Sql_alloc
range_key
,
*
range_key_flag
);
(
*
range_key_flag
)
|=
key_tree
->
max_flag
;
if
(
key_tree
->
next_key_part
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
&&
!
(
*
range_key_flag
&
(
NO_MAX_RANGE
|
NEAR_MAX
))
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
)
!
(
*
range_key_flag
&
(
NO_MAX_RANGE
|
NEAR_MAX
)))
res
+=
key_tree
->
next_key_part
->
store_max_key
(
key
,
range_key
,
range_key_flag
);
return
res
;
...
...
@@ -1700,6 +1700,7 @@ SEL_ARG *SEL_ARG::clone(RANGE_OPT_PARAM *param, SEL_ARG *new_parent,
tmp
->
prev
=
*
next_arg
;
// Link into next/prev chain
(
*
next_arg
)
->
next
=
tmp
;
(
*
next_arg
)
=
tmp
;
tmp
->
part
=
this
->
part
;
}
else
{
...
...
@@ -7290,27 +7291,25 @@ int test_rb_tree(SEL_ARG *element,SEL_ARG *parent)
}
/*
Count how many times SEL_ARG graph "root" refers to its part "key"
/**
Count how many times SEL_ARG graph "root" refers to its part "key" via
transitive closure.
SYNOPSIS
count_key_part_usage()
root An RB-Root node in a SEL_ARG graph.
key Another RB-Root node in that SEL_ARG graph.
DESCRIPTION
The passed "root" node may refer to "key" node via root->next_key_part,
root->next->n
This function counts how many times the node "key" is referred (via
SEL_ARG::next_key_part) by
- intervals of RB-tree pointed by "root",
- intervals of RB-trees that are pointed by SEL_ARG::next_key_part from
intervals of RB-tree pointed by "root",
- and so on.
@param root An RB-Root node in a SEL_ARG graph.
@param key Another RB-Root node in that SEL_ARG graph.
The passed "root" node may refer to "key" node via root->next_key_part,
root->next->n
This function counts how many times the node "key" is referred (via
SEL_ARG::next_key_part) by
- intervals of RB-tree pointed by "root",
- intervals of RB-trees that are pointed by SEL_ARG::next_key_part from
intervals of RB-tree pointed by "root",
- and so on.
Here is an example (horizontal links represent next_key_part pointers,
vertical links - next/prev prev pointers):
Here is an example (horizontal links represent next_key_part pointers,
vertical links - next/prev prev pointers):
+----+ $
|root|-----------------+
...
...
@@ -7330,8 +7329,8 @@ int test_rb_tree(SEL_ARG *element,SEL_ARG *parent)
... +---+ $ |
| |------------+
+---+ $
RETURN
Number of links to "key" from nodes reachable from "root".
@return
Number of links to "key" from nodes reachable from "root".
*/
static
ulong
count_key_part_usage
(
SEL_ARG
*
root
,
SEL_ARG
*
key
)
...
...
@@ -7586,8 +7585,8 @@ check_quick_keys(PARAM *param, uint idx, SEL_ARG *key_tree,
param
->
first_null_comp
=
key_tree
->
part
+
1
;
if
(
key_tree
->
next_key_part
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
)
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
)
{
// const key as prefix
if
(
min_key_length
==
max_key_length
&&
!
memcmp
(
min_key
,
max_key
,
(
uint
)
(
tmp_max_key
-
max_key
))
&&
...
...
@@ -7868,8 +7867,8 @@ get_quick_keys(PARAM *param,QUICK_RANGE_SELECT *quick,KEY_PART *key,
&
tmp_max_key
,
max_key_flag
);
if
(
key_tree
->
next_key_part
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
&&
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
)
key_tree
->
next_key_part
->
type
==
SEL_ARG
::
KEY_RANGE
&&
key_tree
->
next_key_part
->
part
==
key_tree
->
part
+
1
)
{
// const key as prefix
if
((
tmp_min_key
-
min_key
)
==
(
tmp_max_key
-
max_key
)
&&
memcmp
(
min_key
,
max_key
,
(
uint
)(
tmp_max_key
-
max_key
))
==
0
&&
...
...
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