Commit f16873ec authored by unknown's avatar unknown

Merge bk-internal.mysql.com:/home/bk/mysql-3.23

into mashka.mysql.fi:/home/my/mysql-3.23

parents 72f44daf ddd2f4fc
.TH perror 1 "19 December 2000" "MySQL 3.23" "MySQL database" .TH perror 1 "19 December 2000" "MySQL 3.23" "MySQL database"
.SH NAME .SH NAME
.BR perror perror \- describes a system or MySQL error code.
can be used to display a description for a system error code, or an MyISAM/ISAM table handler error code. The error messages are mostly system dependent.
.SH USAGE
perror [OPTIONS] [ERRORCODE [ERRORCODE...]]
.SH SYNOPSIS .SH SYNOPSIS
.B perror perror [OPTIONS] [ERRORCODE [ERRORCODE...]]
.RB [ \-? | \-\-help ]
.RB [ \-I | \-\-info ]
.RB [ \-s | \-\-silent ]
.RB [ \-v | \-\-verbose ]
.RB [ \-V | \-\-version ]
.SH DESCRIPTION .SH DESCRIPTION
Can be used to display a description for a system error code, or an MyISAM/ISAM table handler error code.
The error messages are mostly system dependent.
.SH OPTIONS
.TP .TP
.BR \-? | \-\-help .BR \-? | \-\-help
Displays this help and exits. Displays this help and exits.
......
...@@ -128,3 +128,4 @@ a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') ...@@ -128,3 +128,4 @@ a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f')
a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
1 4 c 1 4 c
10 43 a,b,d,f 10 43 a,b,d,f
a c count(distinct rand())
...@@ -1793,3 +1793,4 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par ...@@ -1793,3 +1793,4 @@ Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_par
t2 0 PRIMARY 1 auto A 1199 NULL NULL t2 0 PRIMARY 1 auto A 1199 NULL NULL
t2 0 fld1 1 fld1 A 1199 NULL NULL t2 0 fld1 1 fld1 A 1199 NULL NULL
t2 1 fld3 1 fld3 A NULL NULL NULL t2 1 fld3 1 fld3 A NULL NULL NULL
1
...@@ -346,3 +346,11 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a; ...@@ -346,3 +346,11 @@ select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a;
select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a; select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a;
select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a; select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a;
drop table t1; drop table t1;
# not purely group_by bug, but group_by is involved...
create table t1 (a date default null, b date default null);
insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01');
select a,min(b) c,count(distinct rand()) from t1 group by a having c<a + interval 1 day;
drop table t1;
...@@ -1712,8 +1712,23 @@ show full columns from t2 from test like 'f%'; ...@@ -1712,8 +1712,23 @@ show full columns from t2 from test like 'f%';
show full columns from t2 from test like 's%'; show full columns from t2 from test like 's%';
show keys from t2; show keys from t2;
#
# random in WHERE clause
#
drop table t1;
CREATE TABLE t1 (
id mediumint(8) unsigned NOT NULL auto_increment,
pseudo varchar(35) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY pseudo (pseudo)
);
INSERT INTO t1 (pseudo) VALUES ('test');
INSERT INTO t1 (pseudo) VALUES ('test1');
SELECT 1 from t1 where rand() > 2;
# #
# Drop the test tables # Drop the test tables
# #
drop table t4, t3,t2, t1; drop table t4, t3, t2, t1;
...@@ -34,8 +34,8 @@ parse_arguments() { ...@@ -34,8 +34,8 @@ parse_arguments() {
--datadir=*) DATADIR=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --datadir=*) DATADIR=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;;
--pid-file=*) pid_file=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;; --pid-file=*) pid_file=`echo "$arg" | sed -e "s;--[^=]*=;;"` ;;
--user=*) --user=*)
if [ $SET_USER == 0 ] if test $SET_USER -eq 0
then then
user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1 user=`echo "$arg" | sed -e "s;--[^=]*=;;"` ; SET_USER=1
fi fi
;; ;;
......
...@@ -194,6 +194,17 @@ bool Item_field::get_date(TIME *ltime,bool fuzzydate) ...@@ -194,6 +194,17 @@ bool Item_field::get_date(TIME *ltime,bool fuzzydate)
return 0; return 0;
} }
bool Item_field::get_date_result(TIME *ltime,bool fuzzydate)
{
if ((null_value=result_field->is_null()) ||
result_field->get_date(ltime,fuzzydate))
{
bzero((char*) ltime,sizeof(*ltime));
return 1;
}
return 0;
}
bool Item_field::get_time(TIME *ltime) bool Item_field::get_time(TIME *ltime)
{ {
if ((null_value=field->is_null()) || field->get_time(ltime)) if ((null_value=field->is_null()) || field->get_time(ltime))
......
...@@ -82,6 +82,8 @@ class Item { ...@@ -82,6 +82,8 @@ class Item {
virtual void split_sum_func(List<Item> &fields) {} virtual void split_sum_func(List<Item> &fields) {}
virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_date(TIME *ltime,bool fuzzydate);
virtual bool get_time(TIME *ltime); virtual bool get_time(TIME *ltime);
virtual bool get_date_result(TIME *ltime,bool fuzzydate)
{ return get_date(ltime,fuzzydate); }
}; };
...@@ -129,8 +131,9 @@ class Item_field :public Item_ident ...@@ -129,8 +131,9 @@ class Item_field :public Item_ident
return field->result_type(); return field->result_type();
} }
Field *tmp_table_field() { return result_field; } Field *tmp_table_field() { return result_field; }
bool get_date(TIME *ltime,bool fuzzydate); bool get_date(TIME *ltime,bool fuzzydate);
bool get_time(TIME *ltime); bool get_date_result(TIME *ltime,bool fuzzydate);
bool get_time(TIME *ltime);
}; };
...@@ -332,8 +335,8 @@ class Item_ref :public Item_ident ...@@ -332,8 +335,8 @@ class Item_ref :public Item_ident
return tmp; return tmp;
} }
bool get_date(TIME *ltime,bool fuzzydate) bool get_date(TIME *ltime,bool fuzzydate)
{ {
return (null_value=(*ref)->get_date(ltime,fuzzydate)); return (null_value=(*ref)->get_date_result(ltime,fuzzydate));
} }
bool send(String *tmp) { return (*ref)->send(tmp); } bool send(String *tmp) { return (*ref)->send(tmp); }
void make_field(Send_field *field) { (*ref)->make_field(field); } void make_field(Send_field *field) { (*ref)->make_field(field); }
......
...@@ -181,7 +181,7 @@ static my_bool net_realloc(NET *net, ulong length) ...@@ -181,7 +181,7 @@ static my_bool net_realloc(NET *net, ulong length)
void net_clear(NET *net) void net_clear(NET *net)
{ {
#ifndef EXTRA_DEBUG #ifndef EXTRA_DEBUG
int count; // One may get 'unused' warning int count; /* One may get 'unused' warning */
bool is_blocking=vio_is_blocking(net->vio); bool is_blocking=vio_is_blocking(net->vio);
if (is_blocking) if (is_blocking)
vio_blocking(net->vio, FALSE); vio_blocking(net->vio, FALSE);
......
...@@ -2257,6 +2257,8 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) ...@@ -2257,6 +2257,8 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
{ {
JOIN_TAB *tab=join->join_tab+i; JOIN_TAB *tab=join->join_tab+i;
table_map current_map= tab->table->map; table_map current_map= tab->table->map;
if (i == join->tables-1)
current_map|= RAND_TABLE_BIT;
bool use_quick_range=0; bool use_quick_range=0;
used_tables|=current_map; used_tables|=current_map;
......
...@@ -444,8 +444,8 @@ static uchar* thai2sortable(const uchar * tstr,uint len) ...@@ -444,8 +444,8 @@ static uchar* thai2sortable(const uchar * tstr,uint len)
const uchar* p = tstr; const uchar* p = tstr;
uchar *outBuf; uchar *outBuf;
// uchar *pRight1, *pRight2, *pRight3, *pRight4; /* uchar *pRight1, *pRight2, *pRight3, *pRight4; */
// uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; /* uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; */
uchar *pRight1, *pRight2, *pRight3; uchar *pRight1, *pRight2, *pRight3;
uchar *pLeft1, *pLeft2, *pLeft3; uchar *pLeft1, *pLeft2, *pLeft3;
uint bufSize; uint bufSize;
...@@ -480,11 +480,11 @@ static uchar* thai2sortable(const uchar * tstr,uint len) ...@@ -480,11 +480,11 @@ static uchar* thai2sortable(const uchar * tstr,uint len)
*pRight1++ = t_ctype[p[1]][0]; *pRight1++ = t_ctype[p[1]][0];
*pRight2++ = t_ctype[p[1]][1]; *pRight2++ = t_ctype[p[1]][1];
*pRight3++ = t_ctype[p[1]][2]; *pRight3++ = t_ctype[p[1]][2];
// *pRight4++ = t_ctype[p[1]][3]; /* *pRight4++ = t_ctype[p[1]][3]; */
*pRight1++ = t_ctype[*p][0]; *pRight1++ = t_ctype[*p][0];
*pRight2++ = t_ctype[*p][1]; *pRight2++ = t_ctype[*p][1];
*pRight3++ = t_ctype[*p][2]; *pRight3++ = t_ctype[*p][2];
// *pRight4++ = t_ctype[*p][3]; /* *pRight4++ = t_ctype[*p][3]; */
len--; len--;
p += 2; p += 2;
} else { } else {
...@@ -501,17 +501,17 @@ static uchar* thai2sortable(const uchar * tstr,uint len) ...@@ -501,17 +501,17 @@ static uchar* thai2sortable(const uchar * tstr,uint len)
} }
*pRight1++ = L2_BLANK; *pRight1++ = L2_BLANK;
*pRight2++ = L3_BLANK; *pRight2++ = L3_BLANK;
// *pRight3++ = L4_BLANK; /* *pRight3++ = L4_BLANK; */
*pRight3++ = '\0'; *pRight3++ = '\0';
// *pRight4++ = '\0'; /* *pRight4++ = '\0'; */
memcpy(pRight1, pLeft2, pRight2 - pLeft2); memcpy(pRight1, pLeft2, pRight2 - pLeft2);
pRight1 += pRight2 - pLeft2; pRight1 += pRight2 - pLeft2;
memcpy(pRight1, pLeft3, pRight3 - pLeft3); memcpy(pRight1, pLeft3, pRight3 - pLeft3);
// pRight1 += pRight3 - pLeft3; /* pRight1 += pRight3 - pLeft3; */
// memcpy(pRight1, pLeft4, pRight4 - pLeft4); /* memcpy(pRight1, pLeft4, pRight4 - pLeft4); */
free(pLeft2); free(pLeft2);
free(pLeft3); free(pLeft3);
// free(pLeft4); /* free(pLeft4); */
return(outBuf); return(outBuf);
} }
...@@ -603,22 +603,22 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape, ...@@ -603,22 +603,22 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape,
{ {
if (*ptr == escape && ptr+1 != end) if (*ptr == escape && ptr+1 != end)
{ {
ptr++; // Skipp escape ptr++; /* Skipp escape */
*min_str++= *max_str++ = *ptr; *min_str++= *max_str++ = *ptr;
continue; continue;
} }
if (*ptr == wild_one) // '_' in SQL if (*ptr == wild_one) /* '_' in SQL */
{ {
*min_str++='\0'; // This should be min char *min_str++='\0'; /* This should be min char */
*max_str++=max_sort_chr; *max_str++=max_sort_chr;
continue; continue;
} }
if (*ptr == wild_many) // '%' in SQL if (*ptr == wild_many) /* '%' in SQL */
{ {
*min_length= (uint) (min_str - min_org); *min_length= (uint) (min_str - min_org);
*max_length=res_length; *max_length=res_length;
do { do {
*min_str++ = ' '; // Because if key compression *min_str++ = ' '; /* Because if key compression */
*max_str++ = max_sort_chr; *max_str++ = max_sort_chr;
} while (min_str != min_end); } while (min_str != min_end);
return 0; return 0;
...@@ -628,7 +628,7 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape, ...@@ -628,7 +628,7 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape,
*min_length= *max_length = (uint) (min_str - min_org); *min_length= *max_length = (uint) (min_str - min_org);
while (min_str != min_end) while (min_str != min_end)
*min_str++ = *max_str++ = ' '; // Because if key compression *min_str++ = *max_str++ = ' '; /* Because if key compression */
return 0; return 0;
} }
......
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