summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoreland@mysql.com <>2005-01-12 11:24:46 +0100
committerjoreland@mysql.com <>2005-01-12 11:24:46 +0100
commit953df8f48d960829004c55d21c21e4bfcfc1d1ff (patch)
tree1f0b9b0d34e656749bbdb72b8f4306485974c23d
parent4860bf9a06f597c420c4b285a178775ea7deefd4 (diff)
parenteeabd0bb67142c679de376bff13b7fce09960977 (diff)
downloadmariadb-git-953df8f48d960829004c55d21c21e4bfcfc1d1ff.tar.gz
Merge mysql.com:/home/jonas/src/mysql-4.1
into mysql.com:/home/jonas/src/mysql-5.0
-rw-r--r--libmysql_r/Makefile.am2
-rw-r--r--mysql-test/ndb/ndbcluster.sh6
-rw-r--r--mysql-test/r/analyse.result6
-rw-r--r--mysql-test/t/analyse.test4
-rw-r--r--ndb/test/src/CpcClient.cpp42
-rw-r--r--scripts/Makefile.am1
-rw-r--r--sql/sql_analyse.cc59
7 files changed, 93 insertions, 27 deletions
diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am
index 82253154771..e8c576ca2b1 100644
--- a/libmysql_r/Makefile.am
+++ b/libmysql_r/Makefile.am
@@ -22,7 +22,7 @@
target = libmysqlclient_r.la
target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
-LIBS = @LIBS@ @openssl_libs@
+LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
INCLUDES = @MT_INCLUDES@ \
-I$(top_srcdir)/include $(openssl_includes) @ZLIB_INCLUDES@ \
diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh
index 848223a091c..2d529f8fe0f 100644
--- a/mysql-test/ndb/ndbcluster.sh
+++ b/mysql-test/ndb/ndbcluster.sh
@@ -191,7 +191,7 @@ if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else
echo "Unable to start $exec_mgmtsrvr from `pwd`"
exit 1
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
exit 1
fi
@@ -201,7 +201,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
echo "Starting ndbd"
( 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
stop_default_ndbcluster
exit 1
@@ -212,7 +212,7 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
echo "Starting ndbd"
( 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
stop_default_ndbcluster
exit 1
diff --git a/mysql-test/r/analyse.result b/mysql-test/r/analyse.result
index 063b7d2d2e9..d4128fb1bcc 100644
--- a/mysql-test/r/analyse.result
+++ b/mysql-test/r/analyse.result
@@ -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
test.t1.a 1 2 1 1 0 0 1.5000 0.5000 ENUM('1','2') NOT NULL
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;
diff --git a/mysql-test/t/analyse.test b/mysql-test/t/analyse.test
index 47f3473584b..34343c2b7bf 100644
--- a/mysql-test/t/analyse.test
+++ b/mysql-test/t/analyse.test
@@ -38,3 +38,7 @@ select * from t2;
insert into t2 select * from t1 procedure analyse();
select * from 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;
diff --git a/ndb/test/src/CpcClient.cpp b/ndb/test/src/CpcClient.cpp
index 2ef23528360..1d1b4fcb977 100644
--- a/ndb/test/src/CpcClient.cpp
+++ b/ndb/test/src/CpcClient.cpp
@@ -30,7 +30,7 @@
0, 0, \
0, \
(desc), \
- (void *)(value) }
+ (value) }
#define CPC_ARG(name, type, opt, desc) \
{ (name), \
@@ -351,17 +351,12 @@ SimpleCpcClient::define_process(Process & p, Properties& reply){
int
SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) {
- enum Proclist {
- Proclist_Start,
- Proclist_End,
- Proclist_Entry
- };
+ int start, end, entry;
const ParserRow_t list_reply[] = {
- CPC_CMD("start processes", Proclist_Start, ""),
-
- CPC_CMD("end processes", Proclist_End, ""),
+ CPC_CMD("start processes", &start, ""),
+ CPC_CMD("end processes", &end, ""),
- CPC_CMD("process", Proclist_Entry, ""),
+ CPC_CMD("process", &entry, ""),
CPC_ARG("id", Int, Mandatory, "Id of process."),
CPC_ARG("name", String, Mandatory, "Name of process"),
CPC_ARG("group", String, Mandatory, "Group of process"),
@@ -390,26 +385,29 @@ SimpleCpcClient::list_processes(Vector<Process> &procs, Properties& reply) {
bool done = false;
while(!done) {
const Properties *proc;
- enum Proclist p;
- cpc_recv(list_reply, &proc, (void **)&p);
+ void *p;
+ cpc_recv(list_reply, &proc, &p);
- switch(p) {
- case Proclist_Start:
+ if(p == &start)
+ {
/* do nothing */
- break;
- case Proclist_End:
+ }
+ else if(p == &end)
+ {
done = true;
- break;
- case Proclist_Entry:
+ }
+ else if(p == &entry)
+ {
if(proc != NULL){
Process p;
convert(* proc, p);
procs.push_back(p);
}
- break;
- default:
- /* ignore */
- break;
+ }
+ else
+ {
+ ndbout_c("internal error: %d", __LINE__);
+ return -1;
}
}
return 0;
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 4158b5a34dc..71b70fc0e4a 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -121,6 +121,7 @@ SUFFIXES = .sh
-e 's!@''CXXFLAGS''@!@SAVE_CXXFLAGS@!'\
-e 's!@''LDFLAGS''@!@SAVE_LDFLAGS@!'\
-e 's!@''CLIENT_LIBS''@!@CLIENT_LIBS@!' \
+ -e 's!@''ZLIB_LIBS''@!@ZLIB_LIBS@!' \
-e 's!@''LIBS''@!@LIBS@!' \
-e 's!@''WRAPLIBS''@!@WRAPLIBS@!' \
-e 's!@''innodb_system_libs''@!@innodb_system_libs@!' \
diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc
index 2259d3bead8..a8c0d689794 100644
--- a/sql/sql_analyse.cc
+++ b/sql/sql_analyse.cc
@@ -59,6 +59,7 @@ int compare_ulonglong2(void* cmp_arg __attribute__((unused)),
return compare_ulonglong(s,t);
}
+static bool append_escaped(String *to_str, String *from_str);
Procedure *
proc_analyse_init(THD *thd, ORDER *param, select_result *result,
@@ -890,7 +891,8 @@ int collect_string(String *element,
else
info->found = 1;
info->str->append('\'');
- info->str->append(*element);
+ if (append_escaped(info->str, element))
+ return 1;
info->str->append('\'');
return 0;
} // collect_string
@@ -1025,3 +1027,58 @@ uint check_ulonglong(const char *str, uint length)
while (*cmp && *cmp++ == *str++) ;
return ((uchar) str[-1] <= (uchar) cmp[-1]) ? smaller : bigger;
} /* 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;
+}