Fix for bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key'

Problem: lying to the optimizer that a function (Item_func_inet_ntoa)
cannot return NULL values leads to unexpected results (in the case group
keys creation/comparison is broken). 

Fix: Item_func_inet_ntoa::maybe_null should be set properly.
parent 3d203e55
...@@ -185,4 +185,10 @@ ERROR 21000: Operand should contain 1 column(s) ...@@ -185,4 +185,10 @@ ERROR 21000: Operand should contain 1 column(s)
drop table table_26093; drop table table_26093;
drop function func_26093_a; drop function func_26093_a;
drop function func_26093_b; drop function func_26093_b;
create table t1 (a int not null);
insert into t1 values (-1), (-2);
select min(a) from t1 group by inet_ntoa(a);
min(a)
-2
drop table t1;
End of 5.0 tests End of 5.0 tests
...@@ -189,4 +189,12 @@ drop table table_26093; ...@@ -189,4 +189,12 @@ drop table table_26093;
drop function func_26093_a; drop function func_26093_a;
drop function func_26093_b; drop function func_26093_b;
#
# Bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key'
#
create table t1 (a int not null);
insert into t1 values (-1), (-2);
select min(a) from t1 group by inet_ntoa(a);
drop table t1;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -683,7 +683,12 @@ class Item_func_inet_ntoa : public Item_str_func ...@@ -683,7 +683,12 @@ class Item_func_inet_ntoa : public Item_str_func
} }
String* val_str(String* str); String* val_str(String* str);
const char *func_name() const { return "inet_ntoa"; } const char *func_name() const { return "inet_ntoa"; }
void fix_length_and_dec() { decimals = 0; max_length=3*8+7; } void fix_length_and_dec()
{
decimals= 0;
max_length= 3 * 8 + 7;
maybe_null= 1;
}
}; };
class Item_func_quote :public Item_str_func class Item_func_quote :public Item_str_func
......
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