i dZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z GddZ e ZdS#e$r ZdZe jdeYdZ[dSdZ[wwxYw) u Gestore connessione dati — DuckDB in-memory con VIEW sui Parquet DataHub. db_user.db (SQLite) mantenuto separatamente per scritture utente. N)Path)logger) get_app_root load_configceZdZdZejZfdZdZde fdZ d de de j fdZd de d efd Zd Zed ZxZS)DatabaseManagerNc|jX|j5|j2t||_d|j_dddn #1swxYwY|jS)NF) _instance_locksuper__new__ _initialized)cls __class__s 0C:\PYTHON\MyICR_Suite\app\database\connection.pyr zDatabaseManager.__new__s =  7 7=($)GGOOC$8$8CM16CM. 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7}s:AAAc "|jrdSt}t}||ddz }||ddz }t j|_|||j ddtjt|d|_ tjd tt!|d d |d|_dS) N parquet_dirzlocal_db/parquet databasesuserT)parentsexist_okF)check_same_threadzDatabaseManager: *.parquetz Parquet registrati da )rrrgetduckdbconnectconn_register_parquet_viewsparentmkdirsqlite3str _user_connrinfolenlistglob)selfconfigapp_rootr user_db_paths r__init__zDatabaseManager.__init__s    F>>M;M!N!NN &"5f"== N$$  $$[111 !!$!>>>!/#l*;*;uUUU vD1A1A+1N1N,O,O(P(Pvvitvvwww rc8|stjd|dSt|dD]I}|j}|jd|d|dtjd|d|j JdS) z >AI I  SiSSaSSS T T T L >r-queryreturnc |r-|j||S|j|S#t$r }t jd|d|d}~wwxYw)z=Esegue una query SELECT su DuckDB e restituisce un DataFrame.zErrore query DuckDB:  Query: N)rr4df Exceptionrerror)r(r9paramses r execute_queryzDatabaseManager.execute_query;s  =y((77::<<<9$$U++..00 0    LDDDUDD E E E  s.A+A B'BBr@c2 |j}|||pd|j|jS#t $r9}|jtjd|d|d}~wwxYw)z,Esegue una scrittura su db_user.db (SQLite).zErrore write SQLite: r<N) r#cursorr4commit lastrowidr>rollbackrr?)r(r9r@rErAs r execute_writezDatabaseManager.execute_writeEs _++--F NN5&,B / / / O " " $ $ $# #    O $ $ & & & LDDDUDD E E E  sAA B4BBc|jr |jd|_|jr |jd|_tjddS)NzDatabaseManager chiuso.)rcloser#rr$)r(s rrKzDatabaseManager.closeQsa 9  IOO   DI ? # O ! ! # # #"DO -.....r-c|SNrD)rs r get_instancezDatabaseManager.get_instanceZs suu r-rM)__name__ __module__ __qualname__r threadingLockr r r,rrr"pd DataFramerBtuplerIrK classmethodrN __classcell__)rs@rrrsI IN  E!!!*>4>>>>3   3     ///[r-rz#DatabaseManager non inizializzato: )__doc__r!rRrpandasrTpathlibrlogururapp.config_loaderrrr db_managerr>rAcriticalrDr-rr`s 77777777LLLLLLLL^? ""JJJ???JFO=!==>>>>>>>>>?s AA&A!!A&