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