XׯdddlZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZdZd Zdad Zd Zd Zd ZdZdZdZdZdZGddZdZdZdZiZdZ GddZ!dS)N)escape_sql_identifier)"insert_item_to_plugin_context_menu)TableTemplateManager)CreateIndexForm)show_schema_manager)reducecTtjd|sdt|zS|S)Nz^([a-z][A-Z][0-9]_)*$z`%s`)rematchrss #..\modules\sqlide_schematree_ext.py esc_identr"s0 8+Q / /1-a0000 Hc|SNr s r_r)s Hrc"tadSr)rtemplate_managerrrrinitr-s,--rctj|d}|dd}d}d}d}d}d} tdkr dddd d d d d d} n ddddddddd} t} dD]R} | j|kr || j}nd}| jdkr$| j}d} | | jI| jdvrA| j}d}| jdkrdi| jdkrdw| jdkrd| jd krd!| jd"vr;| j}| jd}|dz }| jdkr| | j| jd#vr | j}d}| jd$krH| j}| jr6| | jj| jjd%z| jz}d} =td&| jT|rd}dS| d'} | r| | dz}nd}d} |s| rRtd1d1d2d3gtdkdftd4d5d2gd6tdkdftd7d8d9gd6tdkdftd:d:d;ddgtdkdftd:d:d;dgtdkodjdkdftd<dd?gt| dkdftd@d@dAddgtdkdftd@d@dBd>gtdkdftdCdCdDddgtdkdftdCdCdEd>gtdkdftdFdFdGdgtdkdftdHdHdIgdJtdkdftdKdKdLd!gtdkdftdMdMdNdgtdkdfddddgddftdOdOdPdgtdQkdftdRdSdTdgtdkdftdUdUdVdgtdkdfg}tj dW}| dW|dX||||dz }tj dY}| dZ|d[||||dz }t!d}t!d}|D]\}}}}}}|s|r|r||vr|)||@||t'|||d\} | t+|||t'|||d\} | t+|d}nd}|d]vr[tdkrG|r:||tj d\tj|dz }d}tj d^| z} | fd_||| |dz }|d`vrtj da} ||| |dz }t2jD]5}| |j|djffdb |jd\6| | dct2jddd\||r:||tj d\tj|dz }d}tj de} | fdf||| |dz }|r|r:||tj d\tj|dz }d}|dkr,tj dg| ||z} n-tj dh|| ||fz} | fdi||| |dz }d}|dkrJ|rHtj dj} | fdk||| |dz }|r|r:||tj d\tj|dz }d}|dkr,tj dl| ||z} n-tj dm|| ||fz} | fdn||| |dz }|dkrX|rVtj do|dkrdndp|zz} | fdq||| |dz }|drvrkr| r|r:||tj d\tj|dz }d}tj du} | fdv||| |dz }dSdSdS)wNmenu selectionFrSchemaTableViewFunctionStored ProcedureIndexTriggerz Foreign Key) db.Schemadb.Tabledb.View db.Functiondb.StoredProceduredb.Index db.Triggerz db.ForeignKeySchemasTablesViews FunctionszStored ProceduresIndexesTriggersz Foreign KeysTcolumns)tablesviews functionsstoredProceduresr1r$r2r%r3r&r4r')r#r$r%r&r')r(r) db.Column:zUnhandled typebuiltins_separatorzExport Data to CSV File...zExport Table to CSVexport_table_csvzImport Data from CSV File...zImport Table to CSVimport_table_csvzDump Data to SQL File...z Dump Table dump_tableName name_shortr#z Name (short)z Short Name) r1r2r3r4r$db.Table:db.Columndb.View:db.Columnr%r'r&z Name (long)z Long Name name_longzSelect All Statementselect_all_statementzSelect Columns Statementselect_columns_statementr=r>zInsert Statementinsert_all_statementinsert_columns_statementzUpdate Statementupdate_all_statementupdate_columns_statementzDelete Statementdelete_statementzCreate Statementcreate_statement)r#r$r%r'r&zProcedure Callcall_procedurez Function Call call_functionJoin Selected Tablesbuild_joined_selectzDelete with ReferenceszDelete With Referencesbuild_cascaded_deleteSelect Row Referencesbuild_cascaded_selectzCopy to Clipboardcopy_to_clipboardzSend to SQL EditorzSend to Editorsend_to_editor) r1r2r3r4r#r$r%r&r'z Create %s...c<tdjS)Nr)do_create_object schemaName)rselection_db_typesendersrz+handleLiveTreeContextMenu..s.>vyQR|G^`q.r.rr)r$r1zCreate Table Like...c<t||Sr)rcreate_table_like_template)templschemarWs rrXz+handleLiveTreeContextMenu..s9m}nYnYZ`bhjonpnprzEdit Templates...zEdit TemplateszCreate Schema...c&tddS)Nr#)rTrWsrrXz+handleLiveTreeContextMenu..s.>vt[.Y.Yrz Alter %s...zAlter %i %s...c$tSr)do_alter_objectrrWsrrXz+handleLiveTreeContextMenu..ofi.P.PrzTable Maintenance...cTttdDdS)Ncg|] }|j Sr)rU.0objs r z?handleLiveTreeContextMenu....sNsNsNsbes~NsNsNsrT)rsetrasrrXz+handleLiveTreeContextMenu..s-.A&#NsNsirNsNsNsJtJtvz.{.{rz Drop %s...z Drop %i %s...c$tSr)do_drop_objectrasrrXz+handleLiveTreeContextMenu..snVY.O.OrzTruncate %s...z %i Tablesc$tSr)do_truncate_tablerasrrXz+handleLiveTreeContextMenu..s.? .R.Rr)r$r#r1zSearch Table Data...c"tSr) open_searchr^srrXz+handleLiveTreeContextMenu..!sk&.A.ArzCreate Index...c$tSr)do_create_indexrasrrXz+handleLiveTreeContextMenu..*rbr)mformsfromgrtlenritypeaddnameownerprint find_itemget_item_index newMenuItemrset_namesetInternalName insert_item CodeGenerator add_separatoradd_item_with_titlegetattr set_enabledboolSeparatorMenuItemgetadd_clicked_callbackr templatesrUedit_templatesr)rwrWargsr node_typemixedselection_typeobject_selectedobject_selected_countcolumn_selectedobject_type_caption unique_tablesr itemindexneeds_separator code_items copy_submenu send_submenugencopygensendcaptionaccessibilityNametypesenabled allow_mixedr[rrVs ` @@rhandleLiveTreeContextMenur3s >$v, ' 'D[!II ENOO 9~~"  $+   $!'#6"%,   EEM &,&, 6Y   F  6Y  VN"O   af % % % % VK K KVN#Ov!!$.!!7""$-!!;&&$1!!---$8! V` ` `VN ! "O !Q & !v##!!!&))) V1 1 1VN#OO V $ $VNw 9!!!',///!"c!1!&!8"OO "AF + + + + m ~~233  ''--a/EEE " 7 $o7 $V99fl[M3y>>\]K]_de^,,lLKfKfKfhkluhvhvyzhz|@A]++[+HcHcHcehiresesvwewy}~3446LNdgqs|f}@CDM@N@NQR@RTYZ3446LNdgpfqsvxAtBtBFGtGtjLUVWLXL]ajLjlqr788:TVptHJ]s^`cdq`r`rvw`wy~/002DF\_ikt^uwz|ExFxFIJxJLQR/002DF`cwbxz}H{I{ILM{MOTU/002DF\_ikt^uwz|ExFxFIJxJLQR/002DF`cwbxz}H{I{ILM{MOTU/002DFX[eZfhkluhvhvyzhz}BC/002DFX[d[d[dfijsftftwxfxz@-..0@BRUiTjlopylzlz}~l~AFG_--R_Q`befobpbpstbtv{|tj\4G3446LNcfpeqsvxAtBtBFGtGINO5668PRilvkwy|~GzHzHLMzMOTU4557NPgjtiuwz|ExFxFJKxKMRS'J,"-.ABBL  ! !"5 6 6 6  ( ()< = = =   UL 1 1 1 QJE!-.BCCL  ! !"2 3 3 3  ( ()9 : : :   UL 1 1 1 QJE#FIu==G#FIt<N>]_oqsttt  ! (  (:2v?W(X(XYYY "'%&899D  % %&Y&Y&Y&Y Z Z Z   UD ) ) ) AIE  # (  (:2v?W(X(XYYY "'$)))-:M:Q:QR`bp:q:q*qrr)*:>SUhUlUlm{~LVMVM>N+NOO  % %&P&P&P&P&P Q Q Q   UD ) ) ) AIE"O Z ' 'O '%&<==D  % %&{&{&{&{&{ | | |   UD ) ) ) QJE   (  (:2v?W(X(XYYY "'$))),9L9P9PQ_ao9p9p*pqq)/=RTgTkTklz}KULUL=M+MNN  % %&O&O&O&O&O P P P   UD ) ) ) AIE Z ' 'O '%&6EZ^_E_E_''eptIfI'JKKD  % %&R&R&R&R&R S S S   UD ) ) ) QJE @ @ @%&<==D  % %&A&A&A&A B B B .tT : : : 1 1 1o 1 (  (:2v?W(X(XYYY "'%&788D  % %&P&P&P&P&P Q Q Q   UD ) ) ) QJEEE 2 1 1 1rcNtjj|dSr)grtmodulesMySQLDBSearchModuleshowSearchPanel)editors rroro/s!K#33F;;;;;rcr|dkr||dddS|||ddS)Nr#rR)alterLiveObject)r schema_namedb_types rrTrT3sI+wB/////w R88888rc\|D](}||j|j|j)dSr)rrurUrw)rrrgs rr`r`9s@CCsxBBBBCCrcjtjtjtj}|dtjd}|d|||d| tj dddtj }| |dd| tj |||tjdtj}|dtj}|dtjd}|d||dd||dd||dd|d d |||S) NzReview SQL Code to ExecuteF z#Review the SQL code to be executed.TExecuteCanceliih)rrForm main_form FormNormal set_titlenewBox set_padding set_content set_spacingrvnewLabel CodeEditor set_language LanguageMySQLset_text set_featuresFeatureReadOnly newButtonadd_endset_size run_modal)codeformboxrokcancelbboxs rreview_sql_coder?s ;v{,,..0A B BDNN/000 -  COOBSOOAGGFOA B BE4PPP   FGGFD$ ,--- OOD .555    BKK     F OOH =  DQLLUD!!!LL%%%KKeT"""MM#s >>"f % %%rc g}|D]K}|jdkr>|t|jdt|jLt |dkr-t jdd|dzddd }nIt |dkr4t jd d t |zddd }ndS|t j krdS|t j kr.td d |DsdSd}|D]} d|z}| |d|dz }$#t$r}|t |dz krKt jdt!|dz|zdddt j krYd}~nXnJt jdt!|dz|zdddt j krYd}~n Yd}~d}~wwxYwt jd|zdS)Nr$.rzTruncate Tablez>Please confirm permanent deletion of all rows from table `%s`.r Review SQLrTruncatezTruncate TableszFPlease confirm permanent deletion of all rows from %s selected tables. cg|]}d|zS)z TRUNCATE %s;rrfts rrhz%do_truncate_table..ps)O)O)O1>A+=)O)O)Orz TRUNCATE %szCould not Truncate Tablez0 Click Cancel to stop truncating other tables. OKrR z%i tables truncated)ruappendrrUrwrtrr Utilities show_message ResultCancelResultOkrjoinexecuteManagementCommand Exception show_errorstrApprset_status_text) rrr1rgrescounttablestmtexcs rrmrm_s FVV 8z ! ! MMYs~%>%>%>%> #(@S@S@ST U U U 6{{a++,<>~BHIJBK?K)5xMM Vq++,=@HKNOUKVKV@V)5xMM  f!!!   tyy)O)O)O)O)OPPQQ  F E    5(D  + +D! 4 4 4 QJEE   s6{{1}$$#../I3s88UJLJKOLOQUW_acddhnh{{{EEEEE{#../I3s88TZ?[_K_aegikmnnrxsFFFEEEEE   JNN$$%:U%BCCCCCs 1 E HAH Please confirm permanent deletion of tables %s and their data.z Drop SchemazBPlease confirm permanent deletion of schema `%s` and all its data.zDrop %i SchemaszCPlease confirm permanent deletion of schemas %s and all their data.cg|] }|j Srrwrfr s rrhz"do_drop_object..sAA\A\A\MNBCBHA\A\A\rzDrop %sz%Please confirm permanent deletion of z `z`. z objects: cg|] }|j Srrrs rrhz"do_drop_object..sAmHmHmHyznontmHmHmHrrcg|] \}}|dz S);r)rfcr s rrhz"do_drop_object..s )G)G)GDAq!C%)G)G)GrzCould not Drop Objectz/ Click Cancel to stop dropping other objects. rz%i objects dropped)rirurrwrvrrUrxryrrtrrrrlistlowerrrr enumerateexecuteCommandrrrrrr) rr statements table_names object_typesrgrrr drop_countirrs rrkrks8JK55L%% 8{ " "% #((;(;;D   X & & & & X # #   )CN*C*C*C*CYsxEXEXEXY Z Z Z   W % % %  X % % %+4S^+D+D+D+DiPSPXFYFYFYZD   Y ' ' ' ' X- - - --6s~-F-F-F-F RURZH[H[H[\D   / 0 0 0 0 X & & &,5cn,E,E,E,EyQTQYGZGZGZ[D   Z ( ( ( ( X " " "(1#.(A(A(A(A9SXCVCVCVWD   V $ $ $ $ X # # #/8/B/B/B/BIciNbDcDcDcDcenoroxo}e~e~e~D   W % % % % -sx 8 8 81d)$$$$ ;!7!77J#k"2"223{++T23333J  <1%%n7hjnprtv w w w C, A::"// -lpyz{p|qB.C-98ZQQCC"//0@3{CSCS0S-mptpypy{FqGqG.G-98ZQQCC \ ! ! A::"// -qu~@AvBvG.H-98ZQQCC"//0AE0I-rvzvvA\A\R[A\A\A\w]w].^-98ZQQCC A::"// D||_||_i|_i|_dSr)rcatalogtables_by_namereferencing_foreign_keys)selfrrs r__init__zDependencyAnalyzer.__init__s'&  (*%%%rctjj}tjddtjd|jdd\}}|sdS|||tjdd|j zddddd}| |d |j g||_ | |tjdd |j z|j S) N sqlide_grtz Connecting...zConnect to MySQLrootFz!Reverse engineering schema %s... T)reverseEngineerTablesreverseEngineerTriggersreverseEngineerViewsreverseEngineerRoutinesrRz$Reverse engineer schema %s finished ) rr DbMySQLRElog_inforrrfind_or_ask_for_passwordhostIdentifierconnectrreverseEngineerr disconnect)r connectionmrpasswordoptionss r load_datazDependencyAnalyzer.load_datas K ! \?333'@@ASU_Unpvx}~~ H 4 *h''' \#G$JZ#Z[[[-1(-%*(-//((R$:J9KWUU  Z    \#JTM]#]^^^|rc|jjD]i}|jD]_}||j|j<|jD]F}|j|jg}| |||j|j<G`jdSr) rschematar1rrw foreignKeysrrreferencedTabler)rr rfrefss r scan_tableszDependencyAnalyzer.scan_tabless& L LAX L L./#AF+LLA8<.-s???r"???r)rr#s rget_referenced_tablesz(DependencyAnalyzer.get_referenced_tables,s??U->????rcj|jD]}|j|kr|cS|jD]}|j|kr|cSdSrrrrtable1table2r(s rget_foreign_key_betweenz*DependencyAnalyzer.get_foreign_key_between0sc$  B!V++ ,$  B!V++ ,trc8|jD]}|j|kr|cSdSrr+r,s rget_foreign_key_fromz'DependencyAnalyzer.get_foreign_key_from:s5$  B!V++ ,trc i i t|jD] }d |<d |< d |< fd} fd}t|j}|r1||}||D]}||||1g} |} | r; | } | || | | } | ;| S)Nircp|vs|vrdS||dzkr|dz|<||<dSdS)Nrr)uvdistance predecessors rrelaxz?DependencyAnalyzer.find_foreign_key_path_between..relaxNsZ  AX$5$5{Xa[1_,,&qkAo !" A-,rcXtfd|}|||S)Nc0||kr|n|Srr)abr6s rrXzXDependencyAnalyzer.find_foreign_key_path_between..get_cheapest..Vs!x{)B)BAAr)rremove) remainingr5r6s r get_cheapestzFDependencyAnalyzer.find_foreign_key_path_between..get_cheapestUs5IIII9UUA   Q   Hr)rrvaluesr)rr1)r from_tableto_tablerr8r?r>r4r5 foreign_keysrpredr6r7s @@rfind_foreign_key_path_betweenz0DependencyAnalyzer.find_foreign_key_path_betweenAs[ $-446677 ' 'E!%K &HUOO  # # # # # #      ,335566   Y''A//22  a    !n q>D    9 9$ B B C C CA!n  rN) __name__ __module__ __qualname__rrrr!r$r)r/r1rErrrrrs+++* L L L <<<@@@(((((rrcx|jd|zd}|stjd|zt d|}||j}|s3tjddStjd|z||jd|z<nDtjd|zt ||}|S)Nzsqlide_grt:Catalog:%sz$Reverse engineering schema for %s...z Cancelled.z%s reverse engineeredz+Reusing reverse engineered schema for %s...) customDatarrrrrrrr)rr\rinfos rdependencyInfoForSchemaInEditorrLms##$;f$DdKKG 3 (()ORX)XYYY!$//..!233  JNN   , ,\ : : : F (()@6)IJJJ>E1F:;; (()VY_)_```!'622 Krc g}tt|jD]}|t |jjdt |j|jdt |jjdt |j|jd |S)Nrz =  AND ) rangertreferencedColumnsrrrrwrxr0r)r(joinsrs rformat_fk_joinrRs E 3r+,, - -oo "2D2I(J(J(J(JIVXVjklVmVrLsLsLsLsu~@B@H@MvNvNvNvNPYZ\ZdefZgZlPmPmPmn o o o o <<  rc^t}t|D]\}}||dzdD]}|||}|r||nm|rg|||p|||}|s#t d|jd|jdS||dS|sdSddtd|Dd|Dzdd d |DS) NrzCould not find path from z to zSELECT * FROM rc6g|]}t|jSrrrwrs rrhzjoin_tables..s#BeBeBeYZ9QVCTCTBeBeBerc@g|]}t|jjSr)rrxrwr's rrhzjoin_tables..sQiSiSiSGIirsus{tAjBjBiSiSiSrz WHERE rNc34K|]}t|VdSrrRr's r zjoin_tables..sacGcG{}drsudvdvcGcGcGcGcGcGr) rirr/rvrEryrwupdater) rKr1auto_add_missingrQrt1t2r(fkss r join_tablesr_s EEE6""  21, B--b"55B  " # <> QJEE !W^^ QJE A:: % e$$$MMM aZZDGsNN MM% EE T!W EE 4rceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdS)rc0||_||_||_dSr)rr to_editor)rrrrjs rrzCodeGenerator.__init__s ""rc|jjd|d|}|tvr t|S|jdt |dt |d}|rg}|}|rq|d}|ddk}|d} |||| f|}|q|t|<t||SdS) Nr6rzSHOW COLUMNS FROM rFieldKeyPRIDefault) r__id__table_column_cacheexecuteManagementQueryr goToFirstRowstringFieldValueByNamernextRowry) rr\rinfo_keyrsr0rrwis_keydefaults rget_table_columnszCodeGenerator.get_table_columnss&!%!3!3!3VVVUUC ) ) )%h/ / [ / / /YW]M^M^M^M^`ijo`p`p`p0qst u u G""B "009922599UB33I>>fg6777ZZ\\  " ,3 x ( 'NNNN4rcDtj|dSr)rrrset_clipboard_textrrds rrPzCodeGenerator.copy_to_clipboards++D11111rc|jj}|s|j}|r||dSdSr)ractiveQueryEditoraddQueryEditorreplaceSelection)rrdeds rrQzCodeGenerator.send_to_editorsS [ * .++--B  &    % % % % % & &rcl|jr||dS||dSr)rjrQrPr}s rsendzCodeGenerator.sends@ > )    % % % % %  " "4 ( ( ( ( (rcg}|jD],}|dt|jz-|d|dS)N%sr)rrrrwrrrpartsrgs rr<zCodeGenerator.name_shorts`> 5 5C LL #( 3 33 4 4 4 4 $))E""#####rc*g}|jD]`}||jrt|jjnt|jdt|ja|d|dS)Nrr)rrrxrrwrUrrrs rr?zCodeGenerator.name_longs> A AC LL$iIcin$=$=$=PYZ]ZhPiPi$i$iktuxu}k~k~k~ A A A A $))E""#####rc g}|jD]jdkrj|ddfd|jjDdtjdtjd| d|dS) Nr0SELECT z, c3pK|]0}tjdt|dV1dS)rrNrU)rfrrgs rrYz5CodeGenerator.select_all_statement..soFrFr{|QZ[^[cQdQdQdQdfopqrsptfufufuFvFrFrFrFrFrFrrz FROM r; r) rrurxrrrzrUrwrrrs @rr@z"CodeGenerator.select_all_statementsj> d dCx9$$i LLLy~~FrFrFrFrAEAWAWX[XfhkhpAqAqFrFrFr8r8r8r8rt}~A~LtMtMtMtMOXY\YaObObObObc d d d d $))E""#####rc Pg}d}|jD]5}|jdkr(||j|jr|j}6|rb|ddd|Ddt|jdt|jddSdS)Nr5rrc3:K|]}dt|zVdSrNrrfrs rrYz9CodeGenerator.select_columns_statement..s. & &Cx;&&sx(((9&IE  Y III499.sYXAXAstX\_hijklim_n_nXnXAXAXAXAXAXAr ) VALUES (c3@K|]}d|dd|ddVdS)z<{r: rL}>Nrrs rrYz5CodeGenerator.insert_all_statement..seXFXFxyxyhijkhlhlhlnopqnrnrnrXsXFXFXFXFXFXFr); r rrurxrzrUrwrrrrrrrgr0s rrBz"CodeGenerator.insert_all_statementsS> H HCx9$$i,,S^SXFFG LLLyQTQ_G`G`G`G`bkloltbubububuMRZZXAXAxXAXAXANANANANAMRZZXFXF~EXFXFXFNFNFNFNFG H H H H $))E""#####rc >|jdj}|dt|jdt|jddd|jDddd|jDd dS) Nrrrrrc3DK|]}dt|jzVdSrrUres rrYz9CodeGenerator.insert_columns_statement..sUOEOEnqtV_`c`hViViOiOEOEOEOEOEOErrc3*K|]}d|jzVdS)<{%s}>Nrrs rrYz9CodeGenerator.insert_columns_statement..s,NyNyefxZ[Z`O`NyNyNyNyNyNyrrrrxrrrUrwrr#s rrCz&CodeGenerator.insert_columns_statementsq!' %JZ@[@[@[@[]fglgq]r]r]r]rDIJJOEOEuyvDOEOEOEEEEEEEEEDIJJNyNyjnjxNyNyNyDyDyDyDy{ | | | | |rcg}|jD]}|jdkr|j}||j|j}|dt|jdt|jddd|Dddd |Dd | d |dS) Nr0UPDATE r SET rc3jK|].}t|dd|dd|ddV/dS)r = <{rrLrNrrs rrYz5CodeGenerator.update_all_statement..!s~MQMQDEbklmnolpbqbqbqbqstuvswswswyz{|y}y}y}M~MQMQMQMQMQMQrz WHERE rNcNg|]"}|d dt|dz#S)rz %s = <{expr}>rrrs rrhz6CodeGenerator.update_all_statement.."scPLPLPLvwGHIJGKPLP_bklmnolpbqbqPqPLPLPLrrrrrs rrDz"CodeGenerator.update_all_statementsU> O OCx9$$i,,S^SXFFG LLL3>AZAZAZAZ\efifn\o\o\o\oBG**MQMQIPMQMQMQCQCQCQCQBI,,PLPL|CPLPLPLCMCMCMCMN O O O O $))E""#####rc |jdj}|dt|jdt|jddd|jDddS)Nrrrrrc3TK|]#}t|jd|jdV$dS)rrNrUres rrYz9CodeGenerator.update_columns_statement..)siOZOZDG`ijmjr`s`s`s`suxu}u}u}O~OZOZOZOZOZOZr WHERE <{where_expression}>; rr#s rrEz&CodeGenerator.update_columns_statement%sq!' IV[VfLgLgLgLgirsxs}i~i~i~i~DIJJOZOZKOKYOZOZOZEZEZEZEZ[ \ \ \ \ \rc g}|jD]B}|dt|jdt|jdC|d|dS)Nz DELETE FROM rrr)rrrrUrwrr)rrrs rrFzCodeGenerator.delete_statement+s^ D DE LLLyY^YiOjOjOjOjluv{wAmBmBmBmBC D D D D $))E""#####rc g}tjjjjd}|jD]}d}|jdkr4|jdt|j zd}d}n|jdkrI|jdt|j d t|j d}d }n|jd krW|jd t|j d t|j d}d }d|zdz|zdz}n,|jdkrV|jdt|j d t|j d}d}d|zdz|zdz}n|jdkrV|jdt|j d t|j d}d}d|zdz|zdz}nj|jdkrH|jdt|j d t|j d}d}ntd|j&|ra| rM| |}|std|d|j o|||ztd|j z|d|dS)N SqlDelimiterz%s; r#zSHOW CREATE SCHEMA %srzCreate Databaser$zSHOW CREATE TABLE rz Create Tabler)zSHOW CREATE TRIGGER Statementz DELIMITER z %sz DELIMITER ; r'SHOW CREATE PROCEDURE Create Procedurer&SHOW CREATE FUNCTION Create Functionr%zSHOW CREATE VIEW z Create ViewzUnsupported typez No field z for z!Couldn't fetch create code for %sr)rrwbrrrurrrrrwrUryrsrtrrr)rr delimiterrgwrapperrw field_namesqls rrGzCodeGenerator.create_statement1sHK'/? >! F! FCGx;&&[778OS\]`]eSfSf8gijkk. Z''[777U^_b_mUnUnUnUnpyz}{CqDqDqD9EGHII+ \))[777W`adaoWpWpWpWpr{|}EsFsFsF9GIJKK( &2V;iGJ[[111[777YbcfcqYrYrYrYrt}BGuHuHuH9IKLMM/ &2V;iGJ[[]**[777XabebpXqXqXqXqs|~A~FtGtGtG9HJKLL. &2V;iGJ[[Y&&[777T]^a^lTmTmTmTmoxy|zBpCpCpC9DFGHH* (#(333 Fboo'' F// ;;0E***chhGHHHHLL3////9CHDEEEE $))E""#####rc g}|jD]+}|jdt|jdt|jd}|r|r|d}|rtj d|}|rt|t| ddz d}| dt|jdt|jdd d |Dd -|d |dS) Nrrrrz(CREATE .* PROCEDURE [^(]*\()rzCALL rarc<g|]}d|zSrstriprfr;s rrhz0CodeGenerator.call_procedure..es+JnJnJnde8VWV]V]V_V_K_JnJnJnrrrRrrrrrrUrwrsrtr r rgrtgroupsrrrrrrgrwrr rs rrHzCodeGenerator.call_procedureZs> r rC333U^_b_mUnUnUnUnpyz}{CqDqDqD5EGHIIB rboo'' r//0BCCr!@#FFAr5c#ahhjjm:L:LQ:N:O:O6PQQ Icn.ss&BfBfBf\]8aggiiCWBfBfBfrrbrrrs rrIzCodeGenerator.call_functionhs> j jC333T]^a^lTmTmTmTmoxy|zBpCpCpC5DFGHHB jboo'' j//0ABBj!?EEAj5c#ahhjjm:L:LQ:N:O:O6PQQ Icn4M4M4M4MyY\YaObObObOb8< BfBfaeBfBfBf8g8g8g8g&ijjj $))E""#####rcV|j}|j}t||dj}|sdS|g}|D]9}||j|j}|r||:t|t|kr%tj ddddddSt||d}|r| |ntj dddd dtjkrNt||d }|r| |n'tj dd ddddSdS|js3tjd dSdS) NrrJz3Could reverse engineer some of the selected tables.rrRFzjSome of the tables could not be joined together. Should missing intermediate tables be searched and added?z Add MissingrTzCould not join selected tables.z=Select statement for joined selection was copied to clipboard)rrrLrUrr!rwrrtrrrrr_rrrjrrr)rrrrKr1objectrquerys rrKz!CodeGenerator.build_joined_selectwsN .vy|7NOO  F  % %F(():FKHHE % e$$$ v;;#i.. ( (   ' '(>@uw{}BD E E E FD&%00   IIe    **+ADqs@BJLNOOSYSbbb#D&$77IIe$$$$$//0FHikoqsuwxxxF~ l *..   * *+j k k k k k l lrc  |j}|jd}t||j}|sdS|||j|j s-tj dd|jzddddS j s-tj dd|jzddddSg j j D]9} jd|j jd|j jd :d    fd g} ||gtg} j j D]$}| d |j jz%d |d zd |z}|||js;tjd jzdSdS)NrrN$Could not find reverse engineered %srrRzNUnable to find referencing tables for %s because the table has no primary key.r = @ _to_selectrNc||vrdS||d}||D]}|j||||gz|d|jz}|dd|d|D jzz }|r.|ddd|Dzz }|d zz }n|d zz }||dS) Nc||vr||gzS|Srrrrs r add_to_listzOCodeGenerator.build_cascaded_select..create_select..add_to_listt##4&=( rz SELECT %s.* z FROM %s rc&g|]}|jjSrrxrwr's rrhzNCodeGenerator.build_cascaded_select..create_select..s=f=f=fPRbhm=f=f=fr WHERE %s  AND c,g|]}t|SrrXr's rrhzNCodeGenerator.build_cascaded_select..create_select.."DrDrDr\^^TVEWEWDrDrDrr AND %s; WHERE %s;rvr$rxrwrr) rrKselectsreference_chainvisitedrr(r create_selectpk the_tables rrz:CodeGenerator.build_cascaded_select..create_selects0 KK       44U;; X X bhg"7MwWWWW#ej0E _tyy=f=fVe=f=f=fhqhv1w1w'x'xx xE .),>,C,CDrDrbqDrDrDr,s,sss,r112-- NN5 ! ! ! ! !rzSET @%s_to_select = <{row_id}>;rz;Select statements for %s references was copied to clipboardrrrLrUrr!rwrrrr primaryKeyr0rreferencedColumnrrirrjrrr) rrrrKrrvarsetuprrrrs @@@rrOz#CodeGenerator.build_cascaded_selectsh".vv7HII  F (():FKHH     ' '(?AgjpjuAuw{}BD E E E F#    ' '(?BRU[U`B`&*B 4 4 4 F%- t tA IIASAXAXAXZ[ZlZqZqZqr s s s s \\"   " " " " " " ", iwCEE:::%- Y YA OO=@R@WW X X X X (##d*TYYw-?-?? %~ { *..   * *+hktky+y z z z z z { {rc  |j}|jd}t||j}|sdS|||j|j s-tj dd|jzddddS j s-tj dd|jzddddSg j j D]9} jd|j jd |j jd :d    fd g} ||gtg} j j D]$}| d |j jz%dd|dd|d}|||js;tjd jzdSdS)a] To delete a row from a table all references to that row from other tables must be deleted first, otherwise the FK constraint won't let it be done. So this function will build the DELETE statements needed to do that, by deleting references to the given row all the way up to the wanted table. rNzCascading DELETErrrRzPUnable to create a DELETE statement for %s because the table has no primary key.rr _to_deleterNc||vrdS||d}||D]}|j||||gz|d|jz}|dd|d|D jzz }|r.|ddd|Dzz }|d zz }n|d zz }||dS) Nc||vr||gzS|Srrrs rrzOCodeGenerator.build_cascaded_delete..create_delete..add_to_listrrzDELETE FROM %s z USING %s rc&g|]}|jjSrrr's rrhzNCodeGenerator.build_cascaded_delete..create_delete..s>g>g>gQSrx}>g>g>grrrc,g|]}t|SrrXr's rrhzNCodeGenerator.build_cascaded_delete..create_delete..rrrrr) rrKdeletesrrrr(r create_deleterrs rrz:CodeGenerator.build_cascaded_delete..create_deletes1 KK       44U;; X X bhg"7MwWWWW&3E % ++>g>gWf>g>g>giriw2x2x(y(yy yE .),>,C,CDrDrbqDrDrDr,s,sss,r112-- NN5 ! ! ! ! !rzSET @%s_to_delete = <{row_id}>;a -- All objects that reference that row (directly or indirectly) will be deleted when this snippet is executed. -- To preview the rows to be deleted, use Select Row Dependencies START TRANSACTION; -- Provide the values of the primary key of the row to delete. rrz COMMIT; z/DELETE statement for %s was copied to clipboardr) rrrrKrrrrrrrs @@@rrMz#CodeGenerator.build_cascaded_deletesn".vv7HII  F (():FKHH     ' '(:rs , 444444@@@@@@000000//////555555      ... yyyx<<<999 CCC &&&@!D!D!DH*^H^H^HBpppppppph(HHH0(jojojojojojojojojojor