diff options
Diffstat (limited to '')
-rw-r--r-- | storage/connect/cmgoconn.h | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/storage/connect/cmgoconn.h b/storage/connect/cmgoconn.h new file mode 100644 index 00000000..f37a96cb --- /dev/null +++ b/storage/connect/cmgoconn.h @@ -0,0 +1,121 @@ +/***********************************************************************/ +/* CMgoConn.h : header file for the MongoDB connection classes. */ +/***********************************************************************/ + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +#include <bson.h> +#include <bcon.h> +#include <mongoc.h> + +// C connection to a MongoDB data source +class TDBCMG; +class MGOCOL; + +/***********************************************************************/ +/* Include MongoDB library header files. */ +/***********************************************************************/ +typedef class INCOL *PINCOL; +typedef class MGODEF *PMGODEF; +typedef class TDBCMG *PTDBCMG; +typedef class MGOCOL *PMGOCOL; + +typedef struct mongo_parms { + PTDB Tdbp; + PCSZ Uristr; // Driver URI + PCSZ Db_name; + PCSZ Coll_name; + PCSZ Options; + PCSZ Filter; + PCSZ Line; + bool Pipe; +} CMGOPARM, *PCPARM; + +typedef struct KEYCOL { + KEYCOL *Next; + PINCOL Incolp; + PCOL Colp; + char *Key; + bool Array; +} *PKC; + +typedef struct _path_list *PTHP; + +typedef struct _path_list { + PSZ Path; + PSZ Name; + PTHP Next; +} PTH; + +/***********************************************************************/ +/* Used when inserting values in a MongoDB collection. */ +/***********************************************************************/ +class INCOL : public BLOCK { +public: + // Constructor + INCOL(void) { Child = bson_new(); Klist = NULL; } + + // Methods + void AddCol(PGLOBAL g, PCOL colp, char *jp); + void Init(void); + void Destroy(void); + + //Members + bson_t *Child; + PKC Klist; +}; // end of INCOL; + +/***********************************************************************/ +/* CMgoConn class. */ +/***********************************************************************/ +class CMgoConn : public BLOCK { + friend class TDBCMG; + friend class CMGDISC; +public: + // Constructor + CMgoConn(PGLOBAL g, PCPARM pcg); + + //static void *mgo_alloc(size_t n); + //static void *mgo_calloc(size_t n, size_t sz); + //static void *mgo_realloc(void *m, size_t n); + //static void mgo_free(void *) {} + + // Implementation + bool IsConnected(void) { return m_Connected; } + bool Connect(PGLOBAL g); + int CollSize(PGLOBAL g); + void CMgoConn::Project(PGLOBAL g, PSTRG s); + bool MakeCursor(PGLOBAL g); + int ReadNext(PGLOBAL g); + PSZ GetDocument(PGLOBAL g); + void ShowDocument(bson_iter_t *iter, const bson_t *doc, const char *k); + void MakeColumnGroups(PGLOBAL g); + bool DocWrite(PGLOBAL g, PINCOL icp); + int Write(PGLOBAL g); + bool DocDelete(PGLOBAL g); + void Rewind(void); + void Close(void); + PSZ Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b); + void GetColumnValue(PGLOBAL g, PCOL colp); + bool AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd); + static void mongo_init(bool init); + +protected: + // Members + PCPARM Pcg; + mongoc_uri_t *Uri; +//mongoc_client_pool_t *Pool; // Thread safe client pool + mongoc_client_t *Client; // The MongoDB client + mongoc_database_t *Database; // The MongoDB database + mongoc_collection_t *Collection; // The MongoDB collection + mongoc_cursor_t *Cursor; + const bson_t *Document; + bson_t *Query; // MongoDB cursor filter + bson_t *Opts; // MongoDB cursor options + bson_error_t Error; + PINCOL Fpc; // To insert INCOL classes + PFBLOCK fp; + bool m_Connected; + static bool IsInit; +}; // end of class CMgoConn |