Commit 09f8f2c8 authored by unknown's avatar unknown

Fixed a bug in mysql.cc


client/mysql.cc:
  Fixed a bug with XML in mysql.cc
parent 325f0af9
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include <signal.h> #include <signal.h>
#include <violite.h> #include <violite.h>
const char *VER="11.18"; const char *VER="11.19";
/* Don't try to make a nice table if the data is too big */ /* Don't try to make a nice table if the data is too big */
#define MAX_COLUMN_LENGTH 1024 #define MAX_COLUMN_LENGTH 1024
...@@ -172,8 +172,7 @@ static int sql_connect(char *host,char *database,char *user,char *password, ...@@ -172,8 +172,7 @@ static int sql_connect(char *host,char *database,char *user,char *password,
static int put_info(const char *str,INFO_TYPE info,uint error=0); static int put_info(const char *str,INFO_TYPE info,uint error=0);
static void safe_put_field(const char *pos,ulong length); static void safe_put_field(const char *pos,ulong length);
static const char *array_value(const char **array, char *key); static const char *array_value(const char **array, char *key);
static void xmlencode(char *dest, char *src); static void xmlencode_print(const char *src, uint length);
static void my_chomp(char *end);
static void init_pager(); static void init_pager();
static void end_pager(); static void end_pager();
static void init_tee(); static void init_tee();
...@@ -1708,18 +1707,11 @@ print_table_data_xml(MYSQL_RES *result) ...@@ -1708,18 +1707,11 @@ print_table_data_xml(MYSQL_RES *result)
mysql_field_seek(result,0); mysql_field_seek(result,0);
char *statement; tee_fputs("<?xml version=\"1.0\"?>\n\n<resultset statement=\"", PAGER);
statement=(char*) my_malloc(strlen(glob_buffer.ptr())*5+1, MYF(MY_WME)); xmlencode_print(glob_buffer.ptr(), strlen(glob_buffer.ptr()) - 1);
xmlencode(statement, (char*) glob_buffer.ptr()); tee_fputs("\">", PAGER);
(void) my_chomp(strend(statement));
tee_fprintf(PAGER,"<?xml version=\"1.0\"?>\n\n<resultset statement=\"%s\">", statement);
my_free(statement,MYF(MY_ALLOW_ZERO_PTR));
fields = mysql_fetch_fields(result); fields = mysql_fetch_fields(result);
while ((cur = mysql_fetch_row(result))) while ((cur = mysql_fetch_row(result)))
{ {
(void) tee_fputs("\n <row>\n", PAGER); (void) tee_fputs("\n <row>\n", PAGER);
...@@ -1727,16 +1719,13 @@ print_table_data_xml(MYSQL_RES *result) ...@@ -1727,16 +1719,13 @@ print_table_data_xml(MYSQL_RES *result)
{ {
char *data; char *data;
ulong *lengths=mysql_fetch_lengths(result); ulong *lengths=mysql_fetch_lengths(result);
data=(char*) my_malloc(lengths[i]*5+1, MYF(MY_WME));
tee_fprintf(PAGER, "\t<%s>", (fields[i].name ? tee_fprintf(PAGER, "\t<%s>", (fields[i].name ?
(fields[i].name[0] ? fields[i].name : (fields[i].name[0] ? fields[i].name :
" &nbsp; ") : "NULL")); " &nbsp; ") : "NULL"));
xmlencode(data, cur[i]); xmlencode_print(cur[i], lengths[i]);
safe_put_field(data, strlen(data));
tee_fprintf(PAGER, "</%s>\n", (fields[i].name ? tee_fprintf(PAGER, "</%s>\n", (fields[i].name ?
(fields[i].name[0] ? fields[i].name : (fields[i].name[0] ? fields[i].name :
" &nbsp; ") : "NULL")); " &nbsp; ") : "NULL"));
my_free(data,MYF(MY_ALLOW_ZERO_PTR));
} }
(void) tee_fputs(" </row>\n", PAGER); (void) tee_fputs(" </row>\n", PAGER);
} }
...@@ -1774,43 +1763,34 @@ print_table_data_vertically(MYSQL_RES *result) ...@@ -1774,43 +1763,34 @@ print_table_data_vertically(MYSQL_RES *result)
} }
} }
static const char static const char
*array_value(const char **array, char *key) { *array_value(const char **array, char key)
{
int x; int x;
for(x=0; array[x]; x+=2) for (x= 0; array[x]; x+= 2)
if(!strcmp(array[x], key)) if (*array[x] == key)
return array[x+1]; return array[x + 1];
return 0; return 0;
} }
static void
xmlencode(char *dest, char *src)
{
char *p = src;
const char *t;
char s[2] = { 0, 0 };
*dest = 0;
do
{
s[0] = *p;
if (!(t=array_value(xmlmeta, s)))
t = s;
dest=strmov(dest, t);
} while(*p++);
}
static void static void
my_chomp(char *end) { xmlencode_print(const char *src, uint length)
char *mend; {
mend = end; if (!src)
tee_fputs("NULL", PAGER);
do { else
if (isspace(*mend)) { {
*mend = '\0'; for (const char *p = src; *p && length; *p++, length--)
} else {
mend--; const char *t;
} while (mend && *mend); if ((t = array_value(xmlmeta, *p)))
tee_fputs(t, PAGER);
else
tee_putc(*p, PAGER);
}
}
} }
......
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