diff options
Diffstat (limited to 'storage/connect/tabxml.h')
-rw-r--r-- | storage/connect/tabxml.h | 492 |
1 files changed, 246 insertions, 246 deletions
diff --git a/storage/connect/tabxml.h b/storage/connect/tabxml.h index fa66b385fa1..b23306d0fb9 100644 --- a/storage/connect/tabxml.h +++ b/storage/connect/tabxml.h @@ -1,246 +1,246 @@ -
-/*************** Tabxml H Declares Source Code File (.H) ***************/
-/* Name: TABXML.H Version 1.6 */
-/* */
-/* (C) Copyright to the author Olivier BERTRAND 2007-2013 */
-/* */
-/* This file contains the XML table classes declares. */
-/***********************************************************************/
-#define TYPE_AM_XML (AMT)127
-
-typedef class XMLDEF *PXMLDEF;
-typedef class TDBXML *PTDBXML;
-typedef class XMLCOL *PXMLCOL;
-
-// These functions are exported from the Extended.dll
-//PTABDEF __stdcall GetXML(PGLOBAL g, void *memp);
-
-/* --------------------------- XML classes --------------------------- */
-
-/***********************************************************************/
-/* XML table. */
-/***********************************************************************/
-class DllExport XMLDEF : public TABDEF { /* Logical table description */
- friend class TDBXML;
- public:
- // Constructor
- XMLDEF(void);
-
- // Implementation
- virtual const char *GetType(void) {return "XML";}
-
- // Methods
- virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
- virtual PTDB GetTable(PGLOBAL g, MODE m);
- virtual bool DeleteTableFile(PGLOBAL g);
-
- protected:
- // Members
- char *Fn; /* Path/Name of corresponding file */
- char *Encoding; /* New XML table file encoding */
- char *Tabname; /* Name of Table node */
- char *Rowname; /* Name of first level nodes */
- char *Colname; /* Name of second level nodes */
- char *Mulnode; /* Name of multiple node */
- char *XmlDB; /* Name of XML DB node */
- char *Nslist; /* List of namespaces to register */
- char *DefNs; /* Dummy name of default namespace */
- char *Attrib; /* Table node attributes */
- char *Hdattr; /* Header node attributes */
- int Coltype; /* Default column type */
- int Limit; /* Limit of multiple values */
- int Header; /* n first rows are header rows */
- bool Xpand; /* Put multiple tags in several rows */
- bool Usedom; /* True: DOM, False: libxml2 */
- bool Skipnull; /* True: skip writing null nodes */
- }; // end of XMLDEF
-
-#if defined(INCLUDE_TDBXML)
-
-/***********************************************************************/
-/* This is the class declaration for the simple XML tables. */
-/***********************************************************************/
-class DllExport TDBXML : public TDBASE {
- friend class XMLCOL;
- friend class XMULCOL;
- friend class XPOSCOL;
- public:
- // Constructor
- TDBXML(PXMLDEF tdp);
- TDBXML(PTDBXML tdbp);
-
- // Implementation
- virtual AMT GetAmType(void) {return TYPE_AM_XML;}
- virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBXML(this);}
-
- // Methods
- virtual PTDB CopyOne(PTABS t);
- virtual int GetRecpos(void);
- virtual int GetProgCur(void) {return N;}
- virtual PSZ GetFile(PGLOBAL g) {return Xfile;}
- virtual void SetFile(PGLOBAL g, PSZ fn) {Xfile = fn;}
- virtual void ResetDB(void) {N = 0;}
- virtual void ResetSize(void) {MaxSize = -1;}
- virtual int RowNumber(PGLOBAL g, bool b = false);
- int LoadTableFile(PGLOBAL g);
- bool Initialize(PGLOBAL g);
- bool SetTabNode(PGLOBAL g);
- void SetNodeAttr(PGLOBAL g, char *attr, PXNODE node);
- bool CheckRow(PGLOBAL g, bool b);
-
- // Database routines
- virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
- virtual PCOL InsertSpecialColumn(PGLOBAL g, PCOL colp);
-//virtual int GetMaxSame(PGLOBAL g) {return (Xpand) ? Limit : 1;}
- virtual int Cardinality(PGLOBAL g);
- virtual int GetMaxSize(PGLOBAL g);
-//virtual bool NeedIndexing(PGLOBAL g);
- virtual bool OpenDB(PGLOBAL g);
- virtual int ReadDB(PGLOBAL g);
- virtual int WriteDB(PGLOBAL g);
- virtual int DeleteDB(PGLOBAL g, int irc);
- virtual void CloseDB(PGLOBAL g);
- virtual int CheckWrite(PGLOBAL g) {Checked = true; return 0;}
-
- protected:
- // Members
- PXDOC Docp;
- PXNODE Root;
- PXNODE Curp;
- PXNODE DBnode;
- PXNODE TabNode;
- PXNODE RowNode;
- PXNODE ColNode;
- PXLIST Nlist;
- PXLIST Clist;
- PFBLOCK To_Xb; // Pointer to XML file block
- PCOL Colp; // The multiple column
- bool Changed; // After Update, Insert or Delete
- bool Checked; // After Update check pass
- bool NextSame; // Same next row
- bool Xpand; // Put multiple tags in several rows
- bool NewRow; // True when inserting a new row
- bool Hasnod; // True if rows have subnodes
- bool Write; // True for Insert and Update
- bool Usedom; // True for DOM, False for libxml2
- bool Bufdone; // True when column buffers allocated
- bool Nodedone; // True when column nodes allocated
- bool Skipnull; // True to skip writing nullnodes
- bool Void; // True if the file does not exist
- char *Xfile; // The XML file
- char *Enc; // New XML table file encoding
- char *Tabname; // Name of Table node
- char *Rowname; // Name of first level nodes
- char *Colname; // Name of second level nodes
- char *Mulnode; // Name of multiple node
- char *XmlDB; // Name of XML DB node
- char *Nslist; // List of namespaces to register
- char *DefNs; // Dummy name of default namespace
- char *Attrib; // Table node attribut(s)
- char *Hdattr; // Header node attribut(s)
- int Coltype; // Default column type
- int Limit; // Limit of multiple values
- int Header; // n first rows are header rows
- int Nrow; // The table cardinality
- int Irow; // The current row index
- int Nsub; // The current subrow index
- int N; // The current Rowid
- }; // end of class TDBXML
-
-/***********************************************************************/
-/* Class XMLCOL: XDB table access method column descriptor. */
-/***********************************************************************/
-class XMLCOL : public COLBLK {
- public:
- // Constructors
- XMLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am = "XML");
- XMLCOL(XMLCOL *colp, PTDB tdbp); // Constructor used in copy process
-
- // Implementation
- virtual int GetAmType(void) {return TYPE_AM_XML;}
- virtual void SetTo_Val(PVAL valp) {To_Val = valp;}
- bool ParseXpath(PGLOBAL g, bool mode);
-
- // Methods
- virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
- virtual void ReadColumn(PGLOBAL g);
- virtual void WriteColumn(PGLOBAL g);
- bool AllocBuf(PGLOBAL g, bool mode);
- void AllocNodes(PGLOBAL g, PXDOC dp);
-
- protected:
-//xmlNodePtr SelectSingleNode(xmlNodePtr node, char *name);
-
- // Default constructor not to be used
- XMLCOL(void) : COLBLK(1) {}
-
- // Members
- PXLIST Nl;
- PXLIST Nlx;
- PXNODE ColNode;
- PXNODE ValNode;
- PXNODE Cxnp;
- PXNODE Vxnp;
- PXATTR Vxap;
- PXATTR AttNode;
- PTDBXML Tdbp;
- char *Valbuf; // To the node value buffer
- char *Xname; // The node or attribute name
- char* *Nodes; // The intermediate nodes
- int Type; // 0: Attribute, 1: Tag, 2: position
- int Nod; // The number of intermediate nodes
- int Inod; // Index of multiple node
- int Rank; // Position
- bool Mul; // true for multiple column
- bool Checked; // Was checked while Updating
- int Long; // Buffer length
- int Nx; // The last read row
- int Sx; // The last read sub-row
- PVAL To_Val; // To value used for Update/Insert
- }; // end of class XMLCOL
-
-/***********************************************************************/
-/* Derived class XMLCOLX: used to replace a multiple XMLCOL by the */
-/* derived class XMULCOL that has specialize read and write functions.*/
-/* Note: this works only if the members of the derived class are the */
-/* same than the ones of the original class (NO added members). */
-/***********************************************************************/
-class XMLCOLX : public XMLCOL {
- public:
- // Fake operator new used to change a filter into a derived filter
- void * operator new(size_t size, PXMLCOL colp) {return colp;}
-#if !defined(__BORLANDC__)
- // Avoid warning C4291 by defining a matching dummy delete operator
- void operator delete(void *, PXMLCOL) {}
-#endif
- }; // end of class XMLCOLX
-
-/***********************************************************************/
-/* Class XMULCOL: XML table access method multiple column descriptor. */
-/***********************************************************************/
-class XMULCOL : public XMLCOLX {
- public:
- // The constructor must restore Value because XOBJECT has a void
- // constructor called by default that set Value to NULL
- XMULCOL(PVAL valp) {Value = valp; Mul = true;}
-
- // Methods
- virtual void ReadColumn(PGLOBAL g);
- virtual void WriteColumn(PGLOBAL g);
- }; // end of class XMULCOL
-
-/***********************************************************************/
-/* Class XPOSCOL: XML table column accessed by position. */
-/***********************************************************************/
-class XPOSCOL : public XMLCOLX {
- public:
- // The constructor must restore Value because XOBJECT has a void
- // constructor called by default that set Value to NULL
- XPOSCOL(PVAL valp) {Value = valp;}
-
- // Methods
- virtual void ReadColumn(PGLOBAL g);
- virtual void WriteColumn(PGLOBAL g);
- }; // end of class XPOSCOL
-
-#endif // INCLUDE_TDBXML
+ +/*************** Tabxml H Declares Source Code File (.H) ***************/ +/* Name: TABXML.H Version 1.6 */ +/* */ +/* (C) Copyright to the author Olivier BERTRAND 2007-2013 */ +/* */ +/* This file contains the XML table classes declares. */ +/***********************************************************************/ +#define TYPE_AM_XML (AMT)127 + +typedef class XMLDEF *PXMLDEF; +typedef class TDBXML *PTDBXML; +typedef class XMLCOL *PXMLCOL; + +// These functions are exported from the Extended.dll +//PTABDEF __stdcall GetXML(PGLOBAL g, void *memp); + +/* --------------------------- XML classes --------------------------- */ + +/***********************************************************************/ +/* XML table. */ +/***********************************************************************/ +class DllExport XMLDEF : public TABDEF { /* Logical table description */ + friend class TDBXML; + public: + // Constructor + XMLDEF(void); + + // Implementation + virtual const char *GetType(void) {return "XML";} + + // Methods + virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff); + virtual PTDB GetTable(PGLOBAL g, MODE m); + virtual bool DeleteTableFile(PGLOBAL g); + + protected: + // Members + char *Fn; /* Path/Name of corresponding file */ + char *Encoding; /* New XML table file encoding */ + char *Tabname; /* Name of Table node */ + char *Rowname; /* Name of first level nodes */ + char *Colname; /* Name of second level nodes */ + char *Mulnode; /* Name of multiple node */ + char *XmlDB; /* Name of XML DB node */ + char *Nslist; /* List of namespaces to register */ + char *DefNs; /* Dummy name of default namespace */ + char *Attrib; /* Table node attributes */ + char *Hdattr; /* Header node attributes */ + int Coltype; /* Default column type */ + int Limit; /* Limit of multiple values */ + int Header; /* n first rows are header rows */ + bool Xpand; /* Put multiple tags in several rows */ + bool Usedom; /* True: DOM, False: libxml2 */ + bool Skipnull; /* True: skip writing null nodes */ + }; // end of XMLDEF + +#if defined(INCLUDE_TDBXML) + +/***********************************************************************/ +/* This is the class declaration for the simple XML tables. */ +/***********************************************************************/ +class DllExport TDBXML : public TDBASE { + friend class XMLCOL; + friend class XMULCOL; + friend class XPOSCOL; + public: + // Constructor + TDBXML(PXMLDEF tdp); + TDBXML(PTDBXML tdbp); + + // Implementation + virtual AMT GetAmType(void) {return TYPE_AM_XML;} + virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBXML(this);} + + // Methods + virtual PTDB CopyOne(PTABS t); + virtual int GetRecpos(void); + virtual int GetProgCur(void) {return N;} + virtual PSZ GetFile(PGLOBAL g) {return Xfile;} + virtual void SetFile(PGLOBAL g, PSZ fn) {Xfile = fn;} + virtual void ResetDB(void) {N = 0;} + virtual void ResetSize(void) {MaxSize = -1;} + virtual int RowNumber(PGLOBAL g, bool b = false); + int LoadTableFile(PGLOBAL g); + bool Initialize(PGLOBAL g); + bool SetTabNode(PGLOBAL g); + void SetNodeAttr(PGLOBAL g, char *attr, PXNODE node); + bool CheckRow(PGLOBAL g, bool b); + + // Database routines + virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n); + virtual PCOL InsertSpecialColumn(PGLOBAL g, PCOL colp); +//virtual int GetMaxSame(PGLOBAL g) {return (Xpand) ? Limit : 1;} + virtual int Cardinality(PGLOBAL g); + virtual int GetMaxSize(PGLOBAL g); +//virtual bool NeedIndexing(PGLOBAL g); + virtual bool OpenDB(PGLOBAL g); + virtual int ReadDB(PGLOBAL g); + virtual int WriteDB(PGLOBAL g); + virtual int DeleteDB(PGLOBAL g, int irc); + virtual void CloseDB(PGLOBAL g); + virtual int CheckWrite(PGLOBAL g) {Checked = true; return 0;} + + protected: + // Members + PXDOC Docp; + PXNODE Root; + PXNODE Curp; + PXNODE DBnode; + PXNODE TabNode; + PXNODE RowNode; + PXNODE ColNode; + PXLIST Nlist; + PXLIST Clist; + PFBLOCK To_Xb; // Pointer to XML file block + PCOL Colp; // The multiple column + bool Changed; // After Update, Insert or Delete + bool Checked; // After Update check pass + bool NextSame; // Same next row + bool Xpand; // Put multiple tags in several rows + bool NewRow; // True when inserting a new row + bool Hasnod; // True if rows have subnodes + bool Write; // True for Insert and Update + bool Usedom; // True for DOM, False for libxml2 + bool Bufdone; // True when column buffers allocated + bool Nodedone; // True when column nodes allocated + bool Skipnull; // True to skip writing nullnodes + bool Void; // True if the file does not exist + char *Xfile; // The XML file + char *Enc; // New XML table file encoding + char *Tabname; // Name of Table node + char *Rowname; // Name of first level nodes + char *Colname; // Name of second level nodes + char *Mulnode; // Name of multiple node + char *XmlDB; // Name of XML DB node + char *Nslist; // List of namespaces to register + char *DefNs; // Dummy name of default namespace + char *Attrib; // Table node attribut(s) + char *Hdattr; // Header node attribut(s) + int Coltype; // Default column type + int Limit; // Limit of multiple values + int Header; // n first rows are header rows + int Nrow; // The table cardinality + int Irow; // The current row index + int Nsub; // The current subrow index + int N; // The current Rowid + }; // end of class TDBXML + +/***********************************************************************/ +/* Class XMLCOL: XDB table access method column descriptor. */ +/***********************************************************************/ +class XMLCOL : public COLBLK { + public: + // Constructors + XMLCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am = "XML"); + XMLCOL(XMLCOL *colp, PTDB tdbp); // Constructor used in copy process + + // Implementation + virtual int GetAmType(void) {return TYPE_AM_XML;} + virtual void SetTo_Val(PVAL valp) {To_Val = valp;} + bool ParseXpath(PGLOBAL g, bool mode); + + // Methods + virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check); + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); + bool AllocBuf(PGLOBAL g, bool mode); + void AllocNodes(PGLOBAL g, PXDOC dp); + + protected: +//xmlNodePtr SelectSingleNode(xmlNodePtr node, char *name); + + // Default constructor not to be used + XMLCOL(void) : COLBLK(1) {} + + // Members + PXLIST Nl; + PXLIST Nlx; + PXNODE ColNode; + PXNODE ValNode; + PXNODE Cxnp; + PXNODE Vxnp; + PXATTR Vxap; + PXATTR AttNode; + PTDBXML Tdbp; + char *Valbuf; // To the node value buffer + char *Xname; // The node or attribute name + char* *Nodes; // The intermediate nodes + int Type; // 0: Attribute, 1: Tag, 2: position + int Nod; // The number of intermediate nodes + int Inod; // Index of multiple node + int Rank; // Position + bool Mul; // true for multiple column + bool Checked; // Was checked while Updating + int Long; // Buffer length + int Nx; // The last read row + int Sx; // The last read sub-row + PVAL To_Val; // To value used for Update/Insert + }; // end of class XMLCOL + +/***********************************************************************/ +/* Derived class XMLCOLX: used to replace a multiple XMLCOL by the */ +/* derived class XMULCOL that has specialize read and write functions.*/ +/* Note: this works only if the members of the derived class are the */ +/* same than the ones of the original class (NO added members). */ +/***********************************************************************/ +class XMLCOLX : public XMLCOL { + public: + // Fake operator new used to change a filter into a derived filter + void * operator new(size_t size, PXMLCOL colp) {return colp;} +#if !defined(__BORLANDC__) + // Avoid warning C4291 by defining a matching dummy delete operator + void operator delete(void *, PXMLCOL) {} +#endif + }; // end of class XMLCOLX + +/***********************************************************************/ +/* Class XMULCOL: XML table access method multiple column descriptor. */ +/***********************************************************************/ +class XMULCOL : public XMLCOLX { + public: + // The constructor must restore Value because XOBJECT has a void + // constructor called by default that set Value to NULL + XMULCOL(PVAL valp) {Value = valp; Mul = true;} + + // Methods + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); + }; // end of class XMULCOL + +/***********************************************************************/ +/* Class XPOSCOL: XML table column accessed by position. */ +/***********************************************************************/ +class XPOSCOL : public XMLCOLX { + public: + // The constructor must restore Value because XOBJECT has a void + // constructor called by default that set Value to NULL + XPOSCOL(PVAL valp) {Value = valp;} + + // Methods + virtual void ReadColumn(PGLOBAL g); + virtual void WriteColumn(PGLOBAL g); + }; // end of class XPOSCOL + +#endif // INCLUDE_TDBXML |