libs.functions.tools.vacuum

libs/functions/tools/vacuum.py

 1"""
 2libs/functions/tools/vacuum.py
 3"""
 4
 5import logging
 6import os
 7from contextlib import closing
 8
 9import libs.global_value as g
10from libs.data import modify
11from libs.utils import dbutil
12
13
14def main():
15    """vacuum実行"""
16    modify.db_backup()
17    before_size = os.path.getsize(g.cfg.db.database_file)
18
19    with closing(dbutil.get_connection()) as cur:
20        before_page = db_info(cur, "page_count")
21        before_freelist = db_info(cur, "freelist_count")
22        cur.execute("vacuum;")
23        after_page = db_info(cur, "page_count")
24        after_freelist = db_info(cur, "freelist_count")
25
26    after_size = os.path.getsize(g.cfg.db.database_file)
27
28    logging.notice("file size: %s -> %s", before_size, after_size)  # type: ignore
29    logging.notice("page_count: %s -> %s", before_page, after_page)  # type: ignore
30    logging.notice("freelist_count: %s -> %s", before_freelist, after_freelist)  # type: ignore
31
32
33def db_info(cur, kind):
34    """page_countを取得
35
36    Args:
37        cur (sqlite3.Cursor): カーソルオブジェクト
38        kind (str): 取得する内容
39
40    Returns:
41        int: page_count / freelist_count
42    """
43
44    match kind:
45        case "page_count":
46            count = cur.execute("pragma page_count;").fetchone()[0]
47        case "freelist_count":
48            count = cur.execute("pragma freelist_count;").fetchone()[0]
49        case _:
50            count = 0
51
52    return count
def main():
15def main():
16    """vacuum実行"""
17    modify.db_backup()
18    before_size = os.path.getsize(g.cfg.db.database_file)
19
20    with closing(dbutil.get_connection()) as cur:
21        before_page = db_info(cur, "page_count")
22        before_freelist = db_info(cur, "freelist_count")
23        cur.execute("vacuum;")
24        after_page = db_info(cur, "page_count")
25        after_freelist = db_info(cur, "freelist_count")
26
27    after_size = os.path.getsize(g.cfg.db.database_file)
28
29    logging.notice("file size: %s -> %s", before_size, after_size)  # type: ignore
30    logging.notice("page_count: %s -> %s", before_page, after_page)  # type: ignore
31    logging.notice("freelist_count: %s -> %s", before_freelist, after_freelist)  # type: ignore

vacuum実行

def db_info(cur, kind):
34def db_info(cur, kind):
35    """page_countを取得
36
37    Args:
38        cur (sqlite3.Cursor): カーソルオブジェクト
39        kind (str): 取得する内容
40
41    Returns:
42        int: page_count / freelist_count
43    """
44
45    match kind:
46        case "page_count":
47            count = cur.execute("pragma page_count;").fetchone()[0]
48        case "freelist_count":
49            count = cur.execute("pragma freelist_count;").fetchone()[0]
50        case _:
51            count = 0
52
53    return count

page_countを取得

Arguments:
  • cur (sqlite3.Cursor): カーソルオブジェクト
  • kind (str): 取得する内容
Returns:

int: page_count / freelist_count