
    PqhI                       d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dl!m#Z# d dl!m$Z$ d dl!m%Z% d dl!m&Z& d dl'm(Z( d dl)m*Z* erTd dlm+Z+ d d lm,Z, d d!lm-Z- d d"lm.Z. d d#lm/Z/ d d$l0m1Z1 d d%lm2Z2 d d&l3m4Z4 d d'l5m6Z6 d d(l!m7Z7 d d)l8m9Z9 d d*l8m:Z: d d+l;m<Z< d d,l;m=Z=  ed-ed.   /      Z>d}d0Z? e@ ej                  d1e      D  cg c]
  }  e?|        c}       ZBeBd2k\  ZCeBd3k\  ZDeBd4k\  ZEeBd5k\  ZFeBd6k\  ZGeZH	 d d7lImJZJ  G d8 d9      ZL	 d d:lmMZM d;ZNeBd<k\  ZO	 d d@lmPZP  eQePe       ZR	 d~	 	 	 	 	 ddAZSd;ZTeGrd dDlmUZU nd dElVmWZU edeXeUf   ZYeeXeUf   ZZ	 	 	 	 ddFZ[	 	 	 	 ddGZ\	 	 	 	 ddHZ]dIZ^ej                  	 	 	 	 ddJ       Z`ddKZa	 	 	 	 ddLZb	 	 	 	 ddMZc	 	 	 	 ddNZdddOZeddPZfddQZg	 	 	 	 ddRZhddSZi	 	 	 	 	 	 	 	 ddTZjdU ZkdV ZlddWZmddXZnddYZodZ Zpdd[Zqd\ Zr esej                  d]      rd^ Zud_ Zvnd` Zuda Zvdb ZwddcZxdddZyde Zz	 	 	 	 	 	 ddfZ{	 	 	 	 	 	 ddgZ|ddhZ} G di djejn                        Z~ ee~      	 	 	 	 	 	 ddk       Z G dl dme"      Z ee      	 	 	 	 	 	 ddn       Zdo Zdp ZddqZ	 	 	 	 	 	 ddrZ	 	 	 	 	 	 ddsZddtZdu ZddvZeDrd dwlmZ d dxlmZ nd dylmZ dz Zdd{Zdd|Zyc c} w # eK$ r
 d d7l!mJZJ Y w xY w# eK$ r es G d= d>eL      ZMd?ZNd?ZOY w xY w# eK$ r es G dB dCeL      ZPd?ZTY w xY w)    )annotationsN)Any)Dict)Iterable)Iterator)Mapping)Optional)TYPE_CHECKING)TypeVar)Union)__version__)inspectschema)sql)types)url)compiles)CheckConstraint)Column)ForeignKeyConstraint)visitors)DialectKWArgs)BindParameter)ColumnClause)quoted_name)
TextClause)UnaryExpression)traverse)	TypeGuard)Index)Table)
Connection)Dialect)Transaction)	Inspector)ColumnCollection)SQLCompiler)Insert)ColumnElement)
Constraint)
SchemaItem)Select)TableClause_CE)zColumnElement[Any]r,   )boundc                ,    	 t        |       S #  | cY S xY wN)int)values    Y/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/alembic/util/sqla_compat.py	_safe_intr6   6   s    5zs   
 z(\d+|[abc]\d))      )r7      )r7   r9      )r7   r9      )   )
_NONE_NAMEc                      e Zd ZdZy)_Unsupportedz.Placeholder for unsupported SQLAlchemy classesN)__name__
__module____qualname____doc__     r5   r?   r?   N   s    4rE   r?   )ComputedT)r7   r8      c                      e Zd Zy)rF   Nr@   rA   rB   rD   rE   r5   rF   rF   W       rE   rF   F)Identityc                   | i S t         rA| j                         }|r-t        | t              sJ |j	                  | j
                         |S i }t        | t              r*| j                  |d<   | j                  | j                  |d<   d}|j	                  |D ci c]  }t        | |d       |t        | |d        c}       |S c c}w )Nalwayson_null)	start	incrementminvaluemaxvalue
nominvalue
nomaxvaluecyclecacheorder)
identity_has_dialect_kwargs_as_dict
isinstancer   updatedialect_kwargsrK   rM   rN   getattr)identityr\   as_dictattrskeys        r5   _get_identity_options_dictrb   l   s     I('')G!(M:::x6676 3 G(H-$,OO!##/)1)9)9GI&
E NN  %xd3? 355 s   "Cc                      e Zd Zy)rK   NrI   rD   rE   r5   rK   rK   e   rJ   rE   rK   )	_NoneName)symbolc                B    | t         u xs t        | t        t        f      S r2   )r=   rZ   strrd   names    r5   constraint_name_definedrj      s      :CD3	2B!CCrE   c                "    t        | t              S r2   )rZ   rg   rh   s    r5   constraint_name_stringrl      s     dC  rE   c                     t        |       r| S d S r2   )rl   rh   s    r5   constraint_name_or_nonern      s     *$/49T9rE   autoc              #     K   	 | j                   }|d  y  |       s"| J | j                         5  d  d d d        y d  y # t        $ r d }Y Bw xY w# 1 sw Y   y xY wwr2   )in_transactionAttributeErrorbegin
connectionrq   s     r5   _ensure_scope_for_ddlrv      sy     #22 )))!!#      s=   A"A "A"AA"AA"AA"AA"c                Z    t         r | j                  |      S  | j                  |      S )N)hide_password)sqla_14render_as_string__to_string__)r   rx   s     r5   url_render_as_stringr|      s+    #s##-@@ s  }==rE   c                @    t        |       }|r|S | j                         S r2   )_get_connection_transactionrs   ru   transactions     r5   "_safe_begin_connection_transactionr      s&     .j9K!!rE   c                @    t        |       }|r|j                          y y r2   )r~   commitr   s     r5   #_safe_commit_connection_transactionr      s"     .j9K rE   c                @    t        |       }|r|j                          y y r2   )r~   rollbackr   s     r5   %_safe_rollback_connection_transactionr      s"     .j9K rE   c                H    	 | j                   } |       S # t        $ r Y yw xY w)NF)rq   rr   rt   s     r5   _get_connection_in_transactionr      s1     #22
 	  s    	!!c                    | j                   S r2   )expressionsidxs    r5   _idx_table_bound_expressionsr      s    ??rE   c                b    t        | d      r | j                  di |S  | j                  di |S )N_copyrD   )hasattrr   copy)schema_itemkws     r5   r   r      s8    {G$ {  &2&&{%"%%rE   c                ^    t         r| j                         S | j                  }|j                  S r2   )ry   get_transaction_root_Connection__transaction)ru   rs     r5   r~   r~     s-     ))++)))rE   c                     t        t        j                  d      rt        j                  j                  | i |S t        j                  | i |S )Ncreate)r   r   URLr   )argr   s     r5   _create_urlr     s<    sww!ww~~s)b))ww"r""rE   c                ~    t         rt        |       j                  ||      S | j                  j                  | ||      S r2   )ry   r   	has_tabledialect)connectable	tablename
schemanames      r5   _connectable_has_tabler     s?     {#--iDD"",,J
 	
rE   c                    t         r,| j                         5 }|j                  ||      cd d d        S | j                  j                  ||      S # 1 sw Y   y xY wr2   )ry   _operation_contextexecutebind)	inspector	statementparamsconns       r5   _exec_on_inspectorr     sT    ))+ 	3t<<	62	3 	3 ~~%%i88	3 	3s   AAc                b    t         s| j                  S ddlm} | j                  |j
                  u S )Nr   r   )ry   nullablesqlalchemy.sqlr   _user_defined_nullableNULL_UNSPECIFIED)metadata_columnr   s     r5   _nullability_might_be_unsetr   &  s/    ''') 22f6M6MM	
rE   c                 4    t         syt        d | D              S )NFc              3  <   K   | ]  }t        |t                y wr2   )rZ   rF   .0sds     r5   	<genexpr>z._server_default_is_computed.<locals>.<genexpr>5       E:b(+E   )has_computedanyserver_defaults    r5   _server_default_is_computedr   1  s    EnEEErE   c                 4    t         syt        d | D              S )NFc              3  <   K   | ]  }t        |t                y wr2   )rZ   rK   r   s     r5   r   z._server_default_is_identity.<locals>.<genexpr><  r   r   )ry   r   r   s    r5   _server_default_is_identityr   8  s    EnEEErE   c                ^    t        | t              r| j                  }|J |S | j                  S r2   )rZ   r   parenttable)
constraintr   s     r5   _table_for_constraintr   ?  s5    *23!!   rE   c                    t        | t              r$| j                  D cg c]  }|j                   c}S t        | t              rt        | j                        S t        | j                        S c c}w r2   )	rZ   r   elementsr   r   _find_columnssqltextlistcolumns)r   fks     r5   _columns_for_constraintr   H  sY    *23$.$7$78b		88	J	0Z//00J&&''	 9s   A/c                V    t         r| j                  |d       S | j                  |d       S r2   )ry   reflect_tablereflecttable)r   r   s     r5   _reflect_tabler   Q  s0    &&ud33%%4
 	
rE   c                p    t        |       r*t        |       \  }}|j                  |j                  |      S | S r2   )_type_has_variants_get_variant_mappinggetri   )type_r   	base_typemappings       r5   _resolve_for_variantr   Z  s3    % 1%8	7{{7<<33rE   _variant_mappingc                ,    t        | j                        S r2   )boolr   r   s    r5   r   r   d  s    E**++rE   c                    | | j                   fS r2   )r   r   s    r5   r   r   g  s    e,,,,rE   c                8    t        |       t        j                  u S r2   )typesqltypesVariantr   s    r5   r   r   l  s    E{h....rE   c                2    | j                   | j                  fS r2   )implr   r   s    r5   r   r   o  s    zz5==((rE   c           
     T   | j                   D cg c]  }| j                  |   j                   }}| j                  j                  }| j                  j                  }| j
                  d   j                  j                  j                  }| j
                  d   j                  j                  j                  }| j
                  D cg c]  }|j                  j                   }}| j                  }	| j                  }
| j                  }| j                  }|||||||
|	||f
S c c}w c c}w )Nr   )column_keysr   ri   r   r   r   columnr   ondeleteonupdate
deferrable	initially)r   ra   source_columnssource_tablesource_schematarget_schematarget_tableelementtarget_columnsr   r   r   r   s                r5   _fk_specr   s  s   0:0F0F),
3$$N  $$))L%%,,M''*1177>>M&&q)0066;;L9C9L9LMggnn))MNM""H""H&&J$$I  Ns    D D%c                    | j                   d   j                         }|j                  d      }|j                  d       dj	                  |      }| j
                  J || j
                  j                  k(  S )Nr   .)r   _get_colspecsplitpopjoinr   ra   )r   spectokenstablekeys       r5   _fk_is_self_referentialr    sj    q!..0DZZ_F
JJrNxxH(((z((,,,,rE   c                    | j                   S r2   )_type_bound)r   s    r5   _is_type_boundr    s     !!!rE   c                L    t               }t        | i d|j                  i       |S )z2locate Column objects within the given expression.r   )setr   add)clausecolss     r5   r   r     s%     5DVR(DHH-.KrE   c                    |j                   J | |j                      }t        | d      st        | d      r| j                  j                  |       y| j                  |       y)z(remove a column from a ColumnCollection.N
_immutable	_readonly)ra   r   _parentremove)
collectionr   	to_removes      r5   _remove_column_from_collectionr    sY     ::!!!6::&I z<(GJ,L!!),)$rE   c                b   t        |t              r-t        |t        j                        }| j                  |       |S t        |t              rt        | |      S t        |t              rt        | |j                        S t        |t        j                        rt        ||       S t        d      )zAa workaround for the Index construct's severe lack of flexibilityz#String or text() construct expected)rZ   rg   r   r   NULLTYPEappend_columnr   _textual_index_element_textual_index_columntextr   r*   _copy_expression
ValueError)r   text_cs      r5   r  r    s     %5(++,A	E:	&%eU33	E1	2$UEJJ77	E3,,	-u-->??rE   c                <    fd}t        j                  | i |      S )Nc                    t        | t              ri| j                  ]| j                  urO| j                  j                  v rj                  | j                     S t        |       }j                  |       |S y r2   )rZ   r   r   ri   r  r   r  )colr  r   s     r5   replacez!_copy_expression.<locals>.replace  se    sF#		%		-xx<>>)#~~chh//#J**1-rE   )r   replacement_traverse)
expressionr   r!  s    ` r5   r  r    s$     ((B rE   c                  "    e Zd ZdZdZddZd Zy)r  aQ  Wrap around a sqlalchemy text() construct in such a way that
    we appear like a column-oriented SQL expression to an Index
    construct.

    The issue here is that currently the Postgresql dialect, the biggest
    recipient of functional indexes, keys all the index expressions to
    the corresponding column expressions when rendering CREATE INDEX,
    so the Index we create here needs to have a .columns collection that
    is the same length as the .expressions collection.  Ultimately
    SQLAlchemy should support text() expressions in indexes.

    See SQLAlchemy issue 3174.

    _textual_idx_elementc                    || _         || _        |j                  | _        t        j                  | j                  j                  t
        j                        | _        |j                  | j                         y r2   )	r   r  ra   r   r   r   r  fake_columnr  )selfr   r  s      r5   __init__z_textual_index_element.__init__  sP    
	99!==9J9JKD,,-rE   c                    | j                   gS r2   )r'  )r(  s    r5   get_childrenz#_textual_index_element.get_children  s      !!rE   N)r   r"   r  r   returnNone)r@   rA   rB   rC   __visit_name__r)  r+  rD   rE   r5   r  r    s     ,N."rE   r  c                <     |j                   | j                  fi |S r2   )processr  r   compilerr   s      r5   _render_textual_index_columnr3    s      8GLL/B//rE   c                      e Zd Zy)_literal_bindparamNrI   rD   rE   r5   r5  r5    s    rE   r5  c                (     |j                   | fi |S r2   )render_literal_bindparamr1  s      r5   _render_literal_bindparamr8    s     -8,,W;;;rE   c                ,    t        | j                        S r2   )r   r   r   s    r5   _get_index_expressionsr:    s      rE   c                T    t        |       D cg c]  }t        |dd        c}S c c}w )Nri   )r:  r]   )r   exps     r5   _get_index_column_namesr=    s$    2H2MN3GC&NNNs   %c                *    t         r| j                  S i S r2   )sqla_13kwargs)r   s    r5   _column_kwargsrA    s    zz	rE   c                   | j                   y |J t        r|j                  j                  | d      S t	        | j                   d      rt        | j                         }nt        } |t        | j                         d      }| j                  |      } t        | t        j                        r#|j                  |d       }|j                  |       S |j                  j                  |       S )NF_alembic_quotequote)rE  rh   )ri   ry   identifier_preparerformat_constraintr   r   r   rg   	__class__rZ   r   r!   ddl_compiler_prepared_index_name)r   r   quoted_name_clsnew_nameds        r5   _get_constraint_final_namerN    s      **<<u = 
 	
 :??G, %)$9O)O"3z#7uE))x)8
j&,,/$$Wd3A)) 
 ..@@LLrE   c                    t         r2| j                  y|J |j                  j                  | d      }|d uS | j                  d uS )NFrC  )ry   ri   rF  rG  )r   r   ri   s      r5   _constraint_is_namedrP  E  s\     ??""""**<<u = 
 4d**rE   c                l    t         r| j                  S t        | j                  xr | j                        S r2   )ry   
is_mariadbr   server_version_info_is_mariadbmysql_dialects    r5   rT  rT  T  s5    '''-- *))
 	
rE   c                    | j                   S r2   ) _mariadb_normalized_version_inforU  s    r5   rX  rX  ^  s    999rE   c                n    t         r| j                         j                         S | j                  d      S )NT)inline)ry   insertrZ  )r   s    r5   _insert_inliner\  b  s+    ||~$$&&||4|((rE   )create_mock_engine)selectcreate_enginec                    t        dd|      S )Nzpostgresql://mock)strategyexecutorr_  )r   rd  r   s      r5   r]  r]  o  s    fx
 	
rE   c                 @    t        j                  t        |       fi |S r2   )r   r^  r   )r   r   s     r5   _selectrf  t  s    zz$w-.2..rE   c                    | j                   D ]M  }t        |t              r|j                  }t        |t              rt        |t              r|j
                  sM y y)NTF)r   rZ   r   r   r   
is_literal)indexexprs     r5   is_expression_indexrk  x  sN    !! /<<D /$-	
 rE   )r4   rg   r,  zUnion[int, str])F)r^   z&Union[Identity, schema.Sequence, None]r\   r   r,  zDict[str, Any])ri   _ConstraintNamer,  z!TypeGuard[_ConstraintNameDefined])ri   rl  r,  zTypeGuard[str])ri   rl  r,  Optional[str])ru   Optional[Connection]r,  zIterator[None])T)ru   r#   r,  r%   )ru   r#   r,  r-  )ru   rn  r,  r   )r   r!   r,  zIterable[ColumnElement[Any]])r   r/   r,  r/   )ru   r#   r,  zOptional[Transaction])r,  zurl.URL)r   r#   r   rg   r   zUnion[str, None]r,  r   )r,  r   )r   r+   r,  r"   )r   r&   r   r"   r,  r-  )r   r   r,  r   )r   r+   r,  r   )r  r'   r   z%Union[Column[Any], ColumnClause[Any]]r,  r-  )r   r"   r  z*Union[str, TextClause, ColumnElement[Any]]r,  z&Union[ColumnElement[Any], Column[Any]])r#  r/   r   r"   r,  r/   )r   r  r2  r(   r,  rg   )r   r5  r2  r(   r,  rg   )r   r   r,  r   )r   zUnion[Index, Constraint]r   Optional[Dialect]r,  rm  )r   zUnion[Constraint, Index]r   ro  r,  r   )rV  r$   r,  r   )r   zUnion[TableClause, Table]r,  r)   )r,  r-   )ri  r!   r,  r   )
__future__r   
contextlibretypingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   r   r   r   r   r   sqlalchemy.enginer   sqlalchemy.ext.compilerr   sqlalchemy.schemar   r   r   r   r   sqlalchemy.sql.baser   sqlalchemy.sql.elementsr   r   r   r   r   sqlalchemy.sql.visitorsr   typing_extensionsr    r!   r"   r#   r$   r%   sqlalchemy.engine.reflectionr&   r'   sqlalchemy.sql.compilerr(   sqlalchemy.sql.dmlr)   r*   sqlalchemy.sql.schemar+   r,   sqlalchemy.sql.selectabler-   r.   r/   r6   tuplefindall_versr?  ry   
sqla_14_18
sqla_14_26sqla_2sqlalchemy_versionsqlalchemy.sql.namingr=   ImportErrorr?   rF   r   has_computed_reflectionrK   
issubclassrX   rb   has_identityrd   sqlalchemy.utilre   rg   rl  _ConstraintNameDefinedrj   rl   rn   AUTOINCREMENT_DEFAULTcontextmanagerrv   r|   r   r   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   
TypeEnginer   r   r   r  r  r   r  r  r  r  r3  r5  r8  r:  r=  rA  rN  rP  rT  rX  r\  r]  r^  rf  r`  rk  )xs   0r5   <module>r     s   "  	           "    ( ! , - $ 2 # - 1 0 / . 3 , '  ,)-643)50005e5!CDE 	%2::&6DEaYq\E	 6/
6/j 
j 
	$  A>
5 52# L#z13# #-X}"E  %%8%% 
%N L	-3 c9,-sI~. D
D&D!
!!:
::   $ ,>"""		 &***#

(+
9I
	
9
FF (
 8 23,-
/)8-"% %*O%	%$@@C@+@$*"S.. ": 

 !0#0/:00 "0	 	 

<<+6<< <!O$M($M3D$M$MN+(+3D+	+
:) -,(

/u F  A@@A  $	| 	 L#$  	| 	 Ls<   5L''L, 8L> M ,L;:L;>MMM32M3