Commit a00a3bb9 authored by unknown's avatar unknown
Browse files

Merge rurik.mysql.com:/home/igor/dev/mysql-5.0-0

into  rurik.mysql.com:/home/igor/dev/mysql-5.1-0


mysql-test/r/func_time.result:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/item_timefunc.h:
  Auto merged
sql/sql_insert.cc:
  Auto merged
mysql-test/r/innodb.result:
  Manual merge
mysql-test/t/innodb.test:
  Manual merge
parents c1491e76 b54cb499
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -847,3 +847,28 @@ timestampdiff(year,'2004-02-28','2005-02-28')
select timestampdiff(year,'2004-02-29','2005-02-28');
timestampdiff(year,'2004-02-29','2005-02-28')
0
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);
INSERT INTO t1 VALUES
(1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
INSERT INTO t2 VALUES
(1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');
SELECT * FROM t1, t2 
WHERE t1.day BETWEEN 
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
id	day	id	day
1	2005-06-01	1	2005-08-01
3	2005-07-01	1	2005-08-01
1	2005-06-01	2	2005-06-15
1	2005-06-01	3	2005-07-15
3	2005-07-01	3	2005-07-15
SELECT * FROM t1, t2 
WHERE CAST(t1.day AS DATE) BETWEEN 
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
id	day	id	day
1	2005-06-01	1	2005-08-01
3	2005-07-01	1	2005-08-01
1	2005-06-01	2	2005-06-15
1	2005-06-01	3	2005-07-15
3	2005-07-01	3	2005-07-15
DROP TABLE t1,t2;
+12 −52
Original line number Diff line number Diff line
@@ -2924,13 +2924,13 @@ create table t3 (s1 varchar(2) binary,primary key (s1)) engine=innodb;
create table t4 (s1 char(2) binary,primary key (s1)) engine=innodb;
insert into t1 values (0x41),(0x4120),(0x4100);
insert into t2 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A' for key 'PRIMARY'
ERROR 23000: Duplicate entry 'A' for key 1
insert into t2 values (0x41),(0x4120);
insert into t3 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A ' for key 'PRIMARY'
ERROR 23000: Duplicate entry 'A ' for key 1
insert into t3 values (0x41),(0x4100);
insert into t4 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A' for key 'PRIMARY'
ERROR 23000: Duplicate entry 'A' for key 1
insert into t4 values (0x41),(0x4100);
select hex(s1) from t1;
hex(s1)
@@ -3132,7 +3132,7 @@ ALTER TABLE t2 DROP FOREIGN KEY t2_ibfk_0;
SHOW CREATE TABLE t2;
Table	Create Table
t2	CREATE TABLE `t2` (
  `a` int(11) DEFAULT NULL,
  `a` int(11) default NULL,
  KEY `t2_ibfk_0` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t2,t1;
@@ -3194,52 +3194,12 @@ drop trigger t2t;
drop trigger t3t;
drop trigger t4t;
drop table t1, t2, t3, t4, t5;
CREATE TABLE t1 (
field1 varchar(8) NOT NULL DEFAULT '',
field2 varchar(8) NOT NULL DEFAULT '',
PRIMARY KEY  (field1, field2)
) ENGINE=InnoDB;
CREATE TABLE t2 (
field1 varchar(8) NOT NULL DEFAULT '' PRIMARY KEY,
FOREIGN KEY (field1) REFERENCES t1 (field1)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
INSERT INTO t1 VALUES ('old', 'somevalu');
INSERT INTO t1 VALUES ('other', 'anyvalue');
INSERT INTO t2 VALUES ('old');
INSERT INTO t2 VALUES ('other');
UPDATE t1 SET field1 = 'other' WHERE field2 = 'somevalu';
ERROR 23000: Upholding foreign key constraints for table 't1', entry 'other-somevalu', key 1 would lead to a duplicate entry
DROP TABLE t2;
DROP TABLE t1;
create table t1 (
c1 bigint not null,
c2 bigint not null,
primary key (c1),
unique  key (c2)
) engine=innodb;
create table t2 (
c1 bigint not null,
primary key (c1)
) engine=innodb;
alter table t1 add constraint c2_fk foreign key (c2)
references t2(c1) on delete cascade;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `c1` bigint(20) NOT NULL,
  `c2` bigint(20) NOT NULL,
  PRIMARY KEY (`c1`),
  UNIQUE KEY `c2` (`c2`),
  CONSTRAINT `c2_fk` FOREIGN KEY (`c2`) REFERENCES `t2` (`c1`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
alter table t1 drop foreign key c2_fk;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `c1` bigint(20) NOT NULL,
  `c2` bigint(20) NOT NULL,
  PRIMARY KEY (`c1`),
  UNIQUE KEY `c2` (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
create table t1(a date) engine=innodb;
create table t2(a date, key(a)) engine=innodb;
insert into t1 values('2005-10-01');
insert into t2 values('2005-10-01');
select * from t1, t2
where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
a	a
2005-10-01	2005-10-01
drop table t1, t2;
+22 −0
Original line number Diff line number Diff line
@@ -446,4 +446,26 @@ select timestampdiff(year,'1999-09-11','2001-9-11');
select timestampdiff(year,'2004-02-28','2005-02-28');
select timestampdiff(year,'2004-02-29','2005-02-28');

#
# Bug #18618: BETWEEN for dates with the second argument being a constant
#             expression and the first and the third arguments being fields 
#

CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);

INSERT INTO t1 VALUES
  (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
INSERT INTO t2 VALUES
  (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');

SELECT * FROM t1, t2 
  WHERE t1.day BETWEEN 
               '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
SELECT * FROM t1, t2 
  WHERE CAST(t1.day AS DATE) BETWEEN 
                             '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
 
DROP TABLE t1,t2;

# End of 5.0 tests
+10 −0
Original line number Diff line number Diff line
@@ -2138,3 +2138,13 @@ show create table t1;
#
drop table t1, t2;

# Bug #14360: problem with intervals
#

create table t1(a date) engine=innodb;
create table t2(a date, key(a)) engine=innodb; 
insert into t1 values('2005-10-01');
insert into t2 values('2005-10-01');
select * from t1, t2
  where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
drop table t1, t2;
+2 −10
Original line number Diff line number Diff line
@@ -52,7 +52,6 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
{
  uint i;
  Field *field= NULL;
  bool all_constant= TRUE;

  /* If the first argument is a FIELD_ITEM, pull out the field. */
  if (items[0]->real_item()->type() == Item::FIELD_ITEM)
@@ -65,17 +64,10 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
  for (i= 1; i < nitems; i++)
  {
    type[0]= item_cmp_type(type[0], items[i]->result_type());
    if (field && !convert_constant_item(thd, field, &items[i]))
      all_constant= FALSE;
  }

  /*
    If we had a field that can be compared as a longlong, and all constant
    items, then the aggregate result will be an INT_RESULT.
  */
  if (field && all_constant)
    if (field && convert_constant_item(thd, field, &items[i]))
      type[0]= INT_RESULT;
  }
}


static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
Loading