mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed Bug#3115. CAST AS DATE with malformed string returns NULL but IS NULL
is false.
This commit is contained in:
@ -59,6 +59,7 @@ jani@rhols221.arenanet.fi
|
|||||||
jani@ua126d19.elisa.omakaista.fi
|
jani@ua126d19.elisa.omakaista.fi
|
||||||
jani@ua141d10.elisa.omakaista.fi
|
jani@ua141d10.elisa.omakaista.fi
|
||||||
jani@ua167d18.elisa.omakaista.fi
|
jani@ua167d18.elisa.omakaista.fi
|
||||||
|
jani@ua72d24.elisa.omakaista.fi
|
||||||
jcole@abel.spaceapes.com
|
jcole@abel.spaceapes.com
|
||||||
jcole@main.burghcom.com
|
jcole@main.burghcom.com
|
||||||
jcole@mugatu.spaceapes.com
|
jcole@mugatu.spaceapes.com
|
||||||
|
@ -104,9 +104,9 @@ drop table t2;
|
|||||||
create table t2 select CAST("2001-12-29" AS DATE) as d, CAST("20:45:11" AS TIME) as t, CAST("2001-12-29 20:45:11" AS DATETIME) as dt;
|
create table t2 select CAST("2001-12-29" AS DATE) as d, CAST("20:45:11" AS TIME) as t, CAST("2001-12-29 20:45:11" AS DATETIME) as dt;
|
||||||
describe t2;
|
describe t2;
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
d date 0000-00-00
|
d date YES NULL
|
||||||
t time 00:00:00
|
t time YES NULL
|
||||||
dt datetime 0000-00-00 00:00:00
|
dt datetime YES NULL
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t1 (a tinyint);
|
create table t1 (a tinyint);
|
||||||
create table t2 (a int) select * from t1;
|
create table t2 (a int) select * from t1;
|
||||||
@ -396,12 +396,12 @@ Field Type Null Key Default Extra
|
|||||||
a int(11) YES NULL
|
a int(11) YES NULL
|
||||||
b bigint(11) 0
|
b bigint(11) 0
|
||||||
c bigint(10) 0
|
c bigint(10) 0
|
||||||
d date 0000-00-00
|
d date YES NULL
|
||||||
e char(1)
|
e char(1)
|
||||||
f datetime 0000-00-00 00:00:00
|
f datetime YES NULL
|
||||||
g time 00:00:00
|
g time YES NULL
|
||||||
h longblob
|
h longblob
|
||||||
dd time 00:00:00
|
dd time YES NULL
|
||||||
select * from t2;
|
select * from t2;
|
||||||
a b c d e f g h dd
|
a b c d e f g h dd
|
||||||
1 -7 7 2000-01-01 b 2000-01-01 00:00:00 05:04:03 yet another binary data 02:00:00
|
1 -7 7 2000-01-01 b 2000-01-01 00:00:00 05:04:03 yet another binary data 02:00:00
|
||||||
|
@ -159,14 +159,14 @@ time("1997-12-31 23:59:59.000001") as f9;
|
|||||||
describe t1;
|
describe t1;
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
f1 date 0000-00-00
|
f1 date 0000-00-00
|
||||||
f2 datetime 0000-00-00 00:00:00
|
f2 datetime YES NULL
|
||||||
f3 time 00:00:00
|
f3 time YES NULL
|
||||||
f4 time 00:00:00
|
f4 time 00:00:00
|
||||||
f5 time 00:00:00
|
f5 time 00:00:00
|
||||||
f6 time 00:00:00
|
f6 time 00:00:00
|
||||||
f7 datetime 0000-00-00 00:00:00
|
f7 datetime YES NULL
|
||||||
f8 date 0000-00-00
|
f8 date YES NULL
|
||||||
f9 time 00:00:00
|
f9 time YES NULL
|
||||||
select * from t1;
|
select * from t1;
|
||||||
f1 f2 f3 f4 f5 f6 f7 f8 f9
|
f1 f2 f3 f4 f5 f6 f7 f8 f9
|
||||||
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -23:59:59 10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
|
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -23:59:59 10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
|
||||||
|
@ -610,6 +610,19 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class Item_typecast_maybe_null :public Item_typecast
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Item_typecast_maybe_null(Item *a) :Item_typecast(a) {}
|
||||||
|
void fix_length_and_dec()
|
||||||
|
{
|
||||||
|
collation.set(&my_charset_bin);
|
||||||
|
max_length=args[0]->max_length;
|
||||||
|
maybe_null= 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class Item_char_typecast :public Item_typecast
|
class Item_char_typecast :public Item_typecast
|
||||||
{
|
{
|
||||||
int cast_length;
|
int cast_length;
|
||||||
@ -626,10 +639,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Item_date_typecast :public Item_typecast
|
class Item_date_typecast :public Item_typecast_maybe_null
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_date_typecast(Item *a) :Item_typecast(a) {}
|
Item_date_typecast(Item *a) :Item_typecast_maybe_null(a) {}
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
bool get_date(TIME *ltime, uint fuzzy_date);
|
bool get_date(TIME *ltime, uint fuzzy_date);
|
||||||
const char *cast_type() const { return "date"; }
|
const char *cast_type() const { return "date"; }
|
||||||
@ -641,10 +654,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Item_time_typecast :public Item_typecast
|
class Item_time_typecast :public Item_typecast_maybe_null
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_time_typecast(Item *a) :Item_typecast(a) {}
|
Item_time_typecast(Item *a) :Item_typecast_maybe_null(a) {}
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
bool get_time(TIME *ltime);
|
bool get_time(TIME *ltime);
|
||||||
const char *cast_type() const { return "time"; }
|
const char *cast_type() const { return "time"; }
|
||||||
@ -656,10 +669,10 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class Item_datetime_typecast :public Item_typecast
|
class Item_datetime_typecast :public Item_typecast_maybe_null
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_datetime_typecast(Item *a) :Item_typecast(a) {}
|
Item_datetime_typecast(Item *a) :Item_typecast_maybe_null(a) {}
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
const char *cast_type() const { return "datetime"; }
|
const char *cast_type() const { return "datetime"; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
||||||
|
Reference in New Issue
Block a user