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
f0bc019c
Commit
f0bc019c
authored
Oct 20, 2004
by
igor@rurik.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
parents
f64d88a9
7f884c1f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
117 additions
and
65 deletions
+117
-65
include/decimal.h
include/decimal.h
+1
-0
mysql-test/r/group_min_max.result
mysql-test/r/group_min_max.result
+6
-0
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+34
-0
mysql-test/r/range.result
mysql-test/r/range.result
+0
-35
mysql-test/r/strict.result
mysql-test/r/strict.result
+1
-1
mysql-test/t/group_min_max.test
mysql-test/t/group_min_max.test
+10
-0
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+22
-0
mysql-test/t/range.test
mysql-test/t/range.test
+0
-19
mysql-test/t/strict.test
mysql-test/t/strict.test
+2
-0
sql/opt_range.cc
sql/opt_range.cc
+4
-7
strings/decimal.c
strings/decimal.c
+37
-3
No files found.
include/decimal.h
View file @
f0bc019c
...
...
@@ -45,6 +45,7 @@ int decimal_result_size(decimal *from1, decimal *from2, char op, int param);
int
decimal_add
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
);
int
decimal_sub
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
);
int
decimal_cmp
(
decimal
*
from1
,
decimal
*
from2
);
int
decimal_mul
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
);
int
decimal_div
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
,
int
scale_incr
);
int
decimal_mod
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
);
...
...
mysql-test/r/group_min_max.result
View file @
f0bc019c
...
...
@@ -1897,3 +1897,9 @@ id select_type table type possible_keys key key_len ref rows Extra
drop table t1;
drop table t2;
drop table t3;
create table t1 (
a varchar(30), b varchar(30), primary key(a), key(b)
) engine=innodb;
select distinct a from t1;
a
drop table t1;
mysql-test/r/innodb.result
View file @
f0bc019c
...
...
@@ -1630,3 +1630,37 @@ show status like "binlog_cache_disk_use";
Variable_name Value
Binlog_cache_disk_use 1
drop table t1;
create table t1 (x bigint unsigned not null primary key) engine=innodb;
insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1);
select * from t1;
x
18446744073709551600
18446744073709551601
select count(*) from t1 where x>0;
count(*)
2
select count(*) from t1 where x=0;
count(*)
0
select count(*) from t1 where x<0;
count(*)
0
select count(*) from t1 where x < -16;
count(*)
0
select count(*) from t1 where x = -16;
count(*)
0
explain select count(*) from t1 where x > -16;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY PRIMARY 8 NULL 1 Using where; Using index
select count(*) from t1 where x > -16;
count(*)
1
select * from t1 where x > -16;
x
18446744073709551601
select count(*) from t1 where x = 18446744073709551601;
count(*)
1
drop table t1;
mysql-test/r/range.result
View file @
f0bc019c
...
...
@@ -547,38 +547,3 @@ select count(*) from t2 where x = 18446744073709551601;
count(*)
0
drop table t1;
create table t1 (x bigint unsigned not null primary key) engine=innodb;
insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1);
select * from t1;
x
18446744073709551600
18446744073709551601
select count(*) from t1 where x>0;
count(*)
2
select count(*) from t1 where x=0;
count(*)
0
select count(*) from t1 where x<0;
count(*)
0
select count(*) from t1 where x < -16;
count(*)
0
select count(*) from t1 where x = -16;
count(*)
0
explain select count(*) from t1 where x > -16;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index PRIMARY PRIMARY 8 NULL 2 Using where; Using index
select count(*) from t1 where x > -16;
count(*)
2
select * from t1 where x > -16;
x
18446744073709551600
18446744073709551601
select count(*) from t1 where x = 18446744073709551601;
count(*)
1
drop table t1;
mysql-test/r/strict.result
View file @
f0bc019c
...
...
@@ -805,7 +805,7 @@ col1 col2
1.7e+308 1.7e+308
-2.2e-308 0
1.7e+308 1.7e+308
-
0 NULL
0 NULL
2 NULL
NULL NULL
1.79769313486232e+308 0
...
...
mysql-test/t/group_min_max.test
View file @
f0bc019c
...
...
@@ -577,3 +577,13 @@ explain select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
drop
table
t1
;
drop
table
t2
;
drop
table
t3
;
#
# Bug #6142: a problem with the empty innodb table
#
create
table
t1
(
a
varchar
(
30
),
b
varchar
(
30
),
primary
key
(
a
),
key
(
b
)
)
engine
=
innodb
;
select
distinct
a
from
t1
;
drop
table
t1
;
mysql-test/t/innodb.test
View file @
f0bc019c
...
...
@@ -1155,5 +1155,27 @@ delete from t1;
commit
;
show
status
like
"binlog_cache_use"
;
show
status
like
"binlog_cache_disk_use"
;
drop
table
t1
;
#
# range optimizer problem
#
create
table
t1
(
x
bigint
unsigned
not
null
primary
key
)
engine
=
innodb
;
insert
into
t1
(
x
)
values
(
0xfffffffffffffff0
),(
0xfffffffffffffff1
);
select
*
from
t1
;
select
count
(
*
)
from
t1
where
x
>
0
;
select
count
(
*
)
from
t1
where
x
=
0
;
select
count
(
*
)
from
t1
where
x
<
0
;
select
count
(
*
)
from
t1
where
x
<
-
16
;
select
count
(
*
)
from
t1
where
x
=
-
16
;
explain
select
count
(
*
)
from
t1
where
x
>
-
16
;
# The following result should be (2). To be fixed when we add 'unsigned flag' to
# Field::store(longlong)
select
count
(
*
)
from
t1
where
x
>
-
16
;
select
*
from
t1
where
x
>
-
16
;
select
count
(
*
)
from
t1
where
x
=
18446744073709551601
;
drop
table
t1
;
mysql-test/t/range.test
View file @
f0bc019c
...
...
@@ -418,23 +418,4 @@ select count(*) from t2 where x > -16;
select
count
(
*
)
from
t2
where
x
=
18446744073709551601
;
drop
table
t1
;
--
disable_warnings
create
table
t1
(
x
bigint
unsigned
not
null
primary
key
)
engine
=
innodb
;
--
enable_warnings
insert
into
t1
(
x
)
values
(
0xfffffffffffffff0
),(
0xfffffffffffffff1
);
select
*
from
t1
;
select
count
(
*
)
from
t1
where
x
>
0
;
select
count
(
*
)
from
t1
where
x
=
0
;
select
count
(
*
)
from
t1
where
x
<
0
;
select
count
(
*
)
from
t1
where
x
<
-
16
;
select
count
(
*
)
from
t1
where
x
=
-
16
;
explain
select
count
(
*
)
from
t1
where
x
>
-
16
;
# The following result should be (2). To be fixed when we add 'unsigned flag' to
# Field::store(longlong)
select
count
(
*
)
from
t1
where
x
>
-
16
;
select
*
from
t1
where
x
>
-
16
;
select
count
(
*
)
from
t1
where
x
=
18446744073709551601
;
drop
table
t1
;
mysql-test/t/strict.test
View file @
f0bc019c
...
...
@@ -556,6 +556,8 @@ INSERT IGNORE INTO t1 (col1) values (1/0);
--
error
1367
INSERT
IGNORE
INTO
t1
VALUES
(
+
1.9E+309
,
-
1.9E+309
);
INSERT
IGNORE
INTO
t1
VALUES
(
'+2.0E+309'
,
'-2.0E+309'
);
# stupid...
--
replace_result
-
0
0
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
...
...
sql/opt_range.cc
View file @
f0bc019c
...
...
@@ -7134,17 +7134,14 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
static
inline
uint
get_field_keypart
(
KEY
*
index
,
Field
*
field
)
{
KEY_PART_INFO
*
part
=
index
->
key_part
;
uint
key_part_num
=
0
;
KEY_PART_INFO
*
part
,
*
end
;
while
(
part
!=
part
+
index
->
key_parts
)
for
(
part
=
index
->
key_part
,
end
=
part
+
index
->
key_parts
;
part
<
end
;
part
++
)
{
key_part_num
++
;
if
(
field
->
eq
(
part
->
field
))
return
key_part_num
;
part
++
;
return
part
-
index
->
key_part
+
1
;
}
return
key_part_num
;
return
0
;
}
...
...
strings/decimal.c
View file @
f0bc019c
...
...
@@ -983,7 +983,8 @@ static int do_add(decimal *from1, decimal *from2, decimal *to)
return
error
;
}
/* to=from1-from2 */
/* to=from1-from2.
if to==0, return -1/0/+1 - the result of the comparison */
static
int
do_sub
(
decimal
*
from1
,
decimal
*
from2
,
decimal
*
to
)
{
int
intg1
=
ROUND_UP
(
from1
->
intg
),
intg2
=
ROUND_UP
(
from2
->
intg
),
...
...
@@ -991,8 +992,6 @@ static int do_sub(decimal *from1, decimal *from2, decimal *to)
int
frac0
=
max
(
frac1
,
frac2
),
error
;
dec1
*
buf1
,
*
buf2
,
*
buf0
,
*
stop1
,
*
stop2
,
*
start1
,
*
start2
,
carry
=
0
;
to
->
sign
=
from1
->
sign
;
/* let carry:=1 if from2 > from1 */
start1
=
buf1
=
from1
->
buf
;
stop1
=
buf1
+
intg1
;
start2
=
buf2
=
from2
->
buf
;
stop2
=
buf2
+
intg2
;
...
...
@@ -1026,10 +1025,18 @@ static int do_sub(decimal *from1, decimal *from2, decimal *to)
carry
=
1
;
else
/* short-circuit everything: from1 == from2 */
{
if
(
to
==
0
)
/* decimal_cmp() */
return
0
;
MAKE_ZERO
(
to
);
return
E_DEC_OK
;
}
}
if
(
to
==
0
)
/* decimal_cmp() */
return
carry
==
from1
->
sign
?
1
:
-
1
;
to
->
sign
=
from1
->
sign
;
/* ensure that always from1 > from2 (and intg1 >= intg2) */
if
(
carry
)
{
...
...
@@ -1109,6 +1116,13 @@ int decimal_sub(decimal *from1, decimal *from2, decimal *to)
return
do_add
(
from1
,
from2
,
to
);
}
int
decimal_cmp
(
decimal
*
from1
,
decimal
*
from2
)
{
if
(
likely
(
from1
->
sign
==
from2
->
sign
))
return
do_sub
(
from1
,
from2
,
0
);
return
from1
->
sign
>
from2
->
sign
?
-
1
:
1
;
}
/*
multiply two decimals
...
...
@@ -1685,6 +1699,17 @@ void test_ds(char *s1, char *s2)
printf
(
"
\n
"
);
}
void
test_dc
(
char
*
s1
,
char
*
s2
)
{
char
s
[
100
];
int
res
;
sprintf
(
s
,
"'%s' <=> '%s'"
,
s1
,
s2
);
string2decimal
(
s1
,
&
a
,
0
);
string2decimal
(
s2
,
&
b
,
0
);
res
=
decimal_cmp
(
&
a
,
&
b
);
printf
(
"%-40s => res=%d
\n
"
,
s
,
res
);
}
void
test_dm
(
char
*
s1
,
char
*
s2
)
{
char
s
[
100
];
...
...
@@ -1899,6 +1924,15 @@ main()
test_d2b2d
(
"-.000000012345000098765"
,
30
,
20
);
test_d2b2d
(
"1234500009876.5"
,
30
,
5
);
printf
(
"==== decimal_cmp ====
\n
"
);
test_dc
(
"12"
,
"13"
);
test_dc
(
"13"
,
"12"
);
test_dc
(
"-10"
,
"10"
);
test_dc
(
"10"
,
"-10"
);
test_dc
(
"-12"
,
"-13"
);
test_dc
(
"0"
,
"12"
);
test_dc
(
"-10"
,
"0"
);
test_dc
(
"4"
,
"4"
);
return
0
;
}
#endif
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