mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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
This commit is contained in:
@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
|
||||
#ifdef HAVE_RTREE_KEYS
|
||||
(keyinfo->flag & HA_SPATIAL) ?
|
||||
rtree_find_first(info, key, info->lastkey, key_length,
|
||||
SEARCH_SAME) :
|
||||
MBR_EQUAL | MBR_DATA) :
|
||||
#endif
|
||||
_mi_search(info,keyinfo,info->lastkey,key_length,
|
||||
SEARCH_SAME, info->s->state.key_root[key]);
|
||||
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);
|
||||
if (error++ > MAXERR || !(param->testflag & T_VERBOSE))
|
||||
goto err2;
|
||||
|
@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
|
||||
TODO: nulls processing
|
||||
*/
|
||||
#ifdef HAVE_SPATIAL
|
||||
return sp_make_key(info,keynr,key,record,filepos);
|
||||
DBUG_RETURN(sp_make_key(info,keynr,key,record,filepos));
|
||||
#else
|
||||
DBUG_ASSERT(0); /* mi_open should check that this never happens*/
|
||||
#endif
|
||||
|
@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Save searched key */
|
||||
memcpy(info->first_mbr_key, key, keyinfo->keylength -
|
||||
info->s->base.rec_reflength);
|
||||
/*
|
||||
Save searched key, include data pointer.
|
||||
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->rtree_recursion_depth = -1;
|
||||
|
@ -52,10 +52,14 @@
|
||||
if (EQUAL_CMP(amin, amax, bmin, bmax)) \
|
||||
return 1; \
|
||||
} \
|
||||
else /* if (nextflag & MBR_DISJOINT) */ \
|
||||
else if (nextflag & MBR_DISJOINT) \
|
||||
{ \
|
||||
if (DISJOINT_CMP(amin, amax, bmin, bmax)) \
|
||||
return 1; \
|
||||
}\
|
||||
else /* if unknown comparison operator */ \
|
||||
{ \
|
||||
DBUG_ASSERT(0); \
|
||||
}
|
||||
|
||||
#define RT_CMP_KORR(type, korr_func, len, nextflag) \
|
||||
|
@ -81,6 +81,12 @@ makedate(1997,1)
|
||||
select makedate(1997,0);
|
||||
makedate(1997,0)
|
||||
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");
|
||||
addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
|
||||
1998-01-02 01:01:01.000001
|
||||
|
@ -361,6 +361,12 @@ extract(SECOND FROM "1999-01-02 10:11:12")
|
||||
select extract(MONTH FROM "2001-02-00");
|
||||
extract(MONTH FROM "2001-02-00")
|
||||
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;
|
||||
quarter
|
||||
1
|
||||
|
@ -816,3 +816,43 @@ 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))'));
|
||||
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` (
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
|
||||
drop database mysqltest;
|
||||
create table t1 (a int not null) engine=myisam;
|
||||
Warnings:
|
||||
Warning 0 DATA DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
alter table t1 add b int;
|
||||
Warnings:
|
||||
Warning 0 DATA DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
Warnings:
|
||||
Warning 0 INDEX DIRECTORY option ignored
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
|
@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001");
|
||||
|
||||
select makedate(1997,1);
|
||||
select makedate(1997,0);
|
||||
select makedate(9999,365);
|
||||
select makedate(9999,366);
|
||||
|
||||
#Time functions
|
||||
|
||||
|
@ -143,6 +143,10 @@ select extract(SECOND FROM "1999-01-02 10:11:12");
|
||||
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)
|
||||
#
|
||||
|
||||
|
@ -187,4 +187,48 @@ check table t1 extended;
|
||||
|
||||
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
|
||||
|
@ -27,6 +27,7 @@
|
||||
|
||||
/* TODO: Move month and days to language files */
|
||||
|
||||
/* Day number for Dec 31st, 9999 */
|
||||
#define MAX_DAY_NUMBER 3652424L
|
||||
|
||||
static const char *month_names[]=
|
||||
@ -408,7 +409,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
|
||||
if (yearday > 0)
|
||||
{
|
||||
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;
|
||||
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,
|
||||
(weekday - 1);
|
||||
}
|
||||
|
||||
if (days <= 0 || days >= MAX_DAY_NUMBER)
|
||||
if (days <= 0 || days > MAX_DAY_NUMBER)
|
||||
goto err;
|
||||
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)
|
||||
ltime->hour= (uint) (sec/3600);
|
||||
daynr= calc_daynr(ltime->year,ltime->month,1) + days;
|
||||
/* Day number from year 0 to 9999-12-31 */
|
||||
if ((ulonglong) daynr >= MAX_DAY_NUMBER)
|
||||
if ((ulonglong) daynr > MAX_DAY_NUMBER)
|
||||
goto invalid_date;
|
||||
get_date_from_daynr((long) daynr, <ime->year, <ime->month,
|
||||
<ime->day);
|
||||
@ -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) +
|
||||
sign * (long) interval.day);
|
||||
/* Daynumber from year 0 to 9999-12-31 */
|
||||
if ((ulong) period >= MAX_DAY_NUMBER)
|
||||
if ((ulong) period > MAX_DAY_NUMBER)
|
||||
goto invalid_date;
|
||||
get_date_from_daynr((long) period,<ime->year,<ime->month,<ime->day);
|
||||
break;
|
||||
@ -2570,7 +2571,7 @@ String *Item_func_makedate::val_str(String *str)
|
||||
|
||||
days= calc_daynr(yearnr,1,1) + daynr - 1;
|
||||
/* 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;
|
||||
get_date_from_daynr(days,&l_time.year,&l_time.month,&l_time.day);
|
||||
|
@ -3057,6 +3057,12 @@ end_with_restore_list:
|
||||
}
|
||||
}
|
||||
/* 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;
|
||||
/* ALTER TABLE ends previous transaction */
|
||||
if (end_active_trans(thd))
|
||||
|
Reference in New Issue
Block a user