mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
1c88b9a8d3
When null and the column is NOT NULL the value was not reset. modified: storage/connect/tabjson.cpp Fix converting bstr_t string to set error message modified: storage/connect/domdoc.cpp Fix MDEV-12768: -Wformat-overflow compile warnings modified: storage/connect/global.h modified: storage/connect/jsonudf.cpp modified: storage/connect/plugutil.cpp modified: storage/connect/tabvct.cpp Typo (in external_lock) modified: storage/connect/ha_connect.cc Remove some warnings modified: storage/connect/odbconn.cpp modified: storage/connect/tabmysql.cpp Add MEM_RESERVE flag to virtualAlloc modified: storage/connect/plgdbutl.cpp Fix MDEV-12573: Accept=1 may show incorrect value for NULL column in CONNECT TBL modified: storage/connect/tabutil.cpp Fix wrong setting of key size when greater than 2G modified: storage/connect/xindex.cpp Fixing MDEV-12149: compile errors on Windows with /Zc:strictStrings Introduce typedef PCSZ and replace PSZ by it where it matters All done on CONNECT but compile still fails because of an included system file modified: storage/connect/array.cpp modified: storage/connect/catalog.h modified: storage/connect/colblk.cpp modified: storage/connect/colblk.h modified: storage/connect/connect.cc modified: storage/connect/domdoc.cpp modified: storage/connect/domdoc.h modified: storage/connect/filamdbf.cpp modified: storage/connect/filamdbf.h modified: storage/connect/filamfix.cpp modified: storage/connect/filamgz.cpp modified: storage/connect/filamtxt.h modified: storage/connect/filamvct.cpp modified: storage/connect/filamvct.h modified: storage/connect/filamzip.cpp modified: storage/connect/filamzip.h modified: storage/connect/ha_connect.cc modified: storage/connect/ha_connect.h modified: storage/connect/jdbccat.h modified: storage/connect/jdbconn.cpp modified: storage/connect/jdbconn.h modified: storage/connect/json.cpp modified: storage/connect/json.h modified: storage/connect/jsonudf.cpp modified: storage/connect/jsonudf.h modified: storage/connect/libdoc.cpp modified: storage/connect/macutil.cpp modified: storage/connect/myconn.cpp modified: storage/connect/myutil.cpp modified: storage/connect/myutil.h modified: storage/connect/odbccat.h modified: storage/connect/odbconn.cpp modified: storage/connect/odbconn.h modified: storage/connect/os.h modified: storage/connect/plgdbsem.h modified: storage/connect/plgdbutl.cpp modified: storage/connect/plgxml.cpp modified: storage/connect/plgxml.h modified: storage/connect/plugutil.cpp modified: storage/connect/preparse.h modified: storage/connect/reldef.cpp modified: storage/connect/reldef.h modified: storage/connect/tabdos.cpp modified: storage/connect/tabdos.h modified: storage/connect/tabext.cpp modified: storage/connect/tabext.h modified: storage/connect/tabfix.cpp modified: storage/connect/tabfix.h modified: storage/connect/tabfmt.cpp modified: storage/connect/tabfmt.h modified: storage/connect/tabjdbc.cpp modified: storage/connect/tabjdbc.h modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h modified: storage/connect/table.cpp modified: storage/connect/tabmac.cpp modified: storage/connect/tabmul.cpp modified: storage/connect/tabmul.h modified: storage/connect/tabmysql.cpp modified: storage/connect/tabmysql.h modified: storage/connect/tabodbc.cpp modified: storage/connect/tabodbc.h modified: storage/connect/tabpivot.cpp modified: storage/connect/tabpivot.h modified: storage/connect/tabsys.cpp modified: storage/connect/tabsys.h modified: storage/connect/tabutil.cpp modified: storage/connect/tabutil.h modified: storage/connect/tabvir.cpp modified: storage/connect/tabvir.h modified: storage/connect/tabwmi.cpp modified: storage/connect/tabwmi.h modified: storage/connect/tabxml.cpp modified: storage/connect/tabxml.h modified: storage/connect/tabzip.cpp modified: storage/connect/tabzip.h modified: storage/connect/valblk.cpp modified: storage/connect/valblk.h modified: storage/connect/value.cpp modified: storage/connect/value.h modified: storage/connect/xindex.cpp modified: storage/connect/xobject.cpp modified: storage/connect/xobject.h modified: storage/connect/xtable.h Fix MDEV-12603 Insert replaces values in ZIP file modified: storage/connect/filamzip.cpp modified: storage/connect/filamzip.h Fix MDEV-12686 Handle null in json Fix MDEV-12688 Insert does not handle type TINYINT modified: storage/connect/json.cpp modified: storage/connect/tabjson.cpp Fix MDEV-12653 Cannot add index for ZIP CONNECT table modified: storage/connect/filamzip.cpp modified: storage/connect/ha_connect.cc modified: storage/connect/tabdos.cpp modified: storage/connect/tabfmt.cpp modified: storage/connect/tabjson.cpp modified: storage/connect/xindex.cpp
185 lines
5.2 KiB
C++
185 lines
5.2 KiB
C++
/******************************************************************/
|
|
/* Implementation of XML document processing using PdbXML. */
|
|
/* Author: Olivier Bertrand 2007-2017 */
|
|
/******************************************************************/
|
|
#include "my_global.h"
|
|
#include "global.h"
|
|
#include "plgdbsem.h"
|
|
#include "block.h"
|
|
#include "plgxml.h"
|
|
|
|
#if !defined(DOMDOC_SUPPORT)
|
|
PXDOC GetDomDoc(PGLOBAL g, char *nsl, char *nsdf,
|
|
char *enc, PFBLOCK fp)
|
|
{
|
|
strcpy(g->Message, MSG(DOM_NOT_SUPP));
|
|
return NULL;
|
|
} // end of GetDomDoc
|
|
#endif // !DOMDOC_SUPPORT
|
|
|
|
#ifndef LIBXML2_SUPPORT
|
|
PXDOC GetLibxmlDoc(PGLOBAL g, char *nsl, char *nsdf,
|
|
char *enc, PFBLOCK fp)
|
|
{
|
|
strcpy(g->Message, "libxml2 not supported");
|
|
return NULL;
|
|
} // end of GetLibxmlDoc
|
|
#endif // LIBXML2_SUPPORT
|
|
|
|
/******************************************************************/
|
|
/* XMLDOCUMENT constructor. */
|
|
/******************************************************************/
|
|
XMLDOCUMENT::XMLDOCUMENT(char *nsl, char *nsdf, char *enc)
|
|
{
|
|
#if defined(ZIP_SUPPORT)
|
|
zip = NULL;
|
|
#else // !ZIP_SUPPORT
|
|
zip = false;
|
|
#endif // !ZIP_SUPPORT
|
|
Namespaces = NULL;
|
|
Encoding = enc;
|
|
Nslist = nsl;
|
|
DefNs = nsdf;
|
|
} // end of XMLDOCUMENT constructor
|
|
|
|
/******************************************************************/
|
|
/* Initialize zipped file processing. */
|
|
/******************************************************************/
|
|
bool XMLDOCUMENT::InitZip(PGLOBAL g, PCSZ entry)
|
|
{
|
|
#if defined(ZIP_SUPPORT)
|
|
bool mul = (entry) ? strchr(entry, '*') || strchr(entry, '?') : false;
|
|
zip = new(g) UNZIPUTL(entry, mul);
|
|
return zip == NULL;
|
|
#else // !ZIP_SUPPORT
|
|
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "ZIP");
|
|
return true;
|
|
#endif // !ZIP_SUPPORT
|
|
} // end of InitZip
|
|
|
|
/******************************************************************/
|
|
/* Make the namespace structure list. */
|
|
/******************************************************************/
|
|
char* XMLDOCUMENT::GetMemDoc(PGLOBAL g, char *fn)
|
|
{
|
|
#if defined(ZIP_SUPPORT)
|
|
return (zip->OpenTable(g, MODE_ANY, fn)) ? NULL : zip->memory;
|
|
#else // !ZIP_SUPPORT
|
|
return NULL;
|
|
#endif // !ZIP_SUPPORT
|
|
} // end of GetMemDoc
|
|
|
|
/******************************************************************/
|
|
/* Make the namespace structure list. */
|
|
/******************************************************************/
|
|
bool XMLDOCUMENT::MakeNSlist(PGLOBAL g)
|
|
{
|
|
char *prefix, *href, *next = Nslist;
|
|
PNS nsp, *ppns = &Namespaces;
|
|
|
|
while (next) {
|
|
// Skip spaces
|
|
while ((*next) == ' ')
|
|
next++;
|
|
|
|
if ((*next) == '\0')
|
|
break;
|
|
|
|
// Find prefix
|
|
prefix = next;
|
|
next = strchr(next, '=');
|
|
|
|
if (next == NULL) {
|
|
strcpy(g->Message, MSG(BAS_NS_LIST));
|
|
return true;
|
|
} // endif next
|
|
|
|
*(next++) = '\0';
|
|
|
|
// Find href
|
|
href = next;
|
|
next = strchr(next, ' ');
|
|
|
|
if (next != NULL)
|
|
*(next++) = '\0';
|
|
|
|
// Allocate and link NS structure
|
|
nsp = (PNS)PlugSubAlloc(g, NULL, sizeof(NS));
|
|
nsp->Next = NULL;
|
|
nsp->Prefix = prefix;
|
|
nsp->Uri = href;
|
|
*ppns = nsp;
|
|
ppns = &nsp->Next;
|
|
} // endwhile next
|
|
|
|
return false;
|
|
} // end of MakeNSlist
|
|
|
|
/******************************************************************/
|
|
/* Close ZIP file. */
|
|
/******************************************************************/
|
|
void XMLDOCUMENT::CloseZip(void)
|
|
{
|
|
#if defined(ZIP_SUPPORT)
|
|
if (zip) {
|
|
zip->close();
|
|
zip = NULL;
|
|
} // endif zip
|
|
#endif // ZIP_SUPPORT
|
|
} // end of CloseZip
|
|
|
|
/******************************************************************/
|
|
/* XMLNODE constructor. */
|
|
/******************************************************************/
|
|
XMLNODE::XMLNODE(PXDOC dp)
|
|
{
|
|
Doc = dp;
|
|
Next = NULL;
|
|
Children = NULL;
|
|
Buf = NULL;
|
|
Len = -1;
|
|
} // end of XMLNODE constructor
|
|
|
|
/******************************************************************/
|
|
/* Attach new node at the end of this node children list. */
|
|
/******************************************************************/
|
|
PXNODE XMLNODE::NewChild(PXNODE ncp)
|
|
{
|
|
PXNODE np, *pnp = &Children;
|
|
|
|
for (np = *pnp; np; np = np->Next)
|
|
pnp = &np->Next;
|
|
|
|
*pnp = np;
|
|
return ncp;
|
|
} // end of NewChild
|
|
|
|
/******************************************************************/
|
|
/* Delete a node from this node children list. */
|
|
/******************************************************************/
|
|
void XMLNODE::Delete(PXNODE dnp)
|
|
{
|
|
PXNODE *pnp = &Children;
|
|
|
|
for (PXNODE np = *pnp; np; np = np->Next)
|
|
if (np == dnp) {
|
|
*pnp = dnp->Next;
|
|
break;
|
|
} else
|
|
pnp = &np->Next;
|
|
|
|
} // end of Delete
|
|
|
|
/******************************************************************/
|
|
/* Store a string in Buf, enventually reallocating it. */
|
|
/******************************************************************/
|
|
char *XMLNODE::BufAlloc(PGLOBAL g, const char *p, int n)
|
|
{
|
|
if (Len < n) {
|
|
Len = n;
|
|
Buf = (char*)PlugSubAlloc(g, NULL, n + 1);
|
|
} // endif Len
|
|
|
|
*Buf = '\0';
|
|
return strncat(Buf, p, n);
|
|
} // end of BufAlloc
|