/************ JMONGO FAM C++ Program Source Code File (.CPP) ***********/ /* PROGRAM NAME: jmgfam.cpp */ /* ------------- */ /* Version 1.2 */ /* */ /* COPYRIGHT: */ /* ---------- */ /* (C) Copyright to the author Olivier BERTRAND 20017 - 2021 */ /* */ /* WHAT THIS PROGRAM DOES: */ /* ----------------------- */ /* This program are the Java MongoDB access method classes. */ /* */ /***********************************************************************/
/***********************************************************************/ /* Include relevant sections of the System header files. */ /***********************************************************************/ #include"my_global.h" #ifdefined(_WIN32) //#include <io.h> //#include <fcntl.h> //#include <errno.h> #ifdefined(__BORLANDC__) #define __MFC_COMPAT__ // To define min/max as macro #endif// __BORLANDC__ //#include <windows.h> #else// !_WIN32 #ifdefined(UNIX) || defined(UNIV_LINUX) //#include <errno.h> #include <unistd.h> //#if !defined(sun) // Sun has the ftruncate fnc. //#define USETEMP // Force copy mode for DELETE //#endif // !sun #else// !UNIX //#include <io.h> #endif// !UNIX //#include <fcntl.h> #endif// !_WIN32
/***********************************************************************/ /* Include application header files: */ /* global.h is header containing all global declarations. */ /* plgdbsem.h is header containing the DB application declarations. */ /* filamtxt.h is header containing the file AM classes declarations. */ /***********************************************************************/ #include"global.h" #include"plgdbsem.h" #include"reldef.h" #include"filamtxt.h" #include"tabdos.h" #ifdefined(BSON_SUPPORT) #include"tabbson.h" #else #include"tabjson.h" #endif// BSON_SUPPORT #include"jmgfam.h"
/***********************************************************************/ /* Reset: reset position values at the beginning of file. */ /***********************************************************************/ void JMGFAM::Reset(void)
{
TXTFAM::Reset();
Fpos = Tpos = Spos = 0;
} // end of Reset
/***********************************************************************/ /* MGO GetFileLength: returns file size in number of bytes. */ /***********************************************************************/ int JMGFAM::GetFileLength(PGLOBAL g)
{ return0;
} // end of GetFileLength
/***********************************************************************/ /* Cardinality: returns table cardinality in number of rows. */ /* This function can be called with a null argument to test the */ /* availability of Cardinality implementation (1 yes, 0 no). */ /***********************************************************************/ int JMGFAM::Cardinality(PGLOBAL g)
{ if (!g) return1;
return (!Init(g)) ? Jcp->CollSize(g) : 0;
} // end of Cardinality
/***********************************************************************/ /* Note: This function is not really implemented yet. */ /***********************************************************************/ int JMGFAM::MaxBlkSize(PGLOBAL, int s)
{ return s;
} // end of MaxBlkSize
/*********************************************************************/ /* Open an JDBC connection for this table. */ /* Note: this may not be the proper way to do. Perhaps it is better */ /* to test whether a connection is already open for this datasource */ /* and if so to allocate just a new result set. But this only for */ /* drivers allowing concurency in getting results ??? */ /*********************************************************************/ if (!Jcp)
Jcp = new(g) JMgoConn(g, Coll_name, Wrapname); elseif (Jcp->IsOpen())
Jcp->Close();
if (Jcp->Connect(&Ops)) returntrue;
Done = true; returnfalse;
} // end of Init
/***********************************************************************/ /* OpenTableFile: Open a MongoDB table. */ /***********************************************************************/ bool JMGFAM::OpenTableFile(PGLOBAL g)
{
Mode = Tdbp->GetMode();
if (Pipe && Mode != MODE_READ) {
strcpy(g->Message, "Pipeline tables are read only"); returntrue;
} // endif Pipe
if (Init(g)) returntrue;
if (Jcp->GetMethodId(g, Mode)) returntrue;
if (Mode == MODE_DELETE && !Tdbp->GetNext()) { // Delete all documents if (!Jcp->MakeCursor(g, Tdbp, "all", Filter, false)) if (Jcp->DocDelete(g, true) == RC_OK) returnfalse;
if (Mode != MODE_UPDATE) return Jcp->MakeCursor(g, Tdbp, Options, Filter, Pipe);
returnfalse;
} // end of OpenTableFile
/***********************************************************************/ /* GetRowID: return the RowID of last read record. */ /***********************************************************************/ int JMGFAM::GetRowID(void)
{ return Rows;
} // end of GetRowID
/***********************************************************************/ /* GetPos: return the position of last read record. */ /***********************************************************************/ int JMGFAM::GetPos(void)
{ return Fpos;
} // end of GetPos
/***********************************************************************/ /* GetNextPos: return the position of next record. */ /***********************************************************************/ int JMGFAM::GetNextPos(void)
{ return Fpos; // TODO
} // end of GetNextPos
/***********************************************************************/ /* SetPos: Replace the table at the specified position. */ /***********************************************************************/ bool JMGFAM::SetPos(PGLOBAL g, int pos)
{
Fpos = pos;
Placed = true; returnfalse;
} // end of SetPos
/***********************************************************************/ /* Record file position in case of UPDATE or DELETE. */ /***********************************************************************/ bool JMGFAM::RecordPos(PGLOBAL g)
{
strcpy(g->Message, "JMGFAM::RecordPos NIY"); returntrue;
} // end of RecordPos
/***********************************************************************/ /* Initialize Fpos and the current position for indexed DELETE. */ /***********************************************************************/ int JMGFAM::InitDelete(PGLOBAL g, int fpos, int spos)
{
strcpy(g->Message, "JMGFAM::InitDelete NIY"); return RC_FX;
} // end of InitDelete
/***********************************************************************/ /* Skip one record in file. */ /***********************************************************************/ int JMGFAM::SkipRecord(PGLOBAL g, bool header)
{ return RC_OK; // Dummy
} // end of SkipRecord
/***********************************************************************/ /* ReadBuffer: Get next document from a collection. */ /***********************************************************************/ int JMGFAM::ReadBuffer(PGLOBAL g)
{ int rc = RC_FX;
if (!Curpos && Mode == MODE_UPDATE) if (Jcp->MakeCursor(g, Tdbp, Options, Filter, Pipe)) return RC_FX;
/***********************************************************************/ /* Data Base delete line routine for MGO and BLK access methods. */ /***********************************************************************/ int JMGFAM::DeleteRecords(PGLOBAL g, int irc)
{ return (irc == RC_OK) ? WriteBuffer(g) : RC_OK;
} // end of DeleteRecords
/***********************************************************************/ /* Table file close routine for MGO access method. */ /***********************************************************************/ void JMGFAM::CloseTableFile(PGLOBAL g, bool)
{
Jcp->Close();
Done = false;
} // end of CloseTableFile
/***********************************************************************/ /* Rewind routine for MGO access method. */ /***********************************************************************/ void JMGFAM::Rewind(void)
{
Jcp->Rewind();
} // end of Rewind
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.