bgU`NddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd l mZdd l mZdd l mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&ddl%m'Z'ddl%m(Z(ddl%m)Z)dd l%m*Z*dd!l%m+Z+dd"l%m,Z,dd#l%m-Z-dd$l%m.Z.dd%l%m/Z/dd&l0m1Z1d'd(l2m3Z3d'd)l4m5Z5d'd*l6m7Z7d'd+l6m8Z8d'd,l9m:Z:d'd-l9m;Z;d'd.l3mm?Z?dd1l@mAZAdd2lBmCZCdd3lDmEZEdd4lDmFZFdd5lmGZGdd6lmHZHdd7lmIZIdd8lJmKZKdd9lJmLZLdd:lMmNZNdd;l%mOZOd'dlTmUZUejVeWZXGd?d@e1ZYGdAdBe(ZZe*e/dCdedJZ[e*eZdCdfdKZ\e*e)dCdgdMZ]e*e.dCdhdOZ^e;j_dPe:j_dPdQe7j`adRGdSdTe7j`Zbe5jcdebdidXZee5jfdedjd]Zgdkd^ZhdldaZidmddZjdS)n) annotationsN)Any)cast)List)Optional)Sequence)Tuple) TYPE_CHECKING)Union)Column)Index)literal_column)Numeric)text)types)BIGINT)ExcludeConstraint)INTEGER) CreateIndex) operators) ColumnClause) TextClause)UnaryExpression)FunctionElement)NULLTYPE) alter_column) alter_table) AlterColumn) ColumnComment)compiles)format_column_name)format_table_name) format_type)IdentityColumnDefault) RenameTable) DefaultImpl)util)render)ops) schemaobj)BatchOperations) Operations) sqla_compat)Literal)ARRAY) PGDDLCompiler)HSTORE)JSON)JSONB)BinaryExpression) ClauseElement) quoted_name)MetaData)Table) TypeEngine)_ServerDefault)AutogenContext)_f_name)MigrationContextceZdZdZdZejddhfzZdZdZdZ dZ d=d>fd! Z d"Z d#Z d?d(Zd@d+ZdAd-ZdBd/ZdCd4ZdDd6ZdEd8ZdFd:ZdGd<ZxZS)HPostgresqlImpl postgresqlTFLOATzDOUBLE PRECISION)on_nullorderc|jddpd}|D]B}||jjvr2|jt |t jC|t|dS)Npostgresql_include) kwargsgettablec append_columnr sqltypesNullType_execr)selfindexrGcols M/opt/cloudlinux/venv/lib64/python3.11/site-packages/alembic/ddl/postgresql.py create_indexzPostgresqlImpl.create_indexRs#\--.BDIIOR% J JC%+-'' ))&h6G*H*HIII ;u%%&&&&&cn|jD],}|j#|j|jvr||-dSN) constraintsnamenamed_constraintsdrop_constraint)rQ batch_implrK constraints rTprep_table_for_batchz#PostgresqlImpl.prep_table_for_batch\sK+ 1 1J+Oz'CCC$$Z000  1 1rVc|jr||jjurdS|}||k}|rdSd|||jfvr| S|jj}t |t rEt |jtstj dd|}d|d}t|}|j tjt||k S)NFz^'|'$') primary_keyrK_autoincrement_columnserver_defaultarg isinstancestrtyperresubr connectionscalarr/_select)rQinspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultconn_col_defaultdefaults_equalmetadata_defaults rTcompare_server_defaultz%PostgresqlImpl.compare_server_defaultes  ' ?#8#NNN55)-FF  5   %  *   &% %*9= & , , @.3W== ;#%6(B8H#I#I #:'7#:#:#: -.>?? ?))  /004DD      rVNF table_namerh column_namenullableOptional[bool]re%Union[_ServerDefault, Literal[False]]rZ Optional[str]type_Optional[TypeEngine]schema autoincrement existing_typeexisting_server_defaultOptional[_ServerDefault]existing_nullableexisting_autoincrementkwrreturnNonec | dd}||tjd|*|t |||||| | | t j||f|||||| | | | d | dS)Npostgresql_usingz6postgresql_using must be used with the type_ parameter)rusingrrr) ryrerZrrrrrr)popr) CommandErrorrPPostgresqlColumnTypesuperr)rQrwrxryrerZr}rrrrrrrr __class__s rTrzPostgresqlImpl.alter_columns")400  #H    JJ$!"/,C&7          )''$;/#9  rVc|drt|dttfrt jd|d}|rt j|td| d }|r>|\}}||dkr/t d||j ||d=dSdSdSdSdSdS) Ndefaultriznextval\('(.+?)'::regclass\)a+select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.relname=:seqnamer)seqnamerZz^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rJrgrrrjmatchr/_exec_on_inspectorrgroupfirstloginforZ)rQ inspectorrK column_info seq_matchrrcolnames rTautogen_column_reflectz%PostgresqlImpl.autogen_column_reflects4 ??9 % %# 3*  '6!2+ + # 3/Y1GI 3"5E  &OOA..%'' 3'+$GW+f"555;$!J# ( 222G# 3# 3# 3# 3  3 3 3 355rVcd|D}|D]}||tjs|||dSdS)NcFh|]}|jd|S)duplicates_constraint)rrJ).0rRs rT zAPostgresqlImpl.correct_for_autogen_constraints..s=   z~~566    rV)remover/sqla_2_skip_functional_indexes)rQconn_unique_constraints conn_indexesmetadata_unique_constraintsmetadata_indexesdoubled_constraintsixs rTcorrect_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraintss~  %    & $ $B    # # # #! J  ) )*:L I I I I I J JrVrRr expr remove_suffixc|}|dd}|j5||jjdd}|r<|ddkr0|ddkr$|dd}|r|ddkr |ddk$d |vrt jd d|}|r-||r|dt| }|S) N"ra.r()rz::z (::[\w ]+\w))lowerreplacerKrZrjrkendswithlen)rQrRrrs rT_cleanup_index_exprz"PostgresqlImpl._cleanup_index_exprszz||||C$$ ; "<<5;#3#9#9#;#; > > >CCD tAw#~~$r(c//":D tAw#~~$r(c// 4<<6/2t44D  /T]]=99 /-3}----.D rVexpr7cd}t|tr|j|j}n|j}t|jtr |jj}nd}|&|tjkrd}nX|tjkrd}nE|tjkr|tjkrd}n"|tjkr|tjkrd}nt|t|S)Nraz ascz nulls lastz asc nulls lastz nulls first) rgrmodifierelementrasc_op nullslast_opdesc_op nullsfirst_op)rQr to_removeopinner_ops rT_default_modifiersz!PostgresqlImpl._default_modifierss o.. |#k\ck?;;$"{3HH#H#Y---$* y555$1 !I$444)"888%6  I$555)"999%3 ;o.. <rVTuple[Any, ...]cHtfdjDS)Nc3K|]S}jgt|tr|dfn)||fRVTdS)raN)rrgrh_compile_elementr)rerRrQs rT z2PostgresqlImpl.create_index_sig..8s    %D $ "!S))PQGG//22D4K4KA4N4NO           rV)tuple expressions)rQrRs``rTcreate_index_sigzPostgresqlImpl.create_index_sig7sF      &      rVrcJ||jdddjS)NTF) literal_binds include_table)dialectcompile_kwargs)compilerstring)rQrs rTrzPostgresqlImpl._compile_elementDs2L-1EJJ    rVr;autogen_contextr=Union[str, Literal[False]]ct|j}|dsdSt|d|jzr$t |d|jz}|||SdS)Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)ri __module__ startswithhasattr__visit_name__getattr)rQr}rmodmeths rT render_typezPostgresqlImpl.render_typeJsv5kk$~~>?? 5 4*U-AA B B 04!2U5I!IJJD4// /urVr3c Vtttj||ddS)N text_typez(.+?\(.*text_type=)rrhr*_render_type_w_subtyperQr}rs rT_render_HSTORE_typez"PostgresqlImpl._render_HSTORE_typeWs3   ) 5K     rVr1c Vtttj||ddS)N item_typez(.+?\()rrs rT_render_ARRAY_typez!PostgresqlImpl._render_ARRAY_typeas2   ) Z     rVr4c Vtttj||ddSN astext_typez(.+?\(.*astext_type=)rrs rT_render_JSON_typez PostgresqlImpl._render_JSON_typek3   ) 7O     rVr5c Vtttj||ddSrrrs rT_render_JSONB_typez!PostgresqlImpl._render_JSONB_typeurrV) NFNNNNNNNN)rwrhrxrhryrzrer{rZr|r}r~rr|rrzrr~rrrrzrrzrrrr)rRr rrhrrhrrh)rr7rrh)rRr rr)rr7rrh)r}r;rr=rr)r}r3rr=rrh)r}r1rr=rrh)r}r4rr=rrh)r}r5rr=rrh)__name__r __qualname__ __dialect__transactional_ddlr' type_synonymsidentity_attrs_ignorerUr_rvrrrrrrrrrrrr __classcell__rs@rTrArAJsK- $%1M1'''111) ) ) ^$(@E"&* $(,.2<@,0153 3 3 3 3 3 3 j$3$3$3LJJJ(,    D                             rVrAc eZdZd fd ZxZS) rrZrhrxr}r;rrc |dd}tj||fi|tj||_||_dS)Nr)rr__init__rN to_instancer}r)rQrZrxr}rrrs rTrzPostgresqlColumnType.__init__sVw%%{11b111)%00  rV)rZrhrxrhr}r;rr)rrrrrrs@rTrrs=rVrrBrr&compilerr2rrhc jt||j|jdt||jdS)Nz RENAME TO )rrwrr#new_table_namerrrs rTvisit_rename_tablers= Hg0'.AAAA(G$:DAAA rVc t||j|jdt||jddt ||jzd|jr d|jzndS)N zTYPE %szUSING %sra)rrwrrrxr$r}rrs rTvisit_column_typersq Hg0'.AAAAXw23333K'-88888&-m; W]"";  rVr c d}|j1|j|jtjnd}|t ||j|jt||j |S)Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}NULL)rwrxcomment) r sql_compilerrender_literal_valuerNStringformatr#rwrr"rx)rrrddlrs rTvisit_column_commentrs FC ? & 22 OX_..      ::$ g('.  'x1DEE   rVr%c t||j|jdt||jd}|j|dz }|S|j$|dz }|||jz }|S|j |j|j\}}}|j}t|D]T}|dkr|d|j rdndzz }|d| tjd i|t||izz }U|S) Nrz DROP IDENTITYzADD alwayszSET GENERATED %s ALWAYSz BY DEFAULTzSET %s rH)rrwrrrxrrvisit_identity_columnimpl_compare_identity_defaultsortedrget_identity_optionsr/Identityr)rrrrdiff_identityattrs rTrrsJ Hg0'.AAAAXw23333 D   ( 0  ..w??? \;; OW<  a?4LL  Dx+ (AHH\ H$A$A(KKD'(D2I2I+JKK%% rVcreate_exclude_constraintbatch_create_exclude_constraintexclude_constraintczeZdZdZdZ d"d#dZed$dZ d%d&dZed'dZ ed(d!Z dS))CreateExcludeConstraintOpz0Represent a create exclude constraint operation.excludeNconstraint_namesqla_compat._ConstraintNamerwUnion[str, quoted_name]elementsIUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]where&Optional[Union[BinaryExpression, str]]rr|_orig_constraintOptional[ExcludeConstraint]rrc h||_||_||_||_||_||_||_dSrX)r"rwr%r'rr)r)rQr"rwr%r'rr)rs rTrz"CreateExcludeConstraintOp.__init__s; /$    0rVr^rc tj|}||j|jd|jDt d|j|j||j|j|j  S)Ncg|] \}}}||f SrHrH)rrrZrs rT z=CreateExcludeConstraintOp.from_constraint..s2   "D$r    rVr()r'rr) deferrable initiallyr) r/_table_for_constraintrZ _render_exprsrr'rr/r0r)clsr^constraint_tables rTfrom_constraintz)CreateExcludeConstraintOp.from_constraints'   8*:J$*'!, *"    rVmigration_contextOptional[MigrationContext]ch|j|jStj|}||j|j}t |j|j|j d|j }|j D].\}}}| t|t/|||S)N)r)rZr')r)r, SchemaObjectsrKrwrrr%r"r'rr2rMr rappend_constraint)rQr6 schema_objtexclrrZopers rT to_constraintz'CreateExcludeConstraintOp.to_constraints  ,( (,->??   T_T[  A A ]%*  g      4 4    OOF422 3 3 3 3 D!!! rV operationsr.rhrrOptional[Table]cB||||fi|}||S)aIssue an alter to create an EXCLUDE constraint using the current migration context. .. note:: This method is Postgresql specific, and additionally requires at least SQLAlchemy 1.0. e.g.:: from alembic import op op.create_exclude_constraint( "user_excl", "user", ("period", "&&"), ("group", "="), where=("group != 'some group'"), ) Note that the expressions work the same way as that of the ``ExcludeConstraint`` object itself; if plain strings are passed, quoting rules must be applied manually. :param name: Name of the constraint. :param table_name: String name of the source table. :param elements: exclude conditions. :param where: SQL expression or SQL string with optional WHERE clause. :param deferrable: optional bool. If set, emit DEFERRABLE or NOT DEFERRABLE when issuing DDL for this constraint. :param initially: optional string. If set, emit INITIALLY when issuing DDL for this constraint. :param schema: Optional schema name to operate within. )invoke)r3r@r"rwr%rrs rTrz3CreateExcludeConstraintOp.create_exclude_constraint$s4VS*h = =" = =  $$$rVr-ct|jj|d<|||jj|fi|}||S)a3Issue a "create exclude constraint" instruction using the current batch migration context. .. note:: This method is Postgresql specific, and additionally requires at least SQLAlchemy 1.0. .. seealso:: :meth:`.Operations.create_exclude_constraint` r)rrrwrC)r3r@r"r%rrs rTrz9CreateExcludeConstraintOp.batch_create_exclude_constraintRsF&"-8 S*/".do_expr_where_opts..sO   (xx)/BBBB    rVzwhere=%sc"g|] \}}|d| S)=rH)rkvs rTr.zC_exclude_constraint..do_expr_where_opts..s'777$!Q11%777rV)r2r'appendr*_render_potential_exprextend)argsrr^optss rTdo_expr_where_optsz/_exclude_constraint..do_expr_where_optss    ,6+C       ' KK/$o    77$777888 rVz-%(prefix)screate_exclude_constraint(%(args)s)rY)prefixrdz%%(prefix)sExcludeConstraint(%(args)s)) _has_batchr/rarhr0rrKrr*_identrZ_render_gen_namereprrc_alembic_autogenerate_prefixjoinrT)r^rrI has_batchrfrdres`` @rTrJrJs/ FHD*I@ \3z'<#=#=>???> [#j&:";";<===6 Wc*"2334555 HH:#3#:H Xv}Z-=-DEEFGGG  Z_  V,_joNN O   &  (*/JJ K K  A T&- (8(=>>??@ @D &&(()))>9/JJIIdOOB B   "!##65oFFIIdOO: :   rVvalueGUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]c t|tr+|jrd}nd}|tj||jdzStj||t|ttfS)Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))rgrZ) wrap_in_text) rgr is_literalr*_sqlalchemy_autogenerate_prefixrZrbrr)rortemplates rTrZrZs %&&   4;HH3H<_MMJ    ,  #EJ+HII    rV)rr&rr2rrh)rrrr2rrh)rr rr2rrh)rr%rr2)rr=rr rrh)r^rrr=rLr9rrh)rr=rrh)r^rrr=rIrUrrh)rorprr=rrh)k __future__rloggingrjtypingrrrrrr r r sqlalchemyr r rrrrrNsqlalchemy.dialects.postgresqlrrrsqlalchemy.schemarsqlalchemy.sqlrsqlalchemy.sql.elementsrrrsqlalchemy.sql.functionsrsqlalchemy.typesrbaserrrr r!r"r#r$r%r&rr'rar) autogenerater*r@r+r,operations.baser-r.r/r0$sqlalchemy.dialects.postgresql.arrayr1#sqlalchemy.dialects.postgresql.baser2%sqlalchemy.dialects.postgresql.hstorer3#sqlalchemy.dialects.postgresql.jsonr4r5r6r7r8sqlalchemy.sql.schemar9r:sqlalchemy.sql.type_apir;r<autogenerate.apir=autogenerate.renderr>runtime.migrationr? getLoggerrrrArrrrrregister_operationAddConstraintOpregister_add_constraintr  renderers dispatch_forrK_constraint_renderersrPrTrJrZrHrVrTrs""""""  %%%%%%((((((111111<<<<<<222222))))))$$$$$$000000......333333444444%%%%%%$$$$$$######''''''!!!!!!""""""------((((((5::::::AAAAAA<<<<<<888888999999888888555555333333......++++++222222$$$$$$111111------444444g!!s s s s s [s s s l ; +|$$%$   --.- -&&'&*  ../.D:;;##!B,,-ABBI%I%I%I%I% 3I%I%CB<; I%X899PPP:9P **+<== C C C>= C9 9 9 9 x      rV