Commit 40649e92 authored by unknown's avatar unknown

Merge mysql.com:/home/jonas/src/mysql-4.1

into mysql.com:/home/jonas/src/mysql-5.0


libmysql_r/Makefile.am:
  Auto merged
mysql-test/r/analyse.result:
  Auto merged
sql/sql_analyse.cc:
  Auto merged
parents dd3cfa8d ed6c9afd
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
target = libmysqlclient_r.la target = libmysqlclient_r.la
target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@ target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
LIBS = @LIBS@ @openssl_libs@ LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
INCLUDES = @MT_INCLUDES@ \ INCLUDES = @MT_INCLUDES@ \
-I$(top_srcdir)/include $(openssl_includes) @ZLIB_INCLUDES@ \ -I$(top_srcdir)/include $(openssl_includes) @ZLIB_INCLUDES@ \
......
...@@ -191,7 +191,7 @@ if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else ...@@ -191,7 +191,7 @@ if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else
echo "Unable to start $exec_mgmtsrvr from `pwd`" echo "Unable to start $exec_mgmtsrvr from `pwd`"
exit 1 exit 1
fi fi
if sleep_until_file_created $fs_ndb/ndb_3.pid 30 if sleep_until_file_created $fs_ndb/ndb_3.pid 120
then :; else then :; else
exit 1 exit 1
fi fi
...@@ -201,7 +201,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile" ...@@ -201,7 +201,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
echo "Starting ndbd" echo "Starting ndbd"
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & ) ( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
if sleep_until_file_created $fs_ndb/ndb_1.pid 30 if sleep_until_file_created $fs_ndb/ndb_1.pid 120
then :; else then :; else
stop_default_ndbcluster stop_default_ndbcluster
exit 1 exit 1
...@@ -212,7 +212,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile" ...@@ -212,7 +212,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
echo "Starting ndbd" echo "Starting ndbd"
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & ) ( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
if sleep_until_file_created $fs_ndb/ndb_2.pid 30 if sleep_until_file_created $fs_ndb/ndb_2.pid 120
then :; else then :; else
stop_default_ndbcluster stop_default_ndbcluster
exit 1 exit 1
......
...@@ -96,3 +96,9 @@ select * from t2; ...@@ -96,3 +96,9 @@ select * from t2;
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
test.t1.a 1 2 1 1 0 0 1.5000 0.5000 ENUM('1','2') NOT NULL test.t1.a 1 2 1 1 0 0 1.5000 0.5000 ENUM('1','2') NOT NULL
drop table t1,t2; drop table t1,t2;
create table t1 (v varchar(128));
insert into t1 values ('abc'),('abc\'def\\hij\"klm\0opq'),('\''),('\"'),('\\'),('a\0'),('b\''),('c\"'),('d\\'),('\'b'),('\"c'),('\\d'),('a\0\0\0b'),('a\'\'\'\'b'),('a\"\"\"\"b'),('a\\\\\\\\b'),('\'\0\\\"'),('\'\''),('\"\"'),('\\\\'),('The\ZEnd');
select * from t1 procedure analyse();
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
test.t1.v " \\ 1 19 0 0 3.7619 NULL ENUM('"','""','"c','\'\0\\"','\'','\'\'','\'b','a\0\0\0b','a\0','a""""b','a\'\'\'\'b','abc','abc\'def\\hij"klm\0opq','a\\\\\\\\b','b\'','c"','d\\','The\ZEnd','\\','\\d','\\\\') NOT NULL
drop table t1;
...@@ -38,3 +38,7 @@ select * from t2; ...@@ -38,3 +38,7 @@ select * from t2;
insert into t2 select * from t1 procedure analyse(); insert into t2 select * from t1 procedure analyse();
select * from t2; select * from t2;
drop table t1,t2; drop table t1,t2;
create table t1 (v varchar(128));
insert into t1 values ('abc'),('abc\'def\\hij\"klm\0opq'),('\''),('\"'),('\\'),('a\0'),('b\''),('c\"'),('d\\'),('\'b'),('\"c'),('\\d'),('a\0\0\0b'),('a\'\'\'\'b'),('a\"\"\"\"b'),('a\\\\\\\\b'),('\'\0\\\"'),('\'\''),('\"\"'),('\\\\'),('The\ZEnd');
select * from t1 procedure analyse();
drop table t1;
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
0, 0, \ 0, 0, \
0, \ 0, \
(desc), \ (desc), \
(void *)(value) } (value) }
#define CPC_ARG(name, type, opt, desc) \ #define CPC_ARG(name, type, opt, desc) \
{ (name), \ { (name), \
...@@ -351,17 +351,12 @@ SimpleCpcClient::define_process(Process & p, Properties& reply){ ...@@ -351,17 +351,12 @@ SimpleCpcClient::define_process(Process & p, Properties& reply){
int int
SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) { SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) {
enum Proclist { int start, end, entry;
Proclist_Start,
Proclist_End,
Proclist_Entry
};
const ParserRow_t list_reply[] = { const ParserRow_t list_reply[] = {
CPC_CMD("start processes", Proclist_Start, ""), CPC_CMD("start processes", &start, ""),
CPC_CMD("end processes", &end, ""),
CPC_CMD("end processes", Proclist_End, ""),
CPC_CMD("process", Proclist_Entry, ""), CPC_CMD("process", &entry, ""),
CPC_ARG("id", Int, Mandatory, "Id of process."), CPC_ARG("id", Int, Mandatory, "Id of process."),
CPC_ARG("name", String, Mandatory, "Name of process"), CPC_ARG("name", String, Mandatory, "Name of process"),
CPC_ARG("group", String, Mandatory, "Group of process"), CPC_ARG("group", String, Mandatory, "Group of process"),
...@@ -390,26 +385,29 @@ SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) { ...@@ -390,26 +385,29 @@ SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) {
bool done = false; bool done = false;
while(!done) { while(!done) {
const Properties *proc; const Properties *proc;
enum Proclist p; void *p;
cpc_recv(list_reply, &proc, (void **)&p); cpc_recv(list_reply, &proc, &p);
switch(p) { if(p == &start)
case Proclist_Start: {
/* do nothing */ /* do nothing */
break; }
case Proclist_End: else if(p == &end)
{
done = true; done = true;
break; }
case Proclist_Entry: else if(p == &entry)
{
if(proc != NULL){ if(proc != NULL){
Process p; Process p;
convert(* proc, p); convert(* proc, p);
procs.push_back(p); procs.push_back(p);
} }
break; }
default: else
/* ignore */ {
break; ndbout_c("internal error: %d", __LINE__);
return -1;
} }
} }
return 0; return 0;
......
...@@ -121,6 +121,7 @@ SUFFIXES = .sh ...@@ -121,6 +121,7 @@ SUFFIXES = .sh
-e 's!@''CXXFLAGS''@!@SAVE_CXXFLAGS@!'\ -e 's!@''CXXFLAGS''@!@SAVE_CXXFLAGS@!'\
-e 's!@''LDFLAGS''@!@SAVE_LDFLAGS@!'\ -e 's!@''LDFLAGS''@!@SAVE_LDFLAGS@!'\
-e 's!@''CLIENT_LIBS''@!@CLIENT_LIBS@!' \ -e 's!@''CLIENT_LIBS''@!@CLIENT_LIBS@!' \
-e 's!@''ZLIB_LIBS''@!@ZLIB_LIBS@!' \
-e 's!@''LIBS''@!@LIBS@!' \ -e 's!@''LIBS''@!@LIBS@!' \
-e 's!@''WRAPLIBS''@!@WRAPLIBS@!' \ -e 's!@''WRAPLIBS''@!@WRAPLIBS@!' \
-e 's!@''innodb_system_libs''@!@innodb_system_libs@!' \ -e 's!@''innodb_system_libs''@!@innodb_system_libs@!' \
......
...@@ -59,6 +59,7 @@ int compare_ulonglong2(void* cmp_arg __attribute__((unused)), ...@@ -59,6 +59,7 @@ int compare_ulonglong2(void* cmp_arg __attribute__((unused)),
return compare_ulonglong(s,t); return compare_ulonglong(s,t);
} }
static bool append_escaped(String *to_str, String *from_str);
Procedure * Procedure *
proc_analyse_init(THD *thd, ORDER *param, select_result *result, proc_analyse_init(THD *thd, ORDER *param, select_result *result,
...@@ -890,7 +891,8 @@ int collect_string(String *element, ...@@ -890,7 +891,8 @@ int collect_string(String *element,
else else
info->found = 1; info->found = 1;
info->str->append('\''); info->str->append('\'');
info->str->append(*element); if (append_escaped(info->str, element))
return 1;
info->str->append('\''); info->str->append('\'');
return 0; return 0;
} // collect_string } // collect_string
...@@ -1025,3 +1027,58 @@ uint check_ulonglong(const char *str, uint length) ...@@ -1025,3 +1027,58 @@ uint check_ulonglong(const char *str, uint length)
while (*cmp && *cmp++ == *str++) ; while (*cmp && *cmp++ == *str++) ;
return ((uchar) str[-1] <= (uchar) cmp[-1]) ? smaller : bigger; return ((uchar) str[-1] <= (uchar) cmp[-1]) ? smaller : bigger;
} /* check_ulonlong */ } /* check_ulonlong */
/*
FUNCTION: append_escaped()
DESCRIPTION
append_escaped() takes a String type variable, where it appends
escaped the second argument. Only characters that require escaping
will be escaped.
ARGUMENTS
A pointer to a String variable, where results will be appended
A pointer to a String variable, which is appended to the result
String, escaping those characters that require it.
RETURN VALUES
0 Success
1 Out of memory
*/
static bool append_escaped(String *to_str, String *from_str)
{
char *from, *end, c;
if (to_str->realloc(to_str->length() + from_str->length()))
return 1;
from= (char*) from_str->ptr();
end= from + from_str->length();
for (; from < end; from++)
{
c= *from;
switch (c) {
case '\0':
c= '0';
break;
case '\032':
c= 'Z';
break;
case '\\':
case '\'':
break;
default:
goto normal_character;
}
if (to_str->append('\\'))
return 1;
normal_character:
if (to_str->append(c))
return 1;
}
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