diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-11 12:45:44 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2019-07-15 20:18:02 -0400 |
commit | 67c9a07c64210f66c1e3ef53b6ce1e51781193c4 (patch) | |
tree | d752bbb177edece0e726d87a5109f70bf7b2999a /coverage/sqldata.py | |
parent | 04a675ab3b115cd7b6d197341cb4a78087534773 (diff) | |
download | python-coveragepy-git-67c9a07c64210f66c1e3ef53b6ce1e51781193c4.tar.gz |
CoverageData.dumps and loads for serialization
Diffstat (limited to 'coverage/sqldata.py')
-rw-r--r-- | coverage/sqldata.py | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 998abd64..a9ba0d41 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -188,12 +188,9 @@ class CoverageData(SimpleReprMixin): def _create_db(self): if self._debug.should('dataio'): self._debug.write("Creating data file {!r}".format(self._filename)) - self._dbs[get_thread_id()] = SqliteDb(self._filename, self._debug) - with self._dbs[get_thread_id()] as db: - for stmt in SCHEMA.split(';'): - stmt = stmt.strip() - if stmt: - db.execute(stmt) + self._dbs[get_thread_id()] = db = SqliteDb(self._filename, self._debug) + with db: + db.executescript(SCHEMA) db.execute("insert into coverage_schema (version) values (?)", (SCHEMA_VERSION,)) db.execute( "insert into meta (has_lines, has_arcs, sys_argv) values (?, ?, ?)", @@ -203,8 +200,8 @@ class CoverageData(SimpleReprMixin): def _open_db(self): if self._debug.should('dataio'): self._debug.write("Opening data file {!r}".format(self._filename)) - self._dbs[get_thread_id()] = SqliteDb(self._filename, self._debug) - with self._dbs[get_thread_id()] as db: + self._dbs[get_thread_id()] = db = SqliteDb(self._filename, self._debug) + with db: try: schema_version, = db.execute("select version from coverage_schema").fetchone() except Exception as exc: @@ -254,6 +251,17 @@ class CoverageData(SimpleReprMixin): with self._connect() as con: self._debug.write(con.dump()) + def dumps(self): + with self._connect() as con: + return con.dump() + + def loads(self, data): + if self._debug.should('dataio'): + self._debug.write("Loading data into data file {!r}".format(self._filename)) + self._dbs[get_thread_id()] = db = SqliteDb(self._filename, self._debug) + with db: + db.executescript(data) + def _file_id(self, filename, add=False): """Get the file id for `filename`. @@ -800,6 +808,11 @@ class SqliteDb(SimpleReprMixin): self.debug.write("Executing many {!r} with {} rows".format(sql, len(data))) return self.con.executemany(sql, data) + def executescript(self, script): + if self.debug: + self.debug.write("Executing script with {} chars".format(len(script))) + self.con.executescript(script) + def dump(self): # pragma: debugging """Return a multi-line string, the dump of the database.""" return "\n".join(self.con.iterdump()) |