diff options
Diffstat (limited to 'bitbake/lib/hashserv/sqlite.py')
-rw-r--r-- | bitbake/lib/hashserv/sqlite.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/sqlite.py b/bitbake/lib/hashserv/sqlite.py index 414ee8ffb8..dfdccbbaa0 100644 --- a/bitbake/lib/hashserv/sqlite.py +++ b/bitbake/lib/hashserv/sqlite.py | |||
@@ -120,6 +120,18 @@ class Database(object): | |||
120 | self.db = sqlite3.connect(self.dbname) | 120 | self.db = sqlite3.connect(self.dbname) |
121 | self.db.row_factory = sqlite3.Row | 121 | self.db.row_factory = sqlite3.Row |
122 | 122 | ||
123 | with closing(self.db.cursor()) as cursor: | ||
124 | cursor.execute("SELECT sqlite_version()") | ||
125 | |||
126 | version = [] | ||
127 | for v in cursor.fetchone()[0].split("."): | ||
128 | try: | ||
129 | version.append(int(v)) | ||
130 | except ValueError: | ||
131 | version.append(v) | ||
132 | |||
133 | self.sqlite_version = tuple(version) | ||
134 | |||
123 | async def __aenter__(self): | 135 | async def __aenter__(self): |
124 | return self | 136 | return self |
125 | 137 | ||
@@ -362,3 +374,28 @@ class Database(object): | |||
362 | ) | 374 | ) |
363 | self.db.commit() | 375 | self.db.commit() |
364 | return cursor.rowcount != 0 | 376 | return cursor.rowcount != 0 |
377 | |||
378 | async def get_usage(self): | ||
379 | usage = {} | ||
380 | with closing(self.db.cursor()) as cursor: | ||
381 | if self.sqlite_version >= (3, 33): | ||
382 | table_name = "sqlite_schema" | ||
383 | else: | ||
384 | table_name = "sqlite_master" | ||
385 | |||
386 | cursor.execute( | ||
387 | f""" | ||
388 | SELECT name FROM {table_name} WHERE type = 'table' AND name NOT LIKE 'sqlite_%' | ||
389 | """ | ||
390 | ) | ||
391 | for row in cursor.fetchall(): | ||
392 | cursor.execute( | ||
393 | """ | ||
394 | SELECT COUNT() FROM %s | ||
395 | """ | ||
396 | % row["name"], | ||
397 | ) | ||
398 | usage[row["name"]] = { | ||
399 | "rows": cursor.fetchone()[0], | ||
400 | } | ||
401 | return usage | ||