summaryrefslogtreecommitdiff
path: root/coverage/sqldata.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2019-07-11 12:45:44 -0400
committerNed Batchelder <ned@nedbatchelder.com>2019-07-15 20:18:02 -0400
commit67c9a07c64210f66c1e3ef53b6ce1e51781193c4 (patch)
treed752bbb177edece0e726d87a5109f70bf7b2999a /coverage/sqldata.py
parent04a675ab3b115cd7b6d197341cb4a78087534773 (diff)
downloadpython-coveragepy-git-67c9a07c64210f66c1e3ef53b6ce1e51781193c4.tar.gz
CoverageData.dumps and loads for serialization
Diffstat (limited to 'coverage/sqldata.py')
-rw-r--r--coverage/sqldata.py29
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())