00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "eyedb_p.h"
00027 #include "OQLBE.h"
00028 #include "IteratorBE.h"
00029 #include "CollectionBE.h"
00030 #include "IteratorBEEngine.h"
00031 #include "BEQueue.h"
00032
00033 namespace eyedb {
00034
00035 LinkedList *IteratorBE::def_cl_list;
00036
00037 IteratorBE::IteratorBE(Database *_db)
00038 {
00039 collbe = 0;
00040 schinfo = 0;
00041 qiter = 0;
00042 }
00043
00044 IteratorBE::IteratorBE(Database *db, const Attribute *agr, int ind,
00045 Data start, Data end, Bool sexcl,
00046 Bool eexcl, int x_size)
00047 {
00048 qiter = new IteratorBEEngineAttribute(db, agr, ind, start, end,
00049 sexcl, eexcl, x_size);
00050 status = qiter->getStatus();
00051 if (status == Success)
00052 qid = db->getBEQueue()->addIterator(this);
00053
00054 collbe = 0;
00055 schinfo = 0;
00056 }
00057
00058 IteratorBE::IteratorBE(CollectionBE *_collbe, Bool index)
00059 {
00060 collbe = _collbe;
00061 qiter = new IteratorBEEngineCollection(collbe, index);
00062
00063 status = qiter->getStatus();
00064 if (status == Success)
00065 qid = collbe->getDatabase()->getBEQueue()->addIterator(this);
00066 schinfo = 0;
00067 }
00068
00069 Status IteratorBE::getStatus() const
00070 {
00071 return status;
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 Status IteratorBE::scanNext(int wanted, int *found, IteratorAtom *atom_array)
00085 {
00086 IDB_CHECK_INTR();
00087
00088 if (qiter)
00089 return qiter->scanNext(wanted, found, atom_array);
00090
00091 return Success;
00092 }
00093
00094 int IteratorBE::getQid() const
00095 {
00096 return qid;
00097 }
00098
00099 IteratorBE::~IteratorBE()
00100 {
00101 delete qiter;
00102 if (collbe && !collbe->isLocked())
00103 delete collbe;
00104 delete schinfo;
00105 }
00106 }