diff --git a/ekko/manifest/driver.py b/ekko/manifest/driver.py index 4efc16f..c7e66ba 100644 --- a/ekko/manifest/driver.py +++ b/ekko/manifest/driver.py @@ -34,6 +34,12 @@ class ManifestDriver(object): self.conn = None self.manifest_file = manifest_file + def get_metadata(self): + raise NotImplementedError() + + def get_segments(self): + raise NotImplementedError() + def put_metadata(self, metadata): raise NotImplementedError() diff --git a/ekko/manifest/sqlite.py b/ekko/manifest/sqlite.py index 2a641e1..6f42265 100644 --- a/ekko/manifest/sqlite.py +++ b/ekko/manifest/sqlite.py @@ -18,6 +18,7 @@ from contextlib import contextmanager import sqlite3 from ekko.manifest import driver +from ekko.manifest import structure class SQLiteDriver(driver.ManifestDriver): @@ -58,6 +59,30 @@ class SQLiteDriver(driver.ManifestDriver): conn.rollback() self.conn = conn + def get_metadata(self): + with self.get_conn() as conn: + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM metadata") + metadata = dict(cur.fetchall()) + cur.execute("SELECT * FROM backupsets") + backupsets = [b[1] for b in cur.fetchall()] + + return structure.Metadata( + incremental=metadata['incremental'], + sectors=metadata['sectors'], + segment_size=metadata['segment_size'], + timestamp=metadata['timestamp'], + backupset_id=backupsets[-1], + backupsets=backupsets + ) + + def get_segments(self): + with self.get_conn() as conn: + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM segments") + for result in cur: + yield result + def put_segments(self, segments, metadata): with self.get_conn() as conn: with closing(conn.cursor()) as cur: