summaryrefslogtreecommitdiff
path: root/storage/connect/tabjson.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/tabjson.h')
-rw-r--r--storage/connect/tabjson.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/storage/connect/tabjson.h b/storage/connect/tabjson.h
new file mode 100644
index 00000000000..68f79a1526a
--- /dev/null
+++ b/storage/connect/tabjson.h
@@ -0,0 +1,197 @@
+/*************** tabjson H Declares Source Code File (.H) **************/
+/* Name: tabjson.h Version 1.0 */
+/* */
+/* (C) Copyright to the author Olivier BERTRAND 2014 - 2015 */
+/* */
+/* This file contains the JSON classes declares. */
+/***********************************************************************/
+#include "osutil.h"
+#include "block.h"
+#include "colblk.h"
+#include "json.h"
+
+enum JMODE {MODE_OBJECT, MODE_ARRAY, MODE_VALUE};
+
+typedef class JSONDEF *PJDEF;
+typedef class TDBJSON *PJTDB;
+typedef class JSONCOL *PJCOL;
+
+class TDBJSN;
+
+/***********************************************************************/
+/* The JSON tree node. Can be an Object or an Array. */
+/***********************************************************************/
+typedef struct _jnode {
+ PSZ Key; // The key used for object
+ OPVAL Op; // Operator used for this node
+ PVAL CncVal; // To cont value used for OP_CNC
+ int Rank; // The rank in array
+} JNODE, *PJNODE;
+
+/***********************************************************************/
+/* JSON table. */
+/***********************************************************************/
+class JSONDEF : public DOSDEF { /* Table description */
+ friend class TDBJSON;
+ friend class TDBJSN;
+ public:
+ // Constructor
+ JSONDEF(void);
+
+ // Implementation
+ virtual const char *GetType(void) {return "JSON";}
+
+ // Methods
+ virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
+ virtual PTDB GetTable(PGLOBAL g, MODE m);
+
+ protected:
+ // Members
+ JMODE Jmode; /* MODE_OBJECT by default */
+ char *Objname; /* Name of first level object */
+ char *Xcol; /* Name of expandable column */
+ int Limit; /* Limit of multiple values */
+ int Pretty; /* Depends on file structure */
+ bool Strict; /* Strict syntax checking */
+ }; // end of JSONDEF
+
+/* -------------------------- TDBJSN class --------------------------- */
+
+/***********************************************************************/
+/* This is the JSN Access Method class declaration. */
+/* The table is a DOS file, each record being a JSON object. */
+/***********************************************************************/
+class TDBJSN : public TDBDOS {
+ friend class JSONCOL;
+ public:
+ // Constructor
+ TDBJSN(PJDEF tdp, PTXF txfp);
+ TDBJSN(TDBJSN *tdbp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_JSN;}
+ virtual bool SkipHeader(PGLOBAL g);
+ virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBJSN(this);}
+
+ // Methods
+ virtual PTDB CopyOne(PTABS t);
+ virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
+ virtual PCOL InsertSpecialColumn(PGLOBAL g, PCOL colp);
+ virtual int RowNumber(PGLOBAL g, BOOL b = FALSE)
+ {return (b) ? N : Fpos + 1;}
+
+ // Database routines
+ virtual int Cardinality(PGLOBAL g);
+ virtual int GetMaxSize(PGLOBAL g);
+ virtual bool OpenDB(PGLOBAL g);
+ virtual bool PrepareWriting(PGLOBAL g);
+ virtual int ReadDB(PGLOBAL g);
+
+ protected:
+ // Members
+ PJSON Row; // The current row
+ PJCOL Colp; // The multiple column
+ JMODE Jmode; // MODE_OBJECT by default
+ char *Xcol; // Name of expandable column
+ int Fpos; // The current row index
+ int Spos; // DELETE start index
+ int N; // The current Rownum
+ int Limit; // Limit of multiple values
+ int Pretty; // Depends on file structure
+ bool Strict; // Strict syntax checking
+ bool NextSame; // Same next row
+ bool Comma; // Row has final comma
+ int SameRow; // Same row nb
+ int Xval; // Index of expandable array
+ }; // end of class TDBJSN
+
+/* -------------------------- JSONCOL class -------------------------- */
+
+/***********************************************************************/
+/* Class JSONCOL: JSON access method column descriptor. */
+/***********************************************************************/
+class JSONCOL : public DOSCOL {
+ friend class TDBJSN;
+ friend class TDBJSON;
+ public:
+ // Constructors
+ JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
+ JSONCOL(JSONCOL *colp, PTDB tdbp); // Constructor used in copy process
+
+ // Implementation
+ virtual int GetAmType(void) {return Tjp->GetAmType();}
+
+ // Methods
+ virtual bool SetBuffer(PGLOBAL g, PVAL value, bool ok, bool check);
+ bool ParseJpath(PGLOBAL g);
+ virtual void ReadColumn(PGLOBAL g);
+ virtual void WriteColumn(PGLOBAL g);
+
+ protected:
+ bool CheckExpand(PGLOBAL g, int i, PSZ nm, bool b);
+ bool SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm);
+ PJSON GetRow(PGLOBAL g, int mode);
+ void SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n);
+
+ // Default constructor not to be used
+ JSONCOL(void) {}
+
+ // Members
+ TDBJSN *Tjp; // To the JSN table block
+ PVAL MulVal; // To value used by multiple column
+ PJAR Arp; // The intermediate array
+ char *Jpath; // The json path
+ JNODE *Nodes ; // The intermediate objects
+ int Nod; // The number of intermediate objects
+ int Ival; // Index of multiple values
+ int Nx; // The last read sub-row
+ bool Xpd; // True for expandable column
+ bool Parsed; // True when parsed
+ }; // end of class JSONCOL
+
+/* -------------------------- TDBJSON class -------------------------- */
+
+/***********************************************************************/
+/* This is the JSON Access Method class declaration. */
+/***********************************************************************/
+class TDBJSON : public TDBJSN {
+ friend class JSONCOL;
+ public:
+ // Constructor
+ TDBJSON(PJDEF tdp, PTXF txfp);
+ TDBJSON(PJTDB tdbp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_JSON;}
+ virtual PTDB Duplicate(PGLOBAL g) {return (PTDB)new(g) TDBJSON(this);}
+
+ // Methods
+ virtual PTDB CopyOne(PTABS t);
+
+ // Database routines
+ virtual int Cardinality(PGLOBAL g);
+ virtual int GetMaxSize(PGLOBAL g);
+ virtual void ResetSize(void);
+ virtual int GetRecpos(void) {return Fpos;}
+ virtual bool OpenDB(PGLOBAL g);
+ virtual int ReadDB(PGLOBAL g);
+ virtual bool PrepareWriting(PGLOBAL g) {return false;}
+ virtual int WriteDB(PGLOBAL g);
+ virtual int DeleteDB(PGLOBAL g, int irc);
+ virtual void CloseDB(PGLOBAL g);
+
+ // Optimization routines
+ virtual int MakeIndex(PGLOBAL g, PIXDEF pxdf, bool add);
+
+ protected:
+ int MakeNewDoc(PGLOBAL g);
+ int MakeDocument(PGLOBAL g);
+
+ // Members
+ PJSON Top; // The file JSON tree
+ PJAR Doc; // The document array
+ char *Objname; // The table object name
+ int Multiple; // 0: No 1: DIR 2: Section 3: filelist
+ bool Done; // True when document parsing is done
+ bool Changed; // After Update, Insert or Delete
+ }; // end of class TDBJSON