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
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))
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
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
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
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()