bg$tddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd l m Z dd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZe rBddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl$m%Z%GddZ&d S)!) annotations)Any)Dict)List)Optional)Sequence)Tuple) TYPE_CHECKING)Unionschema)Column) Constraint)Index)Integer)NULLTYPE)util) sqla_compat) ColumnElement) TextClause)CheckConstraint) ForeignKey)ForeignKeyConstraint)MetaData)PrimaryKeyConstraint)Table)UniqueConstraint) TypeEngine)MigrationContextceZdZ ddZ d?d@dZ dz8SchemaObjects.primary_key_constraint..4s%???Q9#Ax00???r,r c*g|]}j|Sr6cr:r;ts r*r<z8SchemaObjects.primary_key_constraint..9s # # #ac!f # # #r,r-)metadatar8rr) r)r-r/r1r dialect_kwmcolumnsprAs @r*primary_key_constraintz$SchemaObjects.primary_key_constraint+s MMOO??$??? OJ CG C C CF C C  * # # # #d # # # *. 2<  r,sourcereferent local_cols List[str] remote_colsonupdateondelete deferrableOptional[bool] source_schemareferent_schema initiallymatchrc |}||kr | | kr||z}n"|}tj||gd|DRd| itj||gdtj|DRd| i}| r| d|n|| | d<tj|fd|Df||||| d| }|||S)NcBg|]}tj|tSr6r7r9s r*r<z8SchemaObjects.foreign_key_constraint..Us%EEEA)"1h//EEEr,r cBg|]}tj|tSr6r7r9s r*r<z8SchemaObjects.foreign_key_constraint..\s5 H--r,.rTcg|] }d| S)rXr6)r:r;tnames r*r<z8SchemaObjects.foreign_key_constraint..ms$ 7 7 7aqq ! 7 7 7r,)r-rMrNrOrS)rBr8rr unique_listrappend_constraint)r)r-rHrIrJrLrMrNrOrQrRrSrTrCrDt1_colst1frZs @r*foreign_key_constraintz$SchemaObjects.foreign_key_constraint=sr MMOO X  -?"B"B ;.GG G O FEEEE   '    _   )'22   !    1 1  $ 7  *  7 7 7 7; 7 7 7 !   Qr,rc tj||gd|DRd|i||d<tjfd|Di|}||S)NcBg|]}tj|tSr6r7r9s r*r<z3SchemaObjects.unique_constraint..s% @ @ @iq(++ @ @ @r,r r-c*g|]}j|Sr6r>r@s r*r<z3SchemaObjects.unique_constraint..s)E)E)EQ!#a&)E)E)Er,)r8rrBrr\)r)r-rHrJr kwuqrAs @r*unique_constraintzSchemaObjects.unique_constraintys O  MMOO A @Z @ @ @       6  ')E)E)E)E*)E)E)E L L L B r, condition*Union[str, TextClause, ColumnElement[Any]]Union[CheckConstraint]c tj||tjdt|}tj|fd|i|}|||S)Nxr r-)r8rrBrrrr\)r)r-rHrgr rdrAcks r*check_constraintzSchemaObjects.check_constraintss O  MMOO  S' * *      &y B Bt Br B B B r,type_rc v|||}dtjtjdtjd} ||}||}|||S#t $rB} tddtd|Dz| d} ~ wwxYw) Nr c0tjgg|S)Nr-)r8rrqs r*z2SchemaObjects.generic_constraint..sy'EBT(((r,c.tjd|S)Nrq)r8rrqs r*rrz2SchemaObjects.generic_constraint..s)";BT"J"J"Jr,) foreignkeyprimaryuniquecheckNrqz'type' can be one of %sz, c34K|]}t|VdSr()repr)r:rks r* z3SchemaObjects.generic_constraint..s(":":q477":":":":":":r,) tabler8rrrr\KeyError TypeErrorjoinsorted) r)r-r/rnr rdrAtypesconstkes r*generic_constraintz SchemaObjects.generic_constraints JJz&J 1 1!50JJ&+ +  %LEEt$$$E   & & &L   )))F":":E":":":::;;<  sA,, B86=B33B8rci}|j:d|jjvr,|jjd}t|dr |j|d<t jdi|S)Ntarget_metadatanaming_conventionr6)r#optshasattrrr8r)r)rdmts r*rBzSchemaObjects.metadatasj   " .!T%;%@@@',->?Br.// ?*,*>&'!''B'''r,rcZ |}d|D}|dd}|r|D]}dx|_|_t j||g|Ri| fd|D}|D]} |  jD]} |||  S)Ncrg|]4}t|t|jtj|n|5Sr() isinstancerr|r_copy)r:r?s r*r<z'SchemaObjects.table..sO   !V$$ $%G$7K a Q   r,_constraints_includedFcg|]Z}t|ttft|ddur't|ddt j|n|[S)parentN) target_table)rrrgetattrrr)r:elemrAs r*r<z'SchemaObjects.table..s   $U 344  tXt,,A55h--9  d 3 3 3 3    r,) rBpoprwindexr8rr\ foreign_keys_ensure_table_for_fk) r)r-rErdrDr1rr? constraintsrr_rAs @r*r|zSchemaObjects.tables MMOO     !#'> F F  + + +%**177 OD! 1d 1 1 1b 1 1        ! ' 'E   & & & & , ,A  % %a + + + +r,rrc (tj||fi|Sr()r8r)r)r-rnrds r*columnzSchemaObjects.columnse22r222r, tablenamerE4Sequence[Union[str, TextClause, ColumnElement[Any]]]rc tj|pd|||d<tj|gfd|DRi|}|S)Nno_tabler _tablecPg|]"}tj|#Sr6)rr_textual_index_columnr@s r*r<z'SchemaObjects.index..s, L L Lqd44Q:: L L Lr,)r8rrBr)r)r-rrEr rdidxrAs @r*rzSchemaObjects.indexs O  # MMOO    8 o  L L L LG L L L       r, table_keyTuple[Optional[str], str]cd|vr;|d}d|dd}|d}n|}d}||fS)NrXr)splitr)r)rtokenssnamerZs r*_parse_table_keyzSchemaObjects._parse_table_keysV )  __S))F#&88F1R4L#9#9E2JEEEEu~r,rBfkrcvt|jtr|jdd\}}||\}}||jvrt j|||}n |j|}||jvr1| t j |tdSdSdS)zUcreate a placeholder Table object for the referent of a ForeignKey. rXr N) r_colspecr0rsplitrtablesr8rr? append_columnrr)r)rBrrcnamerrZrel_ts r*rz"SchemaObjects._ensure_table_for_fks bk3 ' ' G!{11Q   Iu 00;;LE5//!xFFF  2EG####I$4UH$E$EFFFFF G G$#r,r()r#r$r%r&) r-r.r/r0r1r2r r3r%r)NNNNNNN)r-r.rHr0rIr0rJrKrLrKrMr3rNr3rOrPrQr3rRr3rSr3rTr3r%r) r-r.rHr0rJr2r r3r%r) r-r.rHr0rgrhr r3r%ri) r-r.r/r0rnr3r r3r%r)r%r)r-r0r%r)r-r0rnrr%r) r-r3rr3rErr r3r%r)rr0r%r)rBrrrr%r&)__name__ __module__ __qualname__r+rGr`rfrmrrBr|rrrrr6r,r*r"r"%sb>B33333!% 2#'"&%)'+)-#'#:::::B!% 4!% .!% < ( ( ( (####J3333!% *GGGGGGr,r"N)' __future__rtypingrrrrrr r r sqlalchemyr r8sqlalchemy.sql.schemarrrsqlalchemy.typesrrrtrrsqlalchemy.sql.elementsrrrrrrrrrsqlalchemy.sql.type_apirruntime.migrationr r"r6r,r*rsK"""""" ******((((((,,,,,,''''''$$$$$$%%%%%% 5555555222222555555000000::::::......::::::++++++666666222222444444zGzGzGzGzGzGzGzGzGzGr,