classStore:@staticmethoddefsanitize_column(column_name:str)->str:returncolumn_name.replace(" ","_")def__init__(self,reset=False,store_location:pathlib.Path=pathlib.Path(os.environ.get("CSM_PARAMETERS_ABSOLUTE_PATH",".")),):self.store_location=pathlib.Path(store_location)/".coal/store"self.store_location.mkdir(parents=True,exist_ok=True)self._tables=dict()self._database_path=self.store_location/"db.sqlite"ifreset:self.reset()self._database=str(self._database_path)defreset(self):ifself._database_path.exists():self._database_path.unlink()defget_table(self,table_name:str)->pyarrow.Table:ifnotself.table_exists(table_name):raiseValueError(T("coal.errors.data.no_table").format(table_name=table_name))returnself.execute_query(f"select * from {table_name}")deftable_exists(self,table_name)->bool:returntable_nameinself.list_tables()defget_table_schema(self,table_name:str)->pyarrow.Schema:ifnotself.table_exists(table_name):raiseValueError(T("coal.errors.data.no_table").format(table_name=table_name))withdbapi.connect(self._database)asconn:returnconn.adbc_get_table_schema(table_name)defadd_table(self,table_name:str,data=pyarrow.Table,replace:bool=False):withdbapi.connect(self._database,autocommit=True)asconn:withconn.cursor()ascurs:rows=curs.adbc_ingest(table_name,data,"replace"ifreplaceelse"create_append")LOGGER.debug(T("coal.common.data_transfer.rows_inserted").format(rows=rows,table_name=table_name))defexecute_query(self,sql_query:str)->pyarrow.Table:batch_size=1024batch_size_increment=1024whileTrue:try:withdbapi.connect(self._database,autocommit=True)asconn:withconn.cursor()ascurs:curs.adbc_statement.set_options(**{"adbc.sqlite.query.batch_rows":str(batch_size)})curs.execute(sql_query)returncurs.fetch_arrow_table()exceptOSError:batch_size+=batch_size_incrementdeflist_tables(self)->list[str]:withdbapi.connect(self._database)asconn:objects=conn.adbc_get_objects(depth="all").read_all()tables=objects["catalog_db_schemas"][0][0]["db_schema_tables"]fortableintables:table_name:pyarrow.StringScalar=table["table_name"]yieldtable_name.as_py()