Bug#50918: Date columns treated differently in Views than in
Base Tables The type inferrence of a view column caused the result to be interpreted as the wrong type: DATE colums were interpreted as TIME and TIME as DATETIME. This happened because view columns are represented by Item_ref objects as opposed to Item_field's. Item_ref had no method for retrieving a TIME value and thus was forced to depend on the default implementation for any expression, which caused the expression to be evaluated as a string and then parsed into a TIME/DATETIME value. Fixed by letting Item_ref classes forward the request for a TIME value to the referred Item - which is a field in this case - this reads the TIME value directly without conversion.
This commit is contained in:
parent
9fc32c2e24
commit
0ed4684547
@ -275,4 +275,25 @@ select * from t1 where a between '0000-00-01' and '0000-00-02';
|
||||
a
|
||||
0000-00-01
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#50918: Date columns treated differently in Views than in Base
|
||||
# Tables
|
||||
#
|
||||
CREATE TABLE t1 ( the_date DATE, the_time TIME );
|
||||
INSERT INTO t1 VALUES ( '2010-01-01', '01:01:01' );
|
||||
SELECT * FROM t1 t11 JOIN t1 t12 ON addtime( t11.the_date, t11.the_time ) =
|
||||
addtime( t12.the_date, t12.the_time );
|
||||
the_date the_time the_date the_time
|
||||
2010-01-01 01:01:01 2010-01-01 01:01:01
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
SELECT * FROM t1 JOIN v1 ON addtime( t1.the_date, t1.the_time ) =
|
||||
addtime( v1.the_date, v1.the_time );
|
||||
the_date the_time the_date the_time
|
||||
2010-01-01 01:01:01 2010-01-01 01:01:01
|
||||
SELECT * FROM t1 JOIN v1 ON addtime( t1.the_date, t1.the_time ) =
|
||||
addtime( cast(v1.the_date AS DATETIME), v1.the_time );
|
||||
the_date the_time the_date the_time
|
||||
2010-01-01 01:01:01 2010-01-01 01:01:01
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
End of 5.1 tests
|
||||
|
@ -246,4 +246,24 @@ insert into t1 values ('0000-01-01'), ('0000-00-01'), ('0001-01-01');
|
||||
select * from t1 where a between '0000-00-01' and '0000-00-02';
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#50918: Date columns treated differently in Views than in Base
|
||||
--echo # Tables
|
||||
--echo #
|
||||
CREATE TABLE t1 ( the_date DATE, the_time TIME );
|
||||
INSERT INTO t1 VALUES ( '2010-01-01', '01:01:01' );
|
||||
|
||||
SELECT * FROM t1 t11 JOIN t1 t12 ON addtime( t11.the_date, t11.the_time ) =
|
||||
addtime( t12.the_date, t12.the_time );
|
||||
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
SELECT * FROM t1 JOIN v1 ON addtime( t1.the_date, t1.the_time ) =
|
||||
addtime( v1.the_date, v1.the_time );
|
||||
|
||||
SELECT * FROM t1 JOIN v1 ON addtime( t1.the_date, t1.the_time ) =
|
||||
addtime( cast(v1.the_date AS DATETIME), v1.the_time );
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -2320,6 +2320,11 @@ public:
|
||||
if (ref && result_type() == ROW_RESULT)
|
||||
(*ref)->bring_value();
|
||||
}
|
||||
bool get_time(MYSQL_TIME *ltime)
|
||||
{
|
||||
DBUG_ASSERT(fixed);
|
||||
return (*ref)->get_time(ltime);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user