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
22431de4
Commit
22431de4
authored
Apr 11, 2006
by
ingo@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/mydev/mysql-5.0
into mysql.com:/home/mydev/mysql-5.0-bug5390
parents
5824ec03
0647a26a
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
120 additions
and
43 deletions
+120
-43
mysql-test/r/having.result
mysql-test/r/having.result
+0
-2
mysql-test/r/type_bit.result
mysql-test/r/type_bit.result
+9
-0
mysql-test/r/type_bit_innodb.result
mysql-test/r/type_bit_innodb.result
+9
-0
mysql-test/r/view.result
mysql-test/r/view.result
+21
-0
mysql-test/t/having.test
mysql-test/t/having.test
+2
-0
mysql-test/t/type_bit.test
mysql-test/t/type_bit.test
+12
-0
mysql-test/t/type_bit_innodb.test
mysql-test/t/type_bit_innodb.test
+12
-0
mysql-test/t/view.test
mysql-test/t/view.test
+20
-0
sql/field.cc
sql/field.cc
+24
-29
sql/field.h
sql/field.h
+6
-8
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+1
-1
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+2
-2
sql/key.cc
sql/key.cc
+2
-1
No files found.
mysql-test/r/having.result
View file @
22431de4
...
...
@@ -360,8 +360,6 @@ s1 count(s1)
y 1
drop table t1;
DROP SCHEMA IF EXISTS HU;
Warnings:
Note 1008 Can't drop database 'HU'; database doesn't exist
CREATE SCHEMA HU ;
USE HU ;
CREATE TABLE STAFF
...
...
mysql-test/r/type_bit.result
View file @
22431de4
...
...
@@ -564,3 +564,12 @@ b1+0 sum(b1) sum(b2)
1 4 4
2 2 2
drop table t1, t2;
create table t1 (a bit(7));
insert into t1 values (0x60);
select * from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 a a 16 7 1 Y 0 0 63
a
`
drop table t1;
End of 5.0 tests
mysql-test/r/type_bit_innodb.result
View file @
22431de4
...
...
@@ -402,3 +402,12 @@ t1 CREATE TABLE `t1` (
`b` bit(10) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t1;
create table t1 (a bit(7)) engine=innodb;
insert into t1 values (0x60);
select * from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 a a 16 7 1 Y 0 0 63
a
`
drop table t1;
End of 5.0 tests
mysql-test/r/view.result
View file @
22431de4
...
...
@@ -2579,3 +2579,24 @@ COUNT(*)
2
DROP VIEW v2;
DROP TABLE t1, t2;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
td date DEFAULT NULL, KEY idx(td));
INSERT INTO t1 VALUES
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
CREATE VIEW v1 AS SELECT * FROM t1;
SELECT * FROM t1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04';
id td
2 2005-01-02
3 2005-01-02
4 2005-01-03
5 2005-01-04
SELECT * FROM v1 WHERE td BETWEEN '2005.01.02' AND '2005.01.04';
id td
2 2005-01-02
3 2005-01-02
4 2005-01-03
5 2005-01-04
DROP VIEW v1;
DROP TABLE t1;
mysql-test/t/having.test
View file @
22431de4
...
...
@@ -354,7 +354,9 @@ drop table t1;
# when the server is run on Windows or with --lower-case-table-names=1
#
--
disable_warnings
DROP
SCHEMA
IF
EXISTS
HU
;
--
enable_warnings
CREATE
SCHEMA
HU
;
USE
HU
;
...
...
mysql-test/t/type_bit.test
View file @
22431de4
...
...
@@ -227,3 +227,15 @@ select sum(a1), b1+0, b2+0 from t1 join t2 on b1 = b2 group by b1 order by 1;
select
1
from
t1
join
t2
on
b1
=
b2
group
by
b1
order
by
1
;
select
b1
+
0
,
sum
(
b1
),
sum
(
b2
)
from
t1
join
t2
on
b1
=
b2
group
by
b1
order
by
1
;
drop
table
t1
,
t2
;
#
# Bug #13601: Wrong field length reported for BIT fields
#
create
table
t1
(
a
bit
(
7
));
insert
into
t1
values
(
0x60
);
--
enable_metadata
select
*
from
t1
;
--
disable_metadata
drop
table
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/type_bit_innodb.test
View file @
22431de4
...
...
@@ -133,3 +133,15 @@ show create table t1;
alter
table
t1
engine
=
innodb
;
show
create
table
t1
;
drop
table
t1
;
#
# Bug #13601: Wrong field length reported for BIT fields
#
create
table
t1
(
a
bit
(
7
))
engine
=
innodb
;
insert
into
t1
values
(
0x60
);
--
enable_metadata
select
*
from
t1
;
--
disable_metadata
drop
table
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/view.test
View file @
22431de4
...
...
@@ -2434,3 +2434,23 @@ SELECT COUNT(*) FROM t1 LEFT JOIN v2 ON t1.id=v2.id;
DROP
VIEW
v2
;
DROP
TABLE
t1
,
t2
;
#
# Bug #16069: VIEW does return the same results as underlying SELECT
# with WHERE condition containing BETWEEN over dates
CREATE
TABLE
t1
(
id
int
NOT
NULL
PRIMARY
KEY
,
td
date
DEFAULT
NULL
,
KEY
idx
(
td
));
INSERT
INTO
t1
VALUES
(
1
,
'2005-01-01'
),
(
2
,
'2005-01-02'
),
(
3
,
'2005-01-02'
),
(
4
,
'2005-01-03'
),
(
5
,
'2005-01-04'
),
(
6
,
'2005-01-05'
),
(
7
,
'2005-01-05'
),
(
8
,
'2005-01-05'
),
(
9
,
'2005-01-06'
);
CREATE
VIEW
v1
AS
SELECT
*
FROM
t1
;
SELECT
*
FROM
t1
WHERE
td
BETWEEN
'2005.01.02'
AND
'2005.01.04'
;
SELECT
*
FROM
v1
WHERE
td
BETWEEN
'2005.01.02'
AND
'2005.01.04'
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
sql/field.cc
View file @
22431de4
...
...
@@ -7942,9 +7942,10 @@ Field_bit::Field_bit(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
uchar
null_bit_arg
,
uchar
*
bit_ptr_arg
,
uchar
bit_ofs_arg
,
enum
utype
unireg_check_arg
,
const
char
*
field_name_arg
,
struct
st_table
*
table_arg
)
:
Field
(
ptr_arg
,
len_arg
>>
3
,
null_ptr_arg
,
null_bit_arg
,
:
Field
(
ptr_arg
,
len_arg
,
null_ptr_arg
,
null_bit_arg
,
unireg_check_arg
,
field_name_arg
,
table_arg
),
bit_ptr
(
bit_ptr_arg
),
bit_ofs
(
bit_ofs_arg
),
bit_len
(
len_arg
&
7
)
bit_ptr
(
bit_ptr_arg
),
bit_ofs
(
bit_ofs_arg
),
bit_len
(
len_arg
&
7
),
bytes_in_rec
(
len_arg
/
8
)
{
/*
Ensure that Field::eq() can distinguish between two different bit fields.
...
...
@@ -7980,14 +7981,14 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs)
int
delta
;
for
(;
length
&&
!*
from
;
from
++
,
length
--
);
// skip left 0's
delta
=
field_length
-
length
;
delta
=
bytes_in_rec
-
length
;
if
(
delta
<
-
1
||
(
delta
==
-
1
&&
(
uchar
)
*
from
>
((
1
<<
bit_len
)
-
1
))
||
(
!
bit_len
&&
delta
<
0
))
{
set_rec_bits
(
0xff
,
bit_ptr
,
bit_ofs
,
bit_len
);
memset
(
ptr
,
0xff
,
field_length
);
memset
(
ptr
,
0xff
,
bytes_in_rec
);
if
(
table
->
in_use
->
really_abort_on_warning
())
set_warning
(
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_DATA_TOO_LONG
,
1
);
else
...
...
@@ -8015,7 +8016,7 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs)
set_rec_bits
((
uchar
)
*
from
,
bit_ptr
,
bit_ofs
,
bit_len
);
from
++
;
}
memcpy
(
ptr
,
from
,
field_length
);
memcpy
(
ptr
,
from
,
bytes_in_rec
);
}
return
0
;
}
...
...
@@ -8056,10 +8057,10 @@ longlong Field_bit::val_int(void)
if
(
bit_len
)
{
bits
=
get_rec_bits
(
bit_ptr
,
bit_ofs
,
bit_len
);
bits
<<=
(
field_length
*
8
);
bits
<<=
(
bytes_in_rec
*
8
);
}
switch
(
field_length
)
{
switch
(
bytes_in_rec
)
{
case
0
:
return
bits
;
case
1
:
return
bits
|
(
ulonglong
)
(
uchar
)
ptr
[
0
];
case
2
:
return
bits
|
mi_uint2korr
(
ptr
);
...
...
@@ -8068,7 +8069,7 @@ longlong Field_bit::val_int(void)
case
5
:
return
bits
|
mi_uint5korr
(
ptr
);
case
6
:
return
bits
|
mi_uint6korr
(
ptr
);
case
7
:
return
bits
|
mi_uint7korr
(
ptr
);
default:
return
mi_uint8korr
(
ptr
+
field_length
-
sizeof
(
longlong
));
default:
return
mi_uint8korr
(
ptr
+
bytes_in_rec
-
sizeof
(
longlong
));
}
}
...
...
@@ -8121,7 +8122,7 @@ int Field_bit::cmp_offset(uint row_offset)
if
((
flag
=
(
int
)
(
bits_a
-
bits_b
)))
return
flag
;
}
return
memcmp
(
ptr
,
ptr
+
row_offset
,
field_length
);
return
memcmp
(
ptr
,
ptr
+
row_offset
,
bytes_in_rec
);
}
...
...
@@ -8133,7 +8134,7 @@ void Field_bit::get_key_image(char *buff, uint length, imagetype type)
*
buff
++=
bits
;
length
--
;
}
memcpy
(
buff
,
ptr
,
min
(
length
,
field_length
));
memcpy
(
buff
,
ptr
,
min
(
length
,
bytes_in_rec
));
}
...
...
@@ -8141,21 +8142,21 @@ void Field_bit::sql_type(String &res) const
{
CHARSET_INFO
*
cs
=
res
.
charset
();
ulong
length
=
cs
->
cset
->
snprintf
(
cs
,
(
char
*
)
res
.
ptr
(),
res
.
alloced_length
(),
"bit(%d)"
,
(
int
)
field_length
*
8
+
bit_len
);
"bit(%d)"
,
(
int
)
field_length
);
res
.
length
((
uint
)
length
);
}
char
*
Field_bit
::
pack
(
char
*
to
,
const
char
*
from
,
uint
max_length
)
{
uint
length
=
min
(
field_length
+
(
bit_len
>
0
),
max_length
);
DBUG_ASSERT
(
max_length
);
uint
length
;
if
(
bit_len
)
{
uchar
bits
=
get_rec_bits
(
bit_ptr
,
bit_ofs
,
bit_len
);
*
to
++=
bits
;
length
--
;
}
length
=
min
(
bytes_in_rec
,
max_length
-
(
bit_len
>
0
));
memcpy
(
to
,
from
,
length
);
return
to
+
length
;
}
...
...
@@ -8168,8 +8169,8 @@ const char *Field_bit::unpack(char *to, const char *from)
set_rec_bits
(
*
from
,
bit_ptr
,
bit_ofs
,
bit_len
);
from
++
;
}
memcpy
(
to
,
from
,
field_length
);
return
from
+
field_length
;
memcpy
(
to
,
from
,
bytes_in_rec
);
return
from
+
bytes_in_rec
;
}
...
...
@@ -8183,26 +8184,25 @@ Field_bit_as_char::Field_bit_as_char(char *ptr_arg, uint32 len_arg,
const
char
*
field_name_arg
,
struct
st_table
*
table_arg
)
:
Field_bit
(
ptr_arg
,
len_arg
,
null_ptr_arg
,
null_bit_arg
,
0
,
0
,
unireg_check_arg
,
field_name_arg
,
table_arg
),
create_length
(
len_arg
)
0
,
unireg_check_arg
,
field_name_arg
,
table_arg
)
{
bit_len
=
0
;
field_length
=
((
len_arg
+
7
)
&
~
7
)
/
8
;
bytes_in_rec
=
(
len_arg
+
7
)
/
8
;
}
int
Field_bit_as_char
::
store
(
const
char
*
from
,
uint
length
,
CHARSET_INFO
*
cs
)
{
int
delta
;
uchar
bits
=
create
_length
&
7
;
uchar
bits
=
field
_length
&
7
;
for
(;
length
&&
!*
from
;
from
++
,
length
--
);
// skip left 0's
delta
=
field_length
-
length
;
delta
=
bytes_in_rec
-
length
;
if
(
delta
<
0
||
(
delta
==
0
&&
bits
&&
(
uint
)
(
uchar
)
*
from
>=
(
uint
)
(
1
<<
bits
)))
{
memset
(
ptr
,
0xff
,
field_length
);
memset
(
ptr
,
0xff
,
bytes_in_rec
);
if
(
bits
)
*
ptr
&=
((
1
<<
bits
)
-
1
);
/* set first byte */
if
(
table
->
in_use
->
really_abort_on_warning
())
...
...
@@ -8221,7 +8221,7 @@ void Field_bit_as_char::sql_type(String &res) const
{
CHARSET_INFO
*
cs
=
res
.
charset
();
ulong
length
=
cs
->
cset
->
snprintf
(
cs
,
(
char
*
)
res
.
ptr
(),
res
.
alloced_length
(),
"bit(%d)"
,
(
int
)
create
_length
);
"bit(%d)"
,
(
int
)
field
_length
);
res
.
length
((
uint
)
length
);
}
...
...
@@ -8947,11 +8947,6 @@ create_field::create_field(Field *old_field,Field *orig_field)
geom_type
=
((
Field_geom
*
)
old_field
)
->
geom_type
;
break
;
#endif
case
FIELD_TYPE_BIT
:
length
=
(
old_field
->
key_type
()
==
HA_KEYTYPE_BIT
)
?
((
Field_bit
*
)
old_field
)
->
bit_len
+
length
*
8
:
((
Field_bit_as_char
*
)
old_field
)
->
create_length
;
break
;
default:
break
;
}
...
...
sql/field.h
View file @
22431de4
...
...
@@ -1312,17 +1312,18 @@ class Field_bit :public Field {
uchar
*
bit_ptr
;
// position in record where 'uneven' bits store
uchar
bit_ofs
;
// offset to 'uneven' high bits
uint
bit_len
;
// number of 'uneven' high bits
uint
bytes_in_rec
;
Field_bit
(
char
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_arg
,
uchar
null_bit_arg
,
uchar
*
bit_ptr_arg
,
uchar
bit_ofs_arg
,
enum
utype
unireg_check_arg
,
const
char
*
field_name_arg
,
struct
st_table
*
table_arg
);
enum_field_types
type
()
const
{
return
FIELD_TYPE_BIT
;
}
enum
ha_base_keytype
key_type
()
const
{
return
HA_KEYTYPE_BIT
;
}
uint32
key_length
()
const
{
return
(
uint32
)
field_length
+
(
bit_len
>
0
)
;
}
uint32
max_length
()
{
return
(
uint32
)
field_length
*
8
+
bit_len
;
}
uint32
key_length
()
const
{
return
(
uint32
)
(
field_length
+
7
)
/
8
;
}
uint32
max_length
()
{
return
field_length
;
}
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
Item_result
result_type
()
const
{
return
INT_RESULT
;
}
void
reset
(
void
)
{
bzero
(
ptr
,
field_length
);
}
void
reset
(
void
)
{
bzero
(
ptr
,
bytes_in_rec
);
}
int
store
(
const
char
*
to
,
uint
length
,
CHARSET_INFO
*
charset
);
int
store
(
double
nr
);
int
store
(
longlong
nr
,
bool
unsigned_val
);
...
...
@@ -1344,9 +1345,8 @@ class Field_bit :public Field {
{
Field_bit
::
store
(
buff
,
length
,
&
my_charset_bin
);
}
void
sort_string
(
char
*
buff
,
uint
length
)
{
get_key_image
(
buff
,
length
,
itRAW
);
}
uint32
pack_length
()
const
{
return
(
uint32
)
field_length
+
(
bit_len
>
0
);
}
uint32
pack_length_in_rec
()
const
{
return
field_length
;
}
uint32
pack_length
()
const
{
return
(
uint32
)
(
field_length
+
7
)
/
8
;
}
uint32
pack_length_in_rec
()
const
{
return
bytes_in_rec
;
}
void
sql_type
(
String
&
str
)
const
;
char
*
pack
(
char
*
to
,
const
char
*
from
,
uint
max_length
=~
(
uint
)
0
);
const
char
*
unpack
(
char
*
to
,
const
char
*
from
);
...
...
@@ -1363,13 +1363,11 @@ class Field_bit :public Field {
class
Field_bit_as_char
:
public
Field_bit
{
public:
uchar
create_length
;
Field_bit_as_char
(
char
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_arg
,
uchar
null_bit_arg
,
enum
utype
unireg_check_arg
,
const
char
*
field_name_arg
,
struct
st_table
*
table_arg
);
enum
ha_base_keytype
key_type
()
const
{
return
HA_KEYTYPE_BINARY
;
}
uint32
max_length
()
{
return
(
uint32
)
create_length
;
}
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
int
store
(
const
char
*
to
,
uint
length
,
CHARSET_INFO
*
charset
);
int
store
(
double
nr
)
{
return
Field_bit
::
store
(
nr
);
}
...
...
sql/ha_ndbcluster.cc
View file @
22431de4
...
...
@@ -3952,7 +3952,7 @@ static int create_ndb_column(NDBCOL &col,
break
;
case
MYSQL_TYPE_BIT
:
{
int
no_of_bits
=
field
->
field_length
*
8
+
((
Field_bit
*
)
field
)
->
bit_len
;
int
no_of_bits
=
field
->
field_length
;
col
.
setType
(
NDBCOL
::
Bit
);
if
(
!
no_of_bits
)
col
.
setLength
(
1
);
...
...
sql/item_cmpfunc.cc
View file @
22431de4
...
...
@@ -55,8 +55,8 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
bool
all_constant
=
TRUE
;
/* If the first argument is a FIELD_ITEM, pull out the field. */
if
(
items
[
0
]
->
type
()
==
Item
::
FIELD_ITEM
)
field
=
((
Item_field
*
)
items
[
0
]
)
->
field
;
if
(
items
[
0
]
->
real_item
()
->
type
()
==
Item
::
FIELD_ITEM
)
field
=
((
Item_field
*
)
(
items
[
0
]
->
real_item
())
)
->
field
;
/* But if it can't be compared as a longlong, we don't really care. */
if
(
field
&&
!
field
->
can_be_compared_as_longlong
())
field
=
NULL
;
...
...
sql/key.cc
View file @
22431de4
...
...
@@ -192,7 +192,8 @@ void key_restore(byte *to_record, byte *from_key, KEY *key_info,
Field_bit
*
field
=
(
Field_bit
*
)
(
key_part
->
field
);
if
(
field
->
bit_len
)
{
uchar
bits
=
*
(
from_key
+
key_part
->
length
-
field
->
field_length
-
1
);
uchar
bits
=
*
(
from_key
+
key_part
->
length
-
field
->
pack_length_in_rec
()
-
1
);
set_rec_bits
(
bits
,
to_record
+
key_part
->
null_offset
+
(
key_part
->
null_bit
==
128
),
field
->
bit_ofs
,
field
->
bit_len
);
...
...
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