|L iFddlmZddlZddlmZddlmZddlmZddlmZddlmZddl m Z dd l m Z dd l m Z dd l m Z dd l mZd dlmZd dlmZd dlmZd dlmZd dlmZd dlmZddlmZddlmZer6ddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%ddl&m'Z'ddl(m)Z)Gd d!eZ*eed" d%d#Z+eed"d&d$Z,y)') annotationsN)Any)Dict)Optional) TYPE_CHECKING)Union)cast)Computed)JSON)schema)sql) alter_table) ColumnName)format_column_name)format_table_name) RenameTable) DefaultImpl)util)compiles) Inspector) DDLCompiler)Cast) ClauseElement)Column) Constraint)Table) TypeEngine)BatchOperationsImplceZdZdZdZ d dZd dZddZ ddZ ddZ ddZ d dfd Z dd Z d Z xZS) SQLiteImplsqliteFch|jD]}|ddk(r|dd}t|jtjr0t|jj t jryt|jts|jjsy|ddvsyy)zReturn True if the given :class:`.BatchOperationsImpl` would need the table to be recreated and copied in order to proceed. Normally, only returns True on SQLite when operations other than add_column are present. r add_columnrT) create_index drop_indexF) batch isinstanceserver_defaultr DefaultClauseargr rr persisted)selfbatch_opopcols X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/alembic/ddl/sqlite.pyrequires_recreate_in_batchz%SQLiteImpl.requires_recreate_in_batch1s.. B!u $eAh&&(<(< !3!3!7!79J9JKs118<**44A<< c|j td|j|rtjdyy)NNo support for ALTER of constraints in SQLite dialect. Please refer to the batch mode feature which allows for SQLite migrations using a copy-and-move strategy.zSkipping unsupported ALTER for creation of implicit constraint. Please refer to the batch mode feature which allows for SQLite migrations using a copy-and-move strategy.) _create_ruleNotImplementedErrorrwarn)r.consts r2add_constraintzSQLiteImpl.add_constraintMsJ    %%D     % IID &r4c 2|j tdy)Nr6)r7r8)r.r:kws r2drop_constraintzSQLiteImpl.drop_constraint^s&    %%D  &r4c|.tjdd|}tjdd|}|.tjdd|}tjdd|}||k7S)Nz ^\((.+)\)$z\1z^\"?'(.+)'\"?$)resub)r.inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaults r2compare_server_defaultz!SQLiteImpl.compare_server_defaultfs % 0(*u&?) %)+!5*C) % & 1)+u&@* &*,!5*D* &*-FFFr4c|sytjd|rytjd|rytjd|ryy)aDetermine if a server default is a SQL expression or a constant. There are too many assertions that expect server defaults to round-trip identically without parenthesis added so we will add parens only in very specific cases. Fz ^[0-9\.]$z^'.+'$z^\(.+\)$T)r@match)r.exprs r2-_guess_if_default_is_unparenthesized_sql_exprz8SQLiteImpl._guess_if_default_is_unparenthesized_sql_exprs@ XXlD ) XXi & XXk4 (r4c`|j|jddr d|dd|d<yy)Ndefault())rJget)r. inspectortable column_infos r2autogen_column_reflectz!SQLiteImpl.autogen_column_reflects9  = = OOIt , 0;9/E%GK " r4c ^t||fd|i|}|r|j|rd|d}|S)Nis_server_defaultrMrN)superrender_ddl_sql_exprrJ)r.rIrUr=str_expr __class__s r2rWzSQLiteImpl.render_ddl_sql_exprsG 7.  $5 9;  BB8L!)+Hr4c|jj|jur$t|tst |d||d<yyy)NrI)type_type_affinityr)r r )r.existingexisting_transfernew_types r2cast_for_batch_migratez!SQLiteImpl.cast_for_batch_migratesK MM ( (0G0G Gx.(,!&)8) f %/ Hr4c(|j||y)N)_skip_functional_indexes)r.conn_unique_constraints conn_indexesmetadata_unique_constraintsmetadata_indexess r2correct_for_autogen_constraintsz*SQLiteImpl.correct_for_autogen_constraintss %%&6 Er4)r/r returnbool)r:r)r:rr=r) rB Column[Any]rCrjrD Optional[str]rErkrhri)rIrkrhri)rPrrQrrRzDict[str, Any]rhNone)F)rIrrUrirhstr)r]rjr^z"Dict[str, Union[TypeEngine, Cast]]r_rrhrl)__name__ __module__ __qualname__ __dialect__transactional_ddlr3r;r>rFrJrSrWr`rg __classcell__)rYs@r2r"r")sK+ 8"G%G%G$1 G %2 G  G6! * H H H$ H  H>C!6:   >    Fr4r"r#c xt||j|jdt||jdS)Nz RENAME TO )r table_namer rnew_table_nameelementcompilerr=s r2visit_rename_tablerzs6 Hg00'..A(G$:$:DA r4c t||j|jdt||jdt||j S)Nz RENAME COLUMN z TO )rrur r column_namenewnamerws r2visit_column_namer~sB Hg00'..A8W%8%898W__5 r4)rxrryrrhrm)rxrryrrhrm)- __future__rr@typingrrrrr sqlalchemyr r r r r baserrrrrimplrrutil.sqla_compatrsqlalchemy.engine.reflectionrsqlalchemy.sql.compilerrsqlalchemy.sql.elementsrrsqlalchemy.sql.schemarrrsqlalchemy.sql.type_apiroperations.batchr r"rzr~r4r2rs#  $#'63,5,0+26_F_FD +x  $/! *h r4