Commit 389e22c2 authored by unknown's avatar unknown

Merge mysql.com:/home/mydev/mysql-4.1-bug17877

into  mysql.com:/home/mydev/mysql-5.0-bug11824


myisam/mi_key.c:
  Auto merged
mysql-test/r/func_sapdb.result:
  Auto merged
mysql-test/r/gis-rtree.result:
  Auto merged
mysql-test/r/symlink.result:
  Auto merged
mysql-test/t/func_sapdb.test:
  Auto merged
mysql-test/t/gis-rtree.test:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
myisam/mi_check.c:
  Manual merge
mysql-test/r/func_time.result:
  Manual merge
mysql-test/t/func_time.test:
  Manual merge
parents a24a4516 0b235009
...@@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend) ...@@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
#ifdef HAVE_RTREE_KEYS #ifdef HAVE_RTREE_KEYS
(keyinfo->flag & HA_SPATIAL) ? (keyinfo->flag & HA_SPATIAL) ?
rtree_find_first(info, key, info->lastkey, key_length, rtree_find_first(info, key, info->lastkey, key_length,
SEARCH_SAME) : MBR_EQUAL | MBR_DATA) :
#endif #endif
_mi_search(info,keyinfo,info->lastkey,key_length, _mi_search(info,keyinfo,info->lastkey,key_length,
SEARCH_SAME, info->s->state.key_root[key]); SEARCH_SAME, info->s->state.key_root[key]);
if (search_result) if (search_result)
{ {
mi_check_print_error(param,"Record at: %10s Can't find key for index: %2d", mi_check_print_error(param,"Record at: %10s "
"Can't find key for index: %2d",
llstr(start_recpos,llbuff),key+1); llstr(start_recpos,llbuff),key+1);
if (error++ > MAXERR || !(param->testflag & T_VERBOSE)) if (error++ > MAXERR || !(param->testflag & T_VERBOSE))
goto err2; goto err2;
......
...@@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key, ...@@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
TODO: nulls processing TODO: nulls processing
*/ */
#ifdef HAVE_SPATIAL #ifdef HAVE_SPATIAL
return sp_make_key(info,keynr,key,record,filepos); DBUG_RETURN(sp_make_key(info,keynr,key,record,filepos));
#else #else
DBUG_ASSERT(0); /* mi_open should check that this never happens*/ DBUG_ASSERT(0); /* mi_open should check that this never happens*/
#endif #endif
......
...@@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length, ...@@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
return -1; return -1;
} }
/* Save searched key */ /*
memcpy(info->first_mbr_key, key, keyinfo->keylength - Save searched key, include data pointer.
info->s->base.rec_reflength); The data pointer is required if the search_flag contains MBR_DATA.
*/
memcpy(info->first_mbr_key, key, keyinfo->keylength);
info->last_rkey_length = key_length; info->last_rkey_length = key_length;
info->rtree_recursion_depth = -1; info->rtree_recursion_depth = -1;
......
...@@ -52,10 +52,14 @@ ...@@ -52,10 +52,14 @@
if (EQUAL_CMP(amin, amax, bmin, bmax)) \ if (EQUAL_CMP(amin, amax, bmin, bmax)) \
return 1; \ return 1; \
} \ } \
else /* if (nextflag & MBR_DISJOINT) */ \ else if (nextflag & MBR_DISJOINT) \
{ \ { \
if (DISJOINT_CMP(amin, amax, bmin, bmax)) \ if (DISJOINT_CMP(amin, amax, bmin, bmax)) \
return 1; \ return 1; \
}\
else /* if unknown comparison operator */ \
{ \
DBUG_ASSERT(0); \
} }
#define RT_CMP_KORR(type, korr_func, len, nextflag) \ #define RT_CMP_KORR(type, korr_func, len, nextflag) \
......
...@@ -81,6 +81,12 @@ makedate(1997,1) ...@@ -81,6 +81,12 @@ makedate(1997,1)
select makedate(1997,0); select makedate(1997,0);
makedate(1997,0) makedate(1997,0)
NULL NULL
select makedate(9999,365);
makedate(9999,365)
9999-12-31
select makedate(9999,366);
makedate(9999,366)
NULL
select addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002"); select addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002");
addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002") addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
1998-01-02 01:01:01.000001 1998-01-02 01:01:01.000001
......
...@@ -361,6 +361,12 @@ extract(SECOND FROM "1999-01-02 10:11:12") ...@@ -361,6 +361,12 @@ extract(SECOND FROM "1999-01-02 10:11:12")
select extract(MONTH FROM "2001-02-00"); select extract(MONTH FROM "2001-02-00");
extract(MONTH FROM "2001-02-00") extract(MONTH FROM "2001-02-00")
2 2
SELECT DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
9999-12-31 00:00:00
SELECT DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
9999-12-31 00:00:00
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter; SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
quarter quarter
1 1
......
...@@ -816,3 +816,43 @@ check table t1 extended; ...@@ -816,3 +816,43 @@ check table t1 extended;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
drop table t1; drop table t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
...@@ -74,18 +74,24 @@ t9 CREATE TABLE `t9` ( ...@@ -74,18 +74,24 @@ t9 CREATE TABLE `t9` (
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/' ) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
drop database mysqltest; drop database mysqltest;
create table t1 (a int not null) engine=myisam; create table t1 (a int not null) engine=myisam;
Warnings:
Warning 0 DATA DIRECTORY option ignored
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL `a` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 add b int; alter table t1 add b int;
Warnings:
Warning 0 DATA DIRECTORY option ignored
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL, `a` int(11) NOT NULL,
`b` int(11) default NULL `b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
Warnings:
Warning 0 INDEX DIRECTORY option ignored
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
......
...@@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001"); ...@@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001");
select makedate(1997,1); select makedate(1997,1);
select makedate(1997,0); select makedate(1997,0);
select makedate(9999,365);
select makedate(9999,366);
#Time functions #Time functions
......
...@@ -143,6 +143,10 @@ select extract(SECOND FROM "1999-01-02 10:11:12"); ...@@ -143,6 +143,10 @@ select extract(SECOND FROM "1999-01-02 10:11:12");
select extract(MONTH FROM "2001-02-00"); select extract(MONTH FROM "2001-02-00");
# #
# MySQL Bugs: #12356: DATE_SUB or DATE_ADD incorrectly returns null
#
SELECT DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
SELECT DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
# test EXTRACT QUARTER (Bug #18100) # test EXTRACT QUARTER (Bug #18100)
# #
......
...@@ -187,4 +187,48 @@ check table t1 extended; ...@@ -187,4 +187,48 @@ check table t1 extended;
drop table t1; drop table t1;
#
# Bug#17877 - Corrupted spatial index
#
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
# This showed a missing key.
CHECK TABLE t1 EXTENDED;
DROP TABLE t1;
#
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'));
# This is the same as the first insert to get a non-unique key.
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
# This showed (and still shows) OK.
CHECK TABLE t1 EXTENDED;
DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
/* TODO: Move month and days to language files */ /* TODO: Move month and days to language files */
/* Day number for Dec 31st, 9999 */
#define MAX_DAY_NUMBER 3652424L #define MAX_DAY_NUMBER 3652424L
static const char *month_names[]= static const char *month_names[]=
...@@ -408,7 +409,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format, ...@@ -408,7 +409,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
if (yearday > 0) if (yearday > 0)
{ {
uint days= calc_daynr(l_time->year,1,1) + yearday - 1; uint days= calc_daynr(l_time->year,1,1) + yearday - 1;
if (days <= 0 || days >= MAX_DAY_NUMBER) if (days <= 0 || days > MAX_DAY_NUMBER)
goto err; goto err;
get_date_from_daynr(days,&l_time->year,&l_time->month,&l_time->day); get_date_from_daynr(days,&l_time->year,&l_time->month,&l_time->day);
} }
...@@ -454,7 +455,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format, ...@@ -454,7 +455,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
(weekday - 1); (weekday - 1);
} }
if (days <= 0 || days >= MAX_DAY_NUMBER) if (days <= 0 || days > MAX_DAY_NUMBER)
goto err; goto err;
get_date_from_daynr(days,&l_time->year,&l_time->month,&l_time->day); get_date_from_daynr(days,&l_time->year,&l_time->month,&l_time->day);
} }
...@@ -2035,7 +2036,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date) ...@@ -2035,7 +2036,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
ltime->hour= (uint) (sec/3600); ltime->hour= (uint) (sec/3600);
daynr= calc_daynr(ltime->year,ltime->month,1) + days; daynr= calc_daynr(ltime->year,ltime->month,1) + days;
/* Day number from year 0 to 9999-12-31 */ /* Day number from year 0 to 9999-12-31 */
if ((ulonglong) daynr >= MAX_DAY_NUMBER) if ((ulonglong) daynr > MAX_DAY_NUMBER)
goto invalid_date; goto invalid_date;
get_date_from_daynr((long) daynr, &ltime->year, &ltime->month, get_date_from_daynr((long) daynr, &ltime->year, &ltime->month,
&ltime->day); &ltime->day);
...@@ -2046,7 +2047,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date) ...@@ -2046,7 +2047,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
period= (calc_daynr(ltime->year,ltime->month,ltime->day) + period= (calc_daynr(ltime->year,ltime->month,ltime->day) +
sign * (long) interval.day); sign * (long) interval.day);
/* Daynumber from year 0 to 9999-12-31 */ /* Daynumber from year 0 to 9999-12-31 */
if ((ulong) period >= MAX_DAY_NUMBER) if ((ulong) period > MAX_DAY_NUMBER)
goto invalid_date; goto invalid_date;
get_date_from_daynr((long) period,&ltime->year,&ltime->month,&ltime->day); get_date_from_daynr((long) period,&ltime->year,&ltime->month,&ltime->day);
break; break;
...@@ -2570,7 +2571,7 @@ String *Item_func_makedate::val_str(String *str) ...@@ -2570,7 +2571,7 @@ String *Item_func_makedate::val_str(String *str)
days= calc_daynr(yearnr,1,1) + daynr - 1; days= calc_daynr(yearnr,1,1) + daynr - 1;
/* Day number from year 0 to 9999-12-31 */ /* Day number from year 0 to 9999-12-31 */
if (days >= 0 && days < MAX_DAY_NUMBER) if (days >= 0 && days <= MAX_DAY_NUMBER)
{ {
null_value=0; null_value=0;
get_date_from_daynr(days,&l_time.year,&l_time.month,&l_time.day); get_date_from_daynr(days,&l_time.year,&l_time.month,&l_time.day);
......
...@@ -3057,6 +3057,12 @@ end_with_restore_list: ...@@ -3057,6 +3057,12 @@ end_with_restore_list:
} }
} }
/* Don't yet allow changing of symlinks with ALTER TABLE */ /* Don't yet allow changing of symlinks with ALTER TABLE */
if (lex->create_info.data_file_name)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
"DATA DIRECTORY option ignored");
if (lex->create_info.index_file_name)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 0,
"INDEX DIRECTORY option ignored");
lex->create_info.data_file_name=lex->create_info.index_file_name=0; lex->create_info.data_file_name=lex->create_info.index_file_name=0;
/* ALTER TABLE ends previous transaction */ /* ALTER TABLE ends previous transaction */
if (end_active_trans(thd)) if (end_active_trans(thd))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment