Commit 676c5ef4 authored by igor@olga.mysql.com's avatar igor@olga.mysql.com

Merge olga.mysql.com:/home/igor/mysql-5.0-opt

into  olga.mysql.com:/home/igor/dev-opt/mysql-5.1-opt-bug30219
parents e53af13d 88703939
...@@ -618,6 +618,38 @@ bit_field int_field ...@@ -618,6 +618,38 @@ bit_field int_field
 2  2
handler t1 close; handler t1 close;
drop table t1; drop table t1;
CREATE TABLE t1 (b BIT(2));
INSERT INTO t1 (b) VALUES (1), (3), (0), (3);
SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b;
b+0 COUNT(DISTINCT b)
0 1
1 1
3 1
DROP TABLE t1;
CREATE TABLE t1 (b BIT(2), a VARCHAR(5));
INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z");
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
b+0 COUNT(DISTINCT a)
0 1
1 1
3 2
DROP TABLE t1;
CREATE TABLE t1 (a CHAR(5), b BIT(2));
INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z");
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
b+0 COUNT(DISTINCT a)
0 1
1 1
3 2
DROP TABLE t1;
CREATE TABLE t1 (a INT, b BIT(2));
INSERT INTO t1 (b, a) VALUES (1, 1), (3, 2), (0, 3), (3, 4);
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
b+0 COUNT(DISTINCT a)
0 1
1 1
3 2
DROP TABLE t1;
End of 5.0 tests End of 5.0 tests
create table t1(a bit(7)); create table t1(a bit(7));
insert into t1 values(0x40); insert into t1 values(0x40);
......
...@@ -272,6 +272,30 @@ handler t1 read a=(1); ...@@ -272,6 +272,30 @@ handler t1 read a=(1);
handler t1 close; handler t1 close;
drop table t1; drop table t1;
#
# Bug #30219: GROUP BY a column of the BIT type
#
CREATE TABLE t1 (b BIT(2));
INSERT INTO t1 (b) VALUES (1), (3), (0), (3);
SELECT b+0, COUNT(DISTINCT b) FROM t1 GROUP BY b;
DROP TABLE t1;
CREATE TABLE t1 (b BIT(2), a VARCHAR(5));
INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z");
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
DROP TABLE t1;
CREATE TABLE t1 (a CHAR(5), b BIT(2));
INSERT INTO t1 (b, a) VALUES (1, "x"), (3, "zz"), (0, "y"), (3, "z");
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
DROP TABLE t1;
CREATE TABLE t1 (a INT, b BIT(2));
INSERT INTO t1 (b, a) VALUES (1, 1), (3, 2), (0, 3), (3, 4);
SELECT b+0, COUNT(DISTINCT a) FROM t1 GROUP BY b;
DROP TABLE t1;
--echo End of 5.0 tests --echo End of 5.0 tests
# #
......
...@@ -275,9 +275,9 @@ public: ...@@ -275,9 +275,9 @@ public:
if (null_ptr) if (null_ptr)
null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,uchar*); null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,uchar*);
} }
inline void get_image(uchar *buff,uint length, CHARSET_INFO *cs) virtual void get_image(uchar *buff, uint length, CHARSET_INFO *cs)
{ memcpy(buff,ptr,length); } { memcpy(buff,ptr,length); }
inline void set_image(const uchar *buff,uint length, CHARSET_INFO *cs) virtual void set_image(const uchar *buff,uint length, CHARSET_INFO *cs)
{ memcpy(ptr,buff,length); } { memcpy(ptr,buff,length); }
...@@ -1573,7 +1573,10 @@ public: ...@@ -1573,7 +1573,10 @@ public:
virtual bool str_needs_quotes() { return TRUE; } virtual bool str_needs_quotes() { return TRUE; }
my_decimal *val_decimal(my_decimal *); my_decimal *val_decimal(my_decimal *);
int cmp(const uchar *a, const uchar *b) int cmp(const uchar *a, const uchar *b)
{ return cmp_binary(a, b); } {
DBUG_ASSERT(ptr == a);
return Field_bit::key_cmp((const byte *) b, bytes_in_rec+test(bit_len));
}
int cmp_binary_offset(uint row_offset) int cmp_binary_offset(uint row_offset)
{ return cmp_offset(row_offset); } { return cmp_offset(row_offset); }
int cmp_max(const uchar *a, const uchar *b, uint max_length); int cmp_max(const uchar *a, const uchar *b, uint max_length);
...@@ -1581,6 +1584,10 @@ public: ...@@ -1581,6 +1584,10 @@ public:
{ return cmp_binary((uchar *) a, (uchar *) b); } { return cmp_binary((uchar *) a, (uchar *) b); }
int key_cmp(const uchar *str, uint length); int key_cmp(const uchar *str, uint length);
int cmp_offset(uint row_offset); int cmp_offset(uint row_offset);
void get_image(uchar *buff, uint length, CHARSET_INFO *cs)
{ get_key_image(buff, length, itRAW); }
void set_image(const uchar *buff,uint length, CHARSET_INFO *cs)
{ Field_bit::store(buff, length, cs); }
uint get_key_image(uchar *buff, uint length, imagetype type); uint get_key_image(uchar *buff, uint length, imagetype type);
void set_key_image(const uchar *buff, uint length) void set_key_image(const uchar *buff, uint length)
{ Field_bit::store((char*) buff, length, &my_charset_bin); } { Field_bit::store((char*) buff, length, &my_charset_bin); }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment