mirror of
https://github.com/MariaDB/server.git
synced 2025-03-29 18:35:35 +01:00
- Fix crash on making an XML table with encoding=XXX
- Set parameters so libxml2 does not anymore add extra characters when retrieving several subnodes of a node. - Make a CONNECT file header (was PlugDB) modified: storage/connect/domdoc.cpp storage/connect/libdoc.cpp storage/connect/tabxml.cpp - Change the version number modified: storage/connect/ha_connect.cc - Begin eliminate use of libmysql functions in MYSQL table type Not finished yet modified: storage/connect/myconn.cpp storage/connect/myconn.h
This commit is contained in:
parent
2f48842a0f
commit
c448839c4f
6 changed files with 44 additions and 16 deletions
|
@ -217,10 +217,17 @@ PXLIST DOMDOC::NewPlist(PGLOBAL g)
|
|||
/******************************************************************/
|
||||
int DOMDOC::DumpDoc(PGLOBAL g, char *ofn)
|
||||
{
|
||||
if (TestHr(g, Docp->save(ofn)))
|
||||
return -1;
|
||||
int rc = 0;
|
||||
|
||||
return 0;
|
||||
try {
|
||||
Docp->save(ofn);
|
||||
} catch(_com_error e) {
|
||||
sprintf(g->Message, "%s: %s", MSG(COM_ERROR),
|
||||
_com_util::ConvertBSTRToString(e.Description()));
|
||||
rc = -1;
|
||||
} catch(...) {}
|
||||
|
||||
return rc;
|
||||
} // end of Dump
|
||||
|
||||
/******************************************************************/
|
||||
|
|
|
@ -152,7 +152,7 @@ extern "C" char nmfile[];
|
|||
extern "C" char pdebug[];
|
||||
|
||||
extern "C" {
|
||||
char version[]= "Version 1.01.0001 February 08, 2013";
|
||||
char version[]= "Version 1.01.0002 February 19, 2013";
|
||||
|
||||
#if defined(XMSG)
|
||||
char msglang[]; // Default message language
|
||||
|
@ -2923,7 +2923,9 @@ int ha_connect::external_lock(THD *thd, int lock_type)
|
|||
|
||||
} // endif Mode
|
||||
|
||||
rc= CloseTable(g);
|
||||
if (CloseTable(g))
|
||||
rc= HA_ERR_INTERNAL_ERROR;
|
||||
|
||||
} // endif tdbp
|
||||
|
||||
DBUG_RETURN(rc);
|
||||
|
|
|
@ -92,7 +92,7 @@ LIBXMLDOC::LIBXMLDOC(char *nsl, char *nsdf, char *enc, PFBLOCK fp)
|
|||
/******************************************************************/
|
||||
bool LIBXMLDOC::Initialize(PGLOBAL g)
|
||||
{
|
||||
//int n = xmlKeepBlanksDefault(0);
|
||||
int n = xmlKeepBlanksDefault(1);
|
||||
return MakeNSlist(g);
|
||||
} // end of Initialize
|
||||
|
||||
|
@ -221,7 +221,7 @@ PXLIST LIBXMLDOC::NewPlist(PGLOBAL g)
|
|||
/******************************************************************/
|
||||
int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
|
||||
{
|
||||
int rc;
|
||||
int rc = 0;
|
||||
FILE *of;
|
||||
|
||||
if (!(of= global_fopen(g, MSGID_CANNOT_OPEN, ofn, "w")))
|
||||
|
@ -229,7 +229,13 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
|
|||
|
||||
#if 1
|
||||
// This function does not crash (
|
||||
rc = xmlSaveFormatFileEnc((const char *)ofn, Docp, Encoding, 0);
|
||||
if (xmlSaveFormatFileEnc((const char *)ofn, Docp, Encoding, 0) < 0) {
|
||||
xmlErrorPtr err = xmlGetLastError();
|
||||
|
||||
strcpy(g->Message, (err) ? err->message : "Error saving XML doc"
|
||||
);
|
||||
rc = -1;
|
||||
} // endif Save
|
||||
// rc = xmlDocDump(of, Docp);
|
||||
#else // 0
|
||||
// Until this function is fixed, do the job ourself
|
||||
|
@ -465,6 +471,7 @@ char *XML2NODE::GetText(char *buf, int len)
|
|||
bool b = false;
|
||||
int rc = ((PXDOC2)Doc)->Decode(Content, buf, len);
|
||||
|
||||
#if 0
|
||||
// Eliminate extra characters
|
||||
for (p1 = p2 = buf; *p1; p1++)
|
||||
if (strchr(" \t\r\n", *p1)) {
|
||||
|
@ -482,6 +489,7 @@ char *XML2NODE::GetText(char *buf, int len)
|
|||
*(p2 - 1) = 0;
|
||||
else
|
||||
*p2 = 0;
|
||||
#endif // 0
|
||||
|
||||
if (trace)
|
||||
htrc("GetText buf='%s' len=%d rc=%d\n", buf, len, rc);
|
||||
|
|
|
@ -328,6 +328,7 @@ bool MYSQLC::Connected(void)
|
|||
|
||||
} // end of Connected
|
||||
|
||||
#if 0 // Not used
|
||||
/***********************************************************************/
|
||||
/* Returns the thread ID of the current MySQL connection. */
|
||||
/***********************************************************************/
|
||||
|
@ -345,14 +346,15 @@ const char *MYSQLC::ServerInfo(void)
|
|||
} // end of ServerInfo
|
||||
|
||||
/***********************************************************************/
|
||||
/* Returns the version number of the server as a number that */
|
||||
/* represents the MySQL server version in this format: */
|
||||
/* Returns the version number of the server as a number that */
|
||||
/* represents the MySQL server version in this format: */
|
||||
/* major_version*10000 + minor_version *100 + sub_version */
|
||||
/***********************************************************************/
|
||||
ulong MYSQLC::ServerVersion(void)
|
||||
{
|
||||
return (m_DB) ? mysql_get_server_version(m_DB) : 0;
|
||||
} // end of ServerVersion
|
||||
#endif // 0
|
||||
|
||||
/**************************************************************************/
|
||||
/* KillQuery: Send MySQL a Kill Query command. */
|
||||
|
@ -421,7 +423,8 @@ int MYSQLC::ExecSQL(PGLOBAL g, const char *query, int *w)
|
|||
if (m_Rows >= 0)
|
||||
return RC_OK; // Already done
|
||||
|
||||
if (mysql_query(m_DB, query) != 0) {
|
||||
//if (mysql_query(m_DB, query) != 0) {
|
||||
if (mysql_real_query(m_DB, query, strlen(query))) {
|
||||
char *msg = (char*)PlugSubAlloc(g, NULL, 512 + strlen(query));
|
||||
|
||||
sprintf(msg, "(%d) %s [%s]", mysql_errno(m_DB),
|
||||
|
|
|
@ -62,8 +62,8 @@ class DllItem MYSQLC {
|
|||
int Open(PGLOBAL g, const char *host, const char *db,
|
||||
const char *user= "root", const char *pwd= "*",
|
||||
int pt= 0);
|
||||
ulong GetThreadID(void);
|
||||
ulong ServerVersion(void);
|
||||
//ulong GetThreadID(void);
|
||||
//ulong ServerVersion(void);
|
||||
const char *ServerInfo(void);
|
||||
int KillQuery(ulong id);
|
||||
int ExecSQL(PGLOBAL g, const char *query, int *w = NULL);
|
||||
|
|
|
@ -496,8 +496,9 @@ bool TDBXML::Initialize(PGLOBAL g)
|
|||
goto error;
|
||||
} // endif NewDoc
|
||||
|
||||
// Add a PlugDB comment node
|
||||
sprintf(buf, MSG(CREATED_PLUGDB), version);
|
||||
// Add a CONNECT comment node
|
||||
// sprintf(buf, MSG(CREATED_PLUGDB), version);
|
||||
sprintf(buf, " Created by CONNECT %s ", version);
|
||||
Docp->AddComment(g, buf);
|
||||
|
||||
if (XmlDB) {
|
||||
|
@ -914,7 +915,14 @@ void TDBXML::CloseDB(PGLOBAL g)
|
|||
TabNode->AddText(g, "\n");
|
||||
|
||||
// Save the modified document
|
||||
int rc = Docp->DumpDoc(g, filename);
|
||||
if (Docp->DumpDoc(g, filename)) {
|
||||
PushWarning(g, this);
|
||||
Docp->CloseDoc(g, To_Xb);
|
||||
|
||||
// This causes a crash in Diagnostics_area::set_error_status
|
||||
// longjmp(g->jumper[g->jump_level], TYPE_AM_XML);
|
||||
} // endif DumpDoc
|
||||
|
||||
} // endif Changed
|
||||
|
||||
// Free the document and terminate XML processing
|
||||
|
|
Loading…
Add table
Reference in a new issue