Example #1
0
 def insertTuple(self, tupleData):
     if self.header and tupleData and self.header.validTuple(tupleData):
         (tupleIndex, start, end) = self.header.nextTupleRange()
         if start and end:
             self.setDirty(True)
             self.getbuffer()[start:end] = tupleData
             return TupleId(self.pageId, tupleIndex)
Example #2
0
 def __next__(self):
     t = self.getTuple(TupleId(self.pageId, self.iterTupleIdx))
     if t:
         self.iterTupleIdx += 1
         return t
     else:
         raise StopIteration
Example #3
0
 def __next__(self):
     
   if self.iterTupleIdx < len(self.header.slotUsed):
       t = self.getTuple(TupleId(self.pageId, self.header.slotUsed[self.iterTupleIdx]));
       self.iterTupleIdx += 1;
       return t;
   else:
     raise StopIteration
Example #4
0
 def __next__(self):
     t = self.getTuple(TupleId(self.pageId, self.iterTupleIdx))
     if t and self.count < len(self.tuples):
         self.iterTupleIdx += self.header.tupleSize
         self.count += 1
         return t
     else:
         raise StopIteration
Example #5
0
 def insertTuple(self, tupleData):
     if self.header.hasFreeTuple():
         # identify the tupleindex and insert range
         (tupleIndex, start, end) = self.header.nextTupleRange()
         self.getbuffer()[start:end] = tupleData
         return TupleId(self.pageId, tupleIndex)
         self.setDirty(True)
     raise ValueError("The page is full!")
Example #6
0
    def insertTuple(self, tupleData):
        tupleRange = self.header.nextTupleRange()

        if tupleRange:
            buffer = self.getbuffer()
            buffer[tupleRange[1]:tupleRange[2]] = tupleData
            self.setDirty(True)

            return TupleId(self.pageId, tupleRange[0])
Example #7
0
 def insertTuple(self, tupleData):
     self.index = self.header.nextFreeTuple()
     if self.index:
         self.getbuffer()[self.index * self.header.tupleSize +
                          self.header.headerSize():(self.index + 1) *
                          self.header.tupleSize +
                          self.header.headerSize()] = tupleData
         return TupleId(self.pageId, self.index)
         self.header.setDirty(True)
Example #8
0
 def insertTuple(self, tupleData):
   if self.header.hasFreeTuple():
     slotIndex = self.header.nextFreeTuple()
     tupleIndex = self.header.offsetOfSlot(slotIndex)
     self.getbuffer()[tupleIndex: (tupleIndex+self.header.tupleSize)] = tupleData
     self.header.setDirty(True)
     return TupleId(self.pageId, slotIndex)
   else:
     raise ValueError("Page is full!")
Example #9
0
  def __next__(self):

    if self.iterTupleIdx < self.header.usedSlots_num:
      t = self.getTuple(TupleId(self.pageId, self.header.usedSlots[self.iterTupleIdx]));

      self.iterTupleIdx += 1
      return t
    else:
      raise StopIteration
Example #10
0
 def deleteTuple(self, tupleId):
   if self.header and tupleId:
     (start, end) = self.header.tupleRange(tupleId)
     if start and end:
       self.setDirty(True)
       shiftLen = self.header.freeSpaceOffset - end
       self.getbuffer()[start:start+shiftLen] = self.getbuffer()[end:end+shiftLen]
       resetTupleIndex = self.header.tupleIndex(self.header.freeSpaceOffset - self.header.tupleSize)
       self.header.resetTuple(TupleId(self.pageId, resetTupleIndex))
Example #11
0
 def insertTuple(self, tupleData):
     if self.header.hasFreeTuple():
         # identify the tupleindex and insert range
         (tupleIndex, start, end) = self.header.nextTupleRange()
         self.getbuffer()[start:end] = tupleData
         return TupleId(self.pageId, tupleIndex)
         self.setDirty(True)
     else:
         raise ValueError("No enough memory for insertion!")
Example #12
0
 def insertTuple(self, tupleData):
     if self.header.hasFreeTuple():
         tupleIndex = self.header.nextFreeTuple()
         self.getbuffer()[tupleIndex:(tupleIndex +
                                      self.header.tupleSize)] = tupleData
         self.setDirty(True)
         return TupleId(self.pageId,
                        self.header.numTuples() - 1)
     else:
         raise ValueError("This page is full!")
Example #13
0
 def insertTuple(self, tupleData):
     self.index = self.header.nextFreeTuple()
     if self.index:
         self.getbuffer()[self.index:self.index +
                          self.header.tupleSize] = tupleData
         self.header.setDirty(True)
         return TupleId(
             self.pageId,
             int((self.index - self.header.headerSize()) /
                 self.header.tupleSize))
Example #14
0
    def __next__(self):
        if self.it < len(self.filledSlots):
            self.iterSlot = self.filledSlots[self.it]
            t = self.getTuple(TupleId(self.pageId, self.iterSlot))

            self.it += 1
            return t

        else:
            raise StopIteration
Example #15
0
    def insertTuple(self, tupleData):

        if self.header.hasFreeTuple():
            (tupleIndex, start, end) = self.header.nextTupleRange()
            self.buffer[start:end] = tupleData
            tId = TupleId(self.pageId, tupleIndex)
            self.tuples.append(tId)
            return tId
        else:
            return None
Example #16
0
 def insertTuple(self, tupleData):
     if self.header.hasFreeTuple():
         (slot, tupleStart, tupleEnd) = self.header.nextTupleRange(
         )  # Slot will be 'None' When there is no more space
         self.buffer[tupleStart:tupleEnd] = tupleData
         self.header.setSlot(slot, 1)
         tId = TupleId(self.pageId, slot)
         return tId
     else:
         return None
Example #17
0
 def __next__(self):
     while self.iterTupleIdx < self.header.numSlots and not self.header.getSlot(
             self.iterTupleIdx):
         self.iterTupleIdx += 1
     if self.iterTupleIdx < self.header.numSlots and self.header.getSlot(
             self.iterTupleIdx):
         self.iterTupleIdx += 1
         return self.getTuple(TupleId(self.pageId, self.iterTupleIdx - 1))
     else:
         raise StopIteration
  def __next__(self):
    t = self.getTuple(TupleId(self.pageId, self.iterTupleIdx))
    if t:
      nextIdx = self.header.slotBuffer.find('0b1', self.iterTupleIdx + 1)
      if nextIdx == ():
        self.iterTupleIdx = -1
      else:
        self.iterTupleIdx = nextIdx[0]

      return t
    else:
      raise StopIteration
Example #19
0
  def lookupByIndex(self, indexId, keyData):
    result = []
    indexDb = self.getIndex(indexId)
    if indexDb is not None:
      crsr = indexDb.cursor()

      data = crsr.set(keyData)
      while data and data[0] == keyData:
        result.append(TupleId.unpack(data[1]))
        data = crsr.next()

      crsr.close()
      return iter(result)
Example #20
0
    def lookupByIndex(self, indexId, keyData):
        result = []
        indexDb = self.getIndex(indexId)
        if indexDb is not None:
            crsr = indexDb.cursor()

            data = crsr.set(keyData)
            while data and data[0] == keyData:
                result.append(TupleId.unpack(data[1]))
                data = crsr.next()

            crsr.close()
            return iter(result)
Example #21
0
    def insertTuple(self, tupleData):
        if not self.header.hasFreeTuple():
            return None

        tupleOffset = self.header.nextFreeTuple()
        tupleIndex = (tupleOffset - self.header.size) // self.header.tupleSize
        tupleID = TupleId(self.pageId, tupleIndex)

        view = self.getbuffer()
        view[tupleOffset:tupleOffset + self.header.tupleSize] = tupleData

        self.setDirty(0b1)
        return tupleID
Example #22
0
    def __next__(self):
        (start, end) = (None, None)
        while (start is None or end is None
               ) and self.iterTupleIdx < self.page.header.maxTuples():
            tId = TupleId(self.page.pageId, self.iterTupleIdx)
            (start, end) = self.page.header.tupleRange(tId)
            self.iterTupleIdx += 1

        if start and end:
            t = self.page.getTuple(tId)
            if t:
                return t

        raise StopIteration
Example #23
0
    def deleteTuple(self, tupleId):
        # If I check the validation of tupleId, one of the unittest fails, why?
        buffer = self.getbuffer()
        offset = self.header.headerSize(
        ) + tupleId.tupleIndex * self.header.tupleSize
        subsequentLength = self.header.freeSpaceOffset - (
            offset + self.header.tupleSize)

        buffer[offset:offset +
               subsequentLength] = buffer[offset + self.header.tupleSize:self.
                                          header.freeSpaceOffset]
        self.clearTuple(TupleId(self.pageId, self.header.numTuples() - 1))
        self.setDirty(True)

        self.header.freeSpaceOffset -= self.header.tupleSize
Example #24
0
 def insertTuple(self, tupleData):
     
   if self.header.hasFreeTuple():
       slotIndex = self.header.nextFreeTuple();
       start     = self.header.offsetOfSlot(slotIndex);
       tupleSt   = 0;
       
       for i in range(0, len(self.header.schemaSizes)):
           self.getbuffer()[start[i] : (start[i] + self.header.schemaSizes[i])] = \
           tupleData[ tupleSt : (tupleSt + self.header.schemaSizes[i]) ];
           tupleSt += self.header.schemaSizes[i];
           
       self.header.setDirty( True );
       return TupleId(self.pageId, slotIndex);
   else:
       raise ValueError("This page is full!");
Example #25
0
    def deleteTuple(self, tupleId):
        tupleOff = (tupleId.tupleIndex *
                    self.header.tupleSize) + self.header.size

        view = self.getbuffer()

        tuplesToShift = self.header.numTuples() - tupleId.tupleIndex - 1

        for i in range(tupleOff,
                       tupleOff + (tuplesToShift * self.header.tupleSize)):
            view[i:i + 1] = view[i + self.header.tupleSize:i +
                                 self.header.tupleSize + 1]

        toClearID = TupleId(self.pageId, self.header.numTuples() - 1)
        self.clearTuple(toClearID)

        self.header.freeSpaceOffset -= self.header.tupleSize

        self.setDirty(0b1)
Example #26
0
    def insertTuple(self, tupleData):
        bitTuple = self.header.bitmap.find('0b0')

        if bitTuple == ():
            return None

        tupleID = TupleId(self.pageId, bitTuple[0])

        view = self.getbuffer()

        offset = (bitTuple[0] * self.header.tupleSize) + self.header.size

        if self.header.pageCapacity - offset < 8:
            return None

        view[offset:offset + self.header.tupleSize] = tupleData
        self.header.bitmap[bitTuple[0]] = '0b1'

        self.header.setDirty(0b1)

        return tupleID
Example #27
0
    def insertTuple(self, tupleData):
        # page = self.availablePage()
        # page.insertTuple(tupleData)

        # # need to make sure heap readjusts, and has a custom compare
        # # have tuple inserted into heap with first element being
        # # what should be compared, in this case #num tuple free space

        # still need to write to disk the changed page or maybe not?

        pId = self.availablePage()
        page = self.bufferPool.getPage(pId)

        tId = TupleId(pId, page.header.numTuples())
        page.insertTuple(tupleData)

        if page.header.hasFreeTuple() == False:
            del self.freePages[0]
        # raise NotImplementedError
        self.bufferPool.updateBuffer(pId, page.pack())
        return tId
Example #28
0
 def lookupByKey(self, relId, keyData):
   indexDb = self.getPrimaryIndex(relId)
   if indexDb:
     return TupleId.unpack(indexDb.get(keyData))
Example #29
0
 def tupleId(self, tupleIndex):
   return TupleId(self.pageId, tupleIndex);
Example #30
0
 def lookupByKey(self, relId, keyData):
     indexDb = self.getPrimaryIndex(relId)
     if indexDb:
         return TupleId.unpack(indexDb.get(keyData))