Exemple #1
0
 def get(self, database, table):
     if not os.path.exists(self.db_file):
         return None
     table = to_bytes(table)
     database = to_bytes(database)
     meta = None
     with open(self.db_file, "rb") as f:
         content = f.read(ctypes.sizeof(MetaStruct))
         while content:
             meta = MetaStruct.from_buffer_copy(content)
             if meta.database == database and meta.table == table:
                 break
             content = f.read(ctypes.sizeof(MetaStruct))
             meta = None
     return meta
Exemple #2
0
    def create(self, database, table, primary_key, columns):
        table = to_bytes(table)
        columns = to_bytes(columns)
        database = to_bytes(database)
        primary_key = to_bytes(primary_key)

        meta = MetaStruct()
        meta.database = database
        meta.table = table
        meta.primary_key = primary_key
        meta.columns = columns
        meta.auto_pk_value = 0
        with open(self.db_file, "ab+") as f:
            meta.offset = f.tell()
            f.write(bytes(meta))
Exemple #3
0
 def find_by_index(self, value):
     value = to_bytes(value)
     index = self.index.get(value=value)
     if not index:
         print("index not found.")
         return
     with open(self.db_file, "rb") as f:
         f.seek(index.data_offset)
         content = f.read(ctypes.sizeof(BucketStruct))
     bucket = BucketStruct.from_buffer_copy(content)
     return bucket
Exemple #4
0
 def find(self, name):
     name = to_bytes(name)
     bucket = None
     with open(self.db_file, "rb") as f:
         content = f.read(ctypes.sizeof(BucketStruct))
         while content:
             bucket = BucketStruct.from_buffer_copy(content)
             if bucket.name == name:
                 break
             content = f.read(ctypes.sizeof(BucketStruct))
             bucket = None
     return bucket
Exemple #5
0
 def add(self, name, public):
     pk_value = self.meta.get_next_pk(database=self.database,
                                      table=self.table)
     bucket = BucketStruct()
     bucket.id = pk_value
     bucket.name = to_bytes(name)
     bucket.public = public
     with open(self.db_file, "ab") as f:
         data_offset = f.tell()
         f.write(bytes(bucket))
     self.index.create(value=pk_value, data_offset=data_offset)
     return bucket
Exemple #6
0
 def create(self, value, data_offset):
     # key      = to_bytes(key)
     value = to_bytes(value)
     # table    = to_bytes(table)
     # database = to_bytes(database)
     index = IndexStruct()
     # index.database = self.database
     # index.table = self.table
     # index.key = self.key
     index.value = value
     index.offset = 0
     index.data_offset = data_offset
     self.btree.add(index)
     self.btree.saveTree()