mirror of
https://github.com/MariaDB/server.git
synced 2026-05-01 04:35:32 +02:00
Fixed bug in datetime range optimization
Docs/manual.texi: Changelog mysql-test/r/type_datetime.result: Test of datetime optimization mysql-test/t/type_datetime.test: Test of datetime optimization
This commit is contained in:
parent
3051d8bbc1
commit
eba5ec8b4b
5 changed files with 53 additions and 4 deletions
|
|
@ -46771,8 +46771,6 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
|
|||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Fixed bug in DROP DATABASE with symlink
|
||||
@item
|
||||
Multi-table @code{DELETE}.
|
||||
@item
|
||||
Don't support old client protocols prior to MySQL 3.21 any more.
|
||||
|
|
@ -46918,6 +46916,11 @@ not yet 100% confident in this code.
|
|||
@appendixsubsec Changes in release 3.23.51
|
||||
@itemize @bullet
|
||||
@item
|
||||
Fixed bug in @code{DROP DATABASE} with symlinked directory.
|
||||
@item
|
||||
Fixed optimization problem with @code{DATETIME} and value outside
|
||||
@code{DATETIME} range.
|
||||
@item
|
||||
Removed BDB documentation.
|
||||
@item
|
||||
Fixed mit-pthreads to compile with glibc 2.2 (needed for @code{make dist}).
|
||||
|
|
|
|||
|
|
@ -33,3 +33,10 @@ date_format(a,"%Y-%m-%d")=b right(a,6)=c+0 a=d+0
|
|||
1 1 1
|
||||
a
|
||||
0000-00-00 00:00:00
|
||||
date numfacture expedition
|
||||
0000-00-00 00:00:00 0 0001-00-00 00:00:00
|
||||
date numfacture expedition
|
||||
0000-00-00 00:00:00 0 0001-00-00 00:00:00
|
||||
0000-00-00 00:00:00 1212 0001-00-00 00:00:00
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 ref expedition expedition 8 const 1 where used
|
||||
|
|
|
|||
|
|
@ -30,3 +30,23 @@ CREATE TABLE t1 (a datetime not null);
|
|||
insert into t1 values (0);
|
||||
select * from t1 where a is null;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test of datetime optimization
|
||||
#
|
||||
|
||||
CREATE TABLE `t1` (
|
||||
`date` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`numfacture` int(6) unsigned NOT NULL default '0',
|
||||
`expedition` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`numfacture`),
|
||||
KEY `date` (`date`),
|
||||
KEY `expedition` (`expedition`)
|
||||
) TYPE=MyISAM;
|
||||
|
||||
INSERT INTO t1 (expedition) VALUES ('0001-00-00 00:00:00');
|
||||
SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00';
|
||||
INSERT INTO t1 (numfacture,expedition) VALUES ('1212','0001-00-00 00:00:00');
|
||||
SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00';
|
||||
EXPLAIN SELECT * FROM t1 WHERE expedition='0001-00-00 00:00:00';
|
||||
drop table t1;
|
||||
|
|
|
|||
19
sql/item.h
19
sql/item.h
|
|
@ -342,6 +342,25 @@ public:
|
|||
};
|
||||
|
||||
|
||||
/*
|
||||
The following class is used to optimize comparing of date columns
|
||||
We need to save the original item, to be able to set the field to the
|
||||
original value in 'opt_range'.
|
||||
*/
|
||||
|
||||
class Item_int_with_ref :public Item_int
|
||||
{
|
||||
Item *ref;
|
||||
public:
|
||||
Item_int_with_ref(longlong i, Item *ref_arg) :Item_int(i), ref(ref_arg)
|
||||
{}
|
||||
bool save_in_field(Field *field)
|
||||
{
|
||||
return ref->save_in_field(field);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#include "item_sum.h"
|
||||
#include "item_func.h"
|
||||
#include "item_cmpfunc.h"
|
||||
|
|
|
|||
|
|
@ -45,8 +45,8 @@ static bool convert_constant_item(Field *field, Item **item)
|
|||
(*item)->save_in_field(field);
|
||||
if (!((*item)->null_value))
|
||||
{
|
||||
Item *tmp=new Item_int(field->val_int());
|
||||
if ((tmp))
|
||||
Item *tmp=new Item_int_with_ref(field->val_int(), *item);
|
||||
if (tmp)
|
||||
*item=tmp;
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue