ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ M!Vc@sddlmZddlmZddlmZddlmZddlm Z ddl m Z dd l m Z mZmZmZmZmZmZdd l mZdd lmZd e fd YZdefdYZdefdYZdefdYZee deedeedeeddZeeddZeeddZeeddZdZdZ eej!ddZ"dS(i(tcompiles(ttypes(tschemai(t string_types(tutili(t DefaultImpl(tColumnNullablet ColumnNamet ColumnDefaultt ColumnTypet AlterColumntformat_column_nametformat_server_default(t alter_table(tcomparet MySQLImplc BsVeZdZeZdeddddddddd ZdZdZdZ RS(tmysqlc Ks|dk r|jt||d|d|d|dk r<|n| dk rN| ntd|dk rf|n|d|tk r~|n| d| dk r| n| n|dk s|dk s| dk rp|jt||d|d|dk r|n|d|dk r |n| dk r| ntd|dk r3|n|d|tk rK|n| d| dk rc| n| n.|tk r|jt|||d|ndS(NRtnewnametnullablettype_tdefaultt autoincrement(tNonet_exectMySQLChangeColumntTruetFalsetMySQLModifyColumntMySQLAlterDefault(tselft table_namet column_nameRtserver_defaulttnameRRt existing_typetexisting_server_defaulttexisting_nullableRtexisting_autoincrementtkw((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt alter_columnsF          cCsM|jjtjkr?|jr?|j r?| r?|dkr?tS||kSdS(Ns'0'(ttypet_type_affinitytsqltypestIntegert primary_keyRR(Rtinspector_columntmetadata_columntrendered_metadata_defaulttrendered_inspector_default((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pytcompare_server_defaultMs   cCsKt}xt|D]}|jr+qnx|jD]}|j|jkrn|j||j|jPnxD|jD]9}|j|jkrx|j||j|jPqxqxW|j|kr5Pq5q5WqWx3t|D]%}|j|kr|j|qqWtg|D]} | jdk r| j^q} tg|D]'} | jdkrAt j | j ^qA} tg|D]} | jr{| j^q{} t d|D} t d|D}x|t| j |D]e}|| kr#t j | |j | krC|j| |qCq|| kr|j||qqWdS(Ncss|]}|j|fVqdS(N(R!(t.0tcons((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pys scss'|]}|jr|j|fVqdS(N(tuniqueR!(R2R3((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pys s(tsettlistR4tcolumnsR!tremovetaddt foreign_keysRRt_uq_constraint_sigtsigtdictt intersectiontdiscard(Rtconn_unique_constraintst conn_indexestmetadata_unique_constraintstmetadata_indexestremovedtidxtcoltfkR3tmetadata_uq_namestunnamed_metadata_uqstmetadata_ix_namest conn_uq_namest conn_ix_namestoverlap((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pytcorrect_for_autogen_constraints]sN      ! *(   cCstd|D}td|D}xt|j|D]}||}||}|jdk r|jjdkr|jdkrd|_n|jdk rB|jjdkrB|jdkrBd|_qBqBWdS(Ncss'|]}tj|j|fVqdS(N(Rt_fk_constraint_sigR<(R2RG((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pys scss'|]}tj|j|fVqdS(N(RROR<(R2RG((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pys strestricttRESTRICT(R=R5R>tondeleteRtlowertonupdate(Rtconn_fkst metadata_fkstconn_fk_by_sigtmetadata_fk_by_sigR<tmdfktcnfk((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pytcorrect_for_autogen_foreignkeyss   N( t__name__t __module__t __dialect__Rttransactional_ddlRR'R1RNR[(((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRs /  DRcBseZddZRS(cCs2tt|j|d|||_||_dS(NR(tsuperR t__init__RR(RR!RRR((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRas N(R\R]RRa(((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRsRcBs#eZddddeddZRS(c Cs}tt|j|d|||_||_||_||_||_|dkrgt j dnt j ||_ dS(NRsDAll MySQL CHANGE/MODIFY COLUMN operations require the existing type.(R`R RaRRRRRRRt CommandErrorR*t to_instanceR( RR!RRRRRRR((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRas       N(R\R]RRRa(((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRs RcBseZRS((R\R](((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRsRcKstddS(Ns9Individual alter column constructs not supported by MySQL(tNotImplementedError(telementtcompilerR&((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt _mysql_doesnt_support_individualscKsTdt||j|jt||j|jdk rLdt||jndfS(Ns%s ALTER COLUMN %s %ssSET DEFAULT %ss DROP DEFAULT(R RRR RRRR (ReRfR&((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt_mysql_alter_defaults %c KsYdt||j|jt||jt|d|jd|jd|jd|j fS(Ns%s MODIFY %s %sRR RR( R RRR Rt_mysql_colspecRRRR(ReRfR&((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt_mysql_modify_columns   cKshdt||j|jt||jt||jt|d|jd|jd|j d|j fS(Ns%s CHANGE %s %s %sRR RR( R RRR RRRiRRRR(ReRfR&((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt_mysql_change_columns   cCs+t|trd|S|jj|SdS(Ns'%s'(t isinstanceRt sql_compilertprocess(Rftexpr((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt _render_valuescCstd|jjj||r!dndf}|r>|d7}n|tk rp|dk rp|dt||7}n|S(Ns%s %stNULLsNOT NULLs AUTO_INCREMENTs DEFAULT %s(tdialectt type_compilerRnRRRp(RfRR RRtspec((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyRis cKsk|j}t|tjtjtjfr:|j||St|tjr[tdn tddS(sVRedefine SQLAlchemy's drop constraint to raise errors for invalid constraint type.s)MySQL does not support CHECK constraints.sFNo generic 'DROP CONSTRAINT' in MySQL - please specify constraint typeN( ReRlRtForeignKeyConstrainttPrimaryKeyConstrainttUniqueConstrainttvisit_drop_constrainttCheckConstraintRd(ReRfR&t constraint((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyt_mysql_drop_constraint%s   N(#tsqlalchemy.ext.compilerRt sqlalchemyRR*Rt util.compatRtRtimplRtbaseRRRR R R R R t autogenerateRRRRRRgRhRjRkRpRitDropConstraintR{(((sB/opt/alt/python27/lib/python2.7/site-packages/alembic/ddl/mysql.pyts,4   !