XׯdG ddlmZddlmZddlmZddlZedddZGd d eZe ej j d Z e ej ejfd Ze ejejd Ze ejej jdZe ejej jejdZe ejej jdZe ejej jdZe ejdZe ej dZe ej jej jdZe ej ej jdZe ej ej jejdZe ej ej jejejdZe ej ej jejejdZe ej ej jejejdZ e ej ej jejejdZ!e ej ej jejejdZ"e ej j#ej jejej ejfej$dZ%e ejej jej j#dZ&e ej j#ej jejdZ'e ejej jej j(dZ)e ejej jej j(d Z*e ejej jej j(d!Z+e ejej jej j(d"Z,e ejej jej j(d#Z-e ejej jd$Z.dS)%)Sql92ReverseEngineering) DefineModule)find_object_with_nameNDbPostgresqlREz Oracle Corp.z1.0)nameauthorversionceZdZedZedZefdZefdZedZedZ efdZ edZ ed Z xZ S) PostgresqlReverseEngineeringcdS)N Postgresql)clss "..\modules\db_postgresql_re_grt.pygetTargetDBMSNamez.PostgresqlReverseEngineering.getTargetDBMSName s|c2|j|jdS)Nr ) _connections__id__)r connections r serverVersionz*PostgresqlReverseEngineering.serverVersion$s 129==rctt|||}|r||dd}t jdd|jd|dd|d d d Dd dgzz}t j }|dd \|_ |_ |_|_||j|jd <|j d krt%d|z|S)Nselect version()rz PostgreSQL REz Connected to ,  c,g|]}t|Srint).0ns r z8PostgresqlReverseEngineering.connect...sOOOAQOOOr,.r zZPostgreSQL version %s is not a supported migration source. At least version 8 is required.)superr connect execute_queryfetchonegrtlog_inforsplitrstripclasses GrtVersion majorNumber minorNumber releaseNumber buildNumberrr RuntimeError)rrpasswordrver ver_partsr __class__s rr(z$PostgresqlReverseEngineering.connect(sL . 4 4 < )>s)C)C)I)I#)N)NOOORSUVTWRWWIk,,..Gclmonomocp `G !4g6KWM`=DC Z. / :"Q&&"$ADG$GHHHrcjdtt|||DS)z;Returns a list of schemata for the given connection object.c>g|]}|dv|S))INFORMATION_SCHEMA PG_CATALOGupper)r schema_names rr!z?PostgresqlReverseEngineering.getSchemaNames..;s<VVV%%''/SSSSSSr)r'r getSchemaNames)rr catalog_namer:s rrBz+PostgresqlReverseEngineering.getSchemaNames7sQVV6RTW0X0X0g0ghruA1B1BVVV Vrc|jd|jz}d}|||}|D]\}||||j|fz\}}} } } } } t j}||_||_ t||_ t||_ t| |_ t| |_t| |_t!| |_t| |_|j|dS)NzSELECT c.relname FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON (c.relnamespace = n.oid) WHERE n.nspname = '%s' AND c.relkind in ('S', 's')zkSELECT min_value, max_value, start_value, increment_by, last_value, is_cycled, cache_value FROM "%s"."%s" ) sequences remove_allrr)fetchallr*r+r/ db_SequenceownerstrminValuemaxValue startValue incrementBy lastNumberr cycleFlag cacheSizeappend)rrschemaseq_names_queryseq_details_querysequence_namesseq_name min_value max_value start_value increment_by last_value is_cycledncachesequences rreverseEngineerSequencesz5PostgresqlReverseEngineering.reverseEngineerSequencesAs##%%%69? D **:GGPPRR* . .LX]`]n]noy|MQWQ\^fPg|g^h^h^q^q^s^s ZIy+|ZTZ{..00H$HM#HN #IH  #IH "%k"2"2H #&|#4#4H "%j//H !$YH !$VH    # #H - - - - . .rc`|j}t|jdkr9tjdd||j|jfzdSd|jd|jd}d}|||}|D]\}}} } } tj } || _d| _ || _ |rd nd | _ d | D} | t| kr7tjd|zd |jd |d|||| |j|jfzD]\}t!|j|}|rMtj }|d z|z|_||_| j|htjd|zd |jd |d|d|jd || dS)Nrz%s: reverseEngineerTableIndiceszTReverse engineer of table %s.%s was attempted but the table has no columns attributer"aSELECT c2.relname, i.indisunique::int, i.indisclustered::int, i.indnatts, i.indkey FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_namespace n, pg_catalog.pg_index i WHERE c.oid = i.indrelid AND i.indexrelid = c2.oid AND c.relnamespace = n.oid AND n.nspname = '' AND c.relname = 'z1' AND i.indisprimary = False ORDER BY c2.relnamezSELECT a.attname FROM unnest(ARRAY%r) attrid JOIN pg_catalog.pg_attribute a ON attrid=a.attnum JOIN pg_catalog.pg_class c ON c.oid = a.attrelid JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = '%s' AND c.relname = '%s'UNIQUEINDEXc,g|]}t|Srr)rcols rr!zLPostgresqlReverseEngineering.reverseEngineerTableIndices..s>>>#SXX>>>rzReverse engineer of index r$zr was attempted but the referenced columns count differs from the number of its referenced columns. Skipping index!z) was attempted but the referenced column z could not be found on table z. Skipping index!)rIlencolumnsr+ send_errorrrr)rGr/db_Index isPrimaryunique indexTyper- send_warningrdb_IndexColumnreferencedColumnrRaddIndex)rrtablerSall_indices_queryindex_columns_query index_rows index_name is_unique is_clustered column_count column_refsindexcols column_namecolumn index_columns rreverseEngineerTableIndicesz8PostgresqlReverseEngineering.reverseEngineerTableIndices_s u}   " " N<fjmjjkBkBDJDOQVQ[j\\ ^ ^ ^1 #!+++uzzz 3 /&&z3DEENNPP NX " " JJ <{K((**E#EJEO$EL+4Axx'EO?>):):)<)<>>>Ds4yy(( !BSEZEZE\E\!\!\TZT_T_T_akakakmooo##4ZATX\^d^ikpkuWvAv#w#w  .u}kJJ #&;#=#=#?#?L(2S(8;(FL%4:L1M((6666$%FI^I^I`I`%`%`MS[[[ZdZdZdfqfqfqsxs}s}s}AAA NN5 ! ! ! !qrc|dkrXd|jjd|jd|jd}|||}|r|dd}t t |||||S)Nz USER-DEFINEDaPSELECT a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod) FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_class c ON a.attrelid = c.oid LEFT JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'rbz' AND a.attname = 'z.' AND NOT a.attisdropped; rr")rIrr)rGr'r getColumnDatatype)rrrrr~ type_namequeryudtyper:s rrz.PostgresqlReverseEngineering.getColumnDatatypes  & & & !;+++UZZZ FE &&z599BBDDF )"1IaL 1377II*V[]cenooorct||}|jd}|||}|D]\}}|stj}||_||_d|vr|d| d} n|} | } |j j D];} | j | ks| d| j Dvr | |_n<||_|j||jdks|jdkr|jdkrd} d} |||jd kr |jd kr| n| }d}g}g}|D];\}}||kr|}g}|||f||.s!IlIlIlXY!''))IlIlIlrr&aSELECT t.typname, e.enumlabel FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace LEFT JOIN pg_catalog.pg_enum e ON e.enumtypid = t.oid WHERE t.typrelid = 0 AND t.typtype = 'e' AND n.nspname NOT IN ('information_schema', 'pg_catalog') AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) ORDER BY e.enumsortorderaSELECT t.typname, e.enumlabel FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace LEFT JOIN pg_catalog.pg_enum e ON e.enumtypid = t.oid WHERE t.typrelid = 0 AND t.typtype = 'e' AND n.nspname NOT IN ('information_schema', 'pg_catalog') AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) r"zenum(%s)rc@g|]}d|ddzS)z'%s''z'')replace)rls rr!zMPostgresqlReverseEngineering.reverseEngineerUserDatatypes..s.AuAuAude&199UXZ^K_K_B_AuAuAur)r userDatatypesrFr)r+r/db_UserDatatyper sqlDefinitionfindr@_rdbmssimpleDatatypessynonyms actualTyperIrRr1r2join)rrcatalogr query_domains domain_typesrtype_defdatatype base_type up_type_namestype query_enumsquery_enums_80 enum_typesltypetypesvalues enum_labelenumType enum_labelss rreverseEngineerUserDatatypesz9PostgresqlReverseEngineering.reverseEngineerUserDatatypess##J//((***` ((]CC #/ 3 3 Ix {2244H%HM%-H "h$%8hmmC&8&8%89 $ $??,,L3  :##%%55IlIl]b]kIlIlIl9l9l*/H'E:m%HN  ! ( ( 2 2 2 2  ! # #)<)A)AgFY\]F]F]*KN**:gFY]^F^F^cjcvz{c{c{{{BPQQJEEF)3 * *% :%%%EFLL)V!4555 j))))H*/ 7 7& ;;6688 ) )3tyyAuAuitAuAuAu7v7v)w&&.#!(%,,X6666M*B)AF]F]@ 7 7rc||dd}d|vrdSd|vrdSd|vsd|vrdSdS)Nrrlinuxz visual c++windowsdarwinapple)r)r*lower)rrr8s rgetOSz"PostgresqlReverseEngineering.getOS sn ,>??HHJJ1MSSUU c>>7 S 9 __38tr)__name__ __module__ __qualname__ classmethodrrr(rBr`rrrr __classcell__)r:s@rr r s=[>>[>    [ VVVV[V..[.:55[5p p p p p[ p]7]7[]7B  [     rr c6tdS)Nzpostgresql_rdbms_info.xml)r initializeDBMSInforrrrrs ' : :;V W WWrc4tSN)r getDataSourceNamesrrrrrs ' : : < < >>rc6t|Sr)r isConnectedrs rrr6s ' 3 3J ? ??rc4tSr)r rrrrrr:s ' 9 9 ; ;;rc4tSr)r getSupportedObjectTypesrrrrr>s ' ? ? A AArc6t|Sr)r getServerVersionrs rrrBs ' 8 8 D DDrc6t|Sr)r getCatalogNamesrs rrrFs ' 7 7 C CCrc8t||Sr)r rBrrCs rrBrBJs ' 6 6z< P PPrc:t|||Sr)r getTableNamesrrCrAs rrrNs ' 5 5j,P[ \ \\rc:t|||Sr)r getViewNamesrs rrrRs ' 4 4Z{ [ [[rc:t|||Sr)r getTriggerNamesrs rrrVs ' 7 7 LR] ^ ^^rc:t|||Sr)r getProcedureNamesrs rrrZs ' 9 9*lT_ ` ``rc:t|||Sr)r getFunctionNamesrs rrr^s ' 8 8\S^ _ __rc<t||||Sr)r reverseEngineer)rrC schemata_listcontexts rrrbs ' 7 7 LR_ah i iirc8t||Sr)r r)rrs rrrfs ' D DZQX Y YYrc8t||Sr)r reverseEngineerCatalogrs rrrjs ' > >z< X XXrc8t||Sr)r reverseEngineerTablesrrSs rrrns ' = =j& Q QQrc8t||Sr)r reverseEngineerViewsrs rrrrs ' < rs,433333111111 \ 0.RW X X X uuuuu#:uuuv 3;,--XX.-X CHcj)**==+*= 3:sz**>>+*> 3:s{9::FF;:F 37CK:CJGGFFHGF 37CK:;;??<;? 37CK:;;@@<;@ 3:<<< 38BBB 3;)3;+IJJEEKJE 38S[;<<DD=<D 38S[;SZHHQQIHQ 38S[;SZTT]]UT] 38S[;SZTT\\UT\ 38S[;SZTT__UT_ 38S[;SZTTaaUTa 38S[;SZTT``UT` 3;)3;+I3:X[X`beblWmorowxxjjyxj 37CK:CK>::?>:::r