List:Commits« Previous MessageNext Message »
From:igor Date:April 12 2006 8:23pm
Subject:bk commit into 5.1 tree (igor:1.2338)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of igor. When igor does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2338 06/04/12 13:23:11 igor@stripped +7 -0
  Merge rurik.mysql.com:/home/igor/dev/mysql-5.0-0
  into  rurik.mysql.com:/home/igor/dev/mysql-5.1-0

  mysql-test/t/innodb.test
    1.136 06/04/12 13:23:06 igor@stripped +0 -2
    Manual merge

  mysql-test/r/innodb.result
    1.169 06/04/12 13:23:06 igor@stripped +4 -53
    Manual merge

  sql/sql_insert.cc
    1.197 06/04/12 13:14:52 igor@stripped +0 -0
    Auto merged

  sql/item_timefunc.h
    1.67 06/04/12 13:14:52 igor@stripped +0 -0
    Auto merged

  sql/item_timefunc.cc
    1.111 06/04/12 13:14:52 igor@stripped +0 -0
    Auto merged

  sql/item_cmpfunc.cc
    1.202 06/04/12 13:14:52 igor@stripped +0 -0
    Auto merged

  mysql-test/r/func_time.result
    1.50 06/04/12 13:14:52 igor@stripped +0 -0
    Auto merged

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	igor
# Host:	rurik.mysql.com
# Root:	/home/igor/dev/mysql-5.1-0/RESYNC

--- 1.201/sql/item_cmpfunc.cc	2006-04-10 14:25:19 -07:00
+++ 1.202/sql/item_cmpfunc.cc	2006-04-12 13:14:52 -07:00
@@ -52,7 +52,6 @@
 {
   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,16 +64,9 @@
   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 (field && convert_constant_item(thd, field, &items[i]))
+      type[0]= INT_RESULT;
   }
-
-  /*
-    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)
-    type[0]= INT_RESULT;
 }
 
 

--- 1.110/sql/item_timefunc.cc	2006-04-07 03:29:28 -07:00
+++ 1.111/sql/item_timefunc.cc	2006-04-12 13:14:52 -07:00
@@ -2002,6 +2002,41 @@
     ((date*100L + ltime.hour)*100L+ ltime.minute)*100L + ltime.second;
 }
 
+
+
+bool Item_date_add_interval::eq(const Item *item, bool binary_cmp) const
+{
+  INTERVAL interval, other_interval;
+  String val= value;   // Because of const
+
+  if (this == item)
+    return TRUE;
+
+  if ((item->type() != FUNC_ITEM) ||
+      (arg_count != ((Item_func*) item)->arg_count) ||
+      (func_name() != ((Item_func*) item)->func_name()))
+    return FALSE;
+
+  Item_date_add_interval *other= (Item_date_add_interval*) item;
+
+  if ((int_type != other->int_type) ||
+      (!args[0]->eq(other->args[0], binary_cmp)) ||
+      (get_interval_value(args[1], int_type, &val, &interval)))
+    return FALSE;
+
+  val= other->value;
+
+  if ((get_interval_value(other->args[1], other->int_type, &val,
+                         &other_interval)) ||
+      ((date_sub_interval ^ interval.neg) ^
+       (other->date_sub_interval ^ other_interval.neg)))
+    return FALSE;
+
+  // Assume comparing same types here due to earlier check
+  return memcmp(&interval, &other_interval, sizeof(INTERVAL)) == 0;
+}
+
+
 static const char *interval_names[]=
 {
   "year", "quarter", "month", "day", "hour",

--- 1.66/sql/item_timefunc.h	2006-01-18 11:41:04 -08:00
+++ 1.67/sql/item_timefunc.h	2006-04-12 13:14:52 -07:00
@@ -647,6 +647,7 @@
   double val_real() { DBUG_ASSERT(fixed == 1); return (double) val_int(); }
   longlong val_int();
   bool get_date(TIME *res, uint fuzzy_date);
+  bool eq(const Item *item, bool binary_cmp) const;
   void print(String *str);
 };
 

--- 1.49/mysql-test/r/func_time.result	2006-04-07 02:23:48 -07:00
+++ 1.50/mysql-test/r/func_time.result	2006-04-12 13:14:52 -07:00
@@ -847,3 +847,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;

--- 1.168/mysql-test/r/innodb.result	2006-04-10 12:32:28 -07:00
+++ 1.169/mysql-test/r/innodb.result	2006-04-12 13:23:06 -07:00
@@ -2924,13 +2924,13 @@
 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 @@
 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 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;

--- 1.135/mysql-test/t/innodb.test	2006-04-05 23:40:31 -07:00
+++ 1.136/mysql-test/t/innodb.test	2006-04-12 13:23:06 -07:00
@@ -2138,3 +2138,13 @@
 #
 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;
Thread
bk commit into 5.1 tree (igor:1.2338)igor12 Apr