+
    5)i"                         ^ RI t ^ RIt^ RIHtHtHtHtHt ^ RIH	t	H
t
 ^ RIHt ]P                  ! ]4      t ! R R4      tR# )    N)DictListOptionalAnyUnion)ThreadPoolExecutoras_completed)
MySQLModelc                      a  ] tR t^
t o RtR tRV 3R lR lltV 3R lR ltV 3R lR	 ltRV 3R
 lR llt	V 3R lR lt
V 3R lR ltR tRtV tR# )DatabaseServicez;Service for handling multi-database operations in flask-apic                    \        4       V n        \        ^
R7      V n        \        P
                  ! \         RV P                  P                   24      V n        R# )
   max_workers.N)	r
   mysqlr   executorlogging	getLogger__name__	__class__logger)selfs   &JD:\Projects\python\client-ideal-oms_pyapi\app\services\database_service.py__init__DatabaseService.__init__   s?    \
*r:''8*Adnn6M6M5N(OP    Nc                <   < V ^8  d   QhRS[ RS[RS[S[,          /# )   queryparamsreturn)strtupler   r   )format__classdict__s   "r   __annotate__DatabaseService.__annotate__   s+     @ @ @e @tDz @r   c                     V P                   P                  R4       V P                  P                  W4      #   \         d:   pT P                   P                  RT 24       RR\        T4       2/.u Rp?# Rp?ii ; i)zExecute MySQL queryzExecuting MySQL queryzMySQL query error: errorzMySQL query failed: N)r   debugr   execute_query	Exceptionr*   r#   )r   r    r!   es   &&& r   execute_mysql_query#DatabaseService.execute_mysql_query   sv    	@KK 57::++E:: 	@KK 3A378 4SVH=>??	@s   58 A<.A71A<7A<c                \   < V ^8  d   QhRS[ S[,          RS[S[S[ S[,          3,          /# r   queriesr"   r   r   r#   )r%   r&   s   "r   r'   r(      s-     " "4: "$sDQUJBW "r   c           	     P  "   \         P                  ! 4       p. pV P                  P                  R\	        V4       R24       V F  pVP                  R4      pVP                  RV R24      pVR8X  dH   VP                  V P                  V P                  VP                  R4      VP                  R4      4      pM V P                  P                  R	V 24       K  VP                  Wg34       K  	  / pV F1  w  rg VG R
j  xL
 W&   V P                  P                  RV R24       K3  	  V P                  P                  R\	        V4       R24       V#  LS  \         dC   p	T P                  P                  RT RT	 24       RRT R\        T	4       2/.Y&    R
p	?	K  R
p	?	ii ; i5i)z'Execute multiple queries asynchronously
Executing z queries asynchronouslydatabaseid_queryr   r    r!   Unknown database type: NzAsync query  completed successfully	 failed: r*   Query 
Completed z async queries)asyncioget_event_loopr   infolengetrun_in_executorr   r/   warningappendr+   r-   r*   r#   )
r   r3   looptasksquery_configdb_typequery_idtaskresultsr.   s
   &&        r   execute_queries_async%DatabaseService.execute_queries_async   s    %%':c'l^3JKL#L"&&z2G#''	.@AH'!++MM,, $$W- $$X.	 ##&=gY$GHLL()* $" #NHV*.J!!!L
:Q"RS $ 	:c'l^>BC %/ V!!L
)A3"GH&-z3q6(/S%T$U!VsB   C8F&;E E%E&.F&EF#!7FF&F##F&c                \   < V ^8  d   QhRS[ S[,          RS[S[S[ S[,          3,          /# r2   r4   )r%   r&   s   "r   r'   r(   ?   s,     ' 'T
 'tCdO?T 'r   c                   / p/ pV P                   P                  R\        V4       R24       \        \	        \        V4      ^
4      R7      ;_uu_ 4       pV F  pVP                  R4      pVP                  RV R24      pVR8X  d=   VP                  V P                  VP                  R4      VP                  R	4      4      pM V P                   P                  R
V 24       K  WV&   K  	  VP                  4        F9  w  rx VP                  ^<R7      W7&   V P                   P                  RV R24       K;  	  RRR4       V P                   P                  R\        V4       R24       V#   \         dC   p	T P                   P                  RT RT	 24       RRT R\        T	4       2/.Y7&    Rp	?	K  Rp	?	ii ; i  + '       g   i     L; i)z2Execute multiple queries in parallel using threadsr6   z queries in parallelr   r7   r8   r9   r   r    r!   r:   )timeoutzParallel query r;   r<   r*   r=   Nr>   z parallel queries)r   rA   rB   r   minrC   submitr/   rE   itemsresultr+   r-   r*   r#   )
r   r3   futuresrM   r   rI   rJ   rK   futurer.   s
   &&        r   execute_parallel_queries(DatabaseService.execute_parallel_queries?   s   :c'l^3GHICGb,ABBh '&**:6'++DWIV2DEg%%__00$((1$((2F KK''*A'(KL$*! !(" %,MMO 	(.b(AG%KK%%)(3JK %4' C> 	:c'l^3DEF ! KK%%z1#&NO F8*Ic!fX"FG)G%3 CBs7   B,F:3E*4F:*F7	57F2	,F:2F7	7F::G
	c                r   < V ^8  d   QhRS[ S[S[S[ ,          3,          RS[S[ ,          RS[S[ ,          /# r   datasetsjoin_configr"   )r   r#   r   r   )r%   r&   s   "r   r'   r(   h   s?     'E 'ES$t*_-'E<DTN'E	d'Er   c                v    V'       g   V P                   P                  R4       . # VP                  4        UUu/ uF1  w  r4V'       g   K  \        V4      ^8X  d   RV^ ,          9   d   K/  W4bK3  	  pppV'       g   V P                   P                  R4       . # \        V4      ^8X  d<   V P                   P	                  R4       \        VP                  4       4      ^ ,          # V'       d-   V P                   P	                  R4       V P                  WR4      # V P                   P	                  R4       . pVP                  4        F#  w  rxV F  p	WyR&   VP                  V	4       K  	  K%  	  V# u uppi   \         d:   p
T P                   P                  RT
 24       RR	\        T
4       2/.u R
p
?
# R
p
?
ii ; i)z$Combine data from multiple databasesz$No datasets provided for combinationr*   z.No valid datasets found after filtering errorszSingle dataset, returning as-isz#Joining datasets with configurationzConcatenating datasets_sourcezError combining data: zData combination failed: N)r   rE   rU   rB   rA   listvalues_join_datasetsrF   r-   r*   r#   )r   r]   r^   kvvalid_datasetscombineddataset_namedataitemr.   s   &&&        r   combine_dataDatabaseService.combine_datah   s   #	E##$JK	
 %NN,,DA !!fkg1o ,   "##$TU	>"a'  !BCN1134Q77  !FG**>GG   !9:*8*>*>*@&L $*6Y - !% +A  36  	EKK 6qc:; 9#a&BCDD	Es^   E4 E4 E4 E.E.+E.1'E4 A
E4 $E4 ,+E4 AE4 .E4 4F8?.F3-F83F8c                b   < V ^8  d   QhRS[ S[S[S[ ,          3,          RS[ RS[S[ ,          /# r\   )r   r#   r   )r%   r&   s   "r   r'   r(      s;     6A 6AS$t*_-6A<@6A	d6Ar   c           	         VP                  R4      pVP                  R4      pVP                  RR4      pW19  d   \        RV R24      hW,          p. pV P                  P                  R\	        V4       RV R	24       V EF   pVP                  4       p	VP                  4        F  w  rW8X  d   K  V Uu. uF,  pVP                  V4      VP                  V4      8X  g   K*  VNK.  	  ppV'       d7   V F.  pVP                  4        F  w  ppW8w  g   K  VW R
V 2&   K  	  K0  	  K  VR8X  g   K  V'       d
   V^ ,          M/ pVP                  4        F  pW8w  g   K  RW R
V 2&   K  	  K  	  VP                  V	4       EK  	  V P                  P                  R\	        V4       R24       V# u upi   \         d:   pT P                  P                  RT 24       RR\        T4       2/.u Rp?# Rp?ii ; i)z$Join datasets based on configurationprimary
join_fieldtypeleftzPrimary dataset 'z' not foundzJoining z datasets on field ''_NzJoin completed with z recordszError joining datasets: r*   zDataset join failed: )rC   
ValueErrorr   rA   rB   copyrU   keysrF   r-   r*   r#   )r   r]   r^   primary_datasetrp   	join_typeprimary_datarV   primary_rowcombined_rowrh   ri   rowmatching_rowsmatchkeyvalue
sample_rowr.   s   &&&                r   rc   DatabaseService._join_datasets   s   2	A)ooi8O$6J#7I. #4_4E[!QRR#4LFKK3x=/)=j\K  ,*//1 +3..*:&L#6 
 $(%#'C77:.+//*2MM #' " % %%2E.3kkm
U#&#4LQL>3%1H$I /< &3 #f,04T!W"
#-??#4C"0HL~Qse-D E $5) +;0 l+9  ,< KK3CK=IJM-%0  	AKK 8<= 5c!fX>?@@	AsO   B5F6 7'F1#F1)(F6 F6 2F6 :!F6  AF6 1F6 6G:.G5/G:5G:c                    < V ^8  d   QhRS[ /# )r   r"   )r   )r%   r&   s   "r   r'   r(      s     @ @D @r   c                    V P                   P                  R4       V P                  P                  4       pRVRR/#   \         d8   pT P                   P                  RT 24       R\        T4      RR/u Rp?# Rp?ii ; i)z"Get database connection statisticsz&Getting database connection statisticsr   service_statusoperationalzError getting database stats: r*   N)r   rA   r   test_connectionr-   r*   r#   )r   mysql_statsr.   s   &  r   get_database_stats"DatabaseService.get_database_stats   s    	@KKEF**446K  -   	@KK >qcBCSV%5w??	@s   := A?,A:4A?:A?c                N    V P                   P                  R4       V P                  P                  4        V P                  P                  RR7       V P                   P                  R4       R#   \         d*   pT P                   P                  RT 24        Rp?R# Rp?ii ; i)zCleanup resourcesz&Cleaning up database service resourcesT)waitz"Database service cleanup completedzError during cleanup: N)r   rA   r   cleanupr   shutdownr-   r*   )r   r.   s   & r   r   DatabaseService.cleanup   s    	<KKEFJJ MM"""-KKAB 	<KK 6qc:;;	<s   A,A0 0B$;BB$)r   r   r   )N)r   
__module____qualname____firstlineno____doc__r   r/   rN   rY   rk   rc   r   r   __static_attributes____classdictcell__)r&   s   @r   r   r   
   s`     EQ
@ @" "H' 'R'E 'ER6A 6Ap@ @< <r   r   )r?   r   typingr   r   r   r   r   concurrent.futuresr   r	   app.models.mysql_modelr
   r   r   r   r    r   r   <module>r      s3      3 3 ? -			8	$V< V<r   