pax_global_header00006660000000000000000000000064141263476000014515gustar00rootroot0000000000000052 comment=8cd1a625ee9d10726c3e8ff5d8a694ec7ece37e5 apgdiff-release_2.7.0/000077500000000000000000000000001412634760000146235ustar00rootroot00000000000000apgdiff-release_2.7.0/.gitignore000077500000000000000000000001211412634760000166100ustar00rootroot00000000000000/target/ nbactions.xml lib build .settings .classpath .project dist .idea/ *.iml apgdiff-release_2.7.0/README.md000077500000000000000000000212441412634760000161100ustar00rootroot00000000000000# Another PostgreSQL Diff Tool (aka apgdiff) Another PostgreSQL Diff Tool is free PostgreSQL diff tool that is useful for comparison/diffing of database schemas. You can find more information at its website at http://www.apgdiff.com/. If you found an issue in apgdiff, please file it at https://github.com/fordfrog/apgdiff/issues. If you for some reason need to contact author of this application, you can email him at fordfrog@fordfrog.com. This repo is mainly unmaintained. But if you found a bug and create a pull request chances are good that it will be merged. ## Changelog ### Version 2.7.0 #### New Features * Initial Support to PARTITION BY on Create Table jalissonmello * Initial suport to identity column. #277 jalissonmello * Support Postgresql 12 -Add support for FUNCTION in CREATE TRIGGER #273 alexander-smyslov * Add supports for CREATE SEQUENCE IF NOT EXISTS and CREATE INDEX IF NOT EXISTS. UltramanJack #### Fixes * Fix incorrect disable trigger parsing of quoted identifiers. Bugfixes #271 marcus-kempe * fix for null pointer exception #270 marco44 * Fix issue where rule parsing was throwing # 269-marcus-kempe * fixed some crashes #257 d1maxa * Error on disable/enable trigger on trigger that dont exists on old schema. * Drop and Add constraint if table exists, issue #252 ### Version 2.6 #### New Features * PostgresSQL 10 Support * Update dependencies to development with Java 11 * Add security barrier and another options to Views * Add support to Create/Drop Rule * Triggers: Rerencing,Enable,Disable * use using column::type to cast the type of column #### Fixes * Fix GRANT SEQUENCE, ALTER VIEW OWNER, GRANT(cols) errors #### Tasks Done * Remove SourceForge repository ### Version 2.5 #### New Features * MATERIALIZED VIEW support in PostgreSQL 9.3 (Marti Raudsepp) * Better support for inherited tables (Daniel Watson) * Added support for CREATE UNLOGGED TABLE (Anatoliy Basov) * Added support for /**/ comments (yulei) * Support of triggers for views + clause 'INSTEAD OF' (Sergej Bonich) * Add support for GRANT and REVOKE on objects: table, view, sequence, column (serge-pouliquen-itf) * Add support for ALTER TABLE ... OWNER TO (serge-pouliquen-itf) * Add support for CREATE TYPE (Karol Rybak) * Add support for CREATE EXTENSION (Átila Camurça Alves) * Add basic support for CREATE FOREIGN TABLE (Bruno Almeida) #### Fixes * Added hint to use "CREATE TABLE ... CONSTRAINT name PRIMARY KEY/UNIQUE ..." instead of "CREATE TABLE ... PRIMARY KEY/UNIQUE ..." because apgdiff cannot easily support unnamed constraints. * Fixed issue with incorrect end of expression detection because of ignored [ and ] brackets. This caused issues for example in statements like "... DEFAULT ARRAY[1, 2, 3], ..." where end of expression was detected at first comma (and not the third one) which then resulted in parser exception. * Fixed issue when outputting unsupported command information and the unsupported command string is shorter than 20 characters. (Linas Valiukas) * Added Spanish translation. (Sebastian Ortiz) * Fitted English help to 80 characters in width. (Dave Jarvis) * View query changes are now correctly detected even if it has declared columns that didn't change. (Marti Raudsepp) * Fixed issue with the $ sign in the object name (Anatoliy Basov) * Added French translation. (Jeremy Passeron) * Native for OS line endings in resulting diff (Sergej Bonich) * Add support for new Postgres schema dump format * Support for Postgres 10 CREATE SEQUENCE data type ### 2012-09-21: Version 2.4 #### New Features * Added support for ALTER SEQUENCE OWNED BY (patch by Mikhail Petrov). * Added support for CREATE TRIGGER ... UPDATE OF column. * Added switch --ignore-slony-triggers which causes that Slony triggers _slony_logtrigger and _slony_denyaccess are completely ignored during parsing and diffing. * Added switch --ignore-schema-creation which removes the need of CREATE SCHEMA declararions in the input files. #### Fixes * Fixed issue with comments not being added on newly created columns. * Improved logging errors when parsing strings. * Added support for IF NOT EXISTS (patch by Felipe Sateler). * Fixed NPE when search_path contains quoted schema (patch by Steven Elliott). * Fixed dropping of default values when --add-defaults is specified (patch by Jim Mlodgenski). * Fixed all bugs related to incorrect parsing of end of statement, most often resulting in StringIndexOutOfBoundException. * Fixed CREATE TABLE statement output when table contains no column. ### 2010-10-22: Version 2.3 #### New Features * Added support for diffing of COMMENT ON statements. * Added switch --list-charsets to output list of supported charsets. #### Fixes * Added user error messages instead of NullPointerException for cases when referenced database object was not found in the dump. * Fixed bug with parsing quoted object name when both first and second part of the name was quoted. * Fixed bug in parser that caused in some cases invalid match against expected "word". * Fixed bug in parser that caused array data types not detected correctly (was caused by fix of invalid match of "word" above). * Functions are now created after tables are create and updated, because of functions depending on tables and columns. Later will be implemented solution for cases where functions have to be created before table columns. ### 2010-10-09: Version 2.2.2 #### Fixes * Added missing new line after ALTER VIEW ... ALTER COLUMN ... SET/DROP DEFAULT. * Fixed parsing of quoted string values. * Fixed detection of function body separator (did not work when there was another 'AS' specified on the same line after the 'AS' starting function body). * If two dumps are completely same and there is more than one schema in the dumps, the output now does not contain 'SET search_path = ...'. In other words, if two dumps are completely same, no output is produced. * Replaced 'ALTER VIEW name ALTER COLUMN ...' with 'ALTER TABLE view_name ALTER COLUMN ...' to make it compatible with PostgreSQL releases prior to 8.4. * Fixed parsing of '' escapes. #### Other * Added support for localization of apgdiff. * Added Czech localization. ### 2010-10-03: Version 2.2.1 #### New Features * Commands like OWNER TO and ENABLE/DISABLE TRIGGER/RULE are now added to the diff output even for commands that are otherwise being parsed, like ALTER TABLE. #### Fixes * Fixed bug where default values were dropped from VIEW columns even if they were not modified. ### 2010-10-02: Version 2.2 #### New Features * Statements that are not supported by apgdiff yet are now all ignored(till this release apgdiff had to be instructed to know what commands to ignore which was not good solution). This is the same behavior as in 1.* releases. * Added command line switch --output-ignored-statements which can be used to output statements that apgdiff ignores in the dump files. This feature makes more clear what statements were ignored and developer has to handle them manually eventually. ### 2010-09-30: Version 2.1 #### New Features * Added support for ALTER VIEW. * Added support for ALTER TABLE view_name/sequence_name. #### Fixes * Fixed issue with comparison of VIEWs when columns are not specified but query has changed. * Fixed parsing of quoted names at many places. * CREATE RULE is now silently skipped. ### 2010-09-16: Version 2.0.2 #### Fixes * CREATE DOMAIN is now silently skipped. ### 2010-09-16: Version 2.0.1 #### Fixes * CREATE OPERATOR and ALTER LANGUAGE are now silently skipped. ### 2010-09-13: Version 2.0 Including Beta Releases #### New Features * SQL parser has been completely rewritten to allow safer and more flexible parsing of SQL statements. * Statements not supported by apgdiff are now not silenty ignored if apgdiff is not told (by me in code) to ignore them. * Added support for ALTER TABLE ... ALTER COLUMN ... SET STORAGE PLAIN|EXTERNAL|EXTENDED|MAIN. * Added support for CREATE TABLE ... TABLESPACE. * Updated parsing of CREATE TABLE ... WITH/WITHOUT OIDS. * Added support for CREATE TRIGGER ... WHEN and for even TRUNCATE. * Added support for CREATE SEQUENCE ... OWNED BY. * CREATE SCHEMA is now supported for both syntaxes. * Added support for default values on function arguments. * Added support for parsing ALTER TABLE ... ENABLE/DISABLE TRIGGER/PARSER, but they are not diffed for now. #### Fixes * ALTER SEQUENCE and CREATE AGGREGATE are now silently skipped. * Fixed parsing of end of function. * Improved handling of dotted quoted names. * Fixed quoting of SQL reserved keywords. * Fixed parsing of function arguments. * Triggers are now dropped before functions are dropped (bug #2991245). * Improved diffing of CREATE TABLE ... INHERITS. ### Versions Prior to 2.0 These versions are not covered in changelog. apgdiff-release_2.7.0/build.xml000066400000000000000000000105401412634760000164440ustar00rootroot00000000000000 apgdiff-release_2.7.0/license.txt000066400000000000000000000020561412634760000170110ustar00rootroot00000000000000Copyright (c) 2006 StartNet s.r.o. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. apgdiff-release_2.7.0/pom.xml000066400000000000000000000261541412634760000161500ustar00rootroot00000000000000 4.0.0 MavenCentral Maven repository https://repo1.maven.org/maven2 true false cz.startnet apgdiff Another PostgreSQL Diff Tool 2.7.0 Simple PostgreSQL diff tool that is useful for schema upgrades. The tool compares two schema dump files and creates output file that is (after some hand-made modifications) suitable for upgrade of old schema. http://www.apgdiff.com/ GitHub Issue Tracker https://github.com/fordfrog/apgdiff/issues?sort=created&state=open 2006 fordfrog Miroslav Šulc miroslav.sulc@startnet.cz StartNet s.r.o. http://www.startnet.biz/ main developer +1 Matthieu Patou CLUSTER and STATISTICS support + ordering of columns according to source DDL Jure Mercun Case insensitivity of parsers + correct handling of quoted names Hans Idink Initial help with support of FUNCTIONs Anders Semb Hermansen Ignoring multiple whitespace while comparing content of functions Jalisson Mello Postgres 10 Support Velten Heyn Part time manager MIT license.txt repo A business-friendly OSS license scm:git:git://github.com/fordfrog/apgdiff.git scm:git:ssh://git@github.com:fordfrog/apgdiff.git https://github.com/fordfrog/apgdiff.git StartNet s.r.o. http://www.startnet.biz UTF-8 maven-compiler-plugin 3.8.1 1.8 1.8 ${project.build.sourceEncoding} true false org.apache.maven.plugins maven-surefire-plugin 2.22.2 maven-surefire-report-plugin 2.22.2 maven-jar-plugin 3.2.0 true lib cz.startnet.utils.pgdiff.Main org.apache.maven.plugins maven-source-plugin 3.2.1 attach-sources verify jar org.apache.maven.plugins maven-javadoc-plugin 3.2.0 attach-javadoc verify jar 1.8 1.8 private todo a To do something: 8 org.apache.maven.plugins maven-assembly-plugin ${basedir}/src/main/assembly/bin.xml ${basedir}/src/main/assembly/src.xml org.apache.maven.plugins maven-resources-plugin 3.1.0 ${project.build.sourceEncoding} org.apache.maven.plugins maven-clean-plugin 3.1.0 ${project.build.sourceEncoding} org.apache.maven.plugins maven-resources-plugin 3.1.0 maven-plugin org.apache.maven.plugins maven-compiler-plugin 3.8.1 maven-plugin org.apache.maven.plugins maven-clean-plugin 3.1.0 maven-plugin junit junit 4.13.1 test org.hamcrest hamcrest-all 1.3 test maven-project-info-reports-plugin 3.0.0 maven-javadoc-plugin 3.2.0 128m 512 1.8 1.8 todo a To do something: net.sf stat-scm 1.2.0 maven-pmd-plugin 3.13.0 utf-8 1.8 org.codehaus.mojo taglist-maven-plugin 2.4 maven-jxr-plugin 3.0.0 UTF-8 UTF-8 org.codehaus.mojo findbugs-maven-plugin 3.0.5 Ignore Max apgdiff-release_2.7.0/releases/000077500000000000000000000000001412634760000164265ustar00rootroot00000000000000apgdiff-release_2.7.0/releases/apgdiff-2.6.0.jar000066400000000000000000004060061412634760000211730ustar00rootroot00000000000000PK HN META-INF/MANIFEST.MF}TAn0 ։oqK=kieK,II_ߥ,;d: nAS><.JȳMO*8 EúP pMjª~OZ,BV.!XyVD{Au`^!H ;}Y'e{QT+ ;AmG EGha4PZ): CL?BegN4%0uVqdo @Bcu,T9J.Yg15u kb>7zECB`:\LyYU3l5Z\t\8K& 5}YG쬋^Ȱ,k ucnb!/a5/ suƦ;ꯜw@vq u.= Sw\ܼ~.n]mQQ0:аb91ެƓQ2Rx,y\5k+GvX< sk] p7Զ2,PK PK HN META-INF/PK PaMcz/PK PaM cz/startnet/PK PaMcz/startnet/utils/PK HNcz/startnet/utils/pgdiff/PK HN!cz/startnet/utils/pgdiff/parsers/PK HN cz/startnet/utils/pgdiff/schema/PK HN cz/startnet/utils/pgdiff/loader/PK HNMETA-INF/maven/PK HNMETA-INF/maven/cz.startnet/PK HN#META-INF/maven/cz.startnet/apgdiff/PK PaMxz-cz/startnet/utils/pgdiff/Resources.propertiesWmo6_q(boa4^ٕ2E$RxF;R&Mat|7Z(ي/~<-5s{,"IO*?eגyӣi s Z [B)R9aq܏yEkzgE5 X$l@Ԧ`BXj9ᖥ%fˡ+B9!e]Wj6جa4"'l1L旗(p ďR T'0\l[6 y*hkInˑ-rCTЇqwC0[d"c{dD:"es?- ڭY\Fg_ۜ|B{n!JK7ATAg Yt4d6V(W\$[L6v"MmU1Z&1 {R`?"S|yhblp̈́_vǍ!݆e9>@|R4쌩1{[NB7Тq\ջr`T}hKHN^ř2sy GĕJO܊ᣗPRxnǍ Cc ^JJyWG84s>jf?ѼYm]bRwPBܽvC]T3I86zd| )>i6>.jԷC됪8?NzKd̓kEeԒ XΜ34#w3ȎI}eT)HH\a ;f2"k{9~Pp cAZ}9_תk$j odf~Εv 3ܮONk8}Ԇ;=ń~i6yZ%3q K٢޷h؞-"E*nNuET'f%:KT4o[6u,ܢW3aodZC]>O>܁l{4kKZ]d] mC.f4smK6y&,*|5lL؊M腒X0z'Zq{^fB)_ȮAۭ7\Z3q]?PKxzPK HNP F<cz/startnet/utils/pgdiff/parsers/CreateExtensionParser.classT[SPMr7@%BP." %joP}1P:Ip|'>Rfd$(@3sٓ~  A C0"A0ʭ{|/bLq "&ĸJC0߳2aNFx"b!\5bWӥ뙎WT٪x͉ >] DKq >9rWH pD2gA1?x2N+u5\K{` |9+.G FQ"HG2h=x #(C4N q!5V3%H)W$ĕ.jh? t \jpi4C QCS!~ b#p8>a *WDNڗf:cCt/*/LOfPKP FPK HNw5 7cz/startnet/utils/pgdiff/parsers/CreateRuleParser.classVMPF%!P$@MB0 SH'5韰eW ?{鵽b2mgzhgz{7ҷ 5[۳i׿}kL #nfHĘ[ܼ-bwLH] M1%"ŸE&bF,'>5Ǜ7/a"@C.,F$cq o- ]x[; EͲu`4ڎf9%j11VWU;5u!;9ڊfcumCSsUeٱ p!CKD S+h9hsZ}&MH,@e3PHBJz&l隣K9}#yjǢu Yxi֣)k8\Ȁxd!:UP/du8F2#G N&1J4KDK2?0EiɘD# #L~Ҕy2Hx7lJCxtLE(3f6L%`C+z))hde|~|,|#HWO&1^M =6T7ĉ=z)/bUJLҚٴ0Xc&^xǴ<ƥZ֝ap֬“iłp! /mi8Q/_`[O=+^9 n|a*Zwpl,u {?sMGm[+2}c mSurMZ&SA଄ؒ==MF&`ϓ8?ljB=LԡA= vs,5AO|2" 4">]RlMh*3N-nV>K4+@k/|d8\XssTYjʸ( 46POocked<nC+=^Iy_Y?ظ nyBS ,Q[ X05+~*֣S'?)BΉizvrTW9-*-w#^Mş3Q[]ɭ/MRUb;^a3kK{qH9꫹_Q?U]S_Q]Po?,{SHo"PSHl^ȂC~vQ[XgN(c5%TT֖W p_EPUW[+-z3 ";x_x_XA>슊EPZR:K OZRCY"-z~UyYت#W}ym,ނ=*>iՕ'}٬"AUs].p!V)>S9 d'ĤԞ Rx"؍&VXa*5.x9&c 퓓'ҼMz(C{V#'ػxfR覀`*dd>=>E1ͨr7} ~_$ȁbTk5+9Ud0E4x}&`Kn(JVwKk$S8)UةaY)<ߜV?aF4Ȋ~VSBݘ˃ bXot\8˛[Bma#V&xQ1gU"c6aZ\N(0!kk.!w}[;$ۂ!9<-^>zx wVz|V=RsyM>@ٌ8*b/BҶq>Z8"*c 2JTӫ DB <:O蝐@"/3!YYLއ c:A fͼ &8-]H,vBn')? %F['E15B20rΓH^)N36΢˝Ht~u"4܉S:$}1:~ZXzae::8k)a6L~ C1PpbJyt \\<\(c(dF5᣾q1TLpR)ShQJB>D0\F 22c>Ht/7r8ˍG_nd qpFىۑ{8 ^v}PICٞ<~~3i0:ωZ}Y[a^DžQ.L֗zlK8#o9׽gWp ;` - XNZ2T' [,q8-Q[aʌF)]ƶu*֎;5 a҉=il]6-Ń5}F}9ŬpٌB/۩jSxz9=[/י$rZVJ(;% d-)n~7"p ZM97Uj)pGEpEϻ`t;& 1N#V8]۵~ԋ"nƆGo\_B8- NOk;8-=m 2zOLPZ0!CKgĈ ѽݝ&EV$Ik !inCjԻPmԻ8Q1,3 .: :0&cH| C2GS4Y3o=ٕ90 9.5T\ƹr8^z G൜,VsJn|#M87bJ#n4qn܁Gq'ރ͸? ;:{ƃɆGȎuQrqiNF&Z'h1#-ӴqVY5x` ݉~Hk6]^xvU>_=xMڇ$3ޖRa4 ;<얊{RޗJHc)=J|"]O\ހϤ[t7J+i=?Oi%FځK!#>;~8hCA8l[H"(Ld1M#d#!f9t"7b;B~X V^Tp­2ɘ/,㷀9m0uMW0R؜X4K3NH+5OyS䭘nn+xDZs5y.*oY;;ʹcoNztP1ښw$*4 Gf[ƀX X1`=c1gq=w/O~J0JHJE!XN ?_12p6 e?6N?Sq1_ᮥAs"ȉtNL좡aHQJ4r3ΤQ4FSi VX:х<@Dhmɴn:iQR4%F&,i+h"D2\I}8$P yAlћ2\3w0`JU UU>lVPH'mm?]ZVWfnX1ܳ~ϙXcVV<"BDžoxO 9i?1 |ˏg𬆓~܀Dyaۇ^)^sL^=|߇W|Hë~,Ÿ "c}F~*?k>.g5܏VB)h#P2I(7mI X ]j F ;7:;zF%l#nGLa'bQk޶>3l hJ"I?%eǎώ[ ڎx2$-v:FjGBɄmƝ0s테HmF+8k~Ә1b:؇f&;Z!3(l.%3dV42} bƇ VIJ)Vh NJ}0$.iwh^pKb>%=7 *vBaJz6F5bNÌ}bX!70$^plW%zXiML|\qaΖq\'VX_tӅY<Ըg7`kv6ބ\ܚ(eQLVKd9X>2FG(>O.|MbT] EOFG5jQuA5AQ!1D#aEi<}-7niEjxU)ݶ(TS@o8$%l]ikA.Fh?+G_@Kəڜy;l!.tp:3;ranlt4MB5]Ƭ](gE2e?}+t*IBԠeXs'%Bw2F3ceSETew *-eETˈW:AD-(FK+ ]UL`NjNܙO9(v܋CтQ qS U 'nPd8u`z_ї`y7 _=2L`K\7o '`gBghg ,OFWq Hgb !oK҆3j[j{VO, O~ qrmxuCD1;]xx1N흾*5rv+9Y1CN.]7'`瘓癓o1'/z.p[9ۛuݾKt{=PQ JW971=ǵ8'zTSǙᩥyh+5وgXUzxyގU*h؛uKevk֐dc/ԪAkcaV ZZJyhi3hVS@#`4I q:\J)4fԭ"IuS۱Dŭz1e5^ jf]hR[Тz<)8 &T^6(Lx9cIj{n^⽍qۈs6qsIjV:=Y -*yWCK~֌NsCafȵ9reRoZD{"z˞=hPKNwqhPK PaM C0cz/startnet/utils/pgdiff/Resources_es.propertiesW]sF}WCgj;/'$CAnp@u's.bSiWJNgW`<t:sP9N(˥SԊ_Z\F~[[TkVݶgR=r1k lӷI&H$tZ7퐗TĹi@PqDb]#_t:JdERt\$D*reAQ_щH9BiKV, 'L3r-9.5V62 jbBB?Tj7x U37?g?ŽO>|)+6N$#3n/ w+U AH l;!ڈ* 3!$kLWA-zko{waaH ƙ C m@_Rp}HIUՇqՁZNjSfv*I924ˀl8m(VP#ndڗ/μsq,(_>@sJHHj+ mE 7ۆ'Eb*9 !Rc'b&"+hxͼ )؈ wXZӉ؜i#eF _.6A&r?C|8 "EeE$rN yd2JYBA#f(ІĶ  F.ޫ %HcN-KVXT$E5y#xN=AyޫVTQ_9. QWtxg1Ʊ I cJpLjOS󪲅)ؘXm RoNaZ^7zkRLx@!òfvbK6ٔ <$ݳʵXcyY[;5Izdz3:@n(2WtĂYȈ;û_ovcٙ?~<*PwMT _pt}͂5JiYϮ`bW"ëI57s߅st#;JW5WHm9T f[>))Sx)c]yKR.=0.TUYPVvOf5TaP6;YQʿkJ l蕭DE?)7: wIY=ZڨVyslU+lvJCSE& ;3}$wy,|0%1xy7*XO8f?_t;xNعR氪t˶,XqBz lo%i8Hu9>5|wnCI?Y|FNkq??AMrly$c/m51FO`8'V]CRWyܝ"ޑҽyrub_PK CPK HN Z5(cz/startnet/utils/pgdiff/Resources.classuQNP=WV@PAD`A7 .@\H@ܚR.MI-~D ?2NklΜ{9s>PBYؑ!`WD.(rRV;5[Ab('ڃi=N}G Y {i glC_!֜8j6wC\kCDݴM!Z*0uݚr?{eB[ ^W BPP cCA)cQu=l]҂` pu!"߲P @1eQ#D("O!wb"E:4^yGyI S^!2_V-Id1K-B PK Z5PK HN4V_2 8cz/startnet/utils/pgdiff/parsers/CreateIndexParser.classV_G.1eADEBjhԊ?$-$4.$.%d7J䭷^{K/O~> K݀XC&7Λ?/.+0pEUѽ&h#2e ܐqS(B 1q1W>TІ"TpBLcFA 32bf\F9!(8 Y ^89 N-[&UXb(V>/n닺'zxY7]1`ot%OP& 'E^i%mSza#)x !4 S+J#ZfM+EW *.MnlL'L">!M"OJPD4JY9h}S2>* ,Qj*`YɗRU6JAE e=:x Ioslvf9?p,ظ|LP[Ig3,$8T `{_72Έ):OEnK"F4ha[ B@ # c w+f-#ÃI\ l0F'*>ō <ϓT|/h*Mʡ3t~24GSywp[g zDmEHO?rPShoASz}͛Pqw<ϦkU(%vK!µ}UY)]Jn_1.沦M4qDPy&3us,xhKTloD+c5Chϓi@.]dEJ=-.,fF猬 ^8vR%\ӳPX|.Y|Fh3| gftqNUEM`4OjN@t-_\x{yHtӁ]_K]@]-x ] eO8Z$cu"ÎņڱJh9ДXT]k7]m+BXfM"%-Z\ ߝKd^Ćoxկ^X)rOY$l5jVG PvͭI%8W5]s}jk%IxAhv&5_֨KNt ؉#؅}eLf{q]tmuŲ_x;8.W=@/q&`d 0/Nf'bpEfcdeb&=0)A,eJ*K8$ᰄ#19 l [I.k6i4H Kφ0q80A>?PK1fʘY* PK HN3Ѕ 2cz/startnet/utils/pgdiff/parsers/ParserUtils.classV]sU~6_- (&*"VIK@(mM$n6X귂#Sur7 /72|ns>yssNzp͇MhaІJ}q@F2:E`%%a/&&>h GŷO1j):Dž9!L`=)Z1aNig|،ge*aUJ3 f:Ix&?^T5MiZ%:gȐfS2ԐOKɅK">SM\Vz%ڈj-O<1-af53Z4L!O%hBF{S|JJjjj]<< qNƠ>=U͢A߻<}esJR ak;S٫gu]3t,}bQЌBfUX;e; \ t'h$ꖺLR3< 2^ )5`+"Q0 &ޒhV6vo%!w|O@e\-R|ĔDdKB啷T)Dhvmr'︄˘\tjj13s'D,"*B6jZħ Z9{2Z6ePy-XLmEW|ֱ j˚ZJ*\6:D9dpp$o^lR=2lC Rio1kP* _9~Lٗ%Ĕ͜u8X3eBpm[!~2*-ᄃ_%tR<r%[gDm}<ʽDTsUkeWbBB;O DRVOUr ?Rª+)G%G7X|?Q*&|WH\'@ RO;@Ϣ稘E 0y'xxgu_-F-iC>-Q?2vX6LAhrx3wHA)?Kq^S;Q{}uqg[zqt05XB=buX@k*43P7=6G!s@7rmcw? ۻ;< w㼐'2sUu|̱~A_So( >{7r}˗;FޢwUGYQVC]3__w.u ަ+PK3Ѕ PK HN(/^ 9cz/startnet/utils/pgdiff/schema/PgFunction$Argument.classUSg}ɆMR V墱V%YB4٤ٍSNҙS;ܑΔP+SNboG_l9!`wosOn؃ ^l3n.&LxqϲtHa/8šzyяnCXs^drX:yqu#LFeR&P9^TCIUlBwMWSdsTS=u)CbuLPsILV3DZ(N 6JA=VªHBsq-{JOVxkaq\)pO-&kJy 4tj% ^ qv0$Oڦ|P#qrn@+R}-y@pRq(\"F֒]ũDSS(EҴL,N@!H>u} opeSp8f 9\6+NetWDCFI 'o} _MxElq46bv_\"QӨg*JsyBhdflh|m +`T{kh3hC|bŇ8)0&#!>FZE17- W/!s'H|PnM %PAeT/!7jVB˴5K. Scxlsf'6-amdEs~TRARP+Z`@|.qEwNPRdV̥͐|<uPͨɘeoݫGeޕֵT[݈Rd7-[\o=憵 ^?AL6[MniVջ3ڰP㼥i2T%MF ɥ|GcM~;_G5_8?FyfA3rrN.&ϝn9h9岙tr[N yrN%bI&*D"*G媈&W5O`̽|[-r)1"F`4 P3My`noٲg-{ٲ%{=/h*Ҹuxětߢ 7>aN|3րl3`[0c$.g0^;U\aq7\cw`÷BpCM? n OµǼuwښO25[Whm?PKlPjB PK HNɿ3cz/startnet/utils/pgdiff/schema/PgColumnUtils.classmTKS@uDYADQQP >,=fgh6l"j'W*O<ɲ?d 5|c{:LJFq%>sC&p,81q8qI'98Nq81^\ 5UUuFϺ#Kӕ^,&R -3~[-SQJ\N ' r%? l5rmww-tPSy",ިKu0,2d (t٩@TEYq I  t*~Dt-dp|48Q3/)^ZQ= 3K2v2xH4Ci%T(XS@ew=Py!Aez*4 rTf^Ruinh0.(;@Yp2.$snqκP:O=ҁn }_Ql683,ޤNkp¥&2~>C*$7*DEJHkpUjl.V4y f b њxu6E{ #+ sؚ ёr.ؖؾ沃\:5q)f IJo; RѽTIq4z0OR!"B+(1O00 x!&7*F𙮐/HAOHmIm&$!Dqڜ&T{~K%8Lӛ8~PKɿPK HN%!2cz/startnet/utils/pgdiff/loader/PgDumpLoader.classY \յa|!KLh6!@f!@Fل! L8̌.nո֥FMRױ־G x+j"W~]j JX G]᪒vOBuA]AD7|~M&\ F^B9]%[Y/R Uo$"-s/#dkzjO{&!6j ͔ MC'a6yp$M@Kyb8(B` x٩1԰G0q&|A&1a&EVj#*ϔjux WjiM2m-Vi+mqR/ GC5<;e5&Âq2x}2_-&n]2,E2n/F&1,/6(㐘-&G b [)"Sb2WASv^";dDlM wQdK0zNP~-44~9]!'u;wq[iL{hlm[LR>C\ <@0*M(|9Ρ2CsD|Z~XrHEOz4gH-4gj8D@1'XHxI#Qj'&{IAa} +>rvկuqI+zlF$hnT {BLQhO=upRLV}L5: 7=Sؽ74Oѿrư'}%ƬL>OX*gyz{] }erBxq7H77b[̝*V4_mF>Y3ɥ63QO}"1[NSVbz60V(a'm NEr<`ˊvF Pd^Xj񲱊b=5^~j+럹'278Ҿf'u|\ ;O<9 ^ck xЀz` xo6 xo5m݀_6;ho%=_?pbmx+x]QC7i1ޥx៴&v Cڋ*|L7a7hL]ʠ^Lz!I,2ʹii-e)I3MI1 ,nmOT`:HujG[q/V<$2XWj/+ز}~񳱶CY7|S)-,wUZcCcu%I̴[48,|3إlko~ Gγg|AOϲK'`rCG9jРnŋ\hs|0=Y  \S5zT`Ub#Ua7{y}iXsGXdOe+_۬86ld;Kq@WnaCr8ӌa45%$f2rDsZJ!U"-q̮4klX"eO!t }:v]ʦhUal>\ulLCuCV=Xʷ (l/vмc '50L oݖaVat%g$Ө3 vEԎԉbڂ22&+BK=|`@;qyzE}NV~5t1n0n(%n<@{0B8x. L;V<ȗN"N9"·`bcm(.8,GG,G6Sh!X}ɡNv\P<ߝ GFvZv(!nf>?+]3F̦9o~;ҝXJ9vGPEGQG_tpyѽgzM.͗ʼ!NB=933e2gZ \j΂Pr͇08댕bgU}e緤ɕ(0ViH,:Lp(}-2s3.X2gLAiT~3uN)W2AVT5XJp0\nhYcmh&F86#38cpp'CO!@Os=ÉCF?{9G/ A?Csϓ<<16\#%W,Y ˸+Ծ2 ٴ4:3:,\/F@Hw|јQ9 Fx4|%d`v6"%b`󕨁-TbX) lV({ lJD)1g \R>o` ̧09 lr\a`Uh +0[yE1ehZ~<Ub6doIP2(kgU*ut>EfH5=wW gr6v+,Kg8 6 n- b%<&& Ny`YIXAr7F+&r6UL:vyBWhj'r8@s7"cEC,IkHᢩ]RqP[nنvɲXUC{Տ? 0{mZ 0&7FPP*~0f^W~L%vCo2JuOX 4!'P6aZ@û g s &av{\s&29n6 G鐏5lң €a+yTi[_)4!0E[P}^ H8 !Ai1A-]bNqq,bf?WL®}sI.g5`uVWXt :;ؿLAF@^aP`Sh2gų`؄G2)%83 nbS<5p]mkBj %^L/-~Ŗ[gls} GeWI¸ocç^^#F0BZATu!P-&91־|hx'з9)IW-P_S#F^jTH=Wmd*7uK Y@inE?Y)Y$-{P'Іf~Yգ}iG_?tBy"락wc֘RQa:> {>^o;o^{'ycʯo0b*'*LTt٩7{< B9ɤw^޼~#).+1BhWݑ)ͳ3cmOy^mm`F[З X\VN_I )UIU?(ნ\0>œ1< 8~\'%|J§%%0>#ᨄcYV{BqH&`->=9=֧cx__}6QW;cͪYmY&uZP'cU_#KEĶxR {LXMgBHW#մAS6V;jI֬),!ˤp+3tgd7g@IPiQJ ]Ux"ep2 ?Ó2eP p.jTeUOeD WxJƯ*z -]V[8ڕ@ݫxȨU|]ܖ`Oi:u:m&Rn8qNՒ;HDfe "/xI_2.2Qx7pTs:ښ(GػyCATyCU2cQ7)fE2Ng8D/vn"*垱/S۞6M\;D#.?P9=կUP;λ"^1M7S ܱ"ˏ GJ;z@'ZƗPYrj} 8dݔ+v}:OfuMnHX IF{WJG 55}D?iɛ CBߘImJfst*kQ__MFiZNk,, S &)kVGJrl,=r֙Lԍ|U2eRiI[QWDA.GK*6(IF<?8ngF|<|6dؤcTuLx؉cdlblt==mV:L bYX6yΟp^FKgܮhW,dS <t'Zy8  ?[z{#.AjtCqnۑGITIs!4hDF.2DS,Q)*aћHdoL|A{Q5KkRyj,q/fޕÄWzh} iJ؝)Nx3q9fa)`5"y7jB {q"G?ݓXS[F [.ȸJ( aV $,WhOhDЎڅTt [F؇(cc4z\/ 64[lyѶmH:Eʦ!m!cۉmtn g;mXG{QqE\+yi3~.8 PQ9gJeXx~S8hҢ&4fw)a^w*}C9`TEJ4ngD/K)tƴc5?^KѼ5mhgb-5yt =hݍI:~+u6tSwb?uVSM ZmriO[NFU-^3<khMBUvԙsaHx& UhO}^A}X~ )sȿý#_or PK@mPK HN:ގ48cz/startnet/utils/pgdiff/parsers/CreateTableParser.classWSgisrzvRkM6Ц%I)`4=Mt 6ݧNE4T6=iQ|Oޞ}{V]*aX@D_j"F1&"&Ⰸ#",!!q) - |J8c&$ 8]\n N>qJ'E/E< S>-36`XgE|>/Ax8"_}Iē|2'Mx_'OxFB<~kgxQW%s;W/ |n5zUB . q5ڝ=z,qGGbLdLKhjFk9Uq5ut,mj`F'İq:jH:n|D!#kl(Ki阞a8um\׀Mg|yPCVnK!I%3zZ%u+han*)M$;bɘɉR0MGwc'f7m`_b25m!o ‿!;8 t.?K`uz⬀>bSfp^Ac!8ǰ[ c ;XSQɔKBfd7|X^q?wFC8]c?Oe?Ǜ I  |!Fza/JÚ%=qJfSi]!'}{kJ;Z)\)DV xp} U2<)F'08 8KFmJpVƯ= d n7-ޖ;ğ⛓.,/=~|G2eKJmjX.y[ W!K"vmbґ^939tP*%߈Fc4U\lJn^D8 %-R1 îŜLyu1'-c̜sE]ĕƙM^-QZg*P)ѹEJmyL#2L$h$ʗlbQ*dWͲ^JX  1Rxh`ߑxTP3jPUT"wRK $3I%j#NՅb15Ԩ&#ؖ Ј{Utڡ|279)uB0]Ob\`T\igy). l >5UsW-ɒޗ\:QG o Gl?P  7NoGYVi#l: Vakuy0l9`s-vu-KlMR;3 +o]Gukg,\|+lQ.Sl Nc>raJXOcOauCqQK-58hAZ+Nu|? YqLc]6paIp/DĆ6 { G\lo2zo6E*\{{8797;,o21ZjH>Pl A>TfrU%7)жH%7[O3ju\G?nhC=h!0FDф6B؄&$Yj{ڶ'v wXǰK3F,;Y|Zq7o,)V XB>"tڪ+C)_N@Q;fDci6.@#= 3%|zG;'!vW+OqkI)/ͽƅR10PAccXC._G8-\}7$|ԽzSQH8mV_L{;s4d!use4oA{ 3mlʣe$,̣k Vny>x AwgS!@i!g 9}A d͌Iz1/ÊW;PK:ގ4PK HNU 9cz/startnet/utils/pgdiff/parsers/CreatePolicyParser.classVsUn-[ӒnbIK)-Iɦ-od.m.fX/ox}8/ig|}`|`nT;|~wk\ -!(]B%B:Dɵ]W> atK *G~ 1(z'Ap ExDģ"xƐo1,b_Ð`bKG9<1G^-C'<7L`f5?j#?N郃~#9eTO]5КÇ#DͦYг>`.EjzVfB\!Mbn5o%BbO1O1TYlepO-$[/ 4zr#zhOgXwה ߆hq+pN9WIycxh+4q'*xS2^)7}FBcI-o,lг)@2N̴сZ𒌗Wqh^'o"#$-TP8QB1.UV<$--NRE<ʫM8sޕg`^91^+ऌ%kw  qe|cs'\)>crwƙOn~QwWkcyϡZFs0jy2xg8׽|WZ3:"j299oah-G "l]1Ͱ1qܭ-L -n0Դ֑+dTjK[;f9MH멹?Il{~ַAdf MpYx"$C3LFͦ bN4f_B8Ã$y,~Q@UDZIT[3P孲 hĬ@u9 Q5 IԒ9J7^ s n$ꊘb =&q+r\x~hJZ$]KZJNYIJq8}E$<,= +bk@8Xe9n\Ze[-%;ׯsqdƶ^SZDϺ"<%eT yafsW"6wƯoHϹ4uUX,hRc6[G? OY1~Ns/+6whaAvl+ZXvVnb !6NV@;4/eEK~F^CTA디(Iv͖`Wٱ*6m#}6h&NH$Pe/PKU PK HNh{0Yy *cz/startnet/utils/pgdiff/PgDiffRules.classU[OG^{bB{!+[o6%ȍc4z ˲mǽDmF}[PJwؾ8>%R[P6ɑZ33;g|7sv_.#Xq$*I dxpZ̝Jx^ xQKxYIKa1|EˆNFvcœf\FIp!ۆƍ\2* _ӫ;jԬmmrNjk6/\rӪ’VcMSy"yCW.VG1KKÁY42յEþ-Z=5)%\$Kv\'nUΰ4n0hF^jڬK;oڄ-p+IHN`n] Y4C[XH-KU[7.Blap
ǹ $/Uyw&z/Sv3A bd2.JϤc#'8N>! "beҺB6mie1»idYd<`@ d飯QX&RL$2;pyz#c.xwz TcnXy&QN4a/A@.$@#c B~JguMM #sKT꧖aq %9ބPKh{0Yy PK HN&h .cz/startnet/utils/pgdiff/PgDiffFunctions.classV[oG&f-Ę[S) u' ]S@ZDoj@sRV QU}[է>U*KϬ/q"Tef3g33{9kx%uvl6FD"z-|&7 s7[EcQ.p1&`ЉD,A܉aqbV #`/üȦҟ 19fCj*z(84LY75 M5ms ur28ng4bi$RJF qkXYOd3]Io7-P()|f\ч4i⦜82 ,YO =INSl 9JeplR5P塋l^O(*wa17V0쓰-  dKH`?7ֲ? &%$J8}AZ@FHйQL%;pO8A@Ã[cíXx8B 'w) qk$ rq28gRD(i0Jr]'->2}x+V:U+Ǩj!Z,2kBMRSV!,aaپ*PF\Mjוǭ&$Y5Ve>i{Q)İT5"I-Wζ`u(Grt<Ҝ͛9aI#59.f"-OeeXT7rJd5SV5c⚦H>萳qt*ѢcNJp'v "A19C4##\E)MؕϚDqZ{BQ?6oʋ*>%uXXt $ 6~B= _G=e &ݎh`4;='t {g W vRMӏ^5값ڵm% mx4hG|a#%A:W h~z"p# VBH@}ۮuֈkMu\R4Obgay{;-l&{"Lrųc(amnl__D-u&.,vT<"BJ{oqGs69J,.Y-|fɖP+ Tr X`E;,c.8=U>,nX$\w{h4.i/`)w/+vY~C0%l"k3UԎRPQSJ` UXa#]aL[B7IIҦHJ_tnH<2,>!U*C/8g']Ӆzg |7cz/startnet/utils/pgdiff/schema/PgInheritedColumn.classRMo@M\!mZ~1 $DT*ʡ7'ٸ[9rM@BGUu*: y{3oVo;xT* 6+pUr,Se5a"{_SHdZSWA0aGWN_,֝0Τ@}~8L@*SM8hGk(FV͎U"aWa769xI⎥~{)LÛMcpbw(7nyGf܉.e;')gy?*yfC8*jWg[e?vOdOktɗa͔Q7*ҖՆ7.^/O:E|wR4!a8m5V@1;'"&[^}ͷ4PK HNig9 -cz/startnet/utils/pgdiff/schema/PgIndex.classUsUmeGA% iBBi$AR#M"6٦[EvU_g|PqF|(83>89M.{~seP3:qͰ%8&8.aBBB$O씄m<;+p^ƫxM*aSLِcg%ds<;XIVFSkEimV^ ϫPVgB 3};2RsZN PpGW;xW{DZWp amΒX xhRE-ݨWR|ıL$CĵbQr&Nc͹D֍hh^Yx0tQk% ZTQfk%IV5h~՗itvbO&7r \4sqK[cmCd#/@F9B x; GnAz<^;F ܃rH ML^-t!@ZGiK?ᠷT䠷W%FZURZkP6 j}_q c0] U*=Oxlm%o8d_@;' q*(` 0AL` LH8M|i|0_".T@kzm"^P^jtS/ra%7;+i=(ŕy՗J[iZ X˩: UoL?#d!u&Yz_Ƥ? ?v[zX+yV#O s w VP]"X;?xw>u͒ <"-jk˦uu4ɌeS{[E-zo2~:# W1SD~ኑ֯$)O jCT\4F oevV F-=츞q`&@O(YzJV8o\8ss\쪱Q㹼z[ٸ"mrUqN,gc9Sfw;Jb4}x  $p@B=r#:0&0ot$224ͥiRH]\Cmw!ܫpIpKP$x$x%mݡ@3~(NCjÜ;C8Dk*dm~V!HSʹj?k([B@+Z mSjSs vMKEh%'-9NNJIuԒrn"p'qms$آ㬪'ݔNOaE4ЏiS!<"p^#8ޣ%\2fbr`cZt{ՙL=xܷsW;CS%K[ JIP)^/6E| s]0r:DXz#Ȱ,Kȱ]7`|;{ec7NC?ɜ@\AM^|E/uik\Bz.)iZ a u~GW/:VEE(p2.WvW_^uoͯ24-x/-r&6tW|x;> |D4SьDY|!x_8㖸ol 5oi/ " uN;/PK |PK HN-t c.cz/startnet/utils/pgdiff/schema/PgSchema.classWy|Tdy! 3 !!IFKę7JhvѪU .҅`!lKjZRU.v֞ޛy37 sw9wOXȸpa q7{XeŽ,cq?X|7Y<(!cߍoqmwer{x 8GC8ƐGxh!x!NQ?pRFd<I8 '2zB~-Q}^ع:#ZHhu_OW:ڹUW6/^Ƣ15ԩFk7uc5N'ءE unD lf3 )zj?ZVB]$t]T?SݮEVi[ÑNQK@ !M  O.ie¨ wƘ@HmnQ#-A)Zm*FIψį#^Sp/ӵ^TQN:&=XO z(x*8?o *#$0+˃s9J,ǫUAo= jY,QATN|R%z ǖ-N"Ms)r_|sHO2 R8|(oGM?7ǙWOgRLs59B jo; ]cG+<}]_F(D)F.,rHxeҸƫ4^4k 4CU7m6LZۂVht'r {{MGsV7[]꺭nՕ(5wD>:q^I\T\LKm5{ 4UJiP\5 ɹȫayYFi#P!UA%|jO.b7Ō]~̬HιN(LWydTq5yE%۸c[ðG}`[6k Fe2oT{O7o v#wQ䚻AVFQV+F ӈV6g 1 SEƊ'.mpqԱ י,1ƑqU$E(U1ua_Y;pZ+Q)p"qsגK;l7&fcZM~qTj դ3t91t1t%1tH>圡 m%Cۉ 1"Fc/i3VyI)\&>&(;i3VAHF7hfкn51R+/.M37WjV~f/hI"4Ķ&Rz=l~3nWlj_PZǩOP?Jjm< s|)J)|v\ #30d"1s ׈3Y[&jaJ#ؿ{/[;mazº0ՕKU*W-.[ج`{؉;`'=vw,b>H/IV qt+yp)+W$T響PK-t cPK HNAp/cz/startnet/utils/pgdiff/SearchPathHelper.classmQMO@}L  %@T­U Y‚X?T@c(Y D{yov͛ݧ6fa3ba-̡aD\2vePI+UQ!JPn[3 NxwL3{$bDɌhmiRD"26ưh(lK6bbF]Qdpk/QaC#_PKApPK HN, m4cz/startnet/utils/pgdiff/parsers/CommentParser.classX xTO{yy@Hp͐Y (d#3H'3qfu;jmk[ njժ QFk]ڢ..T"x{.{vg>(y4Q%#2d/ tBE2.%2.e2.26JWj52%oU]|Ol 2n\7)[d"*-Vܦh ~"F7 n7iw(];Esݭ`+p܏$i- ]g - W"zCk׺]齚kEOhqyv kW  EzVUvlh75z, 3et uޢsv;A1W@V}W)05{x"" cP,& /ҭ;E 2Xbm~=TPO#ӎ~ F$AMD(ԇwGOx8+TBP$80B\ Dc]zSHXؑb-vfNE?vJ yZ[Z կ!ohTBOks{ im>PAyO}7uv'7zW6<˼-*Bk{B\ .8]Lm>*ص*^Nc7TT+>WTđ:»S>>P[L^Vo|(#>Q)>_sP<]ߥ(!LhH4t䋘)DR5JdSNFQicŦ*I+ARAF/wԷ}d*RI.Qaanfz藇/cqFhhRJK%WiPk*RaA-<, 2P88U,rg QpBЦ53@` b!BPVqRv1&GZ8*xn. Yq}< +OZj̇vk~Q􈍦c̍mY6~k%A%c"7zXW2iMJ<.m\LCfa 8óVHgH`lOXWmXXxk*_2R%Cĭ?p8n6ʼ~d#eݬf̱¡{9c3$2h1&"q klPdPXҹ (lk#nܚ7htKI,^y"7 "/BZ²2xs+ƴK|RUbfnX[(*-fv4ZܪSu*)c/rW v Tlq|Ϝvga m)r`74vR}q4Ni\|4tVa:qh26lp Mŭ4LIG>; S5vQ ޡZ&>4$Gch>L !"ZL?-@+yQ#EkY >^\,++ۃC3Ԭ\< sN}ۇ9erƑH'n#N\vf{K'nb n:hW+0( ڃ|83-qįjVUEհ<:X!>.vE_PK, mPK HNҜJ 8cz/startnet/utils/pgdiff/parsers/GrantRevokeParser.classY |T{Lnou&m9)_#Q:+4OǯQej _hBױz{Q g3SxJK5A3 .y-冮flAfQFlanf{&Egaƅ5K4~Mpk~>X A|P)Nnoluf6}^boFY(E Udj[)e~Qʎ@$hXlu(ı4 pH(O4o4v2B0i MN.<9vX92,V 7JϿn{/!&R Z5R7wJ>_r]hk;m@dʁ5PiܙY`Dg98efmc5!r٥C2VCɔ-HQ"u-Qgp)l6#ƍ DjClFL l˔‚B? >Ĺ`|E/ CZf#@{kCcX j ^Br;_dPLu" e .Ih3 ]4%h魝h $N|l=¤՟ 9 &4+v.8"r usދ~ޅgFs|n8܋뼷p:_1WCg$d{iy'ƭQyX7^ub!)ܪ5υ$r<RЉ \.1^\RB#!( -{!S8BbURx)*TÙb [$]zš[=ߢL>KE׹T,vH=QH)܃{=톞+hZ|t&Z\ť<==.#(l}0\Z aT2Rc + CI+q{Z=.Mx.e FwqiZȕ'T+r?L</ċbAD-153e<).D.SR.5}izdt#g2Fzܟ ԍԸ?##Ga,=73&Xcʈv#; uHF$;ʭ,Zc4#3N'0Kg…b}ȕ{&'O3Aaᔭ"3x3ӥkZn`8?]#1MpK7}̕Ufd`+>Ӣa.[b7d>łrl# ]vG0K/j y|{c~'n1c?Lr# 9 x(eBSh=6KvEG0d9,F"sx9y*,MS,b8?OHq(2hc@MQҋZn{Pg6F=a4#o״;C}jWoV[^4q;(A3rѠ=zx:/ b\ih;g)\-8|#Wf0 U-F~/va*$B}12>JHqV+0cpuX߽4#򲡋xrȦB4`:a&[,sь M ܋*֮ƃ!j<*>8FRhl"\IcqմfNXC{XOAO!L?5 uDD'NsZ|×m͸vnWmfVbھlݸv`߰ŷlDZ,{l>;~v/w /}{ak?ߊwNߍG'x~ qx~j?Ò rpL<-p\ <# iҝxN K xQWR/^ $ëxM:JuC!𦜂,#r1(O ]xW^r+>Cy>/ gp\H6d'Y>J ϓS5'~2S鰓P)ˑNَ"Sc1%4QKr\E6*v@%icuI4qMtɈpN.dKUUx9w6'k3!n0}f+ʕONc-H1#eiQ̭rni E?[rSNR >t,< MPͦ5>h(D:%,ϖդIa*i)6Ya@Eȝ4S`_aL2aISqzW[L 3ɑh|V<vD;`=.zśeY{u{螙nMtDw[MtQ*AB&5.lp\6OZ\e8J8N x7ÛIj*h%eҕbL{6^>R56?+*wT7!Clpax_S?BΑwAEt]~;Gc ?k C9z2eQ=mH'<(Z|j `Ǩ3m$0 e9~ww߹g_<,ǝN8cV"`V}X\D.tb=BN8.[a!NhF9."=]X+nYHWI6;ч^;i.b'.v\f&ʮ;t'QV1iѬz0Y-2rC۴?wf =^ZH?o9&6ߺ՟I;~hDײN@OdGLSC'l֟grТ۵i+$Ȧ35tcN]Î͉kV H1POƌJ82ZԏL\'sxjNrO9Ay#7:fW^/ӫt[FZ O"B'U"|ٚAqZfn<X:d:;Z"wԪcNJI ,-]%(iC(ihqU(UTVTUgq==ǷD3䏍7<`zd_R8:e=I{/[` |#pRVR\S^iw#ɖ9p,"_u9P\8v}\>Prf4lA 4g  =K!+Xzs,;YNkcSN=@/$Fhvh:kki4l~¾ay}5oqY_%[퓎"yl(=QiϔPJfסp饿l`G/$6gmPpe˷8E&&>vc9ݙsV8 _< TX8"5O7A~O mmĝ$ntv> ^\{ $i>$5:ܫaIuz0c>ߨGFZ%q6[ȻS&/Z([e.^"wޑY/0a\cmڦQ{}h4R3}f{Oeό4{66U<*K6ZXP@ e>X8X ,gQSOq~2Wcx [&sT| a<MP,Gb>8 >m\`ݍ?-R\u I|%2b[0Zp2ozP:׷`V5꤀K|Cc-X[ObdRL:LVPK)vpbPK HN|aU] ,cz/startnet/utils/pgdiff/PgDiffIndexes.classVoSeww 캍N m2躍Eڻ!Q?hFRDb"f`e0s 1.<<~<ߺ`5 Xx $f6x^f ؂U l`:ylP?]ln梇mja!`'-h&d^xr( h˭jPc;ɥD\=Z7p%MWeוp >W,/JX'~Y޿YG}u7'9*Z&M_ڤ!< Z$FƃqAGA.eXJLoO `+!UExm; &7čO>H S=AYIUTE_aDGZ@nQXJ;BMtlz Q.BaJA""rx2OP"C@^{("t)"- ;DakRSl8m5M:ĸ,2xD $4J\X˸[XH,̥D1de}΅e|Ѐ{(㱊gaqTſ&OOs5/K`t`:ۀ"أ`b#)$v;t;tgH{4oT0%TQa36p4<:5]'H,lQ[ZVՄ-$&~eQy!S=Z X| .},ǝܛxKd4elQܘDyG֦]Tenix&OY6q>d.Ã@>!Pnj QؾJyF_%Ư5 Y&I{V7qø[K(I?[DŰ!Aߜ%+B=OJ 9Xʰp ]4 PK|aU] PK HNn]),cz/startnet/utils/pgdiff/schema/PgRule.classTSe-Y\B)E (X\hm%KMlT:u?``tWxnH%Nܾsw.o_L`a1L3Y^Ü.+#G6GXѴU`{O/ZT;LgЏDžFI ټAOt{2~$ILY$1R/p @.qM]r#(}exH?@T=#9RsG띵OdG:9[(j :Jt =tƩ -O"L4F6*6q^%z'ObccV'6PXS 'E4b,cI7rOJk ;kSߦԛd6uDs ;jS=:]lby #!Jua#Ծ=S{dPk&|EyH7/s7e<3=9F'iū"G]3ۏ(`?}7>I@4/H[~ccDݸ8'erNwPKn])PK HNsR.cz/startnet/utils/pgdiff/schema/PgColumn.classW[tg~_z}Sm7vTT/"mI 6imNڊ91Ii#o**$mi [¥ I(Imypx^#ppCݕ%N?37} Qׄd$de;IIa &dX(ϰ쨌c?xKf#LmcxxO1e9V}^ ^|ɗXL/%&/+L+V ^ 5 _ueabqqzw9C5VL؂jYi Ztʬ3{䂥Zzғ+kHf dGIibګf@J)a&C͒:(f2/ $%s٬fX8oG UaؔӆjM5%p24fbtJ?x0VH.kY5eYcdl; nm芬 bp/ʥ_ۜnhbf.2đӚ5Uˁ\iÎP˸oIXjy5ojVN.U@(,%]í RQZH5QUOvKV&Jȶ[hPu`vg0RgjuF.تe '6 #nԝk۞my,hnM '3nR(f9+ImFl)e &$= T16v۰U8cޜMLJ3ڷ%|GxCwq܈NvIX QC(7(ko*x '( N# M;l,NJ()8 c .]ʝlXq+uLn]C zS9'k'.Z"qbIȥHSR]iI+ Y s~^ȼ#a[hAf9/bR||U@5#%0rI7~}%t6o#×H7+gҳaUp2>Ɠ2汗KB\;jOH)sIg@;\T\W(ΐ.a,wG3g(IrjjY5S3Z͵&'i3Wsrf} @ÞѨOg*jϵffI^~zWV]otWw:5ij7ټE L"$}ֱ9hYE/~9ж1:t$AD@Ӊy Ni̸6*hmՀKt~r̮Fm=^/NY_(A/Domo) >zMS ӭy4, KhYbV+RBqtm=,;舏|ktPp)H s;ڈ>H=Dy{'IS OC30Y^2qf[%PqL|2qvf2DeK^oٍ7=KD)Jԝ^K>;FӾvyUIt(~E(~M^ߑs/V/?JF\ 6]@wHOĹsK'>zo]N`h#(qC%qԉFT:&!Ew8Y½WuZm؍+nc7Sj5{p>4\+i(% @ 6U;*r 5UuH+as4=]Eu"Y4~ъhA!$SC\`I")6`Ylт/@izNd7BJGml 9agsM!; =^<@{?PKsRPK PaMs1Q0cz/startnet/utils/pgdiff/Resources_cs.propertiesXnF}W NIb#JtƖE"-r%tY.v4̓Aq3s̅l'ƹHίI{,  B㗛T\&A^qpͯBwX޵Z)F'x'fE,ƀG,HV1mx_Ƶw o~>Yǽ vR0O鐩Mά :He}@`GOD9a8W M`>ڀEƸet bM?--kx<V'8zeg?̑ǰImǽ׷!0닮9rVd-"v|ޜ[7 /`[w Ob2kEAPGK:FF]f%;A>.Ny`bEtR .zхs:\BB $R-~,f\0K\uYq n!^rIh`SĨWvMZXf^NV"d<]-ٔG|MĭÊ%dΓ]gF]Q>'5[D-R0ύ31N"pk` =r,Q8 ^5'/ fE;^ br,=OcFY}-xN$rEe#<>*KEQWp=#al Zݺa+D4K.(T]?z;!憉2Qհ,O9h#$lj }vbwGTg[ C褐!oc%S: q eD`4n(Vid:5#$vC{q0/cϲ1ʅs|dE[r~5ƔIHڒZ.VyHo}i#s=:KSjPcp;)`o<#~599c}'p[NSNZM+Z1UM(QH/P"rE]eA5 p>^ ͡ܣ(TP/pT F%x)_< O''J-1#52RFITA@]M9fz*2DؕJQ7T>L`lW"8 ;`U2Qe+Pm/Y9jln-l'P~;uY`z25EApv :|;SI;;k&.ľNЛEguSuo:RpWMKSʮ,яG^f0)@Y!Yo|+ut]u\'H}XeCt ]w|=:8=o PKs1QPK HNڲ ;cz/startnet/utils/pgdiff/parsers/CreateFunctionParser.classV]PU.$eY(B-  شbBI6ivSjjjgd|SXGgg|Tg:tJp=߻?:@ Etm@D^ x$pX 0'$DP%4 5nX“H8*☈"N8);͉"bDDRDs*'Z8J 99Ia:4IC\@W %{uC)jxF&{Tftԫ' I(2jg߸rNf-lbpr)Z֗pqbD- *#Y %y_ɛT0eNa3ePHR,W,$`[U1`QK3h3etBg90Pd2H?@sxA Á@X$4,d< +@ELI5c%ErF0bf<'y\\ȸ4 Ev^q e j*y wxσ}1`& P=Υ^z TRYKd*ڬI&[8g,[V`6*Q64|u"kI}O6ÓB5q׸"E(.wMi! ^;o~v8:0Gb;_h34a-Z$腷 es[sʃ8fс"%+ Y} {g;}ncfLBC5;0v}0a2U `8 '8fp]iWoebq#S.MJ= ػ*HI6\+Z7%w 2L_֭H/Zm3;HY71OUcPKڲ PK HN9Eq4 7cz/startnet/utils/pgdiff/parsers/CreateTypeParser.classVSU]viR@[[X&Тj.M4R|v|wL`ʨtwqDZ -'w~s?0O$S0*Ἄ 2bØ .-2F첂q\1 I W\Ô66ޑ1-#)g٬9,-cA),ʸ.=XFF̖cY OEa<0]V nEj^4#BN#f/i„fi+cӫ=-RԌB$eUu\dp9r >S+jZ[)-eiٻIb%$"]-6xX+ @b+VȜ59}mp1ЭK X*r哺w8^Ņȏt@T Yx:Aܤ3s CS,@s%TpUpScia%X򊥗fekR7r)ۗ*?qveg- %T|2"*Lj ,@A5dU)q&1Srbs g_J 1߯MAsh|B1tklS9Ncg`yUpjAEǧ-Z3ZhQa70?Ǿa'A.5D,ܴOqY|͊$ij>Y4*73 :6NNr9B4'栳Yf_i([Sf¨oWDj)dbR ,VVZϡfp:{6ϋHGF;DžV 4]) mLh-ɰ;2w*f!gк % n@{P^Gn-qp >oϸ&:~{:ݎN0-6wʑ]ѽ*~%rI QOTRǞQڀvEDž~N%p_`_dxX& +#fvby<*>&>.-b [lSbSBҧ+p UPC;E˂ ,݄zk5.mi 4"g˛Ssy>_M_w͟w[r\ /Ԛ9UzGYY9} +5w3^C0y4@ˣ9Zkj|7 ;9uZlCBB+"ze^>5!uu2~I8݌~=2^"-L$k nݪdw`Ŀt큺,[krv)[<3dJK-UV_6%̓\X而2$*^ˌW*[LůС&B*^^ ob:\Hx o3*åf?UNёv;=9U~qFݠT,C^]Ri)-x[VV^r&8 8˄'Rs;.'aHeIM[n+wت gK6OH UY訶D6 jKgی%եBOE|&@#^VQG$MƻoiM`wIsI|P3s]-~L?ȿN>*OT|)KnW( sUhBPE5B&f=(lU%ն⒙sOKſBn[Te2k{TzVA!T@R>Vg4"r<:^kY)6,Fn&;]F8%-+ 3R -m_O!u~ZX':MZzΧ7i=i1 m7#E~ŀÆc9ɡ|{ ˗zr&p67kIJ{U$7n7W qazZ~#,}Gt׭cfӬ]R@toz؅C~q}s9ݮ+͟*knOk0Xb0*65ixF%({jXP*9rN? @]H f\-U&DП2'aYGۄ5u 8 4hUV d5Ba--=EgZ0 3;` Z ;3 1xIl5wb>@rʠRt&;1)Ct r@j)dU6$%V9Zq̠L_bf\$1$ʨ9Φ@-9;e\-|[?B.'[ ̞~~3Cj΅u؞\SءkX`] \̐]\R\2gUuu!>,>9>G0HHovPG69Gwi 䡑Ĩ2F9:pJvgeBuM0m~$ =6c.G*Z~66R62 z%*Z]S8SEy%AMY$>ɾ@ z']2;.2:h5߳uL R,}H$O `t;Yf,rq<1 c;0sA %3EOWr\AU& jۻS{†I(v B #oXr;j,VN VK'kb'NZ:PkM@bMaɤ$`r` `tx8"(v9z`fzIn#lJ3xC8~.9A>緉 ;q@6p7}x!q6a%l a3si]G Y<{^Vͣ)~>ͯg))xMK/ЕxKt?W5 M_m z o>w}3}cxOR>CtV(#i"I%XO$~/-"Ajgt/8,m_mL)bR-Hosq'oqs9½.6I%2."0(0 ߱ bN8S:"^ZԸ(&3;bw8]+7MOS+Oĕ~]\*mD'tm£2Ja(>#42-*zN#>G2Y($ZX <;{3B#Qw(r]q.9Dp$̣8\L&S<42c1=$O sq#Yc %a= ăv(;i0^!V|IF NIt Jgѩt6he9K#i "J#;S%e\Խ9 JƮw =w '6 ح[-eqp->rD/XK+bQlvbP1MjLsZ9ޙduc"VBuzlq)GYjK:UU\?XEv3'*X@OYls_ soB]b.5Mser1`E(k|'pTMą|Ihɸo4 wtlBlvJ8H3)1:,41|*bgqGUñjJt:."zO]BR:DNͧL MRit5Ji&"i&ӥ$ɣG_L"=FsϿܔh;08(\ ĹΕ$HJD_3.>zJdJ3Zp5+5@)T\G9YL;/hϼ}XsΉ-W|BށF&j L?H ȶ2Dun zw8I;::s~"9:_c N iYam:PCWtjҵhk/&.Vqv [9nGt~G3Zt-i]32ӽ4}4ZAk=Fjki3Gh5F pkNst0{>g;J8Ԟ!5=R'k\zȿ#GV>n =GP|cKt[;+P#tPK.d3rPK PaM4 "z0cz/startnet/utils/pgdiff/Resources_fr.propertiesWnF}WC9@6n#JJt‘\QE&G.9iC? %Z6 $;;s̙Rly{tSk_aQu/c`"9.+CxDQmY=gB%2^/eY`~廏]ݲg y]NjK[,;9Ι-nzy+A$'i 3@Și ) )0qAFFS(Pщa jb b8pp>4Qж/+r§Bn0M{Io4xh?~zxwYpqTj^JWp|! ssMpt2lDFD5zʬs=FZE{Lqi4L .d(4!FEo2^C`E)LIxgBho=&sӮVHw m@7(ƿ(!vzA-$o9,l|pB{TjÔps}Ai*%%g,H`:KFDÁzx>^54E@V"L.Wo)!Ȣ}o 4|كXn7ѧ폴XL{?&MHD:Z|cEſ^|={]IjalPK4 "zPK HNA\v.cz/startnet/utils/pgdiff/schema/PgPolicy.classuSmOP=J_Wۀ[PDM$H%tδ&&ܮcPꇞ{>Ϲ{VQUbQƒs.`YwU1'ྌ5$]iI84>zpm};׮H^ dln]Bk5,_BhvlfcՋ;%9eg'8X ٪:>k: 6l7,oG& :FU#Z1ɢJK>*\u}+9 wϞ܅F.HtCGS!pw4BPn=z-{p̣%+*rOS30byC x**FEf y E \+)|]wu<ݐgޡe6i5vUJ=(U>,/q±T : #FX8r-3P:TԻ#9 ׉O9Ҍ$ͨsy-O Ifq+(vʔ#<&g8<5f&q2q*ZS^ff:ZSg0xi:^mFsjH*Z?Пn\S7^ef>C.^0%zŅՈdj%N/)%R+qrzPKA\vPK HNYxCk1cz/startnet/utils/pgdiff/schema/PgExtension.classT[sT˖*7i $IKʥqUH\K[JbˎR_RKm 3 @_Pf /} ÞcMa4gvW~* "щƘH21y 1E)\bB1-L)eoH&2fJ/5&`S2ػe +ĊQ6Ʀ/b<ԬJ1! `̲! ݋ێQs*;VɎoVoYnPilZڅZLeƬ %Lqj0WڢZ"T4 w8a'd](촟F+trb80ēdnjPDv>-+[3IcFhvu95yͰךEtsZIwq qPqWT ᘊV1̬0mźUʛ5}}bQWLvz6CyWA:"* BΦT* R[O$RɅ^!"f8v  E*Ym (`ll<ޕrVG|sKֱ5Rs:vEz1ͭ=yAof:e .gM`$oeʔaЮ/;)% яdEV.ׇ  b Ai?{:QHvG2L5I[)7o@)r yCϐp qS$ $yFE!zK$O*-zKg,y{K|i~oT _GZPnsE{ k8lֳ'8_] j[`O+Ft+FoC 8zHZN- DRiVBpUl@<q_^}HJ8e[ķe_2}YLy7pV #>p~g4Ox/9$(E>$>Q|F 9)|A܆*l㜄/џ˅y)5pgegI0;lqJlk @7PKYxCkPK HNCtw9_,cz/startnet/utils/pgdiff/schema/PgType.classVYp[W%u,+[&RA /Jq+N,q mk&"]9qڴ -R-P&Ä!:tX0<1}x%sZrO|?t" &h‰VI9<'IzL hmBLq*؊`(8 gH9D$Yr0QP09;0+^ʞrEv)$\>%xV(x^@eT:/ f`47ZGDZ3 9]ppB0oj938&t0;HCUN=]HkɂNStYNG͜NXoi-ES#F5}LR6]ݟSwGHBjJE$% ,-г->jj3CZRLDE?v5fA?z45ȤG65BNbѧ\&k]V$ʫV-/'%]72b|Y%9)pW53y3+][۽'fY*T*qf ~ԐmIDgi[(~rU'f N3 F(XeV`4C  |&|5{#qXkvݏC. Oo6&a{u-?]n[q=،lރ]Rqd~;:7FN6E;P#ńk,Mhx/3/C1TmNC/giÝfqx%+%~ mtКxm&;m[Dgv/`K \* 8Gݛ`N{u}ȕH\5[GJo}mۑyl^fM[얕ۿ=^|{vk;(*鮘ZzKU 9M0Qo`{!+W uzz. /,n MC Jf.h~ wE]2IQ!=rV0B?vJ?s KiSJ^"gJFբ$\9U _[;TOΟ)7PKCtw9_PK HN=I$9cz/startnet/utils/pgdiff/schema/PgRelationPrivilege.classV{l[W}:cljn5:]:h&nh禩nmssv@lLc`ڴB CM!&6۔:H;w^`3fXJAXN# >` nRQG SU3b?n6p7A j6xwx &Mz0)0r3s41`Hh"IdSX!Φ1Igf{nv2Q =farsd)͙Sf&ͼÁR)3'hF%]84LOMt"4eMENXS463K;j Q|<):t*RЭGA>+ؤZ a=U#8aW5 G?6=0;#?:Tyhxt(AGwpw2Wou\:3i|`Z!e ~đzFSi\c5w39s(79vZ]``uHΚIAB#M+sHHnI~6/F8jT9 Ɉ|{Sb啷@1ܽ-"[caad ׶VD̪TUu51v>ϥ2#82t'YSxAi( *tgtuVUF\uh&ge7pNGTߔj~3,C!)cR)c8t 񖎷,7}nmJfJl!] =ΎHk. :{G;mu3^ÿ/Ai,܌\Eھ*g9AT]v[4# |>ti,wa<ػߌZ"`J(Ifo9I9]@%3-8'X!әG7Öjݤ$y[@\0owiKsӡzUMg(C)qao9w dL[EfO|ϥFGy0męЌI%ۇTwƬ~3zJ*|[hLK&rh2aPC<~O.Uf 2 e KޖNZfI-.\hsZv JpoC/kj<<>Ci|<.VZO-B\E@WzSJ~ GsdQ.kxj|eYhaM8N37uTWF1է\Yd8vPQB\WP}f̥x]r^g2Y,=a81G1E|`,IzFna7X ko@`o`p=cshXampV0|)$\/M8:L(v'JnJ<@QrE#a">y>OϢ(s΢YQq,*/27Grllelm֒(+G0D)z>7p:|_b_/l"J*xTV mbE:ED;ēOGv1$vxBՔccLu[]l1vx=<غGu-PYPU6֋1Lo7}}lpRw3# }6=nizONNf ^( %Hpsg1~IpA #@oc|̡ RFgsu>Y̩aWJ޹fP<{0.PPZD [hjn|;V[f%v 墠wqZP8TUpTUp z/P$a/ɀ4*\F5%z3T+U .Yv>s2K3^N;E3{re`f̀1n{~ JhxdN*_ ޟ'q~T5r:9xE'p-D~_x=.z|_K<>W||Ts&%r_z/eq6 DJ _OxSwRnyeSj_.ҢPkPKtPK HN|u:cz/startnet/utils/pgdiff/parsers/AlterSequenceParser.classU[WU$aJmj4ˆ@ @k@$LM&qfb >?е|Ӈ}p\(3 ڰfm{ϯ=z*0\0"cT.vaLЛ˸-KH(WĔi-cFƬP1/#`bXTЇw%nI4.~x6gU]Q)Y7xԗ+gLOzմ+9]XJKd?m<Ӭbtgxf%%"$!l˛f 3Qo:E` ՓU;"_hQ}R*.#pߠlz%cԭT&R[*r0$Xmg8kڞU"oxV&IӶނe ?\*ְ=^$|CU)*>щ3Ѧ&TP$;`d1xŸ:1M+kcR 0MEzQ]$Y-0Իg,_.pV|E< .XqI()QVp3Y\ahYӳ9M͋x|ᬖ$\U SWkT/:SdeȲ!BpXI7Ū Gw޳m7J@|D;ƚ!wM D!G´ G|QCOܛZ[]^M=/fF4̊7eZe;&E%VE3-S1ZCN8ajkOv>V6Ka/-{\>[ :=!^*>/T&FPA[V1xVsYFK3&bduq3NZS({J*ZsZ&3F2_F21XVKЧRh+)qUI+ڢO3 T.E}\N؁nzį = `/%;Qd}-5csptA /BNv/a^[w;\9({-bmiI}e'6̣;eS]6F23v›.2JsV ox̒lT8OZ޶xVWe׶ÎQȭ&Ӓv?fsh,nŒ0+r4Z+K_Hdl,}h\"k䧳4cFK jHޡ2$36@Da v y(~,nvoUEZAZR,me *mEgjki;LP|fTq2߽{9W_p .X$eE 7|V@ VlG;Jp7B%B;(Ĝ8jV$˂V{-Wk}ޗ,xЊ~_)WpJQ1 Yz{_7xA}JX 151WHո1 6eRn- V +UWRHhP'x;+Z"FM65%UMpp1ۮ)uO F2έl&ƁX@ERWAYD󮈟6,ê714zIUseU8 ѩtLTJPLUطIݚ⻻];QTH&MN)wDfTO^к'?=%?F ǧ2ĸ9՝ %ñc`#~~e PLnWSdnB;uAfl̋ElEF3>/0e XLfhd2Vc|F&!Zzڪ;:=-u^W[-0 %<'[8’%m#e|/. ,( 56#꨷zF @a^WJL"1 />P,:ۼ=d[S]vut,5t!\2~SJ /8e>gq2U?M,oB5yX'~2:Qkx]J$?.( ƈuk87ǢYFհ_`a$ JGeü3J^QSoLD4՟Jچp㳚 =mոϠ@$Gk>_ *_/aD$q~tU ۆx:DUtRSc`"=ضNOv=S%GbK)tʱ"3PrMA4Ǒ_ TLU׭ G̱RZeEj7doYZMף{cNk%FCOm ;ArH`E Kb *ٸAEXItyDOjШg!ϣhYZWPA;$Z+y+Mt*nօmE[Zu`#zM/\X1-~NN;<[&q,I9i7(J~# ϰds$]xPG2 (o286Y_a7q׸z%mJhEJ'zDaT=N?@PzۮC6 +%QvJB(ȏ]nx XE~Om{Vߩ0TLŌ,Mѭ9f)Rf%1#._7j]<!mØQ1881]$4I|99|i;ºVw` < ).!AM)~0倄yP,uDQʰ)31o2ANqXgo{<Ɠ O 0ޥ7uO4~!5L=> %>p2>jWm1I0}~t_cr7EW̄.ce4Q$w) "/|OM;C=mD(ut[v4Iٸ?b1g\UD@N梕}!c練P< I#,w Уf (,ؒy#"]=Dθ͟;0)H)jVTi T򘠖j.edDYUoRdr=;IknJG&QXC'aۓue 1h(K$Ϟny6764JD=o}h\A̎A^%3{XtWXjxlc*LdȂ}Hf"7hv@LXM-F<-zڷ4};edVKAe/m.2Fv:Uh%F..j*Eҧƒ\! #NRjOOp*SXZ88ewy U}@ +C/tUc!++9l2w5[e!p5Ug z?g+!z88x1~j5KX75|J1, z[mo{ ^B}Ul SX??dz)$-ΥZ ̞>8wY[mֳ ȳ_?0w[6dsy~ZG2:ժAuA*(I&~{W|xҋVla;:eѥ vȹ^a/v./zqsG^/vd_9qPqr{qDhn )/<Ge+`X!8iꚥF:yǴZEL#k0 K7c#yK3nE GF)H>9htn˄ޥgFy|~gg. 4Y=^Am(ÑE KKק}ȹ2sU\ i1r,W2rمm/Q("Fފ)O0Y*M X\$9FA~J"-CtFFx7Y,PK{2U]s4ol3D`&ĥ.:U]/Q(ȨAaW~* EEU*ऊxwaRnlP*LS;)W^iaQq'U| |Zg(7[ٽUgqJT|_`9=VlT a1i+ydkD`k`MFsk`U'͟}e-gGe/-nLt$Wy>4[΄$*w24#L$NKXnd{e2СAVrSir!fIIqlNCLpwO!g驒Tt4Ԉ {|9 G Hⱊ/:7|p;pD~8r \+ ]GDǰ8wQ_].-TJyZٲzp/}AEcW_3<ց\M'oo؈~kqIDaaLS)OaS"6ȍ:`6\N&݄ya }'~X L|XKϰgwŒ*)Nfco~8:pjlxija~1A3!mHQ0lPw n\ti_`b}%,6K U<~n;%. ⹳oj%SXAק6=[V6~LhDK:ju cWߐ#Mef(=ʩ^Yv >Ǯ c)lzG˃r)M戴,XcQ>dsЍ׹*; V]k5 .0B' }8Mx9yU^78^ė-R"-;.3x gYE|`+Ə;Zcq^Ǣ?*\Xb9UXWD?aJ>06v_k߂C !iik<Ւa*y%h9_h9076jc,%[k@,R}kfyqMЃ?bb.3l.u-P IgPƦבofZ'/cimMa#o8,HRDN`R K˂EPK25PK PaM~luw1META-INF/maven/cz.startnet/apgdiff/pom.properties OΉJE v#C+/𧿛zvkn(c! / BJ5z`)Zql%UʫSati6縥̏s T؎whޘfcPK~luwPK HN) :cz/startnet/utils/pgdiff/parsers/AlterRelationParser.classX |Tՙ77%37$ $ Lf̄0-0$ kE٪!V}P}ZݮڵnնHs< `w;N}iU&ne|IѽG(O AL<`à aidGmx _a 6|6“ Y7 lx RpDE; V gE)( G#fy/(辨'3?Wc2ņxY/D__WBS ^UP ~dnCP`6~#z7)yK[ !h#' >k_ ' N~ŐR IR(G!B2Ym!Y!EIdI Mf{SB6L2M!EI~3$Rq-OźξhÙlߦD͝Tdk$zGvFݑx3J❵m(*⚯gEv`*HC2M.46a.;nwC0t6mmۙ&BlUgYK+'SH,"\;q&pnKGbH֝u=qUIz@.ЛbB5đ*_7G|?cՄ1{ZCLLI9  TG^>?]NY74p{}*͢ټr9>oCŤMwJspJsiLU*2-TB0k@<ܻ۵>R{S xԈKHߺ]kOTR)TNŜ*UPJKȩN|q 3cǹ,36TT&y[!ANTZ*o!JW=럳Vqngw}PT܀/?>v9+7Aw]K tJ˨J崂 \vA[KŴWy\ϒV0eԹ xd3NwXwT:b..ҝYJ*2,ʲ+2kTy*Z-B N XQ&11̐pxejQVQ4sYtw5Pi e47izAD"K`pĕ𯔱TMqL[.mJ1VgGQ>PA2BDKlegB#aBe'ķiXJ{Gl,ˁUrf O’+Ƨ7(zhDFQږO&tizz"(ߪtxrGL8azILΕccE,qwj)WH[50UǓi~5%"86%̞=q OiS&-tj|EpX;qxvQg/b~DY2|3$Ge8|bPJj$'vrxֿ+o^##g"3ݯ;DV6EB؂yAyWy.謑>M$O儜|s-+^3\EQOg/Q~䤴M<dH}c892]qD]#t%D'أEw%8֪:T6A擱|,y)S`}=c:RXm|֙Ti4tlX)fݽI5:~ gL6~D˜ƈ,0Ne%*&#x!^{4L8*uj2OFج֧q `?ş<,>ȰG@||9%A9@n5Gts5&l>IރY&$c5 2k,KkrX֣(:)aؙݴp#ٕ00.xa@a: f((̚+c ʸ¢KfYNg9~Bo"nחe;ėƸpI F& WLϕ)\ ֤qBL2dl\ga,D!:۾ Yw},l ld!pb'NL9frޅZ샇[?Љ{Ѕ{q”n܏8NWq?xiܾG14ߠbnr7}?>]31_<NsN՟~+8)n˸Sx/~@F70 ?ɚr-3jÕ^ <l(wX2XEx(/KMPύMs*Û>_}rLӾ#[ :Y3QCDž[|YW2 OT땖[gYtC$O)SNCmľ-Xsav}\^̅n}A609hf/fs'\a1+r,h\.V..yA6\Op+.)_]t d+˗CrBc`L:c噿7PK) PK HNJL-A6cz/startnet/utils/pgdiff/parsers/ParserException.classmON1*o]4^P 1F{5Ktj+O$?5fޛ~|8B%,-\l(3B%B2Pwg !Th2}G"'RIs v0 T:OLyx][Cӻ3 Cq! y(fXWkZ[(0_< ƋCo6؛[ð6RFNOU$aO*R]WpN sT256fH iH%n4H,뫴 .sfkgТll6PKJL-APK HN6õ**cz/startnet/utils/pgdiff/PgDiffUtils.classw|\ŵ9=*n36ՀM jJ^wEL--{ދiNHOH= I @\I6>gΝr朹zۇ `[QC0>Oѿ/ _B o;TO32 jաN ޠ/R\/ ($]tM\صhJҞE &Sи|Ywn~xPϲel -|qob~l67{UYm25ɼJ7??6)FyӼ2o7w̻M=~Io5̇M.Do;:\˨pVR `QuU@n֝(_:txRHg "R ԧ[[akM|.]A|}QoJJoѸ-r] 8Y+aBTr<@}Q(r.T1jT@iPVssiNaKbRE& nFlJة3fÒwlX[]r9n__ZsY}c6n-F(T4̟g-TPɹ"lg͗a[.UA|qlQnnW^+4`?vYE6eK9$-G3QK`-JZbXLkP֪AEnekD:gӟ[A%9=GQ>+jO9Ihd4dπ+4I_%JBcsa ՜'qޒȩϖ=Zճ6披$JPR [}Uxo/aԌ0*xCRX;APG-)aF.Z֨}&k77ⷠNgxQaK8W?6zgY'0R8ZBe1Q;Z(KjID,fI+oDIULkɅXAovF 4Q54T*pW4_blԬJZď@5 T2j{ɰ(gLX_H.BOM҂,G8E%\>7JF}~g!ZmM>k)E> OtRM%B 7H'_)A96\+G2a_%K ?x%J\Z`Fࣇ)]KOT;=k5D`_A%)_Q޺]%!H\5k1`v&⎟keW}n5C =0E?&~خm"Hk'/\7q'NDOi_7mBѩgJ-,EwBe-B+0]N#mlZߤWRDe-+4Y}7X*10PW'_*~\uQ0Q)3II}^oCS׈Zzc5\Dc©ٞ[Ld>맿xW$lRfö2Wouλpcּ*Dk {  h0Yэ7.Q懶x)J@s?Z%2oӮ:=I~|2lq2PO\*?%ޗϬ!vk|D_*M:V6}Zo{7U}/B{rƵbWCdd$jRu} w)՗TBmݜj9E\7$<י6KiPoߥum9FPԞӏZfѵu"{_0|VkwYWU?A0ͺfvqK~]wNlOb_8_a> w\\ ߞa*ݼ#$&t{hhSWM7+oo]Glx!v-];q9i5qɂy=O\XQ4gϢyEX_kɒE(9&nwd .Ura{sZGVu']s{{tdK3]˺43vv0s🻔o:)ٻxnzc{]XO;^cguz#j󔩠 -RZ{ϸWW `w ƭ X$W#&8n@@P8{e݋ĸV&ՙIu[z-VV`z`N`8}ς`*}d`-ϥMA?sp2 nU.P8׺* $S_D ~/].q`0FC~4Imve4 8Hڡ+U5GIF~<&zkG]L.Z]:CpN$IAo}OS7o4{uh0:F#a׬t$Z]!vJФ]W5eG]Oޮ`7PmThAvCv#!vcաvavSUk7Suvp;Vu\uMZvv:vvKՑv+֪mT7۪۩T7۫ndwPIuS;Yu3;Eu:NSgwVMͪlFuͪniCխlֶUu;]u[S:PUwmQu'N%)vT[Vf+;۪.mͶ]5cgfmjhgT[9V/CgؽTK`\S-nՙvj.PؽUGfQmۅ~vlXu7DuwvvjU.WαεγvCTCUT#TGkR]hV=Au=Qu=Iמܞz=U@{AtՃ3UgfV=ܞz=WH{^cXp=8^c/ً% RD{p8^bNW٫5ZL{p8coε7ٛ-VB{p\b.+]n {p\mWkuAzp}>dnǁ[mIvp}>w瀻=^"p} Xio <`ut~9:\8p.ut"I`Npt*x Gg:: <pt.x#$e:2iqL:Bb!3񎐚Gt#$g:3NqL:B!C鎐 Gt#$i:4iqGHr9ɜplN:B:!ÎG#tzr:=IpNO:BZ!ӎG#vzr;==A] Fh PK6õ*PK HNL ع *cz/startnet/utils/pgdiff/PgDiffTypes.classW tn3; 0Z$!@40!; Q} -khjъDhТRVm=i{<}zlgI)l?ܗN=,K/by4@+ڸ%T`E;upQp%V1 ^fE,e_ /< kxu %c䛙Q-2nIƗlmnWe|E2<_uߐE* m v>nã{%P0~}|7;%<+cL_C5`sW@ *[ќ1KZ,k] Z3lx!gͳrE]e=ܩi8CzFStZQ3:-\,`<>>ܹVx6hs.{|1Z[[UP mP;}dc`y:OtFΗp1iiF8H ":jv _Qb + QY`i]2?-v RX%d&▬qgev8Жk?svz6Ilǘ#^J+n8تx"6m0ub7Rţxq{@Ȁx{U<}Uר؏#M0O#"0.9=6=bjjt*]\ TqA?T*^`OxSCBK ࿙XC.Pc刊 (YqQ e6ҔRl:6{U_lSzµnKS@61$#LFP٘tb2$('T0΋D鈦ۢNڄٞ0sH쳄k gⰛ!EEEs iz?ةQˤb9,C'ED|?: =Y+P0tTG6O"CBIHC"O0̷`DF$&`fLƤFٍjهQ9#v؊#ȉ<G0f?rӰI;P{v#q}2@Ey{5ޤ ;N KˉZK}jAWFfҒuK\Gu: :j:R.ېN~֗ƔSRu2jOs/4y -(R̦OjuznD! 1RE/:Ƨ/-R.ƲNN25949sЋԒNlyj{1.l wrN~L4)C1ҍ )X y$#kFNl3)/zxG4^+MzQ\ÌDf %C䜺b ReG ! xd a-@_ۨݎ ]!؈gp }ފc؄ױ!?vQ; [E; -B.^q.'vc8ūxȌȌ'dJOZ MȢ6:IYՏ`Pq 08h&uuq;Ql+IEKy>*vXu1|S`ZOI*{=>QCobq1=ljm1ò8iq q|"43 fcs]x^ơ+Eϔse9[`%Ú+GY^AEQlYXs.5g, ')f!"N"-!)#^t+*Ĥچ\@X@e$G_qF)6AXr'eտx#Q8$':ߢ}z}(N4)b:Z%R3?D[O>= Ot2CTxGiPEI&E`!aH!& 6EL]PKL ع PK HN J 0cz/startnet/utils/pgdiff/schema/PgSequence.classVkt\UN^micSRi&iD*TI30I2Ӧ)v^&GU^PZD@*=ųA5FYɕ3 olVMl2DveMO Ӱ(^fC?Gٚ/vBFW.\22TƩ19n3ͺe4Z*ϊzl5m`d/}dK?qt*CxoȰmmu6CڵrRp@ɇ9P8>Pd&D9hԼ0[ꩻa#`HE3DMfufs0As2GEc\{ x0J4@PO;%^Bz< hquD)d1$d l8jkm`.-6>,bIx+MVy-*8"=m("U:ތ{Ћ{<?Ni|?ELA܉#G1Hq<'OIS34^3>KIjC?_i# Wp_v@fzq - e{Xdt,c8 z50rml7vSEʙ|ҬhumI\ÿ5$}YvA}r PH}T,avd2Y5- `-?S8{(V7,ѽe n.X۹y.p1T 1iboZgGڭП42r@6_B#Ni iD+ЍVhAg-tzQi"ęvZGlEaq{+V%+b\eBݰ>+ۘh8a+X93']4{>ԷSp}OoRk))pPcQp2/BppISۼza[W'erDkB#MqPK J PK HNV'W 2cz/startnet/utils/pgdiff/schema/PgConstraint.classUsU6 t[nMhh @h&˭lm\lr/o<茨:vD|aI4p}__؎; b0(# ARQ0G11A' tBHTp s5GT1t!8!1 )gش`$0@Z0{V)9Dca3<:6?*av^sϘi fꑠD*a&) Myi-wM#ÞҒSփYI=EսBx֎岝#cLLr\7"Bnz ]G%ttV2_6ـX,D($RZHt2(OxZȆDR3fYo:5 -!4WutR$5hٲd OQ8k)1e'9J?t!1%1Rc(EPC*%auy$c!xfgoSq` *fq5e;g4C3ӆK*. 5; G=`W]EX㪊 k*c/S ;,d DEv 7<ZjہN#7UE/f)ݴ9c w6:'5wiTWDƧ*q,ƉS.G3f:ʫ@:XZ&b*2P &q;*|Iz,b/eg٬'%_7Y[qtD0m_HdM\?qxdFt"X_4DQLɐvi IsnTT/FRR@^BE}ʹ1MkY&H%eP*X]!NlM/ ʓMo+]!q0&)'qw3l?:^5aYrrOQ5{iE\98sSiA-2r<#hC4vY]l񑪵VlQ>U}V(ϓ2CohS`o?:PջdI[Nm+y^$!Ȣ7mOVrn~abs_ltdҴeº *Jo{_PKV'W PK HN]ZFcz/startnet/utils/pgdiff/schema/PgTrigger$EventTimeQualification.classTmOY~nfR*T@EX(EmŐd3:f:C[%>̞;4m?@3ss^oWគU´ wA # 2CcdL (aI02ed`0$xq9%}~la nc3ݢex=p}7-/6W[Fy&w_97>w|nl4F<5f#cόM6?y:/ -4R2< $v +Գڹ\+:\T˴znزH#He*F77\7m_!ꃰm0Dʾs c93 FuMعns1 J :/.ŪNx5  gTa] ~Rq S*C;{cW1!$vc^~{faKz\UT@_, %^S咄%O֐cS#/ou:_%|alE<4]M37N@#cY>.vˡ\MyadSٮK w镾B}0&ImTF̘n&":qS`9@-I Y,Cr#VIr?@>"()73=Ƈm; 7: m9 t@rCE@ZWQR Ҷ:I.~/Gb PK]ZPK HNv /cz/startnet/utils/pgdiff/schema/PgTrigger.classWyxTݙeB(耈I j&Y 0"d0 3Uk-5h5%jJhRjVf?{;w=l7w0OE&q]&j'œFnC€yN[36K͎v [N(xv;y.aPP1".=+6ˀA wc*FxG%<'2i&Hxc/_^/2yL^a*xox oo,V )2IX'-S>sIӕPV6, GJT@ i_ K@is, ,!B"J Q4-XHƂ]Ҟ@{4֩tKH0P"353 ! PҥuZ*:mi3"tu1WֆzCt\^LiC02?!Pņ8S ݤ@VDP"J$Wv" ƪEKh_m9 ^D|\aTE?܎|xa`g(EG&l20 M)(/ºf3PDQq7;6m-`()JS"Mhh:\)e.H_߶@bI)BNXȼHsVU2ΡwL\ⴌqG^>ss?ooO Ъ9|41VI쨎%€<*mo\JiHh)N$HnoCDvЯ#1O'YDhu,4& Ali;%wòtaJUD'R~HeqnZ=vD\~*|hFɝ0oI[UZD DmzskM"✞6ЍdnHKsۇr*< ܑ=m7 -rL䵙}X=rvcw2t QBTi,$(ɳ)ajYTbY8ՕT 1:>LٔvS=okáwQR谝p00(PL9Jpwډdg8n}r3Euf ֌`ZBn5Ϻ EԹcI{K8+>2(<!8l>cBL}#:~B$g/(Qa1.ڎ8MWL= 9Ls]B A]A R7HCW8BW街1tzAJЕzNVE"m0֢JZbq.2~ƹzsI<\lsϸ(촕EqQ0KohBEqdZj],q-q~o,AD`|Yz-th}zЇ sVQWkY~\u7iZ &HwGM6C*ey7MrCV!8*TIӂ~VtZ? ;h:Ci bbeC+ܼ( caaKa7rd=[Ita/&^?"_F(Jp؅j&[X&vCoGu]bj/>c&>6)_5#Qjne[Ux\ 9ןȩ9&ѐIT+Uii{OeRNV{؇Khc҅;Im'W[>Lp9Ն&XlIқT2M5RɎŝ88:p 7NBr8WE|,\eb\"R?Ve*.Fn T* ?nʁEr׊uBw_,!7 Ɂ[ՁT܎- p`Rk6UlǝBr7"ہ{^!9pxPTra`gL;xāGU<ߪxS{A'񔊧gU V^/B^RW,! yUV_7%z[p/fle&R/&-`  YCXP\sL฀'i"P"i9ObH0I&B'61ڒH"^Q`u #jB`]cu0XfI?hY[7}e^&G1Pp;qB"$ă_Idu`$01Un9BiuFí&¥DS\ I-pr ƇZ[0GXe#jB#Kj^Gd G p$l9eAuy%P>{jj ō53{-і\'W )! wY$XTO8"ޒ撯reVɕ\\2jBk!F3-=6R:ֶG5zm[i!$a/nRQM_Z3z} ͊}_,*76xŨ:ICJH[ ū:C>1f^bA ֤h4i%¼Op02 *zM:D(G=:!u5S֓Mf yg 4ubhr^}ohA .ɰ^w,LFB >7wƖf䇾 '' V!${1}Ȫ#uR4Y56\#ɏ6FUpew`D?23:e4dHMG& [pѴ>*jngN L3,ʜgEŧ} O~UmȬ=1ul)65GǪ"2Vr7gqaDj.>SW-IhC;/?!Z݁ty\Zʷu!m#r},7UFf( "sna6.D"dÉ S0S10?.̀eQ9(A9K P*Uc&A{I#&SsƒUnw&Mw M,G 0w8TxYhx%&0'3U@,a]jYy(낶Cν9p13pr y]߉\W \2مQ<8=e圓fJφ --T;Ccۅ¾0 c hc #020H0lsؖsoD+;gLև"n}(\|0Qǔ? E.CXʭs3f# 'ن$vꛬ):iFYN73X_c#ndw7a蒧v̀\^h79A8=n.)={z^vd=K5\[FY X0 'r}mt2)?qUzq&Y8gpr>.dXz1Kp)62\q ³mQ]Wp5^㕷p- 츑TDٸry,tnp;b+-bR/eg7ӃY\5arzJL'iuRƫJ%},M݅YGn9]ؿ05q staحN\p 2a4p1 Aw}4~?ˀc3 !ۡi2Lvx[$m;m_N\~ޏ}3is(O/L7³ gnH(Fx!GuDݘ/!f +-Ot5rGc/ttY"q>߁j}^}OtN[ {S]x" {P֕r: 3 nTYBILv%\svau6- ⎰:O=!.-oqM)epyJ"re JKHkU}⎲-.`q-Z-.yV8n7m=>#lxa1'|h}Ƈ|(&ך/p'^>"`AQBX4aXLG4bTƘ 7-![LhM;ھmXZ!1YJo\[rO.n'\M#?d{2Uhݔn&yjV6O?3h2C728$ʹ>gQS綞p<fXd8ii.\E;jO2%X$A":GT-"YK/.lD K*&0I/Qę;2]DUbZE *U,i;:F΍ 6C 4E,lc/wBnе:2z6 2/xCkbtߥ/K)?',C%d\Buh$C[ۑ}{k4P\-X6n~$4 VEY=+F} y{wι/1 UH،f^CvV͍>| quܢ5ܪcg5}G|p:vܡ>BJ5w.|Iww!{T^|E]O_Wuܧ_FuxPo]#fuu]7%]e|p: 틦:Tu؈3|䀱21eZlVʏ܏O* t,6q 8x~|%$N#6o`T:LnjtH::jI F[ &S-+v  p,OjiH#>u_#Y9[ 4񒆗^QuqA؈ te#ѡUX5?kx? o |׏pB0;wŵp8xXyfCU)K'w:1rҵ#8|enTDMuj $j Փަ鬒XĒPꕱW?ʹ](\ыu9=5md2YN`bZVZy#Zh jV;D~4pQ}?Jq6TVj5_mI4%0s`T!OG )A[aֹ|c$<œFg8e'^eV< d9)gxvu{k&nԜ f4gi9Y6C#fetW,P9mJAb jw.ͣBkN$ >;841EcczGLRm."[#8fU6HǻI ;}]i]RMuibcuryt0VE\σ5j#J299ƅ.`XKf !*̳h( FAh'( Ͷ\bopJp߹ =:\K(k,u/\ {\p3=a*;5Tw %SQpOD9o`Qoy)x&d0zj"8>̎bq(|-3*Ŧ~ţ,;hEkvi)¿UV4PdubGkGY}r(y3-uGQz3gۏl‡eB'+PB  c4A|&W=u8xpW،ӸF+o>|!(lP"$/ 5RGw{~ewGT(ÄϢ\;{\DȻCG@g׷C(F_ T`"NچD>D 4 l2$gZ>?Z3p#3R7͋=<} oHq\*vS<`VT*%O{qgue 6vqq.ݦ(8acFsL*ę WݞYYڪPla%kpQŽiPPQd^PQ*X53gӺ{ 'Q=9¼ erG1 .ba$ve@67븕wIG>H*;})1?,&^ VȢI149⎌#3z;j(;dO9UAc=//b ^&^%HbꃫЁjRj7+*֟z&v+;m8żP*Ae>TxRvTi<ԧ`[8 {+k.7Eޣ~ǵ3dp}.|x³Q5ڌ lpb։vKl8OdA%WA>&)15A.ӲAx ?˦ xN"2foƵIQhT1ľ.APФrG{2'LOb^6C^mG==j',)H8a@@RgvfwH3ŘY)$ōKċ%[tc!%SRYCfN) RW$l.sod>KL2_$Y>.-r)KeH*G$iL!rC{jr /'1Uѻ~fm&'ưĴ؅8ͨ5=&s<F2y9e%+Q/C2JISje^A g[J6,l;}YfgӘE}8d 3*Dșqlߔ#Bf'f#KZ,1Q,WiŏH0blF\C\B cJ" V,A,m\C CvH`MmeQmڪEy@xz=EKP!>*to:P*6siIK5EKb.]oc@ 8zS8|TL%xnˤ=Ƚ=XC2a!G2n OaQoPfU5ě*-ZΪkݪ=,Z[9l'${:GꃘG ֲ$NB9:^h]\C+֨Pi )’o8D}T#힧$M8G:;ravAf57; fdVz}VɄa'5,[&/ \3فKEG{mjN}v[,w8fը:R'!u>"NKg9.w7,̹ސѹZ3/3.V%sr{#)I^w_B#,W.bWk蕟֯#.o`y[xPNyG_;xC~]-Nޗ*@j&)_2,-ȟN9)ȟIF5&Gd VJRULsJs6- DP;Thu hl12gJ\h5 >=slwv ~߽߽ߝًc9npG9Nw=,>,eeq@}a,a|LY? AI%|$(Ӭ?#%|$=XK ]ۮΗm2n`q#:dfXv]aA^O&#/"xh^fO]ֈ[}˼C^DRwO-y}lx u8ʽԇqBHP?~OR?KKRS!!`7I]wgi^sd![|"{ɭHLKQc-gOB&#rf^t^.X8,f(-u9Cw"T\iA4DZJ~ U m]sHFQ"j%x鿩y" ؃wq7.GgD ^xI Ή2)BwQwDX E*qs"%F)&5bX/DBL, KL4q.GL E]w5JDL&U#X__@SsRkʅrrRFB&x%*IW "=Uҩ\k/cXFf6ROcm$MS깽AEH֗:^Gx7fBra1{|/667nQ쓸}&tH /D'Uby׳؍؋b"b?Tq]*.CD+ i7{Ii7)KK}^^D}}vPKY9bzPK HNХU7T"-cz/startnet/utils/pgdiff/schema/PgTable.classYy|\u;F)iK44 H҆f4I3IJZm:t2f&@Q|O>)* @<Ű UTٔ Zť>DwνwLn!1l'i:v<\P < Nd4d*Rt4dUK~:Ñ = օRHla2`4BN>gFbN@v#xd 9Weun^ߒQ< 8 /eV]z4cDb>d'z!SB7Cd9r$fosOt/g!ʂeQ2xI=ވvϞLc$' Ya3jbI+ oXziS!H jYeg3|5|ROw@alL45cf@L0kIwIv}hN\akh(Nqb"I7-x^f4D= EUYӷA Va̦,II-dW[(S}fOH#7g&i&t{DYoVqʅ,}n4"g&LٜNO(>H:LTHj|%YMDxа.!*å<\a.1|Kj᪡wjTKK8MhThNrB Mm|+6DzB>]KW;Pit;p'?CO{[ǚ5* @]iznrG4:C#Q (Ul(WܥI}8 7ԨVhthJ; wR~jL-XOl?+ , ,m(@K5Z--˷kQr䄣Ml5t̶#Z9Mq+`Y=UrTd6rB?aq].6whg "ÔΦ6?:jt>Choc1J M`KG[vfq3q6) Zzں8&|K&! PwSw0l vy:Eu< ui֨z5ZOjԇ|5 bKkWG'O6 \v"$2Ԕ#&8U8f `J7\41)C|dpL7iҁpl/Θ1MlLk0Kx.YRBfgSD:7ĆaD `J߄tN_Prui'kmS ?!9SXt;7S˘{Rbh-׺8;i$DޖLCV)r'R2t $C;A͐:sp\OyC֗ɶSۛ?Hgبm7%8.rVX`-#To8* ʻdۢv"K郆jL<輆X*keQSt^lCԆ ;ې)|k{XL|i27`.:f3^0!+[x r[y˚,m kLl#|wi˘0J|>xwpzz/]p3,.]٥fj' kw³iQcRT  8=G/z$"E]}(؃"ZhQTJkQ\FQP{t0n|G5par!xܸw)lYVlwcƽ%\|2K%-כaX(7bf Nj0k;{sWc(<~1֮U=֘v8cf*wcyt9U|Y9t,S˖c0lzgӲd S./h,ĉ$T^Oc=^b|\pLpm.NuF8W1jb~B.~q,5^LuaYk ''9P8 ).˔u4+}@qzzyO3ͼ1T :ކ\zQ{W5}X,22gߴX5ȋUvs0C8 qe"6[k=yE^r*]K9#J\ N|p-W8\U|_q7F|ǻ_{q ay܆q;xwSCp- ψ]4=S ߧRr6*xF9VtE*sʕx^^PZ%xY(wUxM9ו7xCyW?x>7.Qs:␑ס\!a/{aYp˘P6 ]sa+8WK_[f {QW߅=T Q὎Ky(ϖ^4Bw/:]&Oڄ?7\̫6T` fU FKEH8T 40\8Gץp2e\X*,_u2(S]˳U;ZKbNJK|5<~1u9ĀR4Kh-|Iͩ1k5?܄rVd歫>!`3s)BhbPn$t*a}t>VхD%C;mzз9LVʧX| *+wܕ'Y+YXYmvFڄFFסjE-hӵ)[lϰѶLa|"a>Ԧ*a?ݎt'Nl.B>nr9׼ pɱsW.?uN?94ΐdŁf w׻kuފ1x5}I̊^l U큖(9F>1gΘ`șSt ̣hcꎫkB&s)w16PGhٔ9zA7f<53H9a\PV_JyNj&!̬/S,t"%(CG7mhC8SwvLHhݒ*fI]a BZnj<5JNw*zC-ٻ6<4]OO8פfpvE*8w`r.ղƠ0hUAp8s^[sYNU&| q5TЎD+:"]6y(0OU#~ "TnTZP JSŒg 1݋iҚ*^FP|ҲOE”QqT NId^R:odDQY:U䰢 xgU 2 ^QGDQUXap,!~6 5Wxj$Ҝg$>2lC+[+ɡf;`S|Jo,%P$`C\!/@ڷxFnodWof/uG""A+${ƞ'ЎH·ڟC9F|Uq٤3Ŷ!Ş·F&z-?E`)܆NnDŽm#O < r)z&L<\("SqZ= } ׵Q */P;::|oNqW$5A%oD$qOZ 5¹A*^8z|4 xnܽ^- Ge#,:y%qMb‘ "wpTcq#f,lK}oKpzh,!I%U=dGHk3e\nlYEџno(ڿG_/hKnr]q{ߘK#1U2'>?[B.*ڞA9zPKmTt PK HNEEA+cz/startnet/utils/pgdiff/PgDiffTables.classZ|TU&3o&@RT! %$!,8$CLh6P@E^ײ+Y5˪Vw-k;$x߭?ǶF]S|s)pKb}-H . ^?#'i`Wi쑥{]x/)JA BIIa"F .!w&\.b(kdC,uNRRg|.:uXAu!-)k{1[xA\HҨ'I1E 4P&$e)E'`7ѣR&pFȄS1RַiNi:딡h4Vq2xtvQMi2A.E"`~STeRPNJP"i2(iN3t:M:t>C3{u:[ѩT2W:4O Α9]TIU:UKFZ:.z)|R4&PE:-%Roz 7vB.iIqD:iL֥{wNtB+uʅQ;h5(ͪly 7'YIIVWQQWyKR}:_ח૨O-/;7tʓ:Ȭ.3yopA::B_g[<EydBK̷3)=GAJʹ??[4tj .?ntMxAy^5Fd G*;$oul\OC1A 67 7ٶDM( y%N(5ԖE9-ΒǙYPQ-.Mͱ*syS`a5n6 A{FEuo AKt4ԕz'TH@d!l6HqϠRZJt;Apt'3.ZoRԠ{Af:3808s|^NAACl&v)ޑ])vKa+#<8W0>>0pϠ&^mm87 C^r}u 1[ͪ׋;U73Sx3 dȩc.Тܢܬ"jS"6Bj^PR-r,"Uq&ŋk9szƠfR>sݢPQY3h'=+s=OA/KL+(̜hK1١*Ko2hkAooJo)9 %G{[F;#bӈ/9-+\Sii@Ƨ&ruS%d#hݲs&do1 KP`bߠDz ="D1wO)̕@ݠ#kl6#ؠOؒ)>\FT3 qptNsAǠ MijsѴ,A_e/(C|Bo%5AHR3`J[I vD 2E=As|>&.XGL+-gXoO%sB||N`F|^2=/Qy 6a`tW߻gfXF!y|9:o0: :cY1)]?̻ڷ]iMSQ]oq.|5 _H*[l%rJGe5=]).f?I ҚZOWVyݖ%W7gAsӄ?Dt_y{n>sT < ނXjhdk:{%-+2NZ]Viα٦x[;]k GE}NUW&z3 $=2BQ?7ʒ?̰ la%x>6ԩzxBM]G<_䠚v$[^]SH>"*h޲rriTg.xڄJ;'"Yn͕Ýx!^VnɅm.wn`Sq\(+߱- ; lʳ>NJ5KHNM-M HMѩyC9V(vdkyΎ8f9ǼE5#'tH'"ŶQ*\~1qVs+ȵkƆV=걋&*K79)p$q4G; aQ +cODJ10:ÅϨ^32~_|ͫ >Ƿį;{?˲iY6 kFuZ8΋]Ň`2+60"H7ଵ@\6#9\IMЄ ` ZY׈ɦۉ[sـCB>B-!;2 դc!9 ,v&&]` ^8դie>QNBb**4f}fӧTJSS.`ezl4,ӞK6~Cv zKyց^`b2!G+g}È퓾Yg0CgKMF8\HͿ.)l֯5tim6F:7Zd晁Œ3ch3?Ϸpw??O KRz1QdA#Q@FtH˳\fVi*Ә2n|&VMJ7s>2i+'#Lڎ9$ΥXRzigp#5VډY1'pŽsa yP8ؘz#[wNؠq|jېrT6hWmqȐW\ PgN81Hޢ\%q2H;ل>FѧK}%G8}LpJ- .q){'Z]0R8x9gIo'8` "]TT:( )S:*'R *;YPVO:^La?űfF@q= v%lyrN'] z1IaS%Q$5C,Ng[;;m};b9oF(Y[q9 nUZLbg3Jٌ+1I)nUWcݡ ,sf k7]4:AwՅ0U߂;Iq7 gujlyVQc' /MQ!Nu.TܪaE,`:/"u.UKqZޤIOA]F.'ZE񷧺(QQ9u"ka-(~H0}m2GS۞Yݕj%m'?Ս{j̣Jj=7y].rBw~{f&҄5r؉pF"qDwkD…E&-vۛis!Ooτ1֒wdZv}&EF VJ BͩHyƃa՛[8CYTu+8܎Q,u'u(WwRs7=X݋k}K#A<ԟzڀ#Lmė/WmBLJm!J]Omaj;[VQ;(O=E=]=ͱi'ժfWEyX=q֩QJIg՛z^Vn6ޢ;+SA" 8r7:W 0āc SGsu_NؓJlwX&zKgjJtXثѯwDt-yͧw;zf%Zq#߮)Mm҉vG; ^MJ; RnsG`p0"% 8H2{kB~8Zoihi'6j1LK(- Z2i,dTrN!X rm.F&ܫ_IV7t|f-+:j)^bʡ mMT--j2M!GkSiO+ZJhtVDM\ߢNҦӧi6SVl*N;Sig1Gq@+S״(q@Q`1 Fl">f^|،_(JԌw3吔=Ք=9|U=R6VZ5zk5jQ^՛̆ւ6JOߦ`.ldަX1I֝_ّd%^>E!') ݢ%j8Ziq2J#st_PNR`AEK$#p%mb Ԗ`vhcv BjKqb,.yruex@[Uڕx^-j5ծu-ٴȩ]Ov#n~-ONݍgn~_M_X%UOv;l\7cz/startnet/utils/pgdiff/schema/PgInheritedColumn.classPKHNig9 -cz/startnet/utils/pgdiff/schema/PgIndex.classPKHN |9cz/startnet/utils/pgdiff/schema/PgSequencePrivilege.classPKHN-t c.cz/startnet/utils/pgdiff/schema/PgSchema.classPKHNAp/Ϡcz/startnet/utils/pgdiff/SearchPathHelper.classPKHN, m4ˢcz/startnet/utils/pgdiff/parsers/CommentParser.classPKHNҜJ 8cz/startnet/utils/pgdiff/parsers/GrantRevokeParser.classPKHN)vpb0cz/startnet/utils/pgdiff/PgDiffConstraints.classPKHN|aU] ,cz/startnet/utils/pgdiff/PgDiffIndexes.classPKHNn]),cz/startnet/utils/pgdiff/schema/PgRule.classPKHNsR.Icz/startnet/utils/pgdiff/schema/PgColumn.classPKPaMs1Q0cz/startnet/utils/pgdiff/Resources_cs.propertiesPKHNڲ ;cz/startnet/utils/pgdiff/parsers/CreateFunctionParser.classPKHN9Eq4 7cz/startnet/utils/pgdiff/parsers/CreateTypeParser.classPKHN.d3r*cz/startnet/utils/pgdiff/PgDiffViews.classPKPaM4 "z0 cz/startnet/utils/pgdiff/Resources_fr.propertiesPKHNA\v.cz/startnet/utils/pgdiff/schema/PgPolicy.classPKHNYxCk1cz/startnet/utils/pgdiff/schema/PgExtension.classPKHNCtw9_,lcz/startnet/utils/pgdiff/schema/PgType.classPKHN=I$9 cz/startnet/utils/pgdiff/schema/PgRelationPrivilege.classPKHNE ~=3~cz/startnet/utils/pgdiff/loader/FileException.classPKHNt-cz/startnet/utils/pgdiff/PgDiffPolicies.classPKHN|u:{cz/startnet/utils/pgdiff/parsers/AlterSequenceParser.classPKHNVE]\3 ;"cz/startnet/utils/pgdiff/parsers/CreateSequenceParser.classPKHN#M(cz/startnet/utils/pgdiff/Pair.classPKHN}a0**cz/startnet/utils/pgdiff/schema/PgFunction.classPKHNHy@m ,@3cz/startnet/utils/pgdiff/schema/PgView.classPKHN25-<cz/startnet/utils/pgdiff/PgDiffTriggers.classPKPaM~luw1CMETA-INF/maven/cz.startnet/apgdiff/pom.propertiesPKHN) :kDcz/startnet/utils/pgdiff/parsers/AlterRelationParser.classPKHNJL-A6Scz/startnet/utils/pgdiff/parsers/ParserException.classPKHN6õ**'Ucz/startnet/utils/pgdiff/PgDiffUtils.classPKHNL ع *4ncz/startnet/utils/pgdiff/PgDiffTypes.classPKHN J 0Excz/startnet/utils/pgdiff/schema/PgSequence.classPKHNV'W 2cz/startnet/utils/pgdiff/schema/PgConstraint.classPKHN]ZFцcz/startnet/utils/pgdiff/schema/PgTrigger$EventTimeQualification.classPKHNv /cz/startnet/utils/pgdiff/schema/PgTrigger.classPKHNTU#rcz/startnet/utils/pgdiff/Main.classPKHN. [%cz/startnet/utils/pgdiff/PgDiff.classPKHN0Q9cz/startnet/utils/pgdiff/parsers/CreateSchemaParser.classPKHNC. '-;cz/startnet/utils/pgdiff/parsers/Parser.classPKHNY9bz.Icz/startnet/utils/pgdiff/PgDiffArguments.classPKHNХU7T"-]cz/startnet/utils/pgdiff/schema/PgTable.classPKHNmTt 0 cz/startnet/utils/pgdiff/schema/PgDatabase.classPKHNEEA+cz/startnet/utils/pgdiff/PgDiffTables.classPKMMaapgdiff-release_2.7.0/releases/apgdiff-2.7.0.jar000066400000000000000000004235171412634760000212020ustar00rootroot00000000000000PKBeCScMETA-INF/MANIFEST.MF}TMo0 ; (0`wFfIr׏r#Fa 5>5<"cWႦx_H*a^:ҵx'!+4)Wx p=J"L98pcz6jH݇ۦ1,!z@G;VLmBi!ô^/w[-MNCL9\Iä}xWoM^ZgfZŐQ[9ީ<X,7S!v;k݈&$*1e%G~ρKTJM1<ا^El|v+Cd Fٻ$ݱ gyPK BeCS META-INF/PK @eCScz/PK @eCS cz/startnet/PK @eCScz/startnet/utils/PK AeCScz/startnet/utils/pgdiff/PK AeCS cz/startnet/utils/pgdiff/schema/PK AeCS cz/startnet/utils/pgdiff/loader/PK AeCS!cz/startnet/utils/pgdiff/parsers/PK BeCSMETA-INF/maven/PK BeCSMETA-INF/maven/cz.startnet/PK BeCS#META-INF/maven/cz.startnet/apgdiff/PKAeCS !6 -cz/startnet/utils/pgdiff/schema/PgIndex.classUsUme (& JhM[(&tK^d7ct/3~P?0 ::(18ٴ'3s'cF[уc"`L8q d@${) '98NwF4J8'<.HxUk<2 {Ҽ7#AcpVD7qyy+( 3ڬ^MXW/ZȆfY/dx j^j39-n-~B0-@Ly`|?I{  ZI&%Y i{鐍5;15&-ajflՑeW|b\,YEZ\{ a++av U'f浴9KYTcv]7Fn@+Z:Os~DRNkGt22ڕ~WЏ^/`3C+z.y%GDt$)(PpaRT*#x$z'TPA6:)Mie\Q"*9\Բj"Ppu'ǣ$ﮑ3U,ATo2Nּ:rbbҞVxngZ0ղYPsF賳!#=Ր 8 ] nmuC鬇p>T }ͺ +5ටJFhH1D[oM-6/+aM-St:v?_:STh݈KՕW SSH$5VY갿l]7ɩkV|Hgw8 ;tBzWA[H>+@ "E]4ʁpݥHnp [u(pYb{Y:b}D ӻe & [vӱ<vhFIXz 8,a?Zp$28"T{G4Ş0e w{P8FMp[VK Ďk}!+X AaVTj}4f"j=M\)h~KLaDzJ"#LjHɨ#J:&fP`XmĬ%xx!3/Yr%,’>K-KJ&t $.8888989x8 *U(&!^<,O95zQMUs) V[kH2^U"ƦBF?a3֘[*I_IHȡ:򀓊ɡ/,_yͨY ϛa;y,'䴝DIrlN.k9ym'xxg<9$ODb"a  u=&۱؊^D;G#IDp 8(^BΠ0Jч )UޢH?`NVK:Ty[nH&m+R!c+NR""ڊxI)4u P ݠtw?A$FOP sS6z\`[ۆ1v8d'p= 2&9|Ů2+f*o$\jЊB;nAPpSx ?UlW?ن|kPKAeCSKi 2cz/startnet/utils/pgdiff/schema/PgConstraint.classUIsW0ޑY[V`Y ,ɲ%GWC:Q %g`٬s6T>4ЛpK!?廠^\PⅉO/)"2JJfޫBxnϿ\vI}, )2%=Oog왖-)żp@,Ƴ"S )Ķ-yGL%iPj}U_Qz cJ\ ffgMh1_%I):s8A}8Nz<ɇFA7Lߘ߳P;[ٺ"#CX@ɷ XY$˨hX4j̣T5~&;7bG"Zlk+{ҝ*{I^Tc=Cch'D@ vb-=0['`a/A04Z9xq >>c?>܅{)Bx" ^)O(OB#^ :Syd-\-p LTګd?C]USYSFtwck )X[i8K0)dD/&se arzxиN]A$T~J4UK,tUB0mXKy[ѽӱW%icL>QwL)΃lw|˱ܬ籉GR)YxSmw`4K)lDm?I?cHx654NB+3s[`{&|!O3iϳe1cz/startnet/utils/pgdiff/schema/PgExtension.classUkse~d7PbZ,%*m %ll1M/mIR 3*^ _3q +x޷n9={.s޳gQPЃ x&FHHSsLW0 L$e\T#]LȘqEDZ”BaYL̰6 搒e%,+FJFdTS*;b tnvS1xݱJv| VH|eIfͶ]UTfԪXΘ. C{ڪzy٬%HEp|! R@yB̠H69OG$|UD%\W!n@#O$F@hY8* 9%Uco- ]MX[3+y~{m˥Op/Z`.ZeLo[CVr֫דNm]]i,[/9w8{Zh8N)3%&]wRlEKO "V]\~A 'popMD2}-\C$}ɗiAqN i"a8@3t:O]IB%zm>I+ BтO!3G8/h0_'M&% / am x0$|6I\93m&,Dr)u ՗3ԑTL<5.0ؘwZWrt*gNtG|<Ϙ\>g`.q؜G3W{4@'N^辰kuCi&̝)ܨx^I//t(TХ[A^)ؤj a=U¡I\kH4cXC>Xd`1扄v"P05<E S1JOY/@Zb[H0;?rFC \m9Ov%33Ys039s^ѡ4CC|v^.4BY􀺿3V)Ҁ_Rh-aNvY۲=F-gMڲE ]CghGA3  \  < *xT)wuA))5v8h+*MG+F6sW+j%!Bm|e.xZu+tFKS U{sC>P}jGVP[ hVO㥝jHMX$M6"U$Ga1&y-&9\6g|6hZIU&͋ H~d*;*#To/@]mmQyluA c7RQC<qFL11DIDix8'pNv!!}\{d+m_vg$ >+!1LQ %xuW8e>OL <Ŕ;~ƥ~_KAr\@Jh*{U*EE|&xjOV)6VEq4ϡު@,V3qտſ8a;|5aRC/" Ok4x0be>c9 ઊۯX`bI2%9(bU'7&[|m%q"|-cB6-H-3lXX0|Ŏ(Sf/I<5x]-fȿ%aB%.c=GYaG-L-'$ wZ[=[ȚeM߱\p&1bl"X8,"?LDyl F(XE#HE>t;ᲓhqV7fm;=OȮqpsPE̡0t!L<87XūX\0:Sc N61o0'<w-7rOJ:$Sߦkd=6u{} ѱSէSY>C5W+t['3{xml]p8H zE=#*YT;A&BJw>@4z*^|1=U,nGUvdt# :F#zOS .|A 1|%`'?.=FLA'PKAeCS+ 0cz/startnet/utils/pgdiff/schema/PgFunction.classV{pWl>eI36ِR 6n&_v,nvo҇mjhJHJiYB:SLQuGCs}dY,8s=sϯ#Kn+5%co!Jl07JY0b a "b'Z"͂x~ Q }wo%_,9lc,|W='%^g𴀥%HaM@jRq5.` +#;SCJ8أłzb%l) 5zq{%b~k`c\SbZXtq1=ؒ`$,fjG$_d$yC0Ԛ 4i2o0v$FX2"5j̢rgmY9:Ι*C) ֳ+0GS|+Q}' ϐ{dhs@"Q} +tвB'Se R{\P=37eOyCv, e =J|OC"CD1%$M&d4v9Sb("cnk9 /|ww[Ko[UgwUw[V쨒U<+c Jc%G%<'y|C7qL O8WK X+8FqnQ%h81 ^wg{{[GoST[! pήS|ξ^';0!O)%,4^*]dbvߋ>oW% h$ʸ'&/25A?Up蟢ԣ:RQSoOD4՟՚چ/pӓ?=m\Ϡ@$ʑi}0*UZU_ÈH(D85uYXE2˚g hzRGb[רt#_,HrmMAę_ J׭F̱RZEjl^q9\"7CLHL uu1<ȅNy jW;HRԳs@7".-9*nQ= lug!Σ, g`|d-(d3<╦Wa:U7j[іV]B&؈u|ka"dLS&:sl񟳐.%.:os&!4l$f t8R1RLuؚ `ug+Fcv7_-OY\Do $Qq앓k>q0!Gƨ)!WN2l`1PB#;1^nŝThw`;F=؏>(u5Ga2LNdsQl-:SCWHwr}Q/6fw !2kK: X[-i22P`8/7Q]D Wig8M&]龠ٴ0]a g0g,k`Fw5R<X!E̥&R7uHW2N,g T0B&f8PhVl6.s0(*GT""xXa1G" 㸨+b ~#mN8pp/Ge2KC~ťber#>iO#FνʦDy6]]  6~I2G  (+Q.n| j5&֢[y~R}S ӏhe]lNֳ^L$PKAeCSmm /cz/startnet/utils/pgdiff/schema/PgTrigger.classWyxSU$M^G*h@ĶA*:t.A딴)о6)I2.(3.Ņ:*UG@n3踏˸//#E9s9Ǿg;"/DnD56g9ոɟl 7KǍvbq+np& w0/vBg%lq$ܝm0PVc=6ˀ_%l~ Hx1C#HxL}B“za2^³sɋL^b2Wx bs;fwX-6ڻv~ -0?O$ DJ( v)z`? PHtQ%* ZGJN(PC2KߥЩҩxDe/DcH,JzbhIw-^mP%_$(ҝpoOKIpVTb: EHL6wk|u1Gք;{Bw2%hnl BXOħǚ qJBhk wuY](V ~[0_Ix`(0-s56CkirQ%7' -,EEW$l20 MP8Vuf6-'?6'-wepO "Rq`4K^bdgW6HX!t`4жAn%V2(y+ydjCk'sr<: {1̽t-P3@,[U$-Գ:Ff0Z~vuraUVQDu>oXRi[C{ : $7D!U_ۛ=VeAaa9QeI22xWE"5l+*#IzkT;۔}If|n[wnSWk࿤B'=YQ?2Jw-׫Jps˸q@-8:!B̖cg!2}mq6{tLF˯iXgۖ0YdCZoCcJJX)dd,3'l9&2da6YHZF~rʒqZYeaY8ȦOgK0ɕq zVH9_UuI鬭k9fo-܄JO:u1E.zH+ :qVwj8(a㛞*Y.zz1MK=3~5euM4tiɶr6e5dXXXK9#%Gg?_0V&m:qTLؚ()y1n~atU/Ʌ5?fxkw&-8 ۩PW>;NxZ>$z3o)\ZaKchS} /бt?bTz?A6LhfK#%tu<'WGgy<~q@|숏AU~R I#a0xx+L`.%R6OmQ"BAFkU*d B*q)4wü9)nU j jӋ%C6HsrL_d%HBZ6z>W!S!hfoPAJ)YR\r܀lC=n?7l?=ym8gNjV ѿ A~|(v#$>/v]T|>7%N> {Po$r{0Cذz0-ryݘD?+2P͒0%wbI^\~b8q|GM=1I@tHg7=FqژG6=z >|2o|"8'>90URp=zs!l=L]FYkh2Ajk ]^Hg]^Lwz}"q7CwPR/ZT8` 8G/%Enw:ԳQuE%C8J/}e_BK kMhѫu\fLED/7z[s!Aza0>HA?L?Jlj^i*=q诓&/۩6BP% {=ܷP)ۈ#4-2~ Ti%*~]:Gki~ UtBZm+i:8:h:]=ibb6eAԖZxABn^dX cGP1yS-Da&^,^Gx7QH0Um4wT En>NB.Z}S*>sl_>Z3`!FaeUx\8˩9_'PNɔ+i9igOe SAV{؃Ki-s\zI񖧪\!fQk6%[f#ճj;fQcͥn#ϔ}M2eL6GiLTg4_+\B]f5%/?PKAeCSq{>7cz/startnet/utils/pgdiff/schema/PgInheritedColumn.classRMo@M\!mZ~1 $DT*ʡ7'ٸ[9rM@BGUu*: y{3oVo;xT* 6+pUr,Se5a"{_SHdZSWA0aGWN_,֝0Τ@}~8L@*SM8hGk(FV͎U"aWa769xI⎥~{)LÛMcpbw(7nyGf܉.e;')gy?*yfC8*jWg[e?vOdOktɗa͔Q7*ҖՆ7.^/O:E|wR4!a8m5V@1;'"&[^}ͷ46<1N GGg89?=6<ä`؛5Tj ` m\T1#쐗Qp=L39cTЇTfi z6k[否v|V^>|*4W\M{=ći=KcG.DȽEGW w{ڈ[3 Uwk <<`5Q^۹n#>b RNho*>"vˉ&jbIhA^'[rk) RAEnEɪ+}`| QLc38100y"U5zQIɿ,p˸f_?6!+^߃}=w.^޲PʆJC !TJRXq!A%QwIjDtB?H=qdI>G y/$PM5n"~5 aqEe5ExZTiWZE~@͓wQKKZ;Y=.p?N?qAu[BDBYO½b\$l_^_ῡ|/S___EL D=g_~cфOE>]X)|%Z%ԌꦿѮ߿ ֙ȿPKAeCSL,P,cz/startnet/utils/pgdiff/schema/PgType.classVYp[W%^ױlM4J"KQ)N\(ExZo-ҕMP֖mJR1& Rx+Ւ?|]_?.1`܅5 & 8)WO -xO\РS.0pq9Ϻ`9"""BgUdUTX4/oIs.*:b^)|Vc*P塮yy >%҉|2pGNsz(oPY#f<[!ph$v!2,[ eL(5zh(kcwveq=7joOxhʚƙғ?h2sa" l:IG͔iu lտ'vozm3eD)#;O%(iVnoK362>uGN?zT5tLF#Jc(M˦3%gXQ;Jj֧Ko X:ef*WX3'd´f1.O_LwR" DhgT_k$ƌgP|t>c5!|TcD /cX+xUHhx }|I×Qɛi#+{wCa7pEayG؀'(77$XLJrFFV:kZm uh |S[ڻ#H;Lz-{#cQmєC%K#%Sw{dnVY98uڈYlJ-f ;: `b²Y$T eUϕ2yK=py=)ⱬxFbv|*fLLjIa pMz&c\Qk|q"2m8%_kS8{sm!Z 4 =dx;'}ƌxFQFVTmE g隃Qp9?eqn~A;Lr׀qj  {Mʳq#܍_𿍆%8nYY6hǼ+q;8[цm{>J:x(5wroyl􁃷d\-\Dk`1xc{mTN:+~]jp]wx[c,zUvm7ʆ7bzE_؆ ކ{%G"6N.c\s,b5" p<[kMNqh }?,kP)5FÞ9m-wY}\!Hրc(.v v('7$(^;KГb9b'q <e_53 r!l6v+7)yzgejqК,m0Q`!%3'/8kx'&ME^X"/^"/\(=R$H]EK Xj_,0/W؇wȿ&E;ۈ68އG-0NZþbh6r'(b:jr&;x4#;bvLɈmPKAeCS9  :cz/startnet/utils/pgdiff/schema/PgProcedure$Argument.classUsUdMm -`)mmb}LKJ6٦tq3O:g :~;9i(ipt29ιwo c3z˞a2*㸀umF L"e3tLf3LpNSp]4чI8MHRЭb`[#+Fu6|F-ZIYV,lpU{iHs̆b),;V]ply-e|t&i͜v!"lވI&011=7]`\aAA#LN`\4l,MP>;?$&i&x^ xoߤ@CIعiiѭpJp.ONMش«2k>h$i=cQ9X%FoJ3MT Z< ژb L!1tRեH'rJn$t:kGHJ@A..b%Hj תD8>]6U}e|d#fsʥRs$ 㑂pxcxOv_oK^¶3aCVsKhC=QʆEfZB#/Æj֑uXAe"%w!C>˘W"+bF,uqt5+TJV?G`|H4~--X%gY9MG]a ]^G8elr2loYYq߇j*|ST JP|A%Tn8%nwx_ Wqu4HU}<$bӣSL`W1{ȝQr;U{RYt%-b|IwB,~~1(~.ߦ/8-~.t[ rV/ݞb:q;=8bO DPKAeCSͿvu.cz/startnet/utils/pgdiff/schema/PgColumn.classW[xW/ZylvIT;Meَiq&:'c4-i-o"*$Pz7 [˥Ph4J@|>x'x؏/O,h5:ɦ cd T--) !^Pe$$߁IbQ͌GđS5RN= a@i#nB58C[f,5q|J9Id?f/;y*4)IIpTRΰGTbGMm=rHK;EM&$pK[έθWYJOWkyuǎ`^kr* u )8^iaq?H;=M%DlLhunWp;J;MS=ő+؁;܊m `r q#־+{ 76CМi 9#'$G ̣ɤ-ܭؾY0ImgqN -7 ."ޖpQ%\VIlQ.()[Ssڇ >ҭL`Ta&8}7X9|$qՅg&IW% JE=%h+AMXYFT9T̛<,&}60S26Ԃɳy1i5Upz.GXcu _-N*~+[FgUK'Ec(!g__f Kq-v⯥~;klZ+(\G(&] ,,%Ǡko=<ƕ){kuR# 9C>5#\i}1ef 9g³ ɔ9{m(J_2~EgByҮn:J^ouۜF;;5swټ!Fi|co \Amcd|H*h'CEDڱk1Cq[G1W}60щe׽]؍Tq#$9ӈ[ϐA{E g0gq籀(Q+x"f#S/BFF5BuL{"s#&Q0M6DgquoL_!:^QML8svwԿ'z3Ʈ)s[[Ϥ*w(%z9aǴBY9'sK'>zo]˸N`hV+F=PD"Ξҙ1C Gv)quÇ-p Zmn/a+5Q $e~̞;4m?@3ss^oWគU´ wA # 2CcdL (aI02ed`0$xq9%}~la nc3ݢex=p}7-/6W[Fy&w_97>w|nl4F<5f#cόM6?y:/ -4R2< $v +Գڹ\+:\T˴znزH#He*F77\7m_!ꃰm0Dʾs c93 FuMعns1 J :/.ŪNx5  gTa] ~Rq S*C;{cW1!$vc^~{faKz\UT@_, %^S咄%O֐cS#/ou:_%|alE<4]M37N@#cY>.vˡ\MyadSٮK w镾B}0&ImTF̘n&":qS`9@-I Y,Cr#VIr?@>"()73=Ƈm; 7: m9 t@rCE@ZWQR Ҷ:I.~/Gb PKAeCSx4#-cz/startnet/utils/pgdiff/schema/PgTable.classY |\e;mNJKJZN&I-Ml;&i&iVd:t2g&вZvueQ**("wPIKEP@`B{νKw^yx q  #ߝ<ՏeB܁G q'VxFk8lwSCdև&b-=;?ddwAïr/cS̪3 /GٙfɎU]xPGol%Թªf }}L.1{)dIz gD0Yf/Ͳ8Bi ^}kk$3BdL|ŕT0Cϣ:MѕpH>!fe`nl^89cf^L0KIw v0}hͮ\85'@Nbބ%@MDw@X"F!{Ufuom,Fs<6eAXB0vfSݤDQhhڎ@՟)>elś6A4`TiƽV(7Tm,}n7EH*9˩f2iq[?6 KQ:Bz 8n@C;4a@]<|I5{ '4rRШ7hTEZхtoơp/ysllij)h0yZ׭ki.p@ߺ2.:Y-/az)5jJMKoU"@ ;VUTjѹN[Ak7Xl*ШxT qַt¹}ke5j"FB(4lDUybQ+lZ!&f@$h͞׵LNlY>-!sSK'[nzW[p=ƳΰpafCk7^Ř^`[71Ӈ8[ʚ[6tv1;wz8T6j|M~v˩UqFmB;KmO]u&6z>4| & [Db$x5{p&!QS}1=Wl,AݟB㳋7 G[`@>9Q'Zۂ5O[7j&Šj~l.̥2b0uOXðx;%5Qne 4gH.|3cn4o%[v1EZZC1vr LJ; `<.M7pe`P`縛ORs"`|.2I8?ee?e&n3yzS g"4߀dNG+E`(HZ']=S~&!df>&eh2ke9Rt^bBԄ ;{I|s[YZL5|/ )үb%j}F`0 .5@Nߙ~ g_.i3>'R3gb}*5_ەs7.bt<ƹ?n,\yB٥-gOT <<4𸅩 b>s,G=+5؆50c "҉՞a;Bh}(41Lo Z{O{txgv! 6p%ӐfӁ} yez0ØyOF J3㲘vAʿ96r0({fZ^Ŭ ^}pz]R}7_v^}:s+=ѹTvdeGpjh<>vXSn[>a.OZO%6ܲ>PR]9RFP^7-'`?[eۏD*3YS-W.6 uW(Eǰ>Ǣ{0.{K2*\rWȤНuLaUJ \U5eX"ι42 i3닢ZyR٘ok2vjћK)jHõ 2AO3Ňeٖ[ , lڲn#;mBKGf ]n|U"'X//_UN983$ >![{dߏ;0qwq?㓗}4<Z58B8JAa?OGt#8݌GiA}k}N7+oF~IGQS#T QRߝtKs(zJlTcAdJƎqfjL{eBfa 6g|Jp3{>Zo.{u_0-CeK/n/a QSqdӏaJ|9SJS\lY+uƭ&gΠVZ܆o*o=[)+#+9V&V ^Sot=>Z(oMC0Iפ^j][3Qi~qVT*r^+Fu!f.\r,9׼ 05eblm>Gy.eBl-84:Ɛ̈́@i k0l`Ozv6 1*x-G([$M8V1'~0U|5{j^S |<|4+m>rOxQ^g&E _gY?0~SI?!sIȤ_bFM eWrGLqx앀{o.zu78x|0ɁcP77)?6E>h<LJt&PKAeCSd,cz/startnet/utils/pgdiff/schema/PgView.classWmT~eYauM, M6*!"`C]AwepřY jM4ILLj?G`EBִW?=S{. Z=p;6OlV0b=(bt P1v(/CA ,5,eИ(q7N񘄓 d0io! 32~w>w1Ib}  OkDQՍ:芙[c4Q$#"/|OM{BډPl5j"q॑3bε?ʸ; d9V]vq)l@YKh2?9e BF s+F(;ֶp 9<HD2Pnභ / vJkvrx5S+OVv)CC*ϧڼ}}2$MLZw[W:ʹgU5k=pWưf!DykgscHOۓ–1G: Jgn`oVdVbI]a]qn3"Jb򤚉FD/53i`-ַg4:9xZX;HiN*yѳ'~wо(0(#Ld;-6'}YS)6h%1戽+pxSpg+(M-0 ^p^ 8I3= L*: =0)h.Ynu&K:fZwqG/p-].cvߠH,6r{iAYbP(&l'2c`I{64;3~9WS@s׍.2`?у8%c +G,%t̢2͗6m/F#;- KȒ%pyNxe5SAB.LW' )fPK8),/ŠPл2` U̗֡jz5Wc+9רl2w-3 x^x9/:$ec!"xU$pA 5qӸ(sYtIf*n`+07A%ߝ{ңX9% 㱨oR]N_B7]*sS, \Ck'rH~7B?!ʡVoε/~%?\O Dj^-П̅A(_ʜX!f“fm 8/|J{F&Zi[:eQMY3.!\c*!7,HSVPIGJVΖ:9~ IKm} cp\7ʜr;<^KY!4j]PKAeCS:Qa 0cz/startnet/utils/pgdiff/schema/PgRelation.classW[xT7pBB­ %ȐDj/H A+z ̙T^/jQji+iX}7V/|:gn9ì}{>{2Zp Q! y\Bl| OFƸm /1~чxI^sL^~}~(+k1~܈q|C|)G}gDbm܇5G j_*hP2I(v0ƌ֤mZݦP5`# yGZ#5:ښo`cmMiVdg˥"q3B*NLF:~yV[8ۏ2~퍗/c֞K(gE2e?}t1*I"`)+J܉fƦ6T`;9*K9JPu.#^0Hѓhc+E˧WY3 bm ԜBE3UsP G!ш!4c(eB?vpܒBUINN7ޗ:J%^=#Wq *v4͟Ă ,ܝ'磶a9%Y8DMD QOCWOei_-{A5Ͻk+ㄽ!3fA+Zx0Q:Jq /8<_a5T=A?Ӥӷ>?}`I]푓3rAusmx9y9.sgNM VFq{u~@WCnzY T)71]駌/y\K]|F3J ><28 ke5a۱@)@J^nͳ;_kQ=*fZHEgjUΠ@Z ZXA鬄3pX+V8Rn5$]Nd֐b)mX DKϲNKVԝhTЬ=!)9 &T^6I2r\996%ۈq8asc۰=WX HyVCszWCs~c5'\͐k'ˋRoZDuBND5OrPKAeCS:.i0cz/startnet/utils/pgdiff/schema/PgDatabase.classVsUmmmCRӔ@TXR4nMXlBvS>'_P,8~spwwN rs9wύ_w>,ň>xKXやen>4`OIA ~A<<#V sMUQ! Mb8IAR>AZ"Dd22d+rPK!uL el +1MΤ5 "'BmSJţz,rMv΢fR2Eöjk ʹ鱣¤7T3 i݌;Q-f ۵&!8}ό/Lw*KilʹI< ā~nv@ dkMm$һQ_\sfBδ*~RjlZ,W[gqtV0,5-7ʾj1ւ#Քecnù輸&nd 9=J5@Qm#0O#at ,TJ1*JP061hTc5dgL:mŽjߢji+E zWHtZ=.-DG܍e ҍeͻʌzDY+㘂8$N)]*؀e<<%V*(x kd `y7'e԰fLFz ~=㬌s #+%tP.?(Qc!-"j!Vds/0(9e̵T(]r A{3$`]yͲ@2<9%W1x<_gt6;P&5Q'[# ^Y)8Y&$,(r"?>| XpmMc{-jE@bIrhgfspbIX儍ftK˲3%̨FoI-L%|`;v ͱa-4 (^,5FXi֢)Q %3)NAjYgqfWtjF p{+T;.oU)W #ӊG۟$] pAˋq@:kH~Wkm9' )x}먻P_XDþMɃAoh+4t1dҕt1~,BnjZ5Y @f\xD\OzG1p73Gܟ?߉:G 'ZفF 7 r8I94{Gl7* BZn*aЄ89|0o3E'&ax$fIE\̖D1Fz&ΐ\%;H IӚǘ1p }6x 26.jJgAonSu4z;S W2/ Lbd ,WaG[Y9<-|E ^xw*/epVϹ{VQUbQƒs.`YwU1'ྌ5$]iI84>zpm};׮H^ dln]Bk5,_BhvlfcՋ;%9eg'8X ٪:>k: 6l7,oG& :FU#Z1ɢJK>*\u}+9 wϞ܅F.HtCGS!pw4BPn=z-{p̣%+*rOS30byC x**FEf y E \+)|]wu<ݐgޡe6i5vUJ=(U>,/q±T : #FX8r-3P:TԻ#9 ׉O9Ҍ$ͨsy-O Ifq+(vʔ#<&g8<5f&q2q*ZS^ff:ZSg0xi:^mFsjH*Z?Пn\S7^ef>C.^0%zŅՈdj%N/)%R+qrzPKAeCS)1cz/startnet/utils/pgdiff/schema/PgProcedure.classVkpSz\YBئ6#[J,*?j\Kײ, 0I4-!մ&iIIKJ[B0Ӧ3it&m%iڔ?m3}Gq\I,{wϞ={9?+Va]V`g!q7K 3 ga < a"b77wJ[0l  bX"͂ }g3`Xn >g=~&qKs<82F4qwXI$Ԅ1 vneRV"n- *ҳFPJh< Fm$N[s7"` 48XJ}g3Z4]c5D?:ؼ1 iMgvwGc/QGx2&5j̢RgM#YY:eΙ*C1Ffuk6%$ r mI9؁x4av[VHd5Oaj"%~YbL,%c`'~<~ OR4)D뎎!і ! 3Js<242cMX'07-#p@*]OeGWeTvvu=-]J_2bXrD32e|GeB\cS-v<@5.u)=15sVԯpY<ݭw],WJ-Q9S'}Wcaů6:ǘrH`yEbW U*ٹAh+"}Khj'iT[Y (; _$@3Ji$wz%xeNMu j[I.&l\:Su07gLS&κslﳐ|.%.zEzLBaD2yh_~cN5+`ug+Fcv7_-MYld|(;\skd>8d#cԔ+yt{(YH@`/-ԶKV*Ё; At!nC/a;gT~G~;6߆p;ަsĿBB`,OBBJ (rӛ? Js`/1$[XinKg&U c e9TLmȾA0Ec0_|m^s+u4[b6ÁQGc: }؅x{^wÂq. L⼄/?\`O2/-/\`OSK3-eʴ:\ 2Imb id^:ؑk?!I[O7`X)3KNci7dV33PL_`~y*po%oQzJ˔Zneչ)U>(uG`2txE3:$#ޥBnv{p$lhu4Kp#zE "<|EIpUvZ;S`噑y MEX拰;p8LsRZܰV*&'6IqcskIM7'L3H*LI! 3TֈB4 +6 Zllvt9e pHaωE8&X_%xN#\:P</a]^4K0=u72y&Q6dn qe21* 3qM.zV=S I玫:z>Klm\V)lN3dFLIKh'+`M4kCUR$Lhfo1R}ܑz6|F=?zX&A+)XFL5򠚵1f YU[RjN5X ɲyWhՔQ򉩳Zh$gTcƆpxG2\LO265É3hpD<- lc2 [E`ciGT\˱s NaRia TeL ]3u dgt؈hi5|71w.OkIekj` v3y{2gġ)FB>tȮz4Y("<>HBxаGjz\}ӭSp1ѤgL-nTCeAff wi D G31KFF:-_:33Fl\oS&A'e3\<9x.nV&2x"XX# $%%D7$OS ^X4`$(Z ;)u1D$ˆvN * HZ64DcЍ eT]瘇*Xw[hpFezhq_[߾2ȥټMtOBBg9XO8)ܧ|{3%`{ex簡f+'|P&84BΡ kZg"[faC[]ekKYFbl߃W\BGxtXĤq,\pF vBPlЗ\.%-VQEiԮ"?ZEӴu.; cxlu*j',V7bygy͊sX!TSAZP++`P|.qQwXOP<@TeGx~.@7C.6=K *f/q3!kΐ{]Z5شP7Q)~MT/yo[yg_VqpKDS3]^L?aeqǭI7PKAeCSGie \!.cz/startnet/utils/pgdiff/schema/PgSchema.classX{|fdBAq&,B$$H$݉[mUjC`kTZ-VH@bZk[[kժ}֟ߝf6e9;s9>0*X=2RÞ"nAd [^A mA#w9 >eCReX?ߎ*xblãcx\l'?Up630,IA1>ZO+ <#B2~!9 _*Xh~^_H(vX4!qsph@# "=Ѱ>$,sk(zTӍD+Jtn¡%TcZ<ZlyC]QBt@v m^lk eqףV7@AQ;E %r$ڥmjj'eZGQ[(&6VzMC\\]z=Sڭ-ni7PvAD\"^ i+^be&]]VVrNVqP2>"BG1u89daC?EӺl RRI>B^xH"kcQ1{[8/"K4T&o&%1jg,3Ib%KdC62u2j$mα$=(,V-6VDķ&alavNIxxPxb1NzAAU4 -*&H+Z$Lx@K ySԵ׶WխoP{$*^ ^UӸڵ+W6lmoXlT7/ ?뱸?3^嫦nuSS}s{e, >*ڨ/ ?%T^*%2R6a@J8;^žv"m)'/a]*`0',To03^FLr(NV\j\#!CH N)]3rI$1hjז69jiKrkؿ^&$'皁uٙ9vjn,2?ߡ~}p|C,&|z̖Gah)hֶ712~:D2"Bi=-z{Ѿk@o"Iypjr4!,%_/#_/'_¯ ~ |C QRFM)|3y6cc[+kI/ ytTC< aB3-pTv~gZLgZ\<>HXG:Ť$TLaLAQ,5Vi%NkBgS1V7qwGcAAHn/4{H?4sk?VfZ1H+retqSrZʳpQ/;gC8i]0N6!L8bL OLjp:VaSv6X~aL5v̦K)C8|‡Oz3}ʃ߁*<{]<|Aw*܍kq܇q ``C4%x7Uqq2]1h™4(>$ʉ1p6Y0GP<=/`cf)?jh7lr1 g cc}>CcϹq5-c75LI{WQf *Mb_oѯw׻~EsUlXiR>R*%R+l?.u-[-`g {2a'v"a'v+lF4:9UJq]*U".&$3g,e`je rfk`س`W8Ydܦ(U(T9raR+Km8Ij7t2^FHx}e2 ,Yw[hE( Vq/)K,)* .+uFCQ.c}lE"?#?=>|~|EW]as:w)=S {a+\a ӫ "\s+lN/wX^P>^P>^P>^P> W؜ mm'Z®#zWo$aZU\*GF E~V0}STfO2>?PKAeCSŰ0cz/startnet/utils/pgdiff/schema/PgSequence.classVktWmyWQʼnSJh\Ų#JCIk;TXT8-mZDJn}'-I6PM+s890wzx;3{g>y=; ہ:88) 8쀈#"9_p^O&qOxϾ))YωxϿ%Qķ<'8wxA—D|ǁ&|4Aū|_q׹ 'g|XLj&`W3V2TQC5c 2rymZpąxdl?=Q{hϦK@\^=R`h+-jjR wUY+ cI=}eMdBi;*wL\+MbBB@ԌfXۧPlZCjFӳJ>&#E%&+vv9EЅI YSx9Ca9gi&Rt~EA-z%gClN7//IEN|aJ(yc*LD @pI8pg$ sɎ x[;8CWҲAn$٣1D5&}=!/@$3㢎ap34EF]a߾)_h2@ <u0RQCB~Ɨ(~V%Pahz<ڮ+ȷ0E&j w찏NGCݶ M՚ɗ3$~&xO/0% Wp9$$z>=%كJzQgN%5ʹI0YeڵXr$Q]P EZ`jƋYMIZL޿хK4F]Qktv߶*9VԲeajs-ҟM(V̤tpwu^ [>gZJȻZIц5M:Z$ e^o>Kb2M)6y6ּ1Xꩵa ZHDMDFuu~ >`AS!cӹ$0 }ú|bhf74eYF"zeЏNWB0H\`nv: z)K8S-DY{y]$3} &h&xn0A6[Cw7t'Ib iJkhCн$fI.khzwDvZvMGƭwm> IPh]H +3ns4KE% |9`Q?b^[n8[z`wpYPc^p/!@_z%!í8zagGT$eDk1CK~PKAeCSxb %cz/startnet/utils/pgdiff/PgDiff.classX `Tfۼ9MTe`iHB6\.GXl{}_"j["mk/նzKkjμmA33gm~]8V8p /! HB.Qq).Sq2,*EW!Z5*Jq}UiNt[lU1\pp]hnpFYM!r򴛄|Gw|O6n[\ՅT܎;]ء*fb ?G*zKn. (ׅd.1zqnyƝ`5sH 8Wr[VU~m\\ *nQITW\QF3Ȗ)©&}vƍ5X:[Zh! i/nRYMM-k<첾 -}^LLH FUM#d8 wU'twI Ԝʀ )up}+TCW"0yǷ) eպ9 @MN$x=$ ra)C.Eŷ םچ \S)32i=b+ݝELE7F_:4}F8}CcZXyujTPoČx,~`a&nl ^? bmIvwLRߒ>m>5Mt25|\U^GL!" #ZDeKSjBm@,J-i U!~:Z6jȉ}\cbhۘeag E[K2*5kƊȴQd\r|S X(l᲎dBn*Z7Zcoc"єiN6eXQY=`IcoMY>si.6f2I8@'.,p򸬺TA2xo> ׵Ke&Ouw7ԁn 1iXR1S0S1?LuP٨B-k P1-!^@/Ye<Ω9KQ;6S],Ϸ@%L1|fC0zL`8ng 1 (,³=XWm M=(!laPZd=ރGP#{0j'rgs G`dCC^/TwB=1=( c02NaD) #6 Sބ͵ŶS?~ =e9c:^ci/CHrmDSTxLemo4 'sTdn)j4~:؂rV,1'=ݨ1!Wiu;DNȤK^g=e3g~ =ᖑmV ™\gq{tϹy\s^V\ȅsNň;:WWt\ɫbLيjKp=xg^Ʒ7ɉ*ƭTAGN:ߧyA~EZez1]LEql&nx)%}&M3ݍwaVG25VQ̖ḁ҃t2\L2S CǕxS~ICY&vo2Çڻ|LJV/n~ˇ<>Jȁ)Oa4| *)x\*RSD*r'P M24FR#<#7+Φ)t)Mkn ;iC>zf4#:K:sqxt;fQQG Zhc5-qtPq:.6WiFZN|[y}hP P^T0_O _i NWp'#gbox]g'N¬90:PKAeCS@j.cz/startnet/utils/pgdiff/PgDiffArguments.classV{t}nvv3!Ʉ< )MUD@!% -hal6,E[*- T h-}99qN6ar=wwwwg]/lq3,eYg5 /HxQ ⰄNOGp_/Qol9v%/-66'PfV:ペf[|g<XeFr@ 3mzLөhB:gDϥD&7F6giCAOiSk6q@l&Gޕn+nZuk@ S3[=-YEL,mP3x9gGvA$6v7d&:h߀6_ejfsY.b %[KJlJ'xWktC jx6blMPg]0 T]Pe[F2kh&'똣;ǦҔs$ÉMs \lxMFhrHzpZڎѤ1oPA};' dI4SIȶ]q*}k@I;07g׸X$S1ͼgQL;34'kz 31GF7Szַ eBX܈v7yE';N*5?ďdlx S蕐'jNCڗqm| R8{xft:DAjCsC>g[ҡ5&z)S}gdR8XhP; &x3N`簪:N@&tFUQ!jL=v#=dtex!XOj?3^dt?Gm$#?uB8pP'׊ Fx*BKd^KJƯ~+wxCƛ[=⽓2rUUԷ'f'ЬXSX&yջM(6nii tBRK^IR뻄^D8!}HPP?ERx%x $ϮܻsWekd:!|"{&HLKSc-gOB&X#rvAtA6X8"f)-yØp0*"TgOWSznh처G/4+$?P;Xw/Ҹxw"xxFQD>liQD.xWDD(,ELT+DPE/q(m\41IF(bTa%b8 fLq\<"fc. PJ%br 5үFi<`]]e=JFNQϧJrnVQ.k10z2㕨 ]%g;hRNZ{x uSb1J=A4{NE'!Y_ꀗzI˟:B[ 6 H9 ;ڴ#gFAsOẎX$pЩoz^P'\(RoPPc 7eސ%?eސ"d/r/!{QBPKAeCSV0cz/startnet/utils/pgdiff/PgDiffConstraints.classWipSUnIQJA ,RfAR@KX,i!mkHxy >:,:g⌣#A@qQQ $] ah{9w{9xv&A3*01΋`o0ӌYmh U5G@q5SˋJnn:uUoF|F,,2bXbR#n7w-7B2 ^M ,;qmVJi F *AUV*<θ*)jDV 5;cθEKڀOk\BdC}[j%F9m :wYf Fdo"$+uRS<=}_U-4[@35+X7`%YyS]m|pmiyh&_0ԄBǯIJSIF qv"ᰬ[@.QHPM/P HLXB bU#P'"X E `ØK!]@\5":lk*‰q"#Ч\+Ej+b2~ MCĝ(b/BL Y޺o{J\UygZT*`{q-0Jt|y]io1o{=H/X"gMJٯRBvª"IjTa(akj͑zCn uuϮO1BTME>}] h0RX>?Rj=1L^`;lygM0 wL铣Ÿd("nF#rA)c mTW iΓ[;{шJxWg5@zvaG NHyfCjnN܄$^AQ0?RP'ܜPrJ̪*=Ngu0 зQBNIEKoEh-]G;L%$QR,0dF13roi#M.EgOLBŔBCs;vpP9TmZρI%#ad\ݡq-]0Ka8B1T4ZYDpM4Zt)@{]:#_5Y@@}.?@QmZޏŻhC u]f>ёB;asVڎv?^s5 l4 !z; ӹE0U P`&z2㘠Mw ᙘf<{;:r O-N!DػaϓLD,ƃDCpahz kZ86b+Em$3Ia )=7_&JIi<L%v9:ށ-wp8 C; s_rO }fHd,4$z6XQȕOn&n֌\)`g;KO=IK紗f=òY7+RD0)ŗݑ<Nٙ:"&E2:W1{(bjQ¼NrMy]{wImxxl4C(C>Ƨ_Py ?s#qOOYad돯`eƷl,c=j7~dU8g_Xx mf֠]^:4<[XDJpInRl^7j'~nv)ytKhO kmmotG:Zvu[.fh(}G^{[w_ҡ([̉%m}]rvDcGGe?@Zo-$CM=% L$qBB̨%-r1d{ {"֥ $U!R%Ìq39ahFBc<3|(SsWQ&._Ro;|*a- O"-=s槮 |4+w,n9A *ώaQLf> <Řü'i=8|8'|naX4 &c8ãSa:iuam/1Մ$0g&iLE1DI4N@QH3&Q {*OJQ1bz(Gkjjjjjj2I瘾Sz̸J6CW1ES2-Z9eUŢb"{xX'@b K`)ey[x|+Lr%tܞXU#l0G,KhŗhÿF(Cq1[RtUl]OO<~qql'Knq{TQ~v3 m%gWY|RkG*ViX$1^glyKѣiGppL͎5;~DrFI K0}cpRo*4Ao;*nGU瘽2|އrSM\(yö#9w~gлBzBՐje~Ӑ֖ո,v@ wQNPZZv):Op):(0/ *B<PGy1ncOu Q<ˮ:7gGx=2_%vI=gf2,bOV}\5v*j֌h=.m1vͯAUWKvx`gE^'oy/fb"?N+GC/)]~g c/Zɽ𗛳IP[j3cn'P Ⴥ>T0Å>R(ᣅ>V8O>Q$ᓅO>U4Ӆ>S,᳅>Wn21>l2?4?R&y3ej2ow̻OM&i=~KZ|QZFrje\p:tnFZ5I3\TēlD:[jX>Z[hHs Z#2|TwT~kvŬhٷ.Pq*] \5MꃎB!sWJҵKvl["J50,QNk([sN ZnМ(ʇ"*"ԧa: ;~=@sm̤Y5TFg(`oRMVT<*.QX@Q5PJd`^W}ih1aD|X`2Q>w>0QV(zPF) 2Q1S+b5(fs}>+B-T_U@Fe?b5WŃ,`"QY J o%2Q tJQɿv%](a_O3(^ZtvfsXguJSM@1lINCVl-Gj?(!ŲbE7^y5WV/V~ N5;p^jIR,e"ӑkt2Թf58YƆl@l*+77iPOp3:NfCu7(VN01sfr؂w8sqs%u(*՞tptk1B9gՅ z;p]97!ga;Z:_q.iĆ?uR@)⼂g,݋w5ǖy%bTɖ\-2Ygg-(]5-~sB-z/[!F h9*5ZjžlU2gZCV (r.k]kTU$Z9܊*8OY _QCxʩoW}|O@$!{\!IJ/YP{Xӈ slP ? DN}ժ%1W\-/&QBƇҔj5r{}ӀD| PfQr_ s:jOnc7zGTͧuI$.ҭF.3Yп)u>Pċ[ljoKG8 r>pzr*S>ȗڱ&D!]RK%d!,4/~NZG#Js` \K. z#6j8h2W&cf/PyFCGQϕN-FExZkIT?}R"~r-h)_QKE8sdJ7EzXuHjc>Rq.*jU(Q2 &C1 jnb/WYKݽ.P| Mo/55 hIFR!:LWw gjRWOgJ)u7_VT[rpRv[28%EeHYI>JM |PZ=g 5*YҌL8![W-T"B7=O el^ ~ڸܩY'jݷ*qH*YF¬Y̎#6w X++#vj)1cMv?nA\t8Q|E9;q&B}J#bDi;N=#>Wma)/k \B_`ui#d@ժ&]Z얊&b,oY껽Tyć?R㪫DJ)OJs-~3LLF< ď'KNtBUf"$Y?3z$a j6ŗƾB|sޅ+U!^KslȀLV@U߀JGEߌnѷvj|'mKQѪ/q~Nv顇O*AgksrB`RL/f g_&Rm |^ΰp:x}{|NK~j3}6g"['k Q+U|V[HKDoT)j>&yG|PdշYJz.k7B瀄p~tw623]SٓʇJ]{TƷG߽*༪9 QՅm]Ĭ<0+Xsjg#|B Ѭ .VxbeM 3W!7wD>G2`lYx{:B(]Kt/G1w[߿&S0Uwq -owto<.>۽T߳#[Z֍' O/ۅܥ~UylOoūu/X}"N;;MApVL^@^xm{ 2 *4nXW# peP7ne L5q#W2m1+^$ƭwwа2h,4?6LJH&j;%Nn2^ӣUCt*`<}lOS K_{hy.},op]pwAUUH| /E& _ t.X_N8@0!?$jy+}v;2\$vت$y#?Pv #]L.&j[}].Ib{!w A'𤠎>҅Aqͧh'͛> ^F/< 0vDήQH5+IV#e׮t]14iUMّbS6 T(&;ZuPuHuXuDuTT:܎Uaǩa7W]nRuJu=v 춪v$ T7;nbwRNVNQcTٝU7naӪmQh[Pu+ۢmUNWTN3TylAuG[TFmIu:ՖUيζmjmWYYۡ٪-v7Vtj v/ռR-9E;W5TK[uZ T+voժQ}T쾪v,j]:.V.Q]]i{UUs쁪sAP0ս=}쑪ڣTڣUǨ.Ǫ.ǩ.ǫoOP]jOT]fOR'.`OU=Оz=]`{!LCYٳUaU=ҞWe cEqbx{ p8^d/NW+SUijt{ p8^eζ7sMyf|{ p\do.w;K 2{p\iWە5~Zp}>`n7Gc-qVp}>a+]9n`}vG Y;-g;Z h =-t t h9p9:vt8ѡG{;:qt#}.tt4cE;:\xpG'K.stdpS 4 G;:<љࡎst6xs# IrLG;BZc!/ӱ8Gt#f:r3əNrL';BzS!?ө4Gt#h:r4Ir,Mg;Bs!Oӹ;;ż03wu: ğ&di4|(/¾Ծ#|LHѰڱiŠ&UF&nҡ5u򊹥CymuMxj>#Հȉgb5=*3zVB?ā0aP1aIſْ8)'! CNENt.#͇ `yݩ_0rRv?A `#21Z0:!Sf=VXۊMaafF̡&X&7r{Mi :m("mbf=)nc DfK|)8t/_u7Hj,>.C^٢_@o6A8m|fߔ{$3]ԸِKiտZ 7CEƜFPu׈: ]M_o6C\Tkmս엉Y0Α[Β ? !̲[pJ fgc:Gk vXp~ons Mߟ?PPL0)c<㹶^$Ԣz@Z Ӡ[sE[iY˚ĢD*fu+RmAA(< [Lڊa6-q?ԭTD2ղ Rwx7fڬ=fD}HC~n=\1&$`lMqT mEJDi}$~KJKLM mCid6'F#XYgJLVPdE==|Zsx r; 9X\>̗ǥ(h9P;0+\ ZQL I#18f3]2F9] `}zoUt h`t2DDَ:M2l_`琾`;ݰa72{`ٓ0;rgv%ڬ0:&=- *糏/WEӄ*+8V2۰g,O@5 3 :B{U!g &f-xtM3DdT1Ƙn=L [`Iؕ{o{2]Qs_3I?ɯC&.S_'}$tKqJ8U$6>e'+; tiˠ{4K,%f5gt7ݍm(cJ<%J 05$2'ń1 >L$aHŦlEITRQ2ȋ4NFgMjӂ(.RmD'(h%w֦ڒ X`2/& ,!0h!8!XlQ8qZ)FJPf>/Çlvsnח͑p"N;Ƿq8op|sRs޾{9w_?8Z6\ As=v1^~?Cxޏcy?E; % '[xfr ZϸuxS *_-%݉+z xuzo7~K ~G'pTJěR ޒxWK'R>OVCbEGuXJ7a|f{Iofz;)_;Fhg;S (e`Sd,q̕3¿I#38r򱖪xڇʓJ󢠆H\FtUP(1;!"FV:֯B:~nw20c@^S3h&۳9yT7}\pw2l LsqCC˴oM1UqTՐJ8Zji"S!E9軴*ZJ^:Vtmh3nZN5ѳLNoS }B+8'iG:Z IөMt%K W.6S\/?8:aALf"M(K\I(h5>!1R"O76 /׷Fj\Ue :)WйN?LWM\m0ڄ {nt>3.ξm$d%|ESi;avs/JSGE.@M sUyt/S)<w8T Xe&pi<PKAeCS̈́ .cz/startnet/utils/pgdiff/PgDiffFunctions.classVsU6&m J*BMӔȇŔB Mi)m%لA@qad` 3NftAq|'gs7M!Cqơ{9{ι9޻ h:X/`;^E\$!Y/7Vx]DNlfpq'w :1$N7hňQ{(*@^WL-~EcrP M7 TPT9̙a̛Z*&&pF"Vu3˜T29ĭbWeCIfrbe g&U"t5OOƈ<"Mcܔ#r֒jd7)Τ-6 k>KfM- >.LP]\JA^ 0.`8(Mp2~`&H%pJBHB0-RttJp3Y GaHqф" HPu`4D[87Eɴh4G'o PBnaRML T-͌񤐏tNf _Gt6bT˙!bUjP@NBRE_n U,BEq-fP?dPMSlr> ˴\$gʑ6,䲲BxѼtcEPl0'ʛ:Q4FH38Ce!=^-q~rh7Ts38]–/aM?,=6[QRSPAb-uX7]PE' *Y$H$mꘆAWqpi\c\+k1Bvr]%'/8x|"Eۃ>\d%z.}o2kK h.G\?Wvihx#/)G_,` 1 㔷APKAeCS Z5(cz/startnet/utils/pgdiff/Resources.classuQNP=WV@PAD`A7 .@\H@ܚR.MI-~D ?2NklΜ{9s>PBYؑ!`WD.(rRV;5[Ab('ڃi=N}G Y {i glC_!֜8j6wC\kCDݴM!Z*0uݚr?{eB[ ^W BPP cCA)cQu=l]҂` pu!"߲P @1eQ#D("O!wb"E:4^yGyI S^!2_V-Id1K-B PK@eCSxz-cz/startnet/utils/pgdiff/Resources.propertiesWmo6_q(boa4^ٕ2E$RxF;R&Mat|7Z(ي/~<-5s{,"IO*?eגyӣi s Z [B)R9aq܏yEkzgE5 X$l@Ԧ`BXj9ᖥ%fˡ+B9!e]Wj6جa4"'l1L旗(p ďR T'0\l[6 y*hkInˑ-rCTЇqwC0[d"c{dD:"es?- ڭY\Fg_ۜ|B{n!JK7ATAg Yt4d6V(W\$[L6v"MmU1Z&1 {R`?"S|yhblp̈́_vǍ!݆e9>@|R4쌩1{[NB7Тq\ջr`T}hKHN^ř2sy GĕJO܊ᣗPRxnǍ Cc ^JJyWG84s>jf?ѼYm]bRwPBܽvC]T3I86zd| )>i6>.jԷC됪8?NzKd̓kEeԒ XΜ34#w3ȎI}eT)HH\a ;f2"k{9~Pp cAZ}9_תk$j odf~Εv 3ܮONk8}Ԇ;=ń~i6yZ%3q K٢޷h؞-"E*nNuET'f%:KT4o[6u,ܢW3aodZC]>O>܁l{4kKZ]d] mC.f4smK6y&,*|5lL؊M腒X0z'Zq{^fB)_ȮAۭ7\Z3q]?PKAeCS4m;9P #cz/startnet/utils/pgdiff/Main.classSNA=-kE"aK +*ZbD_[ mC]~dw֨56|'wZ4&;w;9sϯlྂ)\ì 2*CVAN*M X3](,1$\2W7*"tz);~3bçVAe+8]om"-sA]?mđ2H>t/BGPAQ2V4\AHX0b4"#לcvX]HOkU3X#qkXúݐmw4Ŧ{f+[#عNn 3g^ ^lF*gg]$K14{DZ3fS #}$,#:Jn{Kz>>@z3:j @.? L ?"5^ `1hal#qB\,,519lC &.jA[.~rZO4 Ddaaȓw؄-E`?)T$9&Zf,YF6ˆdaUڰF+_PK@eCS C0cz/startnet/utils/pgdiff/Resources_es.propertiesW]sF}WCgj;/'$CAnp@u's.bSiWJNgW`<t:sP9N(˥SԊ_Z\F~[[TkVݶgR=r1k lӷI&H$tZ7퐗TĹi@PqDb]#_t:JdERt\$D*reAQ_щH9BiKV, 'L3r-9.5V62 jbBB?Tj7x U37?g?ŽO>|)+6N$#3n/ w+U AH l;!ڈ* 3!$kLWA-zko{waaH ƙ C m@_Rp}HIUՇqՁZNjSfv*I924ˀl8m(VP#ndڗ/μsq,(_>@sJHHj+ mE 7ۆ'Eb*9 !Rc'b&"+hxͼ )؈ wXZӉ؜i#eF _.6A&r?C|8 "EeE$rN yd2JYBA#f(ІĶ  F.ޫ %HcN-KVXT$E5y#xN=AyޫVTQ_9. QWtxg1Ʊ I cJpLjOS󪲅)ؘXm RoNaZ^7zkRLx@!òfvbK6ٔ <$ݳʵXcyY[;5Izdz3:@n(2WtĂYȈ;û_ovcٙ?~<*PwMT _pt}͂5JiYϮ`bW"ëI57s߅st#;JW5WHm9T f[>))Sx)c]yKR.=0.TUYPVvOf5TaP6;YQʿkJ l蕭DE?)7: wIY=ZڨVyslU+lvJCSE& ;3}$wy,|0%1xy7*XO8f?_t;xNعR氪t˶,XqBz lo%i8Hu9>5|wnCI?Y|FNkq??AMrly$c/m51FO`8'V]CRWyܝ"ޑҽyrub_PK@eCSs1Q0cz/startnet/utils/pgdiff/Resources_cs.propertiesXnF}W NIb#JtƖE"-r%tY.v4̓Aq3s̅l'ƹHίI{,  B㗛T\&A^qpͯBwX޵Z)F'x'fE,ƀG,HV1mx_Ƶw o~>Yǽ vR0O鐩Mά :He}@`GOD9a8W M`>ڀEƸet bM?--kx<V'8zeg?̑ǰImǽ׷!0닮9rVd-"v|ޜ[7 /`[w Ob2kEAPGK:FF]f%;A>.Ny`bEtR .zхs:\BB $R-~,f\0K\uYq n!^rIh`SĨWvMZXf^NV"d<]-ٔG|MĭÊ%dΓ]gF]Q>'5[D-R0ύ31N"pk` =r,Q8 ^5'/ fE;^ br,=OcFY}-xN$rEe#<>*KEQWp=#al Zݺa+D4K.(T]?z;!憉2Qհ,O9h#$lj }vbwGTg[ C褐!oc%S: q eD`4n(Vid:5#$vC{q0/cϲ1ʅs|dE[r~5ƔIHڒZ.VyHo}i#s=:KSjPcp;)`o<#~599c}'p[NSNZM+Z1UM(QH/P"rE]eA5 p>^ ͡ܣ(TP/pT F%x)_< O''J-1#52RFITA@]M9fz*2DؕJQ7T>L`lW"8 ;`U2Qe+Pm/Y9jln-l'P~;uY`z25EApv :|;SI;;k&.ľNЛEguSuo:RpWMKSʮ,яG^f0)@Y!Yo|+ut]u\'H}XeCt ]w|=:8=o PK@eCS4 "z0cz/startnet/utils/pgdiff/Resources_fr.propertiesWnF}WC9@6n#JJt‘\QE&G.9iC? %Z6 $;;s̙Rly{tSk_aQu/c`"9.+CxDQmY=gB%2^/eY`~廏]ݲg y]NjK[,;9Ι-nzy+A$'i 3@Și ) )0qAFFS(Pщa jb b8pp>4Qж/+r§Bn0M{Io4xh?~zxwYpqTj^JWp|! ssMpt2lDFD5zʬs=FZE{Lqi4L .d(4!FEo2^C`E)LIxgBho=&sӮVHw m@7(ƿ(!vzA-$o9,l|pB{TjÔps}Ai*%%g,H`:KFDÁzx>^54E@V"L.Wo)!Ȣ}o 4|كXn7ѧ폴XL{?&MHD:Z|cEſ^|={]IjalPKAeCSVƧ *cz/startnet/utils/pgdiff/PgDiffTypes.classX pTNM C$,D4DbM@^fqZ} -kHk)->BmRTmgNNqtlGA$$u<^p ~S%M547IXڹPptUkVtJ)sWЌ.^4džx Dd X3yelq;eܥ3$n`<ʸOd|^/*X/)X/i[yI9Xðvnd<`qGxN=2U0 k$|M@n#%kut5}cyG]C pE ? y;|WU.=`DiԻ41 G͚ѹXeE]`\/7FVr*?Qr=~{2ut, 뚡Ѯ᱄X1>\ !a70it_ x]Xr ~ Ԭk: pP8`i/^2eC-iOE, Mُ, h#=}BBo*}@ V&ҭf)*]iBb""5]!$MG, #1M)3 ,H$!du}mTc8SGݴTU?W=Ѽzm0ܥQ5BQc(e&g^BLAظ,%+Ń_n&%H.&˘VS4?vTa!l'}7 %:T#aXݶ7WꁭwWɩ얜asX`Lg+9&\P S$ty;=(΀dQe&tͨ{~gÝ#kZJ9Md@^6B"eY6(AJ0G AQXO+(7^jwNnz7&F^u#>~VQD5 /!<$"!6q.<*' <)^n32LHNj55gGm|4C MBf./kh,MDQcY.ZD^ãD]`\Ú3d+ٽ 3dg>Gy̥Ip?a:^,$P nO@\\z}plTWO a,&91/S:AW0<88If͠tts(ޮv[ZVGv;l}Dj4<䰤&CZ])?{\((!B,R"Jgl-,\ kڷEN Sd2lC>N-%)'Yt+\RmH {.d?2dޤ|0} 6].~O]p.j<'icuM8b΀s] $fN_ኹ"we1z"W:;~gP HM1 1O4\L?_8C{cύo  ( DsQ*q\^=@CiN$aC#_PKAeCSW ].cz/startnet/utils/pgdiff/PgDiffSequences.classW xTϛL^$0a `@$$LvḠ mR[+%]a VCKnuubk[ K}3L°Ydx{9sl{DZ*o6X,ZlX݆F,}Z.(2Vڐ6m]*Ta_mC.RFA\"P%z-ϥB21傺B}WZU 5 u W=A~_ ~`Cn:7fV)]z];GbNw)[=6ƽ>a6́O2$d4uOXoWuf=D=߽³S 7/. =_uPY{kwٲPrSVh_d 6/}<}B*Тn_h[p%`=O7:vT[;t8nxX#2>7>U8yǗ_X"٤l{3|f}W,uV4+~x xBOAF<)PxF؄آb+؎%*~&iqBMb59ܭ:=b1psavGM MQ?TrJUe\!ORT*7XSb-nQ:jolH bw*YUu5Cj&E4 n"}|CZPm2Fzs`7ZRD\t Z&S'P~z8C{~#7ؿxS +=Z}Mب 7fd'DQH6}@4|,=^X>43e:>_ g$^g7ǙUX0>[=PLᘮX=aFd|;|4FC4攦aTVl~Ĝ]+E#p"6ƪȯhzCζpgX/Īi.sK25af&u4.NvV4uS3ۢlDp~%-:X/:YyCV 7 ylFKIUg8 i.y"U)Tm"ġDFo읒@ os Ypp@ ۉVHY3oe&<Rԃ"5R(:mVbX5k{e`9H_X[`g>XrYO9hΈ@Be\LC::0~Xae:>>w#GS<1y7 cP=Npaa-qӷSex,n3QL&Si(T *943p#!BC-r zwA60ˍ []d1ˍ|AAFpv\#.R8(|mZ ?| -6ɂ9љ.n1ycQ%Pg[ [_u ,dhJ}m ?`Wq ;`Hae9 L@2[6cR5xfXrelH);a>G)vfᥰi).Yc`,ELG[fWHzUS&+驽zE4WHwtZ*ŢF.pӵd%1^RG-udj7ܲ^Le$Ed]&'8\kvn%S/{͚՛xI** 1<;k;fYY|J/pGr 9Zv2Lȉ8C3voQ+[2f7L?GL;c'HAp1LN~`z}foόݘ,1"9P)Y)`VJ]e[srE&Zy5&Lu\ 3Fu\Rnp*){.]wĝ\&vA~uS!G?ţďS ;6o\~bMwLl&PlN+ ³ѥxnWz@Ez6%?ڍW~>o%񶔁w$ Q#cTw%ޓ\x_j҅Pj%$_uނ;W~'&|*=H/.Kz7sCGڏg8(&Lp4GLpԔǷDq$*bIVSFA "r2ҹ&F>o92w{(QGH%ggd]^zV2d,0~ y&Ѫk&zjLĢYbטI]AŚ8Ϋ&Čls~#Jр+jV}Zrӻ<7Lڑdž$O1džͶ/E,Ez$Yܣj|_L'?Cve`,ea"4f٘G9t@'Йp70Cù Br6\N<쥑Fh,(ΤCETAT*hͣTJ@~*4.ItK)tMA~N9ΥL#T%T- %+fE$70RMo ty|~#~[%Zĭp3"dDBPKAeCSgnРHE ,cz/startnet/utils/pgdiff/PgDiffIndexes.classVoU~okcvF" 06tFqQ[m~*Q1?hFx[$&-11ߌ7u|mlhCKwy=={7oX6,ESN:O`zlm&hV1chć-2P  Cl)&m벡Vl l؎VBlGn{$kmvDI8 TW0Czw4k&+Q=鮸"}`o+׆TWg'>M;U65;%MLO0yC=Zt3HMOWՈ!+Y Eh8%9dMߔ"!cc| kR 'ӛdP T=ocACӺ&Hb,/ B:e˚`(0!aQ(es 7QG@^}DX1zcl`C BxJAX! V`0 aV ѨzT`#+8 渘S^hnjUDdP"N2=+|bS{wxα}e'_5\ d8NYF-ǣp? hІ?(Jn9afjn`P8$J24 a#Jf>*@,] +aIA1qG]E0j^p[(} e:řIo}ժ,(SݔĬ$fx^R'Wpݕ,E|=l(ո]K`[w#>d]hcha[,{3?AC'?2x"XŻ4Ax_AgxJkԼnP 9K(2 DE!7ʔ<5]%'lR[:Dbw[X MDv_lCF!B .`e.M14:㲅M4%Qu-qJ4Nr c'tQ>$  , K, \bsپ̸\!Uŗ,*_qů7LR{븅~ҏ?Q#V4q 36JיJ{ ,F#{bCjoPKAeCSᒸ /cz/startnet/utils/pgdiff/PgDiffProcedures.classVsU6&-`IJk)HB(vM$ (35: >aƉŒ>389>0|x&M?|8c=g9w~{jXӀ6WtUKkX"sq#pM\o׉>k؊(qq"Z0DB V U6!#,*jh} r!CC3U#SN lj)6>JҰHnaYPjV&5_,l(!LoU3yN"0?jS]X4 SVyK0B77Z0\|Z>Y }\Otq*TJbyH؋Q$ o⠄CY&a $q )$ MJf:P E@;%.`;s0;+-s[posI 0HWN%sz*Euj ^ N3۽фC>IZB|8 K#M0M7C5YO&Tu[*Rf`=i{PkTsn_{l:dL+ay5V]yrr!3^"m%,YK#t$s&TŪaa'Gq5bX)=gE]1>& yY!,HQ8!7 J݊T\ - MxAs)S? sbGH-(%f\Ӗ)h/sV@.TηYmZB b0VYZnc1UQ̙jVjNQZPdd"XNEҋ`h%'I㡎51t=kg>1{#x.-Lb^(n##Jpຌf_H ~n'8UZ+=H DJ(iDt,pV28A@],` pߡ.TMQBlךyuT0BFⰇ>+"$R>}X~B(}xl6VYF,u&.L p*BVFȶY=Wvx7|;4DGIc%EKO-JXp;y%,[-y.떔8= U|fiv-.A=5 K{\%,_eSĩ bk`y]oF`jjj rkú_*v{d"m)hcǐ9dq.Isn"G qܢ+otAA78p,]{̆s f|<8mG,OX v_1\M~>_~!fmV-u!{虭vށuޮ42oYd|I}E]:ȉPKAeCS/A׻"2cz/startnet/utils/pgdiff/loader/PgDumpLoader.classY |TՕ̼B ! ȇLH| B2|910L^dfoZ@F7delֶmZZۺ&3$apϹs=ॿ?tp𤄧$<8g%<';@&= b 2~ua&?r x񪠽OxobxS p-4~;A{/o}~g0~>4?:'cg1|,~"sSC3NU2a$"Q5dM"DDL94"D4עIBiLSe*TxM&l4ÁVb&e˔`[b2S ,_ 2͒iLg 8O e:SB,aOEl$D|TPJe*iLg˴X%2-iLe:G2+SL2RU2iLU2Z\*iZqUy][׻u;|c޲֭)kbZ$XAԩqVyX[md otZӨUu 3F:PJjȧ#j\fWڛfxxZjX;MxZOc}¦BC4*s1|}7o\T翨,EbA-gg,*˕5u'g{PƑcko{/S&6|>V"QKh'Lb=^ Ǵ>-#,Lm܈|Zh)Qա>C;kFiK6hu(1a(1@0[E( Gs?j"Sy}ẐIX߷#Åi\1xIn1Gj FP CBAY 6OI8M.aB QB 5R~BMtpΣ8zܠP3y%jQh#JI6ڬnhD;]PmUp o2>0bO+U@T597 إ.&!&ܡw*[^p>bTp!´vQDB1W-ēvh"[Pv6ż ]! ;%ͪ^=t4y%}”ԑ6n/n^E (8oB}tB\o}`(&N,WdR03? v6v #D,ja]("s  ])r*geN+PVu|!~à"n ~[fvzK{bR ~n"hvyu{}1wVՅ[:G^P\E+xE [ i^\q5Grꪪ j0T2wU{Ƥ4МB(c*RcpFxfIN0:%hEthGRIF?"(я"'Iw1 Nq'ɮ%l?a3?0uFd›Mx o5m& o7& 4]& pwk&fiN*'dmAA^ӵ$m$AʤAh=K BuDdZlZ(2YJ(RA-cRe+Y(߲ ,W,-4r;a̓" pb3srf<0tdNu *%8@\#Tn;61m$ܞk{^ jmUݦu$6e8Pk?"+? `*9(>(?zkСύTw%2ٴ9TK< Zra=բa;a~k}gNF(NE{:GoILB)ߣ8b~[^Nh|Y ^ch,BSz >GARm [)Ev!FjڇbJe8H#NW(]!5>]Ӎ!Ƅ#!o>8uO3EQ$[˩̣oa=ȱ{006#DrEO}2ĉ|{} ɹwo>ɨXܚܖm˻9vO{ju  Yf29gB' Yn)3?ɩ;}5I I:L5!rP ><D`§\1⟛͔\ήԟdS Tie*1ט#j`q Fį?=)Η358eAUwX1<5jbg1+PMlzSwؙ[5eE&\gbXz-Tbb&6K" [^ibU&SĦטXzVjb ckC5 kQB5p'f4a: "=WdJoGCkKecȐ2$826^2{,?X>6 q` z=JpI$IvP 4BIB)JtF4J:iN'4N:O)CL4&4Q֛dldIr֏uʕti jiTQTK2CI:HeN:4Kt*֩DKu*|$st:Y6):r:M::-1 NRbɫlt ҙTKR#0^SSNgIS$ :5$KhlLHrL^y:2k+BE:]J.RN$hYQ_[So \Xp{;6mV}qN}wdozӚ*+-Jk(_qͪ,1 |,wi:^~l%C^P6,ԗVsKLI̙:nՄnw,]f56bՍ|mGzYeW6x ĺ+*P CcUCcU9ڣfo1 yrmy-9 9M5^>Cs>o˛#=l^"{IUT!,^V42c*3''(0&}T/y.p{G{jY}ٯͯY[}f-. ?.FkP ]aɜyߞJ7q,˜< 󬹞E:x&T5..-acM?_.g,>ozTW1BcIU1:rjk; k-Eg{9Ԩ%FeͪV5N hmGImS}gJ2=MTM8JIj']C::001t I7IfImN. JK';Fw9nMT|I^iiEe9e%<4'ҝNj{y50^:sN'x /;TwJu$OK$H$oJ.`z;ݰ:'v='mNz!'=LIQ'c6'm_F|/. TQax1ƜMHCM%٥%9%-˽ԳA#g1EOJ#Io[rcܼ)e¢²-{?wDƎ;sW1 v 4"n/,/W/釖'}(>}D ּ ~nX{JO&g?1ILqAQF&4vCKfe>v?q'rQ>J!ހ9$.Λ]4#@lE)E3"ijqvh,G0*/*dX>m􅓾]||^1hN|AqNsc.>'􋏟RTs!_ClCv}{N<9^MIvҿdeiO5DoPMo9% sw=(DgN̙yQ(%" Ć hw-0I:7b0V9DpA.qp.<9,aFUw !~eX|o#st DUi 6qxd@RW8x~? <ƶPYhXF|Ѽd![0>1&[YjS^mtWy6DZѣ11]hꤡ˶(.L8ʤɛ?m]ښ:wG.? * G ߝG i6^Ό,9>j%EeY..-V{L3#X>߭{SE\srY%XXʅ'82nTU4KC9r$K3 ѳ&" 4vRRUSUf?p$!zXtX1;GyNׂL0Dq!< FlP\V@2,.hf4IBGeD%o2j jZpqa>=Cw1ʥoW{3RXgb 2MʱУcwSГ A*LA6N4dY8 Q X$s*Le l{mæ`C^88uՆ(}(k (ۡ (}.]ӳ OѢ=2ЫD8-擖1ZFaQ%8q&V3nkzxq3p2P˄EN{u0Slh1㷙G&[1J AJ><)hkk.ՖaKJv\Ve3>F)U}]ұR@wqR@i@qR$0+ X0/aR\ӱܺ7J܃X3>WI\cDy7Op!ۊsà H,X&dX!mV"r6*˧eoK0ewmHlag8ZKZ,j3PG;b]˱IvUH&tJ6a ")!RfHu Q6Axя;XBf^X <sA,bsWx/ae\ǘ[ǙVNşċx ;4εϰ ؍g}z$3m}l6ې`2{ˊHCI"{X=cNp> l}Dfӎ>ž1806j12z{ac0sƙlr ;+Ng K(yC^r}ư%5^ȺURז"(29-N1 6ߌޡf+R1M9TB')4ΧS:V鴆:r5P=CcOؙ}ڰNN$u,4_ہ^aFLy%l:$S}7#~zdE@k) kc)y y#a^LBb숳\ZXEbfՒxXQػl"r/=,^p@~^sxpCk]E~3lM9ʳ'_:{egj|p>~` 8s"4XB+.rZNa5Ve֠[i+2]w9c7]t=G70jtjt#MTK7S=BMt-J z~gzА{Ԑ5m X5G1~lrb %~Stp'sX4{!-զ8mjB}ikB}MGKs $1$G9kӄ0G_>,LbSgMr i;N籐^@-`z+%^*np?ˏ,Xob .F̟b U4`q lL y-w[Yk Uێc,V2i1ղ1t$=Μ3x@z_c hh dR? ЎxT/НD k$7N߲GtCqāh8`=߀[osg %rD:6;FΨhtWNQ1!ApT 7r>]šJj4>_^?mfNtD;g-!xWO^*皌X֎Qa >dŞ/ 4yI$,ϰ(A|І )ƞqP fGVE.2v Z cFކKCHVA7k!f]\nȠ܁D.@D5j(ƪaPU9L,U jU* ;بұMī\~]_h|`:b8FSI)*xWiD\?CMC+T.SytwiԦ95]UDY&N_ʆ{01_⌫ncU.GCe:% ψ 61RRNEGrcZ' 5W} ,Q=}+x{ַ-[q93(/XR7TUfx%qu}bsfuW"*dk)م޵Ă1g߂eo6ݣTř:ȋJ1 ݥLWJƌ =]6؆zq8,c-as/3Ʉ{.k;M][8;_ł1[[nv8;ΈM~aخvCb G@zC2ƉV1O=ꏨTPeن-Jm oڇ6o7&wFp14ƼL_T'nʜ Z;SlԤhpttswn~#DI,$=`2!9voۃ6?0-:֎3ZJ|1O Yw?rb̑Q˰ )A9~)l4ݵ(Ѭ8h#McZ4r5'k1(ֺ;ʵz«Ţ^녥Zo\2ܯiKZ]ϴx| ķ &% P:VFDJцX-2dPJ4[KXIgj g~ǧ!e"r݇cw/@lyQ%l 徧[oGvQ."9LJŵq@:&IDڹC\g"IiA*dnK & 39̝tFm=փ!`  . jڧoOql'"A0-5, aM$-drPz-˵<\MJm*VkN{ǴֲxS+8NV; L֮RꡕQ6dtNe:Sv:-Ѕ.n0{^P>f*X_%_93:]/R^?1tzai 1@9lVb^!su`\h`g~7$dMH6 )^&ԕ'3)%'dzj98MB6w:&ՇцdLBpBaL3>kw1B[:Ӯd]|jYװ6]pv=k BkzFlnVfIjbvkxO}]d&vhKkQxf@I֒:xa6r}!IPKAeCS#cz/startnet/utils/pgdiff/Pair.classmKO@PV5 ])qcQ}JJR\4јgh;~g||~8Ʈ :ؔVD_`Ow}yT@ CO@k:̈P\e~Gg{$:t*8~]^t}fttUE]/rjRGUͤ ZLhEzf2(zYL"YR70x:ĵ뇇ʄYL : r("{ؽlǽyV _)çK9zUpgQc,> jHޡ2a0w]>[fpT`͎#.3Cr)mpJ$L;Pψґ~J9l1ΞH1l'e:c%3ĐuD$6GH"6ne4p 2c<頂+=d*X)3=n$G#~15X +9U09##Eo& JӬmS?XSÈ?f%RMٛINA˜OyݱA)I==:>-|FX[}V7\ݹ+,sIDwjK 'mSsեZl+h oՆ 5{JцL<$)sKѾ́QcԜos4#r5tMӍ|FYg,&V.y%V,0AǤLK9(- 7 k$DSa2V+!ےI`잺$,4?=#Ԕ߮51d Dab~iKqA L~B3{} Ӓ Os pLZW6__uTcisЛCUZGU*_~ K]s:d|3Ϝhaنjh39LIlD84j ڦFw \‘7V溹ܬ[f&ts/졛t3J7f?ܷH7`-n>ͺuXv,m@wx[s\|g}wx[KXQH U .FGX@Ac`btbą]ʫhpi7Iw~2+X삭l."pZga{/qSD2$Sџjf~uY43Մ>?ѻ4oAU\(k˥R.+ΗeEQN9U+z۟n}OaWIoaUX/Ү}KqduqdMqd4u0CmM׺z륀a:Ө ?2|lg^_^UͥeӨGIRз@nnL1CO )AQEH* i僭 PKAeCS0%$ ;cz/startnet/utils/pgdiff/parsers/CreateFunctionParser.classV[pUNdm- \ iiEHDmdMn38>M}Hqt|qF|qGuۥTP:99?:xO=}"A>I!,apPDD!0,aQ -\?&q._%$DRDJĨ1GD<-"ᘈ"N8ɩS|8-@Qʇ >$8hKMU^B08JEWEn(CS _t_9OL̤ZT|ܐb(㊮ Q+|Ir=c `)KPˆJJ/%i(#J٤P`pkyc˵dZɨ<+b᪖1%-ΝlV6Q3e<"C}%D( Pbh%D(>s bx4LEbQ U V. &/Z排i%#ײI3o.ȸKlB>oqnk+LNUו.U 51]ΊY> "# V|eմ4P<lմ Wl`ZQ /T[]U-m%ULI"wrQ8F5M)j&R䒌uğ^$L1GH%4/c9TFE2J(3=^b[Yl%HFU(ӺK9|$h_вKM<e|Oy̵|t{o.Pfk[e"Zqwʤ\uh4*ٴ0`>njhR/hivl0tfyڰ*rɴ\T,@'5|Z-.TNXh [Lה⿼u7Np.Fw=֗:qtږ,Kk%RekXPݦj.W+/C4bki&g^'i;'p>~6ą\zp iB3B觛h` 3XfpMsCxT!OeA4ⓚٱW!% BAK[8#Z6%Zo7Ff Xef9}`9XzjKc˙.Έ_*>Xś$P.FE\DT_н]\$]".w"**zRoNIiE/P9Ёn*qnq3TelPmC.V]\Oq~?q>0,)v^̰~ GP\CЊ~rPQID8=<))OsR]!D&bXD#|SqBĨ1eDSN=#aO,ECcFRTfN3>f ><0R#ZV e:USR -rB=\&E=ik`.xvH+&ԡ1*U /` g٣t$%?^Li]:7Z*jԩ>eq+xLbFVц އf{];a"bPRƳq Ud<d +o;L='RZ9Rs٥Ҋ^/Z0zY+8'Uqgut2^DvD"C "zJ8ΉN;NJedJx]0]x009$~'z^0)#nɚ=nRuCe|2>˧\"> ;ڳ{| ?"kWl4\pnVVVAml]-z)Y=48. ʾ@Ǯ o`PFQ-oRRNL"+p~6XL2?pV-ؾpPmto<$f$D5d^PKAeCS$~`U- ;cz/startnet/utils/pgdiff/parsers/CreateSequenceParser.classVIpG}m1`l%  l# !ci,X#!Md%+rVUC 9RSrH喪\SιX=!A‘=?|wp ~"8ΩAA'8Ðn #솄~:!u#7`ԍq1.>&Ds""^KE$S"|VEL崈,6F . epbI%UIW- tvj_JM9?9ʤRR"3?hZ7ӤjC$rnR-&YY'JRT)u4eK|R\,岪dq?ʰK~.9j}%P bЙP,Pe[x܉ YB% : ϐ尀+0/aW%hYӳ954R z6Oh *ׇZZ6 &: >9t7$W%X9 O@Y›MȠBW )~q:˔vs\ܘV* \N؉!?4YmZ-!'Nyn#QN:h=ѽHɞe[^GO26:;=E4<{qx$'i钗i YmWg{og R-[]5v?`aOzѲR[<ɓ<Wnnr,t}4[DweCe#% p=&n&FSnGeMFGe壇sV9s*|cOc;6a;N;Џ]a7Nb"؋H‡D+؏kv>$%p?iш^ֆ>Qv,vǘlv6cgb_\0[B)Na"FfÈ d AS`Q2ÀkkYmmu(pzBһKs ~fdM <@;FPKAeCSW R4cz/startnet/utils/pgdiff/parsers/CommentParser.classX x-ye܎ψ '[[lZ6Q%G!r*-[Z( (hR(WOQ#r!֖ͮu}?Փ{"+OT "cX. 1CA;ΔqϖqϕM1'|1_ B1_$b1_"R1_&r1_![bRA'-~GUZ )}?\?TЏ׈Za@ p.si 7*Ige½Ɖ˅|Cͭ,նxkn8Q鄙􈍦c̍-6~II1=,Lfa|59Eycigщc(a 83VHeh`lOhGn]of,5ԵW_) 59>ǎ]337DVmGRJKs"a#LObapW, hfemc**m̓M64-qgizC$ڣqt/v\{f5Xд _^K籕yEa!ɸqnKsد]E vx_4t;ZW[j)ӏ\B19!LsAA!DZ-sNP{ =oITL E(L-ыxʢi1 lc֢OOH|^F?$EF/I `'''̢Fw$0ǢF:rEeSbs$q*n`:*1 ٨njfs{\P30 W?+psDA53/|׻4h"kE{PMd(td\[ĴAtaKbFu3]f :|I̱sUU7T6LDxqc^r3x^/0&K7fVmW: PYD`$,(pj(8>M?byl$'c[SvVgay< p'P_ij/ˢ}(.̚1;2[ew=.>.,0.iLVH4*CklƧB,Fx6{q^az!EŨ%8"arnJ##o8%tJȷY"M_3 XP^]ʇϫ58SFV$BuDD;lwr"lDÉ]4DpfI#l9p|q.'8DxiNg8eěo=d1ޑY`ry^`/x/^aýƆ{ M~wl_ʘA,tx\dI%9$%;]G/ܲ\UܱR5A,ہD/9`ƼcA?b~E\ ?C?s6^Θ}F)/c̤ Ia.Ec /:١Z5, ;}jQu;bZכ]M)wI E"74"ZĪ%2 Reї0 9ܰ&PXQRh5TP^l05z5Gt-9쎂$Zg),;4vRp?VIR'c1gMF+@C,\Wp.N4iP3rk{p}U&ml;Hٙm|_:-rې]%\jXc<eg̷ObJ3bWEI3+ Vp,PKAeCSˋK9cz/startnet/utils/pgdiff/parsers/CreateSchemaParser.classTISA:L2,@IY\1B`xI&a0_3Zl^j#CxoXhR7YBePrWd2"rz .B]JQWSB-MHԷJ%Կ/$& '|ׄ곓E+ FS'j4<^,p؄izIȧx h|=ꯍ<7@:Ʀ 9FXiG58eA9JQt8t;PKAeCS7u 2cz/startnet/utils/pgdiff/parsers/ParserUtils.classUsUmɦI7""J 6JQd,8~82U(/|FM?}8{i㚈xQt؋}~LhG/3}w̼L/"^J03 0$ = 3ǘI2u{R-8%ഀ3VeUhꂚqó+z6 Mm[2&`i<ǕT<ĘT=sȹ*i)JqʒIsL"}%fZa+YZތml,fPOb:sך0XB3+DY#ZVWA#OoyD& żfkirVkւyifuspNKP2amA`H1L8mgX )Wq^) id$#84/u,ijHtr$\E yKUEf^`0z.IxN2H+IUVU0LJ oMqU;x=Ojvq>fl.3x5`pXx9+^C:򳧂 8Ѵrh2D >vEk&N9 :RPSay!8 DBN1 &扽yUZ9j(Ţg8{g;[nؾ sEr%W_uKͪ"UW'悗(1/Ƌe31Gc^ZJ:=%8nי9K|J&f_.S BRGfz'OpJ0p_KD"|. +cAP۞,G*B9>;/0vJJ'=￞_ W>|_<(" ! J؅pG IFDB=׏JhFK>Wq 1"bTĘ"xp\ 'Ei>Hh(HA4å&*+1gEE7Tw(ugnj+ٜ+fى T/PLe\1ԾŗS/aY-1b(R~\Gq:7-Z99ެ5j\[JJzJrA]UL5Rj1ev_O`tgxy;KP`$$CC&gP H"3ch040'C) 2/if6Rj4T4`ftʜ2.WgՔ)9 C׃ӿ WqY x/10/wP84::B GY ÁpPxE5$M(``thDƫxM|oCx%gJyU3Rksa7o->wd\mK oZ1xK*RZǫK4Q$9b )]ى,f^Qe(ߢӖQM;Uby^'jZ[6W6֭`[?[Z*gSoX5 %BtM/z`]1V究T :tz[v,z]c#k_*tGɞUp^E3qx\;*B*+9N(!u}בǸ_ r h }z_ ؁8P;  w,5n7M69e86J$Mqģ}_Eq!0dS,V@c ,AӷshN`q̢V*cUQ {pX^ViTk8{g^mv[.(uEwb_Ⱥ>,`}zMwUM6E,c3Yj7/Ѿķe=y픳zOG*cMr^2:hrqyˋ^xl"4w9}SO =}6juhzt`q6[p3 Qx1J*9y;P{]z>!/Cg;nc?WdX#Y+1a'0Nb0 1fb]GGHq}sb38n  )+7L?1?8GoF׾9K@fo]@[!&$Z pm[~+ TղLoil`V$=8O^Kɏ(?PKAeCS&ь:cz/startnet/utils/pgdiff/parsers/AlterSequenceParser.classUSU.˲m4J$P,5$jV7%l%o >?!`;8o( 0E3=9wgQ0!!aX#b5*]kSЏW:K L(PI1)cJnxSƴ[i1)FFYϿٹG{~ H}x<}}C3@]iCi640JOGl*l\g7&5x~~4~GD,Ib?1OĉapNJHbaV0h/$7PKAeCSz8cz/startnet/utils/pgdiff/parsers/CreateTableParser.classWyxg}0!1\Jh)KhHl6lX(IvYث"jRRnHxkI6 =""""R"n d%l._Bzf}"$H8Cqr$(n.xDQxPB#"'!KX^D> " CՇ#\IOp'E<%iψ8Ź?OI>?Or"P8Oq>^  >W/Ջ|I4i/H`Oj9jFOj_ųt4ug{ڭfƶ^WQwPĒm63zRUKjD q:) jϞv5mȸؗ21=p\Pɺ;J L!I%zF%ukz+7M)O$cɘʼnR0՟Zcu3=M5CԼi1w>Ibѵ)1/1]u-2^0)GBMm^ ;B$ 2^qge|_ep]Ac!k:1`Khށ-R LX2b o8:wk=T_5C!8d|?~(0hC2NKg+6zi\28YU]L,foSz?Net-B6u1w%cwkŌ2vqP~ Φ@uPl̈́nao#fVtSkϓ#XOpZO39Ͽh߉-.\ӫƳʟsRNA3ǒD&%/_rG ȸAbodw?p?O uXxIY2Zv_Q 5of 3\W6T@kSM#8YѨzctע+YIAQM7Kӯ&ȖHgs9k7\X'W =-ktlm:! L4 UtwͪQ5I|Goaj]6yL=o1L7)YMJS(om. !٨ŢPPZ\5{2aRQi-1": `1ށt|n\-)+v2\w4茶G-1mѹQٴC+eReRYm{R=NfN1rO j=QxRi)chj|>\7T i0uN 2+~3-LLY 2 [>59+ҤJd.zԍ)G5gÉBo@K `AQ., a6KhlGNan`rJ0l9ז<fSEȣATsXYuQVAAQ<*s7iCa?E ! C +!&Aip*yTdc"*8v&))R4}Ԟ"wWEAe5͌7ٚAD%br(tc0PKAeCST# 8cz/startnet/utils/pgdiff/parsers/GrantRevokeParser.classY |T{LnHw$!/=ع'`6| _tŽ*$ܡN!ޥTܭb{Tܫ**S51ˉ(v;~_=8ƃU)P^׺$ D 6r#n]zJ#AhoaP8Xӹim>{@f])|CBɦ=\nPk8`)3w8MaqO(W"Q¡s19P8]D9!pҾ1hT`m_͸0yqW5NcB X#& ںzomMZvWU4SQς nZk0>RSSzXr]ɶ✆>|xvTzȮ3F<>`az*f>%/֔+ylY ČDs$f^k^f/=ʚ1V箫TmPs",q`U7HW)]܊[b^T:FR4܈Z]ꫭ60j~YaC>* ½aTJIiPF( 6=[^ۣKC eiM9Rv`sT\(_#r4MA LXW4GLr`[@` btFR9Aup<}D A3xN#N[cju/Vh4S,,4G#2q&;Z G_Լp-#]&'Qv6uu4fy[~h]H\v鰌P2rK^T9@&5j .`ĸq´G b5M0k^3z4BX4\G`gq8/Hb2iX3`$h .mX;Ņ`&ƭP܎/2(H$HDrɨ"ǽ&Zzs{8#C8"r w_6ދ>gFBw*6Gb7da51R*&k{/Vgo`.D.SI\:\\j.2.F(z! nLse?L q.1FF܏X~~gUȕ)BvR1Jv[YoMǴi(FfNa\~>IҊ#WfYf<\5iSf2㕢2RL^hi8(c!tB/CP\e2#\Fb~ڏlmabkSqy4•cd9ݸҕk nW{~}}~aFn ʷ5r C: 2Lr 9 x(c3BShXڅT*2`h3rXDrUXdXFq%FQҍ#EUQ҃jncQc5FݨaB/k͏6a߫C[& 7-@n5(vno48;U OZyF^µBS7rE`V 0\djnF7I"GcW/`3^=ˏAZ;//: \t蘁d<04r܃+<]Gc< T%5=q`9DXMEkit4.XG{}Hh:z:[tIlSV|ڮm:m×lvq w]vپ/ێ⫶m{w]Gyx^EW{&;}Ǔ'k>Aqp}gpX񜔁RI%K^HZ ~,mND'uTz/K1L/xUzH;J:_Ku!𦜂,-r1 ,]xGɟŸf/&|(oGgg;p\H=d&Y>J/S9'~2Ӕ鰓P)ˑNَ"'Rc e4QMq\C*vB%;in︗&8hCS$\ɖ @!OagQCFad͖1Vs+Az;bFtEΠ[3tC?[ S^mg!qI0DzϢєj6>h(D:%,OgjҤ04JNfl^ a 7 fj~q}|\%Nl]Mo1]'ף/O'Gi؍po{v9, -OD2,s)fS=Բ~ʗhW1wq2b= \)FtcWȕm!k |JSA1h:h& i.|;\%4+h>֐|~. Xɍi1n NJe!/rr}V(U8eZ_og*JՔIW]w3mRnnx->H1\ޥCh) o.^u_S?#LwX29$~~|*reF{ސOx&=P)AnA1DjE9>ڈ Jg㡳o`>g~o-VG%k’iɓ@[ ,j*ކa=~#PKAeCSIO x-cz/startnet/utils/pgdiff/parsers/Parser.classW xՙ~&! Ʉ!PLn)"$& md0 3@j[[m*h V+ֶ{ݺj>ۭmnq¾\Crwy?u@ ~L${mn=>gYJ9u៸EB5WEwޗTeWQܫVq؍?7p yP{ W86>h LxW Zܗ % 7R}mu%mJnU;SH* ZD(t#ttg4̪+d9S6vґ~=IoÕ!u_>˸ܹ?Rژ;caԦ8ޕ6M$t$ n<%y)6"w j ڣ^@ٵ]]MK>JC[nNиh#N9G"am:MF6D mRM~/V/U^\zE>Ӹыo`n<ŷm°֋iv(X2x9%ӱHy4N5'ѝ;TpHM9/ujCF[IS9[l[/ϻ/%GOOM5ܺp8]~/ se/@C/~o{c`~&GɑP:O%{Ջ$w&rG HBY8@jt+M@[;2zDbas_R8so /-G/P}"oeڂk .PEBaPfM@vjQEis27ULJK$#JǾhzc*X0[MGZ|[VD$mj' `ʬ oκ#!%`QT/g44œP*r$@ʻ֦(q:r&FSqQۡϚLMm :B2\6~ã:2柲v<ٟn!JCCչ]P*W((87/= Ã4Y6LwGc~SE uE!owg]}WeUHDC{ jWV[8L#ibccr}t(VՇX/5J,0] cp((٥lV@2L3YJK; @I4$X $'9#e냃m5ۅ("]: vl}?9 e+r}2qOj!r6QfT^Ùbpc( ̰;2ם-> g$\;{cps8gVǰWRtؕ֎a{vP7`f ch7OxWlv|%f뛮:hM)8%+i?+cK;¥r9/w<~ߌ3~Zw;g0ߕQA}Π4f?p` E( ȏtI:,t[M\9q[^8a8a[(%(,VBK)XY¡0R(}DJfQ\6~(9EUnRDIi(ek~m} 7qgk-oHc>oMN޾oZ6;ҦqxsOPW4 ITvO\xAYDVy~w/ __`-i9`;.mY$|0_qp[+Q V-R ݽJ-l ʬW^%kkBbU~ź~0_MeOj{5sG'pv?FBW5lױ''I?IZ4S8¢ՄkY`={i-Lj0<8pʉy[3l;h-R;V)ǘ܆<ԶDy^0P-bdT 3 Cx*g_;d!vbֻfK1Moݪ}(SGttQ VGRO.y<CPƱJ_c5lXuaAN. JZThUx4M£ڪ`Y7Cp;O5^N8]}$joSZ3Uom uEPm 9QK.aQRfd&(@29/Ȉ'a@ĠU%$%pi1 $ܗ@8NhOJC |~$c2zXO,yuQ|v}i͒ywֶ-o.Y0=kvi`je ߵ١U!Sln,7gʤi0|>mVǶc=r?uVk;2 r p=-+94)tbE uzNlF33ԤD(H_O9Cs$,˫sJ*->FbQOFP[\WB~)\ɦĜW Y2L]ZsKOy-3緶ګ,_|M#*Yoo؜H:?>tγH #W9!8 '*U"hHB٦+u#Ϡ_- S#} Pw*r&""B}LeAP@0ILPKAeCSkyV 8cz/startnet/utils/pgdiff/parsers/CreateIndexParser.classVWW=1a;U+@d*XA@>`mI$(n'])vӞM7]wuW7k($λޝ}" (ᒀ"UC1,bD5"$a\D+\JaR 7%pKm Sp$G |fT̊HRǤe i@X|"JȑDC&j4|q D="Dq.d%=e|+U!aQAb!<gn:c=łM / ( $#1;$wm;;r@*_vƙw:ӧL:swAcM{?0 F$-㢌QA]e 1cW cD(cB;2*5 qSH(hL˸.bxOƬ&XPpXR#enIA%dT&QҪhҋfR|%-P,mM3vO5MYU( .3x55eiٻIb>a8d6cՌ.ϱ&?pw\7tk*תY> XGUY\: " d:A!Ig*nᶊv 5dU@pY^≍,Xz lMF.e+WQu$Qc]]Z&S41TQ  oP' ?M,bgi3|3NzUpOŧX1;p!>P4'NTCgVc v&)y]`i+/n9JL#A-Gp ahؓW.rӾݫu̶g +䦩tZ(MrP3脶sˉc7NQ+hLn͘ V[\¿#S+N"*yh_o`ZF|D5Ρfp:vEc$1q~ gH40v2-$#pe\TI!@ m÷% mP xPcހG5~x~o˸x:D܎[.qMnb9wz|?K@|PҵaBTlj6}񽣓BɃ;{^fp+>WkC {MPP+'RpZ!(D I@5)-ђ\m'?B9C6wi&6ݟQ&gDf9!X mᎮTV4A7N\q"a0QqexB*]DrM0y* q{8ͤ>ٵ>OJVi"MiJShLTrtB]L]lk: *Lvdjɸ2Pb9ep&)#%*͢*LJT9T9A~> U 7U0G,PW~!D*3yjm<+/ZD+oYV073PDS cdzlHfX ~h8ֶV8ba:~VfBΚ~J͜,2jt;R# ^%.<6AHؒ`xrr5s}4؁1?؉kA` @ >>9wrˏͳ[7V H}k ,\Ƅ-G{1Ѥaf!wCnUXp¨}tnL4ϑ{0 .za au_8Xj&T8 ~rGd)~V1il'TQ`bc7*S)T!4cPP ,]oL43 "g)&#fU.uI߹=&lcA8KcR seD0) GsQQJdY6u.Gz:kl#;}4"Fi R 6I^JhhER.tJciHVvHob }X.4zAN2yuPw,܋2&_?rNg/\f#ȇե9/6,q9Wp-?%уXjFeۗTQݸ˻"b_L6+}6?ȱyT 12Ȫsp_s)ʱ>oLgw~A܍C E+)^<Op/QAo8z]RF{4O"n+4U{e`;\@СNQc{o͹N!=jJ礩5gC:^ 9lH0J[%ת2Qq>j0ko9 ڍƬv!}`y\VRľdCE }:Ys&ܸIa@r0OuX^iYh9:΢9T+xv#O6ܞKsCZbs_Ik9Hϋe h0hո~!6FJwnSf҃Rn_Ͻ5;Ռj8JGmB1b. Ք:VaB'ڂ/6vWԵiC^/5Oܡm(2A/tE}pQ˅ۆ.z~_Y|݊Qt.](;;䶞vet_>ѡ+\O "[y]\# ӹc{vt6& fo+?PKAeCSydM 7cz/startnet/utils/pgdiff/parsers/CreateViewParser.classVSWHfA] ^0 ZKP4ф`H$XͭU{S}}K2m:oSg:3-Άhqw}=#Bq '$ 8)S22N 2 cXFPƈ3BpVBHA 8/#,#"B0w 2&FR :pB,)LeJ^ byQ,/ .aZFZA\ŒY)/$\bpupd馕疷lْ81ffޱaҧ _үެ-vO08 6|fBΒ9nh.KJ1ybhJP6|F01yPeG fNfV:IMi`Ww=ãN@'4įMxh=KMH4n-,!6Ggʸ)GD9YoPS僧nuXUAϵ"6^P}5)[wiwЪIdMɻ+[SўjUNݣ5K-n5+?[WSё\d>^`'=ܚTAgjPTWs,aO |ZOص6 ͞TK {К5w}ح9LtѺԉ؍n/>4Ipf/͙>A|E>чȏ}/7zAL5#au"<a^a8N!<"̒eec&=`7), %(&u{WhjhPKAeCS:cz/startnet/utils/pgdiff/parsers/CreateTriggerParser.classW{|S=M/;K- %--EU BmZRmr$$)OP7Ntu:DYp[`0-t{{St?acsonjs~^w~99,?dD]`99C…&#B ŐH $S N#/!bɱcpM7[9"ox eq.;8.. ~1;xK rBr=rq>a!;"XpA8> ab~Q6⃂3‡ G\?Q'8>qB͓)8&8#es:C=1ײo'L-hߪZ*gttMoO`h}IL -c2>\H%luGH׳z*JzKt6e+{$ITSm]tC٨OUIEbÂ)L4FToDe#5jHI|FS8% 3 SN0t kVR|_E_ NT'^D`pDUw|]pm'(xF~*$!Ma֦x$/yƍbCPwĆҐWCja֡D2gIq{ ^) ??*loSAG&~]$τG%ӡ#UݣB/ j)-N+SۺC~%RJ_9LvoNy+Ʃs@LO֢Q=SVKxY+H?*UQMATsN%o1joZ_ io;y H_7.`ANRU}[hnꗈ3=r2&n Ş׊2Ou zT\ϛAf2'#2L>Nies"$uCZ"jB;>R)=KjNq9tVw` S NءŹ\^bpg*{/ٝQRehC) oӓT$;lzgw*7ɤy=Kji"ɐ4\2֩e2TŦD չ Jҹ>" /֢.DB-nA@c1"G'Gi,'U/g)U`lZRxY|~ւ, LCێu"l gGC/;A/^fWI } 1 ҥHH UZm))4v);}).HGWz 7I|7KOVR&,,(df|JK*@bUgUU6ǿ03MU%kl- V 1[啞4;aH?釋ۨNkzşN#uZXd֜{t c7?u^E b m+*N~*;y74BV CmƖbl)6E;]StQ+rbw5zZ]v~ fk p'u:&L>~*a**z-aS<LJEG(r͈_6Ύa;R?PKMNCSDl,*META-INF/maven/cz.startnet/apgdiff/pom.xmln6_EH;^EI7.Ļ3.GDPJRE?CR4%1sPR\HUƸz":? _G)\޾a]c___{ׇ`|v:P4yHSaMq*X'σ=,DLOD*8"߀9g &f!YhDS AzNB#}:|% #Xչ]/ġ ꭹ(s =D7LmE VRIFԜ4Η1M6ÅNDB$B!^bLT$in|4,gNМ4D:Q EDH<Rb yJr$KZ\d9J((1$EBۅ_D`Jd<ɀ> uTA1e Gz_AeLJeCG*xI2Ս$ CbN K}"-n:-,:NX%=O[ _;Y/pM^Z{%א,CTjW0*~nT@P _?(Xԙ$Y) /M%09@4Rطڿi z7\l'":0GkA`;m4ȭ$fZBiYP#. 1u)[딒c-N; J||z1d6?9A49x.Ib$Xq(jAoߞWwJt?3"CH:7FHi 244&9R_ !Q){A'OuAPJX!px~ÓrF3-{"3l|A\X' )Z)rM}Aǰ)Ș<=aYp?ҕX>zJ~" )!"PfѸ,irF%3{{rWጩrRb7ȹuP˔]ABQN$A>Ag3Tf*1k7$XeVQ4'kCX8&9 sI.[^ˡ$ w(6ZĝW 2ۻW M&wlx^7\X+aBw< ۥ>?)7`[[ln1n]ݟ7Q_@T+*Wl ʽU6{Q8u8vȻ[f#F0kh.ypo1 @|O+<ķGY 79)IW-PSW3eKKN1^z~sHYs)%N)"i)G:m8SQdAj꧑|Y (v.𻥧Ɣd)ӃWYo{\vz`aV?|Y%O=[9OP&*FteDyܯ>e1cz/startnet/utils/pgdiff/schema/PgExtension.classPKAeCSg 3Icz/startnet/utils/pgdiff/schema/PgColumnUtils.classPKAeCS!9cz/startnet/utils/pgdiff/schema/PgRelationPrivilege.classPKAeCS |\&,%cz/startnet/utils/pgdiff/schema/PgRule.classPKAeCS+ 0)cz/startnet/utils/pgdiff/schema/PgFunction.classPKAeCSmm /2cz/startnet/utils/pgdiff/schema/PgTrigger.classPKAeCSq{>7b>cz/startnet/utils/pgdiff/schema/PgInheritedColumn.classPKAeCS[VӃ9q@cz/startnet/utils/pgdiff/schema/PgSequencePrivilege.classPKAeCSL,P,KEcz/startnet/utils/pgdiff/schema/PgType.classPKAeCS9  :Lcz/startnet/utils/pgdiff/schema/PgProcedure$Argument.classPKAeCSͿvu.#Rcz/startnet/utils/pgdiff/schema/PgColumn.classPKAeCS]ZFYcz/startnet/utils/pgdiff/schema/PgTrigger$EventTimeQualification.classPKAeCSx4#-]cz/startnet/utils/pgdiff/schema/PgTable.classPKAeCSd,lcz/startnet/utils/pgdiff/schema/PgView.classPKAeCS:Qa 0-ucz/startnet/utils/pgdiff/schema/PgRelation.classPKAeCS:.i0}cz/startnet/utils/pgdiff/schema/PgDatabase.classPKAeCSA\v.Xcz/startnet/utils/pgdiff/schema/PgPolicy.classPKAeCS)1cz/startnet/utils/pgdiff/schema/PgProcedure.classPKAeCSw 9cz/startnet/utils/pgdiff/schema/PgFunction$Argument.classPKAeCSGie \!.ycz/startnet/utils/pgdiff/schema/PgSchema.classPKAeCSŰ0Scz/startnet/utils/pgdiff/schema/PgSequence.classPKAeCSxb %cz/startnet/utils/pgdiff/PgDiff.classPKAeCS@j.cz/startnet/utils/pgdiff/PgDiffArguments.classPKAeCSV0cz/startnet/utils/pgdiff/PgDiffConstraints.classPKAeCS1}-cz/startnet/utils/pgdiff/PgDiffPolicies.classPKAeCS9/T** cz/startnet/utils/pgdiff/PgDiffUtils.classPKAeCS,!"L*cz/startnet/utils/pgdiff/PgDiffViews.classPKAeCS̈́ .cz/startnet/utils/pgdiff/PgDiffFunctions.classPKAeCS Z5(cz/startnet/utils/pgdiff/Resources.classPK@eCSxz-.cz/startnet/utils/pgdiff/Resources.propertiesPKAeCS4m;9P #cz/startnet/utils/pgdiff/Main.classPK@eCS C0cz/startnet/utils/pgdiff/Resources_es.propertiesPK@eCSs1Q0Z cz/startnet/utils/pgdiff/Resources_cs.propertiesPK@eCS4 "z0cz/startnet/utils/pgdiff/Resources_fr.propertiesPKAeCSVƧ *cz/startnet/utils/pgdiff/PgDiffTypes.classPKAeCS Vp *!cz/startnet/utils/pgdiff/PgDiffRules.classPKAeCSAp/N&cz/startnet/utils/pgdiff/SearchPathHelper.classPKAeCSW ].:(cz/startnet/utils/pgdiff/PgDiffSequences.classPKAeCSgnРHE ,4cz/startnet/utils/pgdiff/PgDiffIndexes.classPKAeCSᒸ /:cz/startnet/utils/pgdiff/PgDiffProcedures.classPKAeCS/A׻"2@cz/startnet/utils/pgdiff/loader/PgDumpLoader.classPKAeCSE ~=3Qcz/startnet/utils/pgdiff/loader/FileException.classPKAeCS;CD+FScz/startnet/utils/pgdiff/PgDiffTables.classPKAeCS#lpcz/startnet/utils/pgdiff/Pair.classPKAeCSmOK-9rcz/startnet/utils/pgdiff/PgDiffTriggers.classPKAeCS0%$ ;ycz/startnet/utils/pgdiff/parsers/CreateFunctionParser.classPKAeCSk m' 7cz/startnet/utils/pgdiff/parsers/CreateRuleParser.classPKAeCS9x 9|cz/startnet/utils/pgdiff/parsers/CreatePolicyParser.classPKAeCS$~`U- ;acz/startnet/utils/pgdiff/parsers/CreateSequenceParser.classPKAeCSW R4cz/startnet/utils/pgdiff/parsers/CommentParser.classPKAeCSˋK9>cz/startnet/utils/pgdiff/parsers/CreateSchemaParser.classPKAeCS7u 2qcz/startnet/utils/pgdiff/parsers/ParserUtils.classPKAeCS"& <Acz/startnet/utils/pgdiff/parsers/CreateProcedureParser.classPKAeCS&ь:2cz/startnet/utils/pgdiff/parsers/AlterSequenceParser.classPKAeCSz8Tcz/startnet/utils/pgdiff/parsers/CreateTableParser.classPKAeCST# 8Zcz/startnet/utils/pgdiff/parsers/GrantRevokeParser.classPKAeCSIO x-cz/startnet/utils/pgdiff/parsers/Parser.classPKAeCSJL-A6cz/startnet/utils/pgdiff/parsers/ParserException.classPKAeCSs= =<gcz/startnet/utils/pgdiff/parsers/CreateExtensionParser.classPKAeCSkyV 8cz/startnet/utils/pgdiff/parsers/CreateIndexParser.classPKAeCSsl,v% 7^cz/startnet/utils/pgdiff/parsers/CreateTypeParser.classPKAeCSz :)cz/startnet/utils/pgdiff/parsers/AlterRelationParser.classPKAeCSydM 7Ycz/startnet/utils/pgdiff/parsers/CreateViewParser.classPKAeCS:cz/startnet/utils/pgdiff/parsers/CreateTriggerParser.classPKMNCSDl,*:META-INF/maven/cz.startnet/apgdiff/pom.xmlPKBeCSw551 META-INF/maven/cz.startnet/apgdiff/pom.propertiesPKQQJ apgdiff-release_2.7.0/src/000077500000000000000000000000001412634760000154125ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/000077500000000000000000000000001412634760000163365ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/assembly/000077500000000000000000000000001412634760000201555ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/assembly/bin.xml000066400000000000000000000012011412634760000214410ustar00rootroot00000000000000 bin zip ${project.artifactId}-${project.version} ${project.build.directory}/${project.build.finalName}.${project.packaging} ${basedir}/license.txt ${basedir}/README.md apgdiff-release_2.7.0/src/main/assembly/src.xml000066400000000000000000000012741412634760000214720ustar00rootroot00000000000000 src zip ${project.artifactId}-${project.version} ${basedir}/src src ${basedir} build.xml pom.xml README.md license.txt apgdiff-release_2.7.0/src/main/java/000077500000000000000000000000001412634760000172575ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/000077500000000000000000000000001412634760000176735ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/000077500000000000000000000000001412634760000215375ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/000077500000000000000000000000001412634760000226775ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/000077500000000000000000000000001412634760000241365ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/Main.java000066400000000000000000000026001412634760000256630ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; /** * Compares two PostgreSQL dumps and outputs information about differences in * the database schemas. * * @author fordfrog */ public class Main { /** * APgDiff main method. * * @param args the command line arguments * * @throws UnsupportedEncodingException Thrown if unsupported output * encoding has been encountered. */ public static void main(final String[] args) throws UnsupportedEncodingException { @SuppressWarnings("UseOfSystemOutOrSystemErr") final PrintWriter writer = new PrintWriter(System.out, true); final PgDiffArguments arguments = new PgDiffArguments(); if (arguments.parse(writer, args)) { @SuppressWarnings("UseOfSystemOutOrSystemErr") final PrintWriter encodedWriter = new PrintWriter( new OutputStreamWriter( System.out, arguments.getOutCharsetName())); PgDiff.createDiff(encodedWriter, arguments); encodedWriter.close(); } writer.close(); } /** * Creates a new Main object. */ private Main() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/Pair.java000077500000000000000000000004751412634760000257050ustar00rootroot00000000000000package cz.startnet.utils.pgdiff; public class Pair { private L l; private R r; public Pair(L l, R r){ this.l = l; this.r = r; } public L getL(){ return l; } public R getR(){ return r; } public void setL(L l){ this.l = l; } public void setR(R r){ this.r = r; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiff.java000077500000000000000000000357121412634760000261530ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.loader.PgDumpLoader; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgExtension; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.io.InputStream; import java.io.PrintWriter; /** * Creates diff of two database schemas. * * @author fordfrog */ public class PgDiff { /** * Creates diff on the two database schemas. * * @param writer writer the output should be written to * @param arguments object containing arguments settings */ public static void createDiff(final PrintWriter writer, final PgDiffArguments arguments) { // Avoid reading twice from System.in if (arguments.getOldDumpFile().equals("-") && arguments.getNewDumpFile().equals("-")) return; final PgDatabase oldDatabase = PgDumpLoader.loadDatabaseSchema( arguments.getOldDumpFile(), arguments.getInCharsetName(), arguments.isOutputIgnoredStatements(), arguments.isIgnoreSlonyTriggers(), arguments.isIgnoreSchemaCreation()); final PgDatabase newDatabase = PgDumpLoader.loadDatabaseSchema( arguments.getNewDumpFile(), arguments.getInCharsetName(), arguments.isOutputIgnoredStatements(), arguments.isIgnoreSlonyTriggers(), arguments.isIgnoreSchemaCreation()); diffDatabaseSchemas(writer, arguments, oldDatabase, newDatabase); } /** * Creates diff on the two database schemas. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldInputStream input stream of file containing dump of the * original schema * @param newInputStream input stream of file containing dump of the new * schema */ public static void createDiff(final PrintWriter writer, final PgDiffArguments arguments, final InputStream oldInputStream, final InputStream newInputStream) { final PgDatabase oldDatabase = PgDumpLoader.loadDatabaseSchema( oldInputStream, arguments.getInCharsetName(), arguments.isOutputIgnoredStatements(), arguments.isIgnoreSlonyTriggers(), arguments.isIgnoreSchemaCreation()); final PgDatabase newDatabase = PgDumpLoader.loadDatabaseSchema( newInputStream, arguments.getInCharsetName(), arguments.isOutputIgnoredStatements(), arguments.isIgnoreSlonyTriggers(), arguments.isIgnoreSchemaCreation()); diffDatabaseSchemas(writer, arguments, oldDatabase, newDatabase); } /** * Creates new schemas (not the objects inside the schemas). * * @param writer writer the output should be written to * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void createNewSchemas(final PrintWriter writer, final PgDatabase oldDatabase, final PgDatabase newDatabase) { for (final PgSchema newSchema : newDatabase.getSchemas()) { if (oldDatabase.getSchema(newSchema.getName()) == null) { writer.println(); writer.println(newSchema.getCreationSQL()); } } } /** * Creates new extensions. * * @param writer writer the output should be written to * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void createNewExtensions(final PrintWriter writer, final PgDatabase oldDatabase, final PgDatabase newDatabase) { for (final PgExtension newExtension : newDatabase.getExtensions()) { if (oldDatabase.getExtension(newExtension.getName()) == null) { writer.println(); writer.println(newExtension.getCreationSQL()); } } } /** * Creates diff from comparison of two database schemas. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void diffDatabaseSchemas(final PrintWriter writer, final PgDiffArguments arguments, final PgDatabase oldDatabase, final PgDatabase newDatabase) { if (arguments.isAddTransaction()) { writer.println("START TRANSACTION;"); } if (oldDatabase.getComment() == null && newDatabase.getComment() != null || oldDatabase.getComment() != null && newDatabase.getComment() != null && !oldDatabase.getComment().equals(newDatabase.getComment())) { writer.println(); writer.print("COMMENT ON DATABASE current_database() IS "); writer.print(newDatabase.getComment()); writer.println(';'); } else if (oldDatabase.getComment() != null && newDatabase.getComment() == null) { writer.println(); writer.println("COMMENT ON DATABASE current_database() IS NULL;"); } dropOldSchemas(writer, oldDatabase, newDatabase); createNewSchemas(writer, oldDatabase, newDatabase); dropOldExtensions(writer, oldDatabase, newDatabase); createNewExtensions(writer, oldDatabase, newDatabase); updateSchemas(writer, arguments, oldDatabase, newDatabase); if (arguments.isAddTransaction()) { writer.println(); writer.println("COMMIT TRANSACTION;"); } if (arguments.isOutputIgnoredStatements()) { if (!oldDatabase.getIgnoredStatements().isEmpty()) { writer.println(); writer.print("/* "); writer.println(Resources.getString( "OriginalDatabaseIgnoredStatements")); for (final String statement : oldDatabase.getIgnoredStatements()) { writer.println(); writer.println(statement); } writer.println("*/"); } if (!newDatabase.getIgnoredStatements().isEmpty()) { writer.println(); writer.print("/* "); writer.println( Resources.getString("NewDatabaseIgnoredStatements")); for (final String statement : newDatabase.getIgnoredStatements()) { writer.println(); writer.println(statement); } writer.println("*/"); } } } /** * Drops old schemas that do not exist anymore. * * @param writer writer the output should be written to * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void dropOldSchemas(final PrintWriter writer, final PgDatabase oldDatabase, final PgDatabase newDatabase) { for (final PgSchema oldSchema : oldDatabase.getSchemas()) { if (newDatabase.getSchema(oldSchema.getName()) == null) { writer.println(); writer.println("DROP SCHEMA " +PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(oldSchema.getName()) + " CASCADE;"); } } } /** * Drops old extensions that do not exist anymore. * * @param writer writer the output should be written to * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void dropOldExtensions(final PrintWriter writer, final PgDatabase oldDatabase, final PgDatabase newDatabase) { for (final PgExtension oldExtension : oldDatabase.getExtensions()) { if (newDatabase.getExtension(oldExtension.getName()) == null) { writer.println(); writer.println("DROP EXTENSION " +PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(oldExtension.getName()) + " CASCADE;"); } } } /** * Updates objects in schemas. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldDatabase original database schema * @param newDatabase new database schema */ private static void updateSchemas(final PrintWriter writer, final PgDiffArguments arguments, final PgDatabase oldDatabase, final PgDatabase newDatabase) { final boolean setSearchPath = newDatabase.getSchemas().size() > 1 || !newDatabase.getSchemas().get(0).getName().equals("public"); for (final PgSchema newSchema : newDatabase.getSchemas()) { final SearchPathHelper searchPathHelper; if (setSearchPath) { searchPathHelper = new SearchPathHelper("SET search_path = " + PgDiffUtils.getQuotedName(newSchema.getName(), true) + ", pg_catalog;"); } else { searchPathHelper = new SearchPathHelper(null); } final PgSchema oldSchema = oldDatabase.getSchema(newSchema.getName()); if (oldSchema != null) { if (oldSchema.getComment() == null && newSchema.getComment() != null || oldSchema.getComment() != null && newSchema.getComment() != null && !oldSchema.getComment().equals( newSchema.getComment())) { writer.println(); writer.print("COMMENT ON SCHEMA "); writer.print( PgDiffUtils.getQuotedName(newSchema.getName())); writer.print(" IS "); writer.print(newSchema.getComment()); writer.println(';'); } else if (oldSchema.getComment() != null && newSchema.getComment() == null) { writer.println(); writer.print("COMMENT ON SCHEMA "); writer.print( PgDiffUtils.getQuotedName(newSchema.getName())); writer.println(" IS NULL;"); } } PgDiffTriggers.dropTriggers( writer, oldSchema, newSchema, searchPathHelper); PgDiffRules.dropRules( writer, oldSchema, newSchema, searchPathHelper); PgDiffFunctions.dropFunctions( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffProcedures.dropPocedures( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffViews.dropViews( writer, oldSchema, newSchema, searchPathHelper); PgDiffConstraints.dropConstraints( writer, oldSchema, newSchema, true, searchPathHelper); PgDiffConstraints.dropConstraints( writer, oldSchema, newSchema, false, searchPathHelper); PgDiffIndexes.dropIndexes( writer, oldSchema, newSchema, searchPathHelper); PgDiffTables.dropClusters( writer, oldSchema, newSchema, searchPathHelper); PgDiffTables.dropTables( writer, oldSchema, newSchema, searchPathHelper); PgDiffSequences.dropSequences( writer, oldSchema, newSchema, searchPathHelper); PgDiffPolicies.dropPolicies( writer, oldSchema, newSchema, searchPathHelper); PgDiffSequences.createSequences( writer, oldSchema, newSchema, searchPathHelper); PgDiffSequences.alterSequences( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffTypes.alterTypes(writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffTypes.createTypes(writer, oldSchema, newSchema, searchPathHelper); PgDiffTypes.dropTypes(writer, oldSchema, newSchema, searchPathHelper); PgDiffTables.createTables( writer, oldSchema, newSchema, searchPathHelper); PgDiffTables.alterTables( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffSequences.alterCreatedSequences( writer, oldSchema, newSchema, searchPathHelper); PgDiffFunctions.createFunctions( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffProcedures.createProducedures( writer, arguments, oldSchema, newSchema, searchPathHelper); PgDiffConstraints.createConstraints( writer, oldSchema, newSchema, true, searchPathHelper); PgDiffConstraints.createConstraints( writer, oldSchema, newSchema, false, searchPathHelper); PgDiffIndexes.createIndexes( writer, oldSchema, newSchema, searchPathHelper); PgDiffTables.createClusters( writer, oldSchema, newSchema, searchPathHelper); PgDiffTriggers.createTriggers( writer, oldSchema, newSchema, searchPathHelper); PgDiffTriggers.disableOrEnableTriggers( writer, oldSchema, newSchema, searchPathHelper); PgDiffViews.createViews( writer, oldSchema, newSchema, searchPathHelper); PgDiffRules.createRules(writer, oldSchema, newSchema, searchPathHelper); PgDiffViews.alterViews( writer, oldSchema, newSchema, searchPathHelper); PgDiffPolicies.createPolicies( writer, oldSchema, newSchema, searchPathHelper); PgDiffPolicies.alterPolicies( writer, oldSchema, newSchema, searchPathHelper); PgDiffFunctions.alterComments( writer, oldSchema, newSchema, searchPathHelper); PgDiffProcedures.alterComments( writer, oldSchema, newSchema, searchPathHelper); PgDiffConstraints.alterComments( writer, oldSchema, newSchema, searchPathHelper); PgDiffIndexes.alterComments( writer, oldSchema, newSchema, searchPathHelper); PgDiffTriggers.alterComments( writer, oldSchema, newSchema, searchPathHelper); } } /** * Creates a new instance of PgDiff. */ private PgDiff() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffArguments.java000077500000000000000000000255541412634760000300440ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import java.io.PrintWriter; import java.nio.charset.Charset; import java.util.SortedMap; /** * Contains parsed command line arguments. * * @author fordfrog */ public class PgDiffArguments { /** * Input file charset name. */ private String inCharsetName = "UTF-8"; /** * Path to the new dump file. */ private String newDumpFile; /** * Path to the original dump file. */ private String oldDumpFile; /** * Output file charset name. */ private String outCharsetName = "UTF-8"; /** * Whether DEFAULT ... should be added in case new column has NOT NULL * constraint. The default value is dropped later. */ private boolean addDefaults; /** * Whether to enclose all statements in transaction. */ private boolean addTransaction; /** * Whether to ignore whitespace while comparing content of functions. */ private boolean ignoreFunctionWhitespace; /** * Whether to ignore START WITH on SEQUENCEs. */ private boolean ignoreStartWith; /** * Whether to display apgdiff version. */ private boolean version; /** * Whether to output information about ignored statements. */ private boolean outputIgnoredStatements; /** * Whether to list supported charsets. */ private boolean listCharsets; /** * Whether Slony triggers should be ignored. */ private boolean ignoreSlonyTriggers; /** * Whether Schema creation should be ignored. */ private boolean ignoreSchemaCreation; /** * Drop If Exists and Create If Exists where possible */ private boolean useIfExists; /** * Setter for {@link #addDefaults}. * * @param addDefaults {@link #addDefaults} */ public void setAddDefaults(final boolean addDefaults) { this.addDefaults = addDefaults; } /** * Getter for {@link #addDefaults}. * * @return {@link #addDefaults} */ public boolean isAddDefaults() { return addDefaults; } /** * Setter for {@link #addTransaction}. * * @param addTransaction {@link #addTransaction} */ public void setAddTransaction(final boolean addTransaction) { this.addTransaction = addTransaction; } /** * Getter for {@link #addTransaction}. * * @return {@link #addTransaction} */ public boolean isAddTransaction() { return addTransaction; } /** * Setter for {@link #ignoreFunctionWhitespace}. * * @param ignoreFunctionWhitespace {@link #ignoreFunctionWhitespace} */ public void setIgnoreFunctionWhitespace( final boolean ignoreFunctionWhitespace) { this.ignoreFunctionWhitespace = ignoreFunctionWhitespace; } /** * Getter for {@link #ignoreFunctionWhitespace}. * * @return {@link #ignoreFunctionWhitespace} */ public boolean isIgnoreFunctionWhitespace() { return ignoreFunctionWhitespace; } /** * Setter for {@link #ignoreStartWith}. * * @param ignoreStartWith {@link #ignoreStartWith} */ public void setIgnoreStartWith(final boolean ignoreStartWith) { this.ignoreStartWith = ignoreStartWith; } /** * Getter for {@link #ignoreStartWith}. * * @return {@link #ignoreStartWith} */ public boolean isIgnoreStartWith() { return ignoreStartWith; } /** * Setter for {@link #newDumpFile}. * * @param newDumpFile {@link #newDumpFile} */ public void setNewDumpFile(final String newDumpFile) { this.newDumpFile = newDumpFile; } /** * Getter for {@link #newDumpFile}. * * @return {@link #newDumpFile} */ public String getNewDumpFile() { return newDumpFile; } /** * Setter for {@link #oldDumpFile}. * * @param oldDumpFile {@link #oldDumpFile} */ public void setOldDumpFile(final String oldDumpFile) { this.oldDumpFile = oldDumpFile; } /** * Getter for {@link #oldDumpFile}. * * @return {@link #oldDumpFile} */ public String getOldDumpFile() { return oldDumpFile; } /** * Getter for {@link #outputIgnoredStatements}. * * @return {@link #outputIgnoredStatements} */ public boolean isOutputIgnoredStatements() { return outputIgnoredStatements; } /** * Setter for {@link #outputIgnoredStatements}. * * @param outputIgnoredStatements {@link #outputIgnoredStatements} */ public void setOutputIgnoredStatements( final boolean outputIgnoredStatements) { this.outputIgnoredStatements = outputIgnoredStatements; } /** * Setter for {@link #version}. * * @param version {@link #version} */ public void setVersion(final boolean version) { this.version = version; } /** * Getter for {@link #version}. * * @return {@link #version} */ public boolean isVersion() { return version; } /** * Parses command line arguments or outputs instructions. * * @param writer writer to be used for info output * @param args array of arguments * * @return true if arguments were parsed and execution can continue, * otherwise false */ @SuppressWarnings("AssignmentToForLoopParameter") public boolean parse(final PrintWriter writer, final String[] args) { boolean success = true; final int argsLength; if (args.length >= 2) { argsLength = args.length - 2; } else { argsLength = args.length; } for (int i = 0; i < argsLength; i++) { if ("--add-defaults".equals(args[i])) { setAddDefaults(true); } else if ("--add-transaction".equals(args[i])) { setAddTransaction(true); } else if ("--ignore-function-whitespace".equals(args[i])) { setIgnoreFunctionWhitespace(true); } else if ("--ignore-slony-triggers".equals(args[i])) { setIgnoreSlonyTriggers(true); } else if ("--ignore-start-with".equals(args[i])) { setIgnoreStartWith(true); } else if ("--ignore-schema-creation".equals(args[i])) { setIgnoreSchemaCreation(true); } else if ("--in-charset-name".equals(args[i])) { setInCharsetName(args[i + 1]); i++; } else if ("--list-charsets".equals(args[i])) { setListCharsets(true); } else if ("--out-charset-name".equals(args[i])) { setOutCharsetName(args[i + 1]); i++; } else if ("--output-ignored-statements".equals(args[i])) { setOutputIgnoredStatements(true); } else if ("--version".equals(args[i])) { setVersion(true); } else if ("--drop-if-exists".equals(args[i])) { PgDiffUtils.setUseExists(true); } else { writer.print(Resources.getString("ErrorUnknownOption")); writer.print(": "); writer.println(args[i]); success = false; break; } } if (args.length == 1 && isVersion()) { printVersion(writer); success = false; } else if (args.length == 1 && isListCharsets()) { listCharsets(writer); success = false; } else if (args.length < 2) { printUsage(writer); success = false; } else if (success) { setOldDumpFile(args[args.length - 2]); setNewDumpFile(args[args.length - 1]); } return success; } /** * Prints program usage. * * @param writer writer to print the usage to */ private void printUsage(final PrintWriter writer) { writer.println( Resources.getString("UsageHelp").replace("${tab}", "\t")); } /** * Prints program version. * * @param writer writer to print the usage to */ private void printVersion(final PrintWriter writer) { writer.print(Resources.getString("Version")); writer.print(": "); writer.println(Resources.getString("VersionNumber")); } /** * Getter for {@link #inCharsetName}. * * @return {@link #inCharsetName} */ public String getInCharsetName() { return inCharsetName; } /** * Setter for {@link #inCharsetName}. * * @param inCharsetName {@link #inCharsetName} */ public void setInCharsetName(final String inCharsetName) { this.inCharsetName = inCharsetName; } /** * Getter for {@link #outCharsetName}. * * @return {@link #outCharsetName} */ public String getOutCharsetName() { return outCharsetName; } /** * Setter for {@link #outCharsetName}. * * @param outCharsetName {@link #outCharsetName} */ public void setOutCharsetName(final String outCharsetName) { this.outCharsetName = outCharsetName; } /** * Getter for {@link #listCharsets}. * * @return {@link #listCharsets} */ public boolean isListCharsets() { return listCharsets; } /** * Setter for {@link #listCharsets}. * * @param listCharsets {@link #listCharsets} */ public void setListCharsets(final boolean listCharsets) { this.listCharsets = listCharsets; } /** * Lists supported charsets. * * @param writer writer */ private void listCharsets(final PrintWriter writer) { final SortedMap charsets = Charset.availableCharsets(); for (final String name : charsets.keySet()) { writer.println(name); } } /** * Getter for {@link #ignoreSlonyTriggers}. * * @return {@link #ignoreSlonyTriggers} */ public boolean isIgnoreSlonyTriggers() { return ignoreSlonyTriggers; } /** * Setter for {@link #ignoreSlonyTriggers}. * * @param ignoreSlonyTriggers {@link #ignoreSlonyTriggers} */ public void setIgnoreSlonyTriggers(final boolean ignoreSlonyTriggers) { this.ignoreSlonyTriggers = ignoreSlonyTriggers; } /** * Getter for {@link #ignoreSchemaCreation}. * * @return {@link #ignoreSchemaCreation} */ public boolean isIgnoreSchemaCreation() { return this.ignoreSchemaCreation; } /** * Setter for {@link #ignoreSchemaCreation}. * * @param ignoreSchemaCreation {@link #ignoreSchemaCreation} */ public void setIgnoreSchemaCreation(final boolean ignoreSchemaCreation) { this.ignoreSchemaCreation = ignoreSchemaCreation; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffConstraints.java000077500000000000000000000223351412634760000304000ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgConstraint; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTable; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Diffs constraints. * * @author fordfrog */ public class PgDiffConstraints { /** * Outputs statements for creation of new constraints. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param primaryKey determines whether primary keys should be * processed or any other constraints should be * processed * @param searchPathHelper search path helper */ public static void createConstraints(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final boolean primaryKey, final SearchPathHelper searchPathHelper ) { for (final PgTable newTable : newSchema.getTables()) { final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTable.getName()); } // Add new constraints for (final PgConstraint constraint : getNewConstraints(oldTable, newTable, primaryKey)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(constraint.getCreationSQL()); } } } /** * Outputs statements for dropping non-existent or modified constraints. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param primaryKey determines whether primary keys should be * processed or any other constraints should be * processed * @param searchPathHelper search path helper */ public static void dropConstraints(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final boolean primaryKey, final SearchPathHelper searchPathHelper ) { for (final PgTable newTable : newSchema.getTables()) { final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTable.getName()); } // Drop constraints that no more exist or are modified for (final PgConstraint constraint : getDropConstraints(oldTable, newTable, primaryKey)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(constraint.getDropSQL()); } } } /** * Returns list of constraints that should be dropped. * * @param oldTable original table or null * @param newTable new table or null * @param primaryKey determines whether primary keys should be processed or * any other constraints should be processed * * @return list of constraints that should be dropped * * @todo Constraints that are depending on a removed field should not be * added to drop because they are already removed. */ private static List getDropConstraints(final PgTable oldTable, final PgTable newTable, final boolean primaryKey) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newTable != null && oldTable != null) { for (final PgConstraint constraint : oldTable.getConstraints()) { if (constraint.isPrimaryKeyConstraint() == primaryKey && (!newTable.containsConstraint(constraint.getName()) || !newTable.getConstraint(constraint.getName()).equals( constraint))) { list.add(constraint); } } } return list; } /** * Returns list of constraints that should be added. * * @param oldTable original table * @param newTable new table * @param primaryKey determines whether primary keys should be processed or * any other constraints should be processed * * @return list of constraints that should be added */ private static List getNewConstraints(final PgTable oldTable, final PgTable newTable, final boolean primaryKey) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newTable != null) { if (oldTable == null) { for (final PgConstraint constraint : newTable.getConstraints()) { if (constraint.isPrimaryKeyConstraint() == primaryKey) { list.add(constraint); } } } else { for (final PgConstraint constraint : newTable.getConstraints()) { if ((constraint.isPrimaryKeyConstraint() == primaryKey) && (!oldTable.containsConstraint( constraint.getName()) || !oldTable.getConstraint(constraint.getName()). equals(constraint))) { list.add(constraint); } } } } return list; } /** * Outputs statements for constraint comments that have changed. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterComments(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (PgTable oldTable : oldSchema.getTables()) { final PgTable newTable = newSchema.getTable(oldTable.getName()); if (newTable == null) { continue; } for (final PgConstraint oldConstraint : oldTable.getConstraints()) { final PgConstraint newConstraint = newTable.getConstraint(oldConstraint.getName()); if (newConstraint == null) { continue; } if (oldConstraint.getComment() == null && newConstraint.getComment() != null || oldConstraint.getComment() != null && newConstraint.getComment() != null && !oldConstraint.getComment().equals( newConstraint.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON "); if (newConstraint.isPrimaryKeyConstraint()) { writer.print("INDEX "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getName())); } else { writer.print("CONSTRAINT "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getName())); writer.print(" ON "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getTableName())); } writer.print(" IS "); writer.print(newConstraint.getComment()); writer.println(';'); } else if (oldConstraint.getComment() != null && newConstraint.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON "); if (newConstraint.isPrimaryKeyConstraint()) { writer.print("INDEX "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getName())); } else { writer.print("CONSTRAINT "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getName())); writer.print(" ON "); writer.print(PgDiffUtils.getQuotedName( newConstraint.getTableName())); } writer.println(" IS NULL;"); } } } } /** * Creates a new instance of PgDiffConstraints. */ private PgDiffConstraints() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffFunctions.java000077500000000000000000000125651412634760000300450ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgFunction; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.io.PrintWriter; /** * Diffs functions. * * @author fordfrog */ public class PgDiffFunctions { /** * Outputs statements for new or modified functions. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createFunctions(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { // Add new functions and replace modified functions for (final PgFunction newFunction : newSchema.getFunctions()) { final PgFunction oldFunction; if (oldSchema == null) { oldFunction = null; } else { oldFunction = oldSchema.getFunction(newFunction.getSignature()); } if ((oldFunction == null) || !newFunction.equals( oldFunction, arguments.isIgnoreFunctionWhitespace())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(newFunction.getCreationSQL()); } } } /** * Outputs statements for dropping of functions that exist no more. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropFunctions(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } // Drop functions that exist no more for (final PgFunction oldFunction : oldSchema.getFunctions()) { if (!newSchema.containsFunction(oldFunction.getSignature())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(oldFunction.getDropSQL()); } } } /** * Outputs statements for function comments that have changed. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterComments(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (final PgFunction oldfunction : oldSchema.getFunctions()) { final PgFunction newFunction = newSchema.getFunction(oldfunction.getSignature()); if (newFunction == null) { continue; } if (oldfunction.getComment() == null && newFunction.getComment() != null || oldfunction.getComment() != null && newFunction.getComment() != null && !oldfunction.getComment().equals( newFunction.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON FUNCTION "); writer.print(PgDiffUtils.getQuotedName(newFunction.getName())); writer.print('('); boolean addComma = false; for (final PgFunction.Argument argument : newFunction.getArguments()) { if (addComma) { writer.print(", "); } else { addComma = true; } writer.print(argument.getDeclaration(false)); } writer.print(") IS "); writer.print(newFunction.getComment()); writer.println(';'); } else if (oldfunction.getComment() != null && newFunction.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON FUNCTION "); writer.print(PgDiffUtils.getQuotedName(newFunction.getName())); writer.print('('); boolean addComma = false; for (final PgFunction.Argument argument : newFunction.getArguments()) { if (addComma) { writer.print(", "); } else { addComma = true; } writer.print(argument.getDeclaration(false)); } writer.println(") IS NULL;"); } } } /** * Creates a new instance of PgDiffFunctions. */ private PgDiffFunctions() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffIndexes.java000077500000000000000000000150761412634760000274740ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgIndex; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTable; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Diffs indexes. * * @author fordfrog */ public class PgDiffIndexes { /** * Outputs statements for creation of new indexes. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createIndexes(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final String newTableName = newTable.getName(); // Add new indexes if (oldSchema == null) { for (PgIndex index : newTable.getIndexes()) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(index.getCreationSQL()); } } else { for (PgIndex index : getNewIndexes( oldSchema.getTable(newTableName), newTable)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(index.getCreationSQL()); } } } } /** * Outputs statements for dropping indexes that exist no more. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropIndexes(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final String newTableName = newTable.getName(); final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTableName); } // Drop indexes that do not exist in new schema or are modified for (final PgIndex index : getDropIndexes(oldTable, newTable)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(index.getDropSQL()); } } } /** * Returns list of indexes that should be dropped. * * @param oldTable original table * @param newTable new table * * @return list of indexes that should be dropped * * @todo Indexes that are depending on a removed field should not be added * to drop because they are already removed. */ private static List getDropIndexes(final PgTable oldTable, final PgTable newTable) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newTable != null && oldTable != null) { for (final PgIndex index : oldTable.getIndexes()) { if (!newTable.containsIndex(index.getName()) || !newTable.getIndex(index.getName()).equals(index)) { list.add(index); } } } return list; } /** * Returns list of indexes that should be added. * * @param oldTable original table * @param newTable new table * * @return list of indexes that should be added */ private static List getNewIndexes(final PgTable oldTable, final PgTable newTable) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newTable != null) { if (oldTable == null) { for (final PgIndex index : newTable.getIndexes()) { list.add(index); } } else { for (final PgIndex index : newTable.getIndexes()) { if (!oldTable.containsIndex(index.getName()) || !oldTable.getIndex(index.getName()). equals(index)) { list.add(index); } } } } return list; } /** * Outputs statements for index comments that have changed. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterComments(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (final PgIndex oldIndex : oldSchema.getIndexes()) { final PgIndex newIndex = newSchema.getIndex(oldIndex.getName()); if (newIndex == null) { continue; } if (oldIndex.getComment() == null && newIndex.getComment() != null || oldIndex.getComment() != null && newIndex.getComment() != null && !oldIndex.getComment().equals( newIndex.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON INDEX "); writer.print( PgDiffUtils.getQuotedName(newIndex.getName())); writer.print(" IS "); writer.print(newIndex.getComment()); writer.println(';'); } else if (oldIndex.getComment() != null && newIndex.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON INDEX "); writer.print( PgDiffUtils.getQuotedName(newIndex.getName())); writer.println(" IS NULL;"); } } } /** * Creates a new instance of PgDiffIndexes. */ private PgDiffIndexes() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffPolicies.java000066400000000000000000000167021412634760000276360ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.*; import java.io.PrintWriter; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Iterator; public class PgDiffPolicies { public static void createPolicies(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final String newTableName = newTable.getName(); final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTableName); } for (final PgPolicy policy : newTable.getPolicies()) { PgPolicy oldPolicy = oldTable != null?oldTable.getPolicy(policy.getName()):null; if(oldPolicy == null){ searchPathHelper.outputSearchPath(writer); createPolicySQL(writer, policy); } } } } public static void alterPolicies(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final String newTableName = newTable.getName(); if (oldSchema != null) { final PgTable oldTable = oldSchema.getTable(newTableName); if (oldTable != null){ for (final PgPolicy policy : oldTable.getPolicies()) { PgPolicy newPolicy = newTable.getPolicy(policy.getName()); if(newPolicy != null){ // ALTER POLICY doesn't support changing command(ALL, // SELECT..) so we drop it and create it String newCommand = newPolicy.getCommand(); String oldCommand = policy.getCommand(); if(newCommand != null && oldCommand != null && !newCommand.equals(oldCommand)){ searchPathHelper.outputSearchPath(writer); dropPolicySQL(writer, newPolicy); createPolicySQL(writer, newPolicy); } else if ( (policy.getUsing() == null && newPolicy.getUsing() != null) ||(policy.getUsing() != null && newPolicy.getUsing() == null) ||(policy.getUsing() != null && newPolicy.getUsing() != null && !policy.getUsing().equals(newPolicy.getUsing())) ){ searchPathHelper.outputSearchPath(writer); alterPolicySQL(writer, newPolicy); } else if ( (policy.getWithCheck() == null && newPolicy.getWithCheck() != null) ||(policy.getWithCheck() != null && newPolicy.getWithCheck() == null) ||(policy.getWithCheck() != null && newPolicy.getWithCheck() != null && !policy.getWithCheck().equals(newPolicy.getWithCheck())) ){ searchPathHelper.outputSearchPath(writer); alterPolicySQL(writer, newPolicy); } else { List tempOldRoles = new ArrayList(policy.getRoles()); boolean equalRoles = newPolicy.getRoles().containsAll(policy.getRoles()) && policy.getRoles().containsAll(newPolicy.getRoles()); if(!equalRoles){ searchPathHelper.outputSearchPath(writer); alterPolicySQL(writer, newPolicy); } } } } } } } } public static void dropPolicies(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final String newTableName = newTable.getName(); if (oldSchema != null) { final PgTable oldTable = oldSchema.getTable(newTableName); if (oldTable != null){ for (final PgPolicy policy : oldTable.getPolicies()) { if(newTable.getPolicy(policy.getName()) == null){ searchPathHelper.outputSearchPath(writer); dropPolicySQL(writer, policy); } } } } } } private static void createPolicySQL(final PrintWriter writer, final PgPolicy policy){ writer.print("CREATE POLICY " + PgDiffUtils.getQuotedName(policy.getName()) + " ON " + PgDiffUtils.getQuotedName(policy.getTableName())); writer.print(" FOR " + policy.getCommand()); String roles = ""; writer.print(" TO "); for (Iterator iterator = policy.getRoles().iterator(); iterator.hasNext();) roles += iterator.next() + (iterator.hasNext()? ", " : ""); writer.print(roles); if (policy.getUsing() != null){ writer.println(); writer.println("USING ("); writer.print(" "); writer.println(policy.getUsing()); writer.print(")"); } if (policy.getWithCheck() != null){ writer.println(); writer.println("WITH CHECK ("); writer.print(" "); writer.println(policy.getWithCheck()); writer.print(")"); } writer.println(";"); } private static void alterPolicySQL(final PrintWriter writer, final PgPolicy policy){ writer.print("ALTER POLICY " + PgDiffUtils.getQuotedName(policy.getName()) + " ON " + PgDiffUtils.getQuotedName(policy.getTableName())); String roles = ""; writer.print(" TO "); for (Iterator iterator = policy.getRoles().iterator(); iterator.hasNext();) roles += iterator.next() + (iterator.hasNext()? ", " : ""); writer.print(roles); if (policy.getUsing() != null){ writer.println(); writer.println("USING ("); writer.print(" "); writer.println(policy.getUsing()); writer.print(")"); } if (policy.getWithCheck() != null){ writer.println(); writer.println("WITH CHECK ("); writer.print(" "); writer.println(policy.getWithCheck()); writer.print(")"); } writer.println(";"); } private static void dropPolicySQL(final PrintWriter writer, final PgPolicy policy){ writer.println("DROP POLICY " + PgDiffUtils.getQuotedName(policy.getName()) + " ON " + PgDiffUtils.getQuotedName(policy.getTableName()) + ";"); } private PgDiffPolicies() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffProcedures.java000066400000000000000000000126641412634760000302050ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgProcedure; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.io.PrintWriter; /** * Diffs procedures. * * @author jalissonmello */ public class PgDiffProcedures { /** * Outputs statements for new or modified procedures. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createProducedures(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { // Add new procedures and replace modified procedures for (final PgProcedure newProcedure : newSchema.getProcedures()) { final PgProcedure oldProcedure; if (oldSchema == null) { oldProcedure = null; } else { oldProcedure = oldSchema.getProcedure(newProcedure.getSignature()); } if ((oldProcedure == null) || !newProcedure.equals( oldProcedure, arguments.isIgnoreFunctionWhitespace())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(newProcedure.getCreationSQL()); } } } /** * Outputs statements for dropping of procedures that exist no more. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropPocedures(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } // Drop procedures that exist no more for (final PgProcedure oldProcedure : oldSchema.getProcedures()) { if (!newSchema.containsProcedure(oldProcedure.getSignature())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(oldProcedure.getDropSQL()); } } } /** * Outputs statements for procedure comments that have changed. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterComments(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (final PgProcedure oldprocedure : oldSchema.getProcedures()) { final PgProcedure newProcedure = newSchema.getProcedure(oldprocedure.getSignature()); if (newProcedure == null) { continue; } if (oldprocedure.getComment() == null && newProcedure.getComment() != null || oldprocedure.getComment() != null && newProcedure.getComment() != null && !oldprocedure.getComment().equals( newProcedure.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON PROCEDURE "); writer.print(PgDiffUtils.getQuotedName(newProcedure.getName())); writer.print('('); boolean addComma = false; for (final PgProcedure.Argument argument : newProcedure.getArguments()) { if (addComma) { writer.print(", "); } else { addComma = true; } writer.print(argument.getDeclaration(false)); } writer.print(") IS "); writer.print(newProcedure.getComment()); writer.println(';'); } else if (oldprocedure.getComment() != null && newProcedure.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON PROCEDURE "); writer.print(PgDiffUtils.getQuotedName(newProcedure.getName())); writer.print('('); boolean addComma = false; for (final PgProcedure.Argument argument : newProcedure.getArguments()) { if (addComma) { writer.print(", "); } else { addComma = true; } writer.print(argument.getDeclaration(false)); } writer.println(") IS NULL;"); } } } /** * Creates a new instance of PgDiffProcedures. */ private PgDiffProcedures() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffRules.java000066400000000000000000000105401412634760000271530ustar00rootroot00000000000000/** * Copyright 2018 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgRelation; import cz.startnet.utils.pgdiff.schema.PgRule; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgType; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; /** * Diffs rules. * * @author jalissonmello */ public class PgDiffRules { /** * Outputs statements for creation of new triggers. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createRules(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { for (final PgRelation newRelation : newSchema.getRels()) { final PgRelation oldRelation; if (oldSchema == null) { oldRelation = null; } else { oldRelation = oldSchema.getRelation(newRelation.getName()); } // Add new rules for (final PgRule rule : getNewRules(oldRelation, newRelation)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(rule.getCreationSQL()); } } } /** * Outputs statements for dropping rules. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropRules(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { for (final PgRelation newRelation : newSchema.getRels()) { final PgRelation oldRelation; if (oldSchema == null) { oldRelation = null; } else { oldRelation = oldSchema.getRelation(newRelation.getName()); } // Drop rules that no more exist or are modified for (final PgRule rule : dropRules(oldRelation, newRelation)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(rule.getDropSQL()); } } } /** * Returns list of rules that should be dropped. * * @param oldRelation original relation * @param newRelation new relation * * @return list of rules that should be dropped */ private static List dropRules(final PgRelation oldRelation, final PgRelation newRelation) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newRelation != null && oldRelation != null) { final List newRules = newRelation.getRules(); for (final PgRule oldRule : oldRelation.getRules()) { if (!newRules.contains(oldRule)) { list.add(oldRule); } } } return list; } /** * Returns list of rules that should be added. * * @param oldRelation original relation * @param newRelation new relation * * @return list of rules that should be added */ private static List getNewRules(final PgRelation oldRelation, final PgRelation newRelation) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newRelation != null) { if (oldRelation == null) { list.addAll(newRelation.getRules()); } else { for (final PgRule newRule : newRelation.getRules()) { if (!oldRelation.getRules().contains(newRule)) { list.add(newRule); } } } } return list; } /** * Creates a new instance of PgDiffRules. */ private PgDiffRules() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffSequences.java000077500000000000000000000341131412634760000300210ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgSequence; import cz.startnet.utils.pgdiff.schema.PgSequencePrivilege; import java.io.PrintWriter; /** * Diffs sequences. * * @author fordfrog */ public class PgDiffSequences { /** * Outputs statements for creation of new sequences. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createSequences(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { // Add new sequences for (final PgSequence sequence : newSchema.getSequences()) { if (oldSchema == null || !oldSchema.containsSequence(sequence.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(sequence.getCreationSQL()); for (PgSequencePrivilege sequencePrivilege : sequence .getPrivileges()) { writer.println("REVOKE ALL ON SEQUENCE " + PgDiffUtils.getQuotedName(sequence.getName()) + " FROM " + sequencePrivilege.getRoleName() + ";"); if (!"".equals(sequencePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + sequencePrivilege.getPrivilegesSQL(true) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(sequence.getName()) + " TO " + sequencePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(sequencePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + sequencePrivilege.getPrivilegesSQL(false) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(sequence.getName()) + " TO " + sequencePrivilege.getRoleName() + ";"); } } } } } /** * Outputs statements for altering of new sequences. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterCreatedSequences(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { // Alter created sequences for (final PgSequence sequence : newSchema.getSequences()) { if ((oldSchema == null || !oldSchema.containsSequence(sequence.getName())) && sequence.getOwnedBy() != null && !sequence.getOwnedBy().isEmpty()) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(sequence.getOwnedBySQL()); } } } /** * Outputs statements for dropping of sequences that do not exist anymore. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropSequences(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } // Drop sequences that do not exist in new schema for (final PgSequence sequence : oldSchema.getSequences()) { if (!newSchema.containsSequence(sequence.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(sequence.getDropSQL()); } } } /** * Outputs statement for modified sequences. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterSequences(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } final StringBuilder sbSQL = new StringBuilder(100); for (final PgSequence newSequence : newSchema.getSequences()) { final PgSequence oldSequence = oldSchema.getSequence(newSequence.getName()); if (oldSequence == null) { continue; } sbSQL.setLength(0); final String oldDataType=oldSequence.getDataType(); final String newDataType=newSequence.getDataType(); if (newDataType != null && !newDataType.equals(oldDataType)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tAS "); sbSQL.append(newDataType); } final String oldIncrement = oldSequence.getIncrement(); final String newIncrement = newSequence.getIncrement(); if (newIncrement != null && !newIncrement.equals(oldIncrement)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tINCREMENT BY "); sbSQL.append(newIncrement); } final String oldMinValue = oldSequence.getMinValue(); final String newMinValue = newSequence.getMinValue(); if (newMinValue == null && oldMinValue != null) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tNO MINVALUE"); } else if (newMinValue != null && !newMinValue.equals(oldMinValue)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tMINVALUE "); sbSQL.append(newMinValue); } final String oldMaxValue = oldSequence.getMaxValue(); final String newMaxValue = newSequence.getMaxValue(); if (newMaxValue == null && oldMaxValue != null) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tNO MAXVALUE"); } else if (newMaxValue != null && !newMaxValue.equals(oldMaxValue)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tMAXVALUE "); sbSQL.append(newMaxValue); } if (!arguments.isIgnoreStartWith()) { final String oldStart = oldSequence.getStartWith(); final String newStart = newSequence.getStartWith(); if (newStart != null && !newStart.equals(oldStart)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tRESTART WITH "); sbSQL.append(newStart); } } final String oldCache = oldSequence.getCache(); final String newCache = newSequence.getCache(); if (newCache != null && !newCache.equals(oldCache)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tCACHE "); sbSQL.append(newCache); } final boolean oldCycle = oldSequence.isCycle(); final boolean newCycle = newSequence.isCycle(); if (oldCycle && !newCycle) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tNO CYCLE"); } else if (!oldCycle && newCycle) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tCYCLE"); } final String oldOwnedBy = oldSequence.getOwnedBy(); final String newOwnedBy = newSequence.getOwnedBy(); if (newOwnedBy != null && !newOwnedBy.equals(oldOwnedBy)) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tOWNED BY "); sbSQL.append(newOwnedBy); } if (sbSQL.length() > 0) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName())); writer.print(sbSQL.toString()); writer.println(';'); } if (oldSequence.getComment() == null && newSequence.getComment() != null || oldSequence.getComment() != null && newSequence.getComment() != null && !oldSequence.getComment().equals( newSequence.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON SEQUENCE "); writer.print(PgDiffUtils.getQuotedName(newSequence.getName())); writer.print(" IS "); writer.print(newSequence.getComment()); writer.println(';'); } else if (oldSequence.getComment() != null && newSequence.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON SEQUENCE "); writer.print(newSequence.getName()); writer.println(" IS NULL;"); } alterPrivileges(writer, oldSequence, newSequence, searchPathHelper); } } private static void alterPrivileges(final PrintWriter writer, final PgSequence oldSequence, final PgSequence newSequence, final SearchPathHelper searchPathHelper) { boolean emptyLinePrinted = false; for (PgSequencePrivilege oldSequencePrivilege : oldSequence .getPrivileges()) { PgSequencePrivilege newSequencePrivilege = newSequence .getPrivilege(oldSequencePrivilege.getRoleName()); if (newSequencePrivilege == null) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON SEQUENCE " + PgDiffUtils.getQuotedName(oldSequence.getName()) + " FROM " + oldSequencePrivilege.getRoleName() + ";"); } else if (!oldSequencePrivilege.isSimilar(newSequencePrivilege)) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " FROM " + newSequencePrivilege.getRoleName() + ";"); if (!"".equals(newSequencePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newSequencePrivilege.getPrivilegesSQL(true) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " TO " + newSequencePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newSequencePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newSequencePrivilege.getPrivilegesSQL(false) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " TO " + newSequencePrivilege.getRoleName() + ";"); } } // else similar privilege will not be updated } for (PgSequencePrivilege newSequencePrivilege : newSequence .getPrivileges()) { PgSequencePrivilege oldSequencePrivilege = oldSequence .getPrivilege(newSequencePrivilege.getRoleName()); if (oldSequencePrivilege == null) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " FROM " + newSequencePrivilege.getRoleName() + ";"); if (!"".equals(newSequencePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newSequencePrivilege.getPrivilegesSQL(true) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " TO " + newSequencePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newSequencePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newSequencePrivilege.getPrivilegesSQL(false) + " ON SEQUENCE " + PgDiffUtils.getQuotedName(newSequence.getName()) + " TO " + newSequencePrivilege.getRoleName() + ";"); } } } } /** * Creates a new instance of PgDiffSequences. */ private PgDiffSequences() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffTables.java000077500000000000000000001225771412634760000273140ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgColumnPrivilege; import cz.startnet.utils.pgdiff.schema.PgColumnUtils; import cz.startnet.utils.pgdiff.schema.PgInheritedColumn; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTable; import cz.startnet.utils.pgdiff.schema.PgRelationPrivilege; import java.io.PrintWriter; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; /** * Diffs tables. * * @author fordfrog */ public class PgDiffTables { /** * Outputs statements for creation of clusters. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropClusters(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTable.getName()); } final String oldCluster; if (oldTable == null) { oldCluster = null; } else { oldCluster = oldTable.getClusterIndexName(); } final String newCluster = newTable.getClusterIndexName(); if (oldCluster != null && newCluster == null && newTable.containsIndex(oldCluster)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" SET WITHOUT CLUSTER;"); } } } /** * Outputs statements for dropping of clusters. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createClusters(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { final PgTable oldTable; if (oldSchema == null) { oldTable = null; } else { oldTable = oldSchema.getTable(newTable.getName()); } final String oldCluster; if (oldTable == null) { oldCluster = null; } else { oldCluster = oldTable.getClusterIndexName(); } final String newCluster = newTable.getClusterIndexName(); if ((oldCluster == null && newCluster != null) || (oldCluster != null && newCluster != null && newCluster.compareTo(oldCluster) != 0)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print(" CLUSTER ON "); writer.print(PgDiffUtils.getQuotedName(newCluster)); writer.println(';'); } } } /** * Outputs statements for altering tables. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterTables(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable newTable : newSchema.getTables()) { if (oldSchema == null || !oldSchema.containsTable(newTable.getName())) { continue; } final PgTable oldTable = oldSchema.getTable(newTable.getName()); updateTableColumns( writer, arguments, oldTable, newTable, searchPathHelper); checkWithOIDS(writer, oldTable, newTable, searchPathHelper); checkInherits(writer, oldTable, newTable, newSchema, searchPathHelper); addInheritedColumnDefaults(writer, arguments, oldTable, newTable, searchPathHelper); checkTablespace(writer, oldTable, newTable, searchPathHelper); addAlterStatistics(writer, oldTable, newTable, searchPathHelper); addAlterStorage(writer, oldTable, newTable, searchPathHelper); alterComments(writer, oldTable, newTable, searchPathHelper); alterOwnerTo(writer, oldTable, newTable, searchPathHelper); alterPrivileges(writer, oldTable, newTable, searchPathHelper); alterPrivilegesColumns(writer, oldTable, newTable, searchPathHelper); alterRLS(writer, oldTable, newTable, searchPathHelper); } } /** * Generate the needed alter table xxx set statistics when needed. * * @param writer writer the output should be written to * @param oldTable original table * @param newTable new table * @param searchPathHelper search path helper */ private static void addAlterStatistics(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { @SuppressWarnings("CollectionWithoutInitialCapacity") final Map stats = new HashMap(); for (final PgColumn newColumn : newTable.getColumns()) { final PgColumn oldColumn = oldTable.getColumn(newColumn.getName()); if (oldColumn != null) { final Integer oldStat = oldColumn.getStatistics(); final Integer newStat = newColumn.getStatistics(); Integer newStatValue = null; if (newStat != null && (oldStat == null || !newStat.equals(oldStat))) { newStatValue = newStat; } else if (oldStat != null && newStat == null) { newStatValue = Integer.valueOf(-1); } if (newStatValue != null) { stats.put(newColumn.getName(), newStatValue); } } } for (final Map.Entry entry : stats.entrySet()) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE ONLY "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print(" ALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(entry.getKey())); writer.print(" SET STATISTICS "); writer.print(entry.getValue()); writer.println(';'); } } /** * Generate the needed alter table xxx set storage when needed. * * @param writer writer the output should be written to * @param oldTable original table * @param newTable new table * @param searchPathHelper search path helper */ private static void addAlterStorage(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { for (final PgColumn newColumn : newTable.getColumns()) { final PgColumn oldColumn = oldTable.getColumn(newColumn.getName()); final String oldStorage = (oldColumn == null || oldColumn.getStorage() == null || oldColumn.getStorage().isEmpty()) ? null : oldColumn.getStorage(); final String newStorage = (newColumn.getStorage() == null || newColumn.getStorage().isEmpty()) ? null : newColumn.getStorage(); if (newStorage == null && oldStorage != null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(MessageFormat.format(Resources.getString( "WarningUnableToDetermineStorageType"), newTable.getName() + '.' + newColumn.getName())); continue; } if (newStorage == null || newStorage.equalsIgnoreCase(oldStorage)) { continue; } searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE ONLY "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print(" ALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(newColumn.getName())); writer.print(" SET STORAGE "); writer.print(newStorage); writer.print(';'); } } /** * Adds statements for creation of new columns to the list of statements. * * @param statements list of statements * @param arguments object containing arguments settings * @param oldTable original table * @param newTable new table * @param dropDefaultsColumns list for storing columns for which default * value should be dropped * @param generatedColumns list for storing generated columns */ private static void addCreateTableColumns(final List statements, final PgDiffArguments arguments, final PgTable oldTable, final PgTable newTable, final List dropDefaultsColumns, final List generatedColumns ) { for (final PgColumn column : newTable.getColumns()) { if (!oldTable.containsColumn(column.getName())) { statements.add("\tADD COLUMN "+ PgDiffUtils.getCreateIfNotExists() + column.getFullDefinition(arguments.isAddDefaults())); if (arguments.isAddDefaults() && !column.getNullValue() && (column.getDefaultValue() == null || column.getDefaultValue().isEmpty())) { dropDefaultsColumns.add(column); } if (Objects.nonNull(column.getGenerated())){ generatedColumns.add(column); } } } } /** * Adds statements for removal of columns to the list of statements. * * @param statements list of statements * @param oldTable original table * @param newTable new table */ private static void addDropTableColumns(final List statements, final PgTable oldTable, final PgTable newTable) { for (final PgColumn column : oldTable.getColumns()) { if (!newTable.containsColumn(column.getName())) { statements.add("\tDROP COLUMN " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(column.getName())); } } } /** * Adds statements for modification of columns to the list of statements. * * @param statements list of statements * @param arguments object containing arguments settings * @param oldTable original table * @param newTable new table * @param dropDefaultsColumns list for storing columns for which default * value should be dropped */ private static void addModifyTableColumns(final List statements, final PgDiffArguments arguments, final PgTable oldTable, final PgTable newTable, final List dropDefaultsColumns) { for (final PgColumn newColumn : newTable.getColumns()) { if (!oldTable.containsColumn(newColumn.getName())) { continue; } final PgColumn oldColumn = oldTable.getColumn(newColumn.getName()); final String newColumnName = PgDiffUtils.getQuotedName(newColumn.getName()); if (!oldColumn.getType().equals(newColumn.getType())) { statements.add("\tALTER COLUMN " + newColumnName + " TYPE " + newColumn.getType() + " USING " + newColumnName + "::" + newColumn.getType() + " /* " + MessageFormat.format( Resources.getString("TypeParameterChange"), newTable.getName(), oldColumn.getType(), newColumn.getType()) + " */"); } final String oldDefault = (oldColumn.getDefaultValue() == null) ? "" : oldColumn.getDefaultValue(); final String newDefault = (newColumn.getDefaultValue() == null) ? "" : newColumn.getDefaultValue(); if (!oldDefault.equals(newDefault)) { if (newDefault.length() == 0) { statements.add("\tALTER COLUMN " + newColumnName + " DROP DEFAULT"); } else { statements.add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + newDefault); } } if (oldColumn.getNullValue() != newColumn.getNullValue()) { if (newColumn.getNullValue()) { statements.add("\tALTER COLUMN " + newColumnName + " DROP NOT NULL"); } else { if (arguments.isAddDefaults()) { final String defaultValue = PgColumnUtils.getDefaultValue( newColumn.getType()); if (defaultValue != null) { statements.add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + defaultValue); dropDefaultsColumns.add(newColumn); } } statements.add("\tALTER COLUMN " + newColumnName + " SET NOT NULL"); } } } } /** * Checks whether there is a discrepancy in INHERITS for original and new * table. * * @param writer writer the output should be written to * @param oldTable original table * @param newTable new table * @param newSchema new schema * @param searchPathHelper search path helper */ private static void checkInherits(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final Pair inheritPairO : oldTable.getInherits()) { final String schemaName = inheritPairO.getL(); final String tableName = inheritPairO.getR(); boolean isFound = false; for (final Pair inheritPairN : newTable.getInherits()) { if(schemaName.equals(inheritPairN.getL()) && tableName.equals(inheritPairN.getR())) { isFound = true; break; } } if (!isFound) { String inheritTableName = null; if(newSchema.getName().equals(schemaName)){ inheritTableName = PgDiffUtils.getQuotedName(tableName); } else { inheritTableName = String.format("%s.%s",PgDiffUtils.getQuotedName(schemaName),PgDiffUtils.getQuotedName(tableName)); } searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(newTable.getName())); writer.println("\tNO INHERIT " + inheritTableName + ';'); } } for (final Pair inheritPairN : newTable.getInherits()) { final String schemaName = inheritPairN.getL(); final String tableName = inheritPairN.getR(); boolean isFound = false; for (final Pair inheritPairO : oldTable.getInherits()) { if(schemaName.equals(inheritPairO.getL()) && tableName.equals(inheritPairO.getR())) { isFound = true; break; } } if (!isFound) { String inheritTableName = null; if(newSchema.getName().equals(schemaName)){ inheritTableName = PgDiffUtils.getQuotedName(tableName); } else { inheritTableName = String.format("%s.%s",PgDiffUtils.getQuotedName(schemaName),PgDiffUtils.getQuotedName(tableName)); } searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(newTable.getName())); writer.println("\tINHERIT " + inheritTableName + ';'); } } } /** * Outputs statements for defaults of tables who's column belongs to * an inherited table. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldTable original table * @param newTable new table * @param searchPathHelper search path helper */ private static void addInheritedColumnDefaults(final PrintWriter writer, final PgDiffArguments arguments, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { for (final PgInheritedColumn newColumn : newTable.getInheritedColumns()) { if (!oldTable.containsInheritedColumn(newColumn.getInheritedColumn().getName())) { continue; } final PgInheritedColumn oldColumn = oldTable.getInheritedColumn(newColumn.getInheritedColumn().getName()); final String newColumnName = PgDiffUtils.getQuotedName(newColumn.getInheritedColumn().getName()); final String oldDefault = (oldColumn.getDefaultValue() == null) ? "" : oldColumn.getDefaultValue(); final String newDefault = (newColumn.getDefaultValue() == null) ? "" : newColumn.getDefaultValue(); if (!oldDefault.equals(newDefault)) { writer.println(); writer.print("ALTER TABLE ONLY "); writer.println(PgDiffUtils.getQuotedName(newTable.getName())); writer.print("\tALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(newColumn.getInheritedColumn().getName())); if (newDefault.length() == 0) { writer.print(" DROP DEFAULT"); } else { writer.print(" SET DEFAULT "); writer.print(newDefault); } writer.println(";"); } } } /** * Checks whether OIDS are dropped from the new table. There is no way to * add OIDS to existing table so we do not create SQL statement for addition * of OIDS but we issue warning. * * @param writer writer the output should be written to * @param oldTable original table * @param newTable new table * @param searchPathHelper search path helper */ private static void checkWithOIDS(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { if (oldTable.getWith() == null && newTable.getWith() == null || oldTable.getWith() != null && oldTable.getWith().equals(newTable.getWith())) { return; } searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(newTable.getName())); if (newTable.getWith() == null || "OIDS=false".equalsIgnoreCase(newTable.getWith())) { writer.println("\tSET WITHOUT OIDS;"); } else if ("OIDS".equalsIgnoreCase(newTable.getWith()) || "OIDS=true".equalsIgnoreCase(newTable.getWith())) { writer.println("\tSET WITH OIDS;"); } else { writer.println("\tSET " + newTable.getWith() + ";"); } } /** * Checks tablespace modification. * * @param writer writer * @param oldTable old table * @param newTable new table * @param searchPathHelper search path helper */ private static void checkTablespace(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { if (oldTable.getTablespace() == null && newTable.getTablespace() == null || oldTable.getTablespace() != null && oldTable.getTablespace().equals(newTable.getTablespace())) { return; } searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(newTable.getName())); writer.println("\tTABLESPACE " + newTable.getTablespace() + ';'); } /** * Outputs statements for creation of new tables. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createTables(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgTable table : newSchema.getTables()) { if (oldSchema == null || !oldSchema.containsTable(table.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(table.getCreationSQL(newSchema)); writer.println(); if (table.getOwnerTo() != null) { writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " OWNER TO " + table.getOwnerTo() + ";"); } for (PgRelationPrivilege tablePrivilege : table.getPrivileges()) { writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " FROM " + tablePrivilege.getRoleName() + ";"); if (!"".equals(tablePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + tablePrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " TO " + tablePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(tablePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + tablePrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " TO " + tablePrivilege.getRoleName() + ";"); } } if (table.hasRLSEnabled() != null && table.hasRLSEnabled()) { writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " ENABLE ROW LEVEL SECURITY;"); } if (table.hasRLSForced() != null && table.hasRLSForced()) { writer.println("ALTER TABLE " + PgDiffUtils.getQuotedName(table.getName()) + " FORCE ROW LEVEL SECURITY;"); } } } } /** * Outputs statements for dropping tables. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropTables(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (final PgTable table : oldSchema.getTables()) { if (!newSchema.containsTable(table.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(table.getDropSQL()); } } } /** * Outputs statements for addition, removal and modifications of table * columns. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldTable original table * @param newTable new table * @param searchPathHelper search path helper */ private static void updateTableColumns(final PrintWriter writer, final PgDiffArguments arguments, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List statements = new ArrayList(); @SuppressWarnings("CollectionWithoutInitialCapacity") final List dropDefaultsColumns = new ArrayList(); final List generatedColumns = new ArrayList(); addDropTableColumns(statements, oldTable, newTable); addCreateTableColumns( statements, arguments, oldTable, newTable, dropDefaultsColumns,generatedColumns); addModifyTableColumns( statements, arguments, oldTable, newTable, dropDefaultsColumns); if (!statements.isEmpty()) { final String quotedTableName = PgDiffUtils.getQuotedName(newTable.getName()); searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER " + ((newTable.isForeign()) ? "FOREIGN ":"") + "TABLE " + quotedTableName); for (int i = 0; i < statements.size(); i++) { writer.print(statements.get(i)); writer.println((i + 1) < statements.size() ? "," : ";"); } if (!dropDefaultsColumns.isEmpty()) { writer.println(); writer.println("ALTER " + ((newTable.isForeign()) ? "FOREIGN ":"") + "TABLE " + quotedTableName); for (int i = 0; i < dropDefaultsColumns.size(); i++) { writer.print("\tALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName( dropDefaultsColumns.get(i).getName())); writer.print(" DROP DEFAULT"); writer.println( (i + 1) < dropDefaultsColumns.size() ? "," : ";"); } } for (int i = 0; i < generatedColumns.size(); i++) { writer.println(); writer.print("ALTER TABLE "); writer.println(newTable.getName()); writer.println("\tALTER COLUMN " + PgDiffUtils.getQuotedName( generatedColumns.get(i).getName()) + " " + generatedColumns.get(i).getGenerated() +";"); } } } private static void alterPrivilegesColumns(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { boolean emptyLinePrinted = false; for (PgColumn newColumn : newTable.getColumns()) { final PgColumn oldColumn = oldTable.getColumn(newColumn.getName()); if (oldColumn != null) { for (PgColumnPrivilege oldColumnPrivilege : oldColumn .getPrivileges()) { PgColumnPrivilege newColumnPrivilege = newColumn .getPrivilege(oldColumnPrivilege.getRoleName()); if (newColumnPrivilege == null) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL (" + PgDiffUtils.getQuotedName(newColumn.getName()) + ") ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " FROM " + oldColumnPrivilege.getRoleName() + ";"); } } } if (newColumn != null) { for (PgColumnPrivilege newColumnPrivilege : newColumn .getPrivileges()) { PgColumnPrivilege oldColumnPrivilege = null; if (oldColumn != null) { oldColumnPrivilege = oldColumn .getPrivilege(newColumnPrivilege.getRoleName()); } if (!newColumnPrivilege.isSimilar(oldColumnPrivilege)) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL (" + PgDiffUtils.getQuotedName(newColumn.getName()) + ") ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " FROM " + newColumnPrivilege.getRoleName() + ";"); if (!"".equals(newColumnPrivilege.getPrivilegesSQL( true, PgDiffUtils.getQuotedName(newColumn.getName())))) { writer.println("GRANT " + newColumnPrivilege.getPrivilegesSQL(true, PgDiffUtils.getQuotedName(newColumn .getName())) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable .getName()) + " TO " + newColumnPrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newColumnPrivilege.getPrivilegesSQL( false, PgDiffUtils.getQuotedName(newColumn.getName())))) { writer.println("GRANT " + newColumnPrivilege.getPrivilegesSQL( false, PgDiffUtils .getQuotedName(newColumn .getName())) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable .getName()) + " TO " + newColumnPrivilege.getRoleName() + ";"); } } } } } } /** * Outputs statements for tables and columns for which comments have * changed. * * @param writer writer * @param oldTable old table * @param newTable new table * @param searchPathHelper search path helper */ private static void alterComments(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { if (oldTable.getComment() == null && newTable.getComment() != null || oldTable.getComment() != null && newTable.getComment() != null && !oldTable.getComment().equals(newTable.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print(" IS "); writer.print(newTable.getComment()); writer.println(';'); } else if (oldTable.getComment() != null && newTable.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" IS NULL;"); } for (final PgColumn newColumn : newTable.getColumns()) { final PgColumn oldColumn = oldTable.getColumn(newColumn.getName()); final String oldComment = oldColumn == null ? null : oldColumn.getComment(); final String newComment = newColumn.getComment(); if (newComment != null && (oldComment == null ? newComment != null : !oldComment.equals(newComment))) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON COLUMN "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print('.'); writer.print(PgDiffUtils.getQuotedName(newColumn.getName())); writer.print(" IS "); writer.print(newColumn.getComment()); writer.println(';'); } else if (oldComment != null && newComment == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON COLUMN "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.print('.'); writer.print(PgDiffUtils.getQuotedName(newColumn.getName())); writer.println(" IS NULL;"); } } } private static void alterPrivileges(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { boolean emptyLinePrinted = false; for (PgRelationPrivilege oldTablePrivilege : oldTable.getPrivileges()) { PgRelationPrivilege newTablePrivilege = newTable .getPrivilege(oldTablePrivilege.getRoleName()); if (newTablePrivilege == null) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(oldTable.getName()) + " FROM " + oldTablePrivilege.getRoleName() + ";"); } else if (!oldTablePrivilege.isSimilar(newTablePrivilege)) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " FROM " + newTablePrivilege.getRoleName() + ";"); if (!"".equals(newTablePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newTablePrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " TO " + newTablePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newTablePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newTablePrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " TO " + newTablePrivilege.getRoleName() + ";"); } } // else similar privilege will not be updated } for (PgRelationPrivilege newTablePrivilege : newTable.getPrivileges()) { PgRelationPrivilege oldTablePrivilege = oldTable .getPrivilege(newTablePrivilege.getRoleName()); if (oldTablePrivilege == null) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " FROM " + newTablePrivilege.getRoleName() + ";"); if (!"".equals(newTablePrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newTablePrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " TO " + newTablePrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newTablePrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newTablePrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " TO " + newTablePrivilege.getRoleName() + ";"); } } } } private static void alterOwnerTo(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { final String oldOwnerTo = oldTable.getOwnerTo(); final String newOwnerTo = newTable.getOwnerTo(); if (newOwnerTo != null && !newOwnerTo.equals(oldOwnerTo)) { writer.println(); writer.println("ALTER " + ((newTable.isForeign()) ? "FOREIGN ":"") + "TABLE " + PgDiffUtils.getQuotedName(newTable.getName()) + " OWNER TO " + newTable.getOwnerTo() + ";"); } } private static void alterRLS(final PrintWriter writer, final PgTable oldTable, final PgTable newTable, final SearchPathHelper searchPathHelper) { if ((oldTable.hasRLSEnabled() == null || oldTable.hasRLSEnabled() != null && !oldTable.hasRLSEnabled()) && newTable.hasRLSEnabled() != null && newTable.hasRLSEnabled()) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" ENABLE ROW LEVEL SECURITY;"); } if (oldTable.hasRLSEnabled() != null && oldTable.hasRLSEnabled() && (newTable.hasRLSEnabled() == null || newTable.hasRLSEnabled() != null && !newTable.hasRLSEnabled())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" DISABLE ROW LEVEL SECURITY;"); } if ((oldTable.hasRLSForced() == null || oldTable.hasRLSForced() != null && !oldTable.hasRLSForced()) && newTable.hasRLSForced() != null && newTable.hasRLSForced()) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" FORCE ROW LEVEL SECURITY;"); } if (oldTable.hasRLSForced() != null && oldTable.hasRLSForced() && (newTable.hasRLSForced() == null || newTable.hasRLSForced() != null && !newTable.hasRLSForced())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newTable.getName())); writer.println(" NO FORCE ROW LEVEL SECURITY;"); } } /** * Creates a new instance of PgDiffTables. */ private PgDiffTables() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffTriggers.java000077500000000000000000000221121412634760000276500ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgRelation; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTrigger; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Diffs triggers. * * @author fordfrog */ public class PgDiffTriggers { /** * Outputs statements for creation of new triggers. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createTriggers(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { for (final PgRelation newRelation : newSchema.getRels()) { final PgRelation oldRelation; if (oldSchema == null) { oldRelation = null; } else { oldRelation = oldSchema.getRelation(newRelation.getName()); } // Add new triggers for (final PgTrigger trigger : getNewTriggers(oldRelation, newRelation)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(trigger.getCreationSQL()); } } } /** * Outputs statements for dropping triggers. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropTriggers(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgRelation newRelation : newSchema.getRels()) { final PgRelation oldRelation; if (oldSchema == null) { oldRelation = null; } else { oldRelation = oldSchema.getRelation(newRelation.getName()); } // Drop triggers that no more exist or are modified for (final PgTrigger trigger : getDropTriggers(oldRelation, newRelation)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(trigger.getDropSQL()); } } } /** * Returns list of triggers that should be dropped. * * @param oldRelation original relation * @param newRelation new relation * * @return list of triggers that should be dropped */ private static List getDropTriggers(final PgRelation oldRelation, final PgRelation newRelation) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newRelation != null && oldRelation != null) { final List newTriggers = newRelation.getTriggers(); for (final PgTrigger oldTrigger : oldRelation.getTriggers()) { if (!newTriggers.contains(oldTrigger)) { list.add(oldTrigger); } } } return list; } /** * Returns list of triggers that should be added. * * @param oldRelation original relation * @param newRelation new relation * * @return list of triggers that should be added */ private static List getNewTriggers(final PgRelation oldRelation, final PgRelation newRelation) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newRelation != null) { if (oldRelation == null) { list.addAll(newRelation.getTriggers()); } else { for (final PgTrigger newTrigger : newRelation.getTriggers()) { if (!oldRelation.getTriggers().contains(newTrigger)) { list.add(newTrigger); } } } } return list; } /** * Outputs statements for trigger comments that have changed. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterComments(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (PgRelation oldRelation : oldSchema.getRels()) { final PgRelation newRelation = newSchema.getRelation(oldRelation.getName()); if (newRelation == null) { continue; } for (final PgTrigger oldTrigger : oldRelation.getTriggers()) { final PgTrigger newTrigger = newRelation.getTrigger(oldTrigger.getName()); if (newTrigger == null) { continue; } if (oldTrigger.getComment() == null && newTrigger.getComment() != null || oldTrigger.getComment() != null && newTrigger.getComment() != null && !oldTrigger.getComment().equals( newTrigger.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON TRIGGER "); writer.print( PgDiffUtils.getQuotedName(newTrigger.getName())); writer.print(" ON "); writer.print(PgDiffUtils.getQuotedName( newTrigger.getRelationName())); writer.print(" IS "); writer.print(newTrigger.getComment()); writer.println(';'); } else if (oldTrigger.getComment() != null && newTrigger.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON TRIGGER "); writer.print( PgDiffUtils.getQuotedName(newTrigger.getName())); writer.print(" ON "); writer.print(PgDiffUtils.getQuotedName( newTrigger.getRelationName())); writer.println(" IS NULL;"); } } } } /** * Creates a new instance of PgDiffTriggers. */ private PgDiffTriggers() { } /** * Returns list of triggers that should be enable or disable. * * @param oldRelation original relation * @param newRelation new relation * * @return list of triggers that should be added */ private static List getEnablerOrDisableTriggers(final PgRelation oldRelation, final PgRelation newRelation) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (newRelation != null) { for (final PgTrigger newTrigger : newRelation.getTriggers()) { if (Objects.nonNull(oldRelation)) { PgTrigger oldTrigger = oldRelation.getTrigger(newTrigger.getName()); if ((newTrigger.isDisable() && oldTrigger == null) || (oldTrigger != null && oldTrigger.isDisable() != newTrigger.isDisable())) { list.add(newTrigger); } } } } return list; } /** * Outputs statements for disable or enable triggers. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void disableOrEnableTriggers(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { for (final PgRelation newRelation : newSchema.getRels()) { final PgRelation oldRelation; if (oldSchema == null) { oldRelation = null; } else { oldRelation = oldSchema.getRelation(newRelation.getName()); } // Add new triggers for (final PgTrigger trigger : getEnablerOrDisableTriggers(oldRelation, newRelation)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(trigger.getDisableOrEnableSQL()); } } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffTypes.java000077500000000000000000000243361412634760000272000ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgColumnUtils; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgType; import java.io.PrintWriter; import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Diffs types. * * @author fordfrog */ public class PgDiffTypes { /** * Outputs statements for altering types. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterTypes(final PrintWriter writer, final PgDiffArguments arguments, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgType newType : newSchema.getTypes()) { if (oldSchema == null || !oldSchema.containsType(newType.getName())) { continue; } final PgType oldType = oldSchema.getType(newType.getName()); updateTypeColumns( writer, arguments, oldType, newType, searchPathHelper); } } /** * Adds statements for creation of new columns to the list of statements. * * @param statements list of statements * @param arguments object containing arguments settings * @param oldType original type * @param newType new type * @param dropDefaultsColumns list for storing columns for which default * value should be dropped */ private static void addCreateTypeColumns(final List statements, final PgDiffArguments arguments, final PgType oldType, final PgType newType, final List dropDefaultsColumns) { for (final PgColumn column : newType.getColumns()) { if (!oldType.containsColumn(column.getName())) { statements.add("\tADD ATTRIBUTE " + column.getFullDefinition(arguments.isAddDefaults())); if (arguments.isAddDefaults() && !column.getNullValue() && (column.getDefaultValue() == null || column.getDefaultValue().isEmpty())) { dropDefaultsColumns.add(column); } } } } /** * Adds statements for removal of columns to the list of statements. * * @param statements list of statements * @param oldType original type * @param newType new type */ private static void addDropTypeColumns(final List statements, final PgType oldType, final PgType newType) { for (final PgColumn column : oldType.getColumns()) { if (!newType.containsColumn(column.getName())) { statements.add("\tDROP ATTRIBUTE " + PgDiffUtils.getQuotedName(column.getName())); } } } /** * Adds statements for modification of columns to the list of statements. * * @param statements list of statements * @param arguments object containing arguments settings * @param oldType original type * @param newType new type * @param dropDefaultsColumns list for storing columns for which default * value should be dropped */ private static void addModifyTypeColumns(final List statements, final PgDiffArguments arguments, final PgType oldType, final PgType newType, final List dropDefaultsColumns) { for (final PgColumn newColumn : newType.getColumns()) { if (!oldType.containsColumn(newColumn.getName())) { continue; } final PgColumn oldColumn = oldType.getColumn(newColumn.getName()); final String newColumnName = PgDiffUtils.getQuotedName(newColumn.getName()); if (!oldColumn.getType().equals(newColumn.getType())) { statements.add("\tALTER ATTRIBUTE " + newColumnName + " TYPE " + newColumn.getType() + " /* " + MessageFormat.format( Resources.getString("TypeParameterChange"), newType.getName(), oldColumn.getType(), newColumn.getType()) + " */"); } final String oldDefault = (oldColumn.getDefaultValue() == null) ? "" : oldColumn.getDefaultValue(); final String newDefault = (newColumn.getDefaultValue() == null) ? "" : newColumn.getDefaultValue(); if (!oldDefault.equals(newDefault)) { if (newDefault.length() == 0) { statements.add("\tALTER ATTRIBUTE " + newColumnName + " DROP DEFAULT"); } else { statements.add("\tALTER ATTRIBUTE " + newColumnName + " SET DEFAULT " + newDefault); } } if (oldColumn.getNullValue() != newColumn.getNullValue()) { if (newColumn.getNullValue()) { statements.add("\tALTER ATTRIBUTE " + newColumnName + " DROP NOT NULL"); } else { if (arguments.isAddDefaults()) { final String defaultValue = PgColumnUtils.getDefaultValue( newColumn.getType()); if (defaultValue != null) { statements.add("\tALTER ATTRIBUTE " + newColumnName + " SET DEFAULT " + defaultValue); dropDefaultsColumns.add(newColumn); } } statements.add("\tALTER ATTRIBUTE " + newColumnName + " SET NOT NULL"); } } } } /** * Outputs statements for creation of new types. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createTypes(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { for (final PgType type : newSchema.getTypes()) { if (oldSchema == null || !oldSchema.containsType(type.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(type.getCreationSQL()); } } } /** * Outputs statements for dropping types. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropTypes(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { if (oldSchema == null) { return; } for (final PgType type : oldSchema.getTypes()) { if (!newSchema.containsType(type.getName())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(type.getDropSQL()); } } } /** * Outputs statements for addition, removal and modifications of type * columns. * * @param writer writer the output should be written to * @param arguments object containing arguments settings * @param oldType original type * @param newType new type * @param searchPathHelper search path helper */ private static void updateTypeColumns(final PrintWriter writer, final PgDiffArguments arguments, final PgType oldType, final PgType newType, final SearchPathHelper searchPathHelper) { @SuppressWarnings("CollectionWithoutInitialCapacity") final List statements = new ArrayList(); @SuppressWarnings("CollectionWithoutInitialCapacity") final List dropDefaultsColumns = new ArrayList(); addDropTypeColumns(statements, oldType, newType); addCreateTypeColumns( statements, arguments, oldType, newType, dropDefaultsColumns); addModifyTypeColumns( statements, arguments, oldType, newType, dropDefaultsColumns); if (!statements.isEmpty()) { final String quotedTypeName = PgDiffUtils.getQuotedName(newType.getName()); searchPathHelper.outputSearchPath(writer); writer.println(); writer.println("ALTER TYPE " + quotedTypeName); for (int i = 0; i < statements.size(); i++) { writer.print(statements.get(i)); writer.println((i + 1) < statements.size() ? "," : ";"); } if (!dropDefaultsColumns.isEmpty()) { writer.println(); writer.println("ALTER TYPE " + quotedTypeName); for (int i = 0; i < dropDefaultsColumns.size(); i++) { writer.print("\tALTER ATTRIBUTE "); writer.print(PgDiffUtils.getQuotedName( dropDefaultsColumns.get(i).getName())); writer.print(" DROP DEFAULT"); writer.println( (i + 1) < dropDefaultsColumns.size() ? "," : ";"); } } } } /** * Creates a new instance of PgDiffTypes. */ private PgDiffTypes() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffUtils.java000077500000000000000000000265021412634760000271710ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import java.util.Locale; /** * Utilities for creation of diffs. * * @author fordfrog */ public class PgDiffUtils { /** * Array of reserved keywords. Non-reserved keywords are excluded. Source * http://www.postgresql.org/docs/9.0/static/sql-keywords-appendix.html. */ private static final String[] KEYWORDS = new String[]{ "ABS", "ABSOLUTE", "ACTION", "ADD", "ADMIN", "AFTER", "AGGREGATE", "ALIAS", "ALL", "ALLOCATE", "ALTER", "ANALYSE", "ANALYZE", "AND", "ANY", "ARE", "ARRAY", "ARRAY_AGG", "AS", "ASC", "ASENSITIVE", "ASSERTION", "ASYMMETRIC", "AT", "ATOMIC", "AUTHORIZATION", "AVG", "BEFORE", "BEGIN", "BETWEEN", "BIGINT", "BINARY", "BIT", "BIT_LENGTH", "BLOB", "BOOLEAN", "BOTH", "BREADTH", "BY", "CALL", "CALLED", "CARDINALITY", "CASCADE", "CASCADED", "CASE", "CAST", "CATALOG", "CEIL", "CEILING", "CHAR", "CHARACTER", "CHARACTER_LENGTH", "CHAR_LENGTH", "CHECK", "CLASS", "CLOB", "CLOSE", "COALESCE", "COLLATE", "COLLATION", "COLLECT", "COLUMN", "COMMIT", "COMPLETION", "CONCURRENTLY", "CONDITION", "CONNECT", "CONNECTION", "CONSTRAINT", "CONSTRAINTS", "CONSTRUCTOR", "CONTINUE", "CONVERT", "CORR", "CORRESPONDING", "COUNT", "COVAR_POP", "COVAR_SAMP", "CREATE", "CROSS", "CUBE", "CUME_DIST", "CURRENT", "CURRENT_CATALOG", "CURRENT_DATE", "CURRENT_DEFAULT_TRANSFORM_GROUP", "CURRENT_PATH", "CURRENT_ROLE", "CURRENT_SCHEMA", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_TRANSFORM_GROUP_FOR_TYPE", "CURRENT_USER", "CURSOR", "CYCLE", "DATA", "DATALINK", "DATE", "DAY", "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULT", "DEFERRABLE", "DEFERRED", "DELETE", "DENSE_RANK", "DEPTH", "DEREF", "DESC", "DESCRIBE", "DESCRIPTOR", "DESTROY", "DESTRUCTOR", "DETERMINISTIC", "DIAGNOSTICS", "DICTIONARY", "DISCONNECT", "DISTINCT", "DLNEWCOPY", "DLPREVIOUSCOPY", "DLURLCOMPLETE", "DLURLCOMPLETEONLY", "DLURLCOMPLETEWRITE", "DLURLPATH", "DLURLPATHONLY", "DLURLPATHWRITE", "DLURLSCHEME", "DLURLSERVER", "DLVALUE", "DO", "DOMAIN", "DOUBLE", "DROP", "DYNAMIC", "EACH", "ELEMENT", "ELSE", "END", "END-EXEC", "EQUALS", "ESCAPE", "EVERY", "EXCEPT", "EXCEPTION", "EXEC", "EXECUTE", "EXISTS", "EXP", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FILTER", "FIRST", "FIRST_VALUE", "FLOAT", "FLOOR", "FOR", "FOREIGN", "FOUND", "FREE", "FREEZE", "FROM", "FULL", "FUNCTION", "FUSION", "GENERAL", "GET", "GLOBAL", "GO", "GOTO", "GRANT", "GROUP", "GROUPING", "HAVING", "HOLD", "HOST", "HOUR", "IDENTITY", "IGNORE", "ILIKE", "IMMEDIATE", "IMPORT", "IN", "INDICATOR", "INITIALIZE", "INITIALLY", "INNER", "INOUT", "INPUT", "INSENSITIVE", "INSERT", "INT", "INTEGER", "INTERSECT", "INTERSECTION", "INTERVAL", "INTO", "IS", "ISNULL", "ISOLATION", "ITERATE", "JOIN", "KEY", "LAG", "LANGUAGE", "LARGE", "LAST", "LAST_VALUE", "LATERAL", "LEAD", "LEADING", "LEFT", "LESS", "LEVEL", "LIKE", "LIKE_REGEX", "LIMIT", "LN", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", "LOCATOR", "LOWER", "MAP", "MATCH", "MAX", "MAX_CARDINALITY", "MEMBER", "MERGE", "METHOD", "MIN", "MINUTE", "MOD", "MODIFIES", "MODIFY", "MODULE", "MONTH", "MULTISET", "NAMES", "NATIONAL", "NATURAL", "NCHAR", "NCLOB", "NEW", "NEXT", "NO", "NONE", "NORMALIZE", "NOT", "NOTNULL", "NTH_VALUE", "NTILE", "NULL", "NULLIF", "NUMERIC", "OBJECT", "OCCURRENCES_REGEX", "OCTET_LENGTH", "OF", "OFF", "OFFSET", "OLD", "ON", "ONLY", "OPEN", "OPERATION", "OPTION", "OR", "ORDER", "ORDINALITY", "OUT", "OUTER", "OUTPUT", "OVER", "OVERLAPS", "OVERLAY", "PAD", "PARAMETER", "PARAMETERS", "PARTIAL", "PARTITION", "PATH", "PERCENTILE_CONT", "PERCENTILE_DISC", "PERCENT_RANK", "PLACING", "POSITION", "POSITION_REGEX", "POSTFIX", "POWER", "PRECISION", "PREFIX", "PREORDER", "PREPARE", "PRESERVE", "PRIMARY", "PRIOR", "PRIVILEGES", "PROCEDURE", "PUBLIC", "RANGE", "RANK", "READ", "READS", "REAL", "RECURSIVE", "REF", "REFERENCES", "REFERENCING", "REGR_AVGX", "REGR_AVGY", "REGR_COUNT", "REGR_INTERCEPT", "REGR_R2", "REGR_SLOPE", "REGR_SXX", "REGR_SXY", "REGR_SYY", "RELATIVE", "RELEASE", "RESTRICT", "RESULT", "RETURN", "RETURNING", "RETURNS", "REVOKE", "RIGHT", "ROLE", "ROLLBACK", "ROLLUP", "ROUTINE", "ROW", "ROWS", "ROW_NUMBER", "SAVEPOINT", "SCHEMA", "SCOPE", "SCROLL", "SEARCH", "SECOND", "SECTION", "SELECT", "SENSITIVE", "SEQUENCE", "SESSION", "SESSION_USER", "SET", "SETS", "SIMILAR", "SIZE", "SMALLINT", "SOME", "SPACE", "SPECIFIC", "SPECIFICTYPE", "SQL", "SQLCODE", "SQLERROR", "SQLEXCEPTION", "SQLSTATE", "SQLWARNING", "SQRT", "START", "STATE", "STATEMENT", "STATIC", "STDDEV_POP", "STDDEV_SAMP", "STRUCTURE", "SUBMULTISET", "SUBSTRING", "SUBSTRING_REGEX", "SUM", "SYMMETRIC", "SYSTEM", "SYSTEM_USER", "TABLE", "TABLESAMPLE", "TEMPORARY", "TERMINATE", "THAN", "THEN", "TIME", "TIMESTAMP", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING", "TRANSACTION", "TRANSLATE", "TRANSLATE_REGEX", "TRANSLATION", "TREAT", "TRIGGER", "TRIM", "TRIM_ARRAY", "TRUE", "TRUNCATE", "UESCAPE", "UNDER", "UNION", "UNIQUE", "UNKNOWN", "UNNEST", "UPDATE", "UPPER", "USAGE", "USER", "USING", "VALUE", "VALUES", "VARBINARY", "VARCHAR", "VARIABLE", "VARIADIC", "VARYING", "VAR_POP", "VAR_SAMP", "VERBOSE", "VIEW", "WHEN", "WHENEVER", "WHERE", "WIDTH_BUCKET", "WINDOW", "WITH", "WITHIN", "WITHOUT", "WORK", "WRITE", "XML", "XMLAGG", "XMLATTRIBUTES", "XMLBINARY", "XMLCAST", "XMLCOMMENT", "XMLCONCAT", "XMLDOCUMENT", "XMLELEMENT", "XMLEXISTS", "XMLFOREST", "XMLITERATE", "XMLNAMESPACES", "XMLPARSE", "XMLPI", "XMLQUERY", "XMLROOT", "XMLSERIALIZE", "XMLTABLE", "XMLTEXT", "XMLVALIDATE", "YEAR", "ZONE"}; /** * Determine if use CREATE IF NOT EXISTS OR DROP IF EXISTS where is possible */ private static boolean useIfExists; /** * If name contains only lower case characters and digits and is not * keyword, it is returned not quoted, otherwise the string is returned * quoted. * * @param name name * @param excludeKeywords whether check against keywords should be skipped * * @return quoted string if needed, otherwise not quoted string */ public static String getQuotedName(final String name, final boolean excludeKeywords) { if (name.indexOf('-') != -1 || name.indexOf('.') != -1) { return '"' + name + '"'; } for (int i = 0; i < name.length(); i++) { final char chr = name.charAt(i); if (Character.isUpperCase(chr)) { return '"' + name + '"'; } } if (excludeKeywords) { return name; } final String upperName = name.toUpperCase(Locale.ENGLISH); for (final String keyword : KEYWORDS) { if (keyword.equals(upperName)) { return '"' + name + '"'; } } return name; } /** * If name contains only lower case characters and digits and is not * keyword, it is returned not quoted, otherwise the string is returned * quoted. * * @param name name * * @return quoted string if needed, otherwise not quoted string */ public static String getQuotedName(final String name) { return getQuotedName(name, false); } /** * IF useIfExists is true return DROP IF NOT EXISTS * * * @return DROP IF NOT EXISTS STRING */ public static String getDropIfExists() { if (useIfExists) { return "IF EXISTS "; } return ""; } /** * IF useIfExists is true return IF NOT EXISTS * * * @return IF NOT EXISTS STRING */ public static String getCreateIfNotExists() { if (useIfExists) { return "IF NOT EXISTS "; } return ""; } public static void setUseExists(final boolean useExists) { useIfExists = useExists; } /** * Creates a new PgDiffUtils object. */ private PgDiffUtils() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/PgDiffViews.java000077500000000000000000000466231412634760000271740ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgColumnPrivilege; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgView; import cz.startnet.utils.pgdiff.schema.PgRelationPrivilege; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Diffs views. * * @author fordfrog */ public class PgDiffViews { /** * Outputs statements for creation of views. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void createViews(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { for (final PgView newView : newSchema.getViews()) { PgView oldView = null; if (Objects.nonNull(oldSchema)) { oldView = oldSchema.getView(newView.getName()); } if (oldSchema == null || !oldSchema.containsView(newView.getName()) || isViewModified(oldView, newView)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(newView.getCreationSQL()); if (newView.getOwnerTo() != null && oldView == null) { writer.println(); writer.println("ALTER VIEW " + PgDiffUtils.getQuotedName(newView.getName()) + " OWNER TO " + newView.getOwnerTo() + ";"); } for (PgRelationPrivilege viewPrivilege : newView.getPrivileges()) { writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " FROM " + viewPrivilege.getRoleName() + ";"); if (!"".equals(viewPrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + viewPrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + viewPrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(viewPrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + viewPrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + viewPrivilege.getRoleName() + ";"); } } } } } /** * Outputs statements for dropping views. * * @param writer writer the output should be written to * @param oldSchema original schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void dropViews(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper ) { if (oldSchema == null) { return; } for (final PgView oldView : oldSchema.getViews()) { final PgView newView = newSchema.getView(oldView.getName()); if (newView == null || isViewModified(oldView, newView)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.println(oldView.getDropSQL()); } } } /** * Returns true if either column names or query of the view has been * modified. * * @param oldView old view * @param newView new view * * @return true if view has been modified, otherwise false */ private static boolean isViewModified(final PgView oldView, final PgView newView) { if (!oldView.getQuery().trim().equals(newView.getQuery().trim())) return true; if (oldView.isMaterialized() != newView.isMaterialized()) return true; final List oldViewColumnNames = oldView.getDeclaredColumnNames(); final List newViewColumnNames = newView.getDeclaredColumnNames(); if (oldViewColumnNames != null && newViewColumnNames != null) { return !oldViewColumnNames.equals(newViewColumnNames); } else { // At least one of the two is null. Are both? return oldViewColumnNames != newViewColumnNames; } } /** * Outputs statements for altering view default values. * * @param writer writer * @param oldSchema old schema * @param newSchema new schema * @param searchPathHelper search path helper */ public static void alterViews(final PrintWriter writer, final PgSchema oldSchema, final PgSchema newSchema, final SearchPathHelper searchPathHelper) { if (oldSchema == null) { return; } for (final PgView oldView : oldSchema.getViews()) { final PgView newView = newSchema.getView(oldView.getName()); if (newView == null) { continue; } diffDefaultValues(writer, oldView, newView, searchPathHelper); if (oldView.getComment() == null && newView.getComment() != null || oldView.getComment() != null && newView.getComment() != null && !oldView.getComment().equals( newView.getComment())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON VIEW "); writer.print( PgDiffUtils.getQuotedName(newView.getName())); writer.print(" IS "); writer.print(newView.getComment()); writer.println(';'); } else if (oldView.getComment() != null && newView.getComment() == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON VIEW "); writer.print(PgDiffUtils.getQuotedName(newView.getName())); writer.println(" IS NULL;"); } final List columnNames = new ArrayList(newView.getColumns().size()); for (final PgColumn col : newView.getColumns()) { columnNames.add(col.getName()); } for (final PgColumn col : oldView.getColumns()) { if (!columnNames.contains(col.getName())) { columnNames.add(col.getName()); } } for (final String columnName : columnNames) { String oldComment = null; String newComment = null; PgColumn oldCol = oldView.getColumn(columnName); PgColumn newCol = newView.getColumn(columnName); if (oldCol != null) oldComment = oldCol.getComment(); if (newCol != null) newComment = newCol.getComment(); if (oldComment == null && newComment != null || oldComment != null && newComment != null && !oldComment.equals(newComment)) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON COLUMN "); writer.print(PgDiffUtils.getQuotedName(newView.getName())); writer.print('.'); writer.print(PgDiffUtils.getQuotedName(newCol.getName())); writer.print(" IS "); writer.print(newCol.getComment()); writer.println(';'); } else if (oldComment != null && newComment == null) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("COMMENT ON COLUMN "); writer.print(PgDiffUtils.getQuotedName(newView.getName())); writer.print('.'); writer.print(PgDiffUtils.getQuotedName(oldCol.getName())); writer.println(" IS NULL;"); } } if (oldView.getOwnerTo() != null && !newView.getOwnerTo().equals(oldView.getOwnerTo())) { writer.println(); writer.println("ALTER VIEW " + PgDiffUtils.getQuotedName(newView.getName()) + " OWNER TO " + newView.getOwnerTo() + ";"); } alterPrivileges(writer, oldView, newView, searchPathHelper); alterPrivilegesColumns(writer, oldView, newView, searchPathHelper); } } /** * Diffs default values in views. * * @param writer writer * @param oldView old view * @param newView new view * @param searchPathHelper search path helper */ private static void diffDefaultValues(final PrintWriter writer, final PgView oldView, final PgView newView, final SearchPathHelper searchPathHelper) { // modify defaults that are in old view for (final PgColumn oldCol : oldView.getColumns()) { if (oldCol.getDefaultValue() == null) continue; PgColumn newCol = newView.getColumn(oldCol.getName()); if (newCol != null && newCol.getDefaultValue() != null) { if (!oldCol.getDefaultValue().equals( newCol.getDefaultValue())) { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print( PgDiffUtils.getQuotedName(newView.getName())); writer.print(" ALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(newCol.getName())); writer.print(" SET DEFAULT "); writer.print(newCol.getDefaultValue()); writer.println(';'); } } else { searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newView.getName())); writer.print(" ALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(oldCol.getName())); writer.println(" DROP DEFAULT;"); } } // add new defaults for (final PgColumn newCol : newView.getColumns()) { PgColumn oldCol = oldView.getColumn(newCol.getName()); if ((oldCol != null && oldCol.getDefaultValue() != null) || newCol.getDefaultValue() == null) { continue; } searchPathHelper.outputSearchPath(writer); writer.println(); writer.print("ALTER TABLE "); writer.print(PgDiffUtils.getQuotedName(newView.getName())); writer.print(" ALTER COLUMN "); writer.print(PgDiffUtils.getQuotedName(newCol.getName())); writer.print(" SET DEFAULT "); writer.print(newCol.getDefaultValue()); writer.println(';'); } } private static void alterPrivileges(final PrintWriter writer, final PgView oldView, final PgView newView, final SearchPathHelper searchPathHelper) { boolean emptyLinePrinted = false; for (PgRelationPrivilege oldViewPrivilege : oldView.getPrivileges()) { PgRelationPrivilege newViewPrivilege = newView .getPrivilege(oldViewPrivilege.getRoleName()); if (newViewPrivilege == null) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(oldView.getName()) + " FROM " + oldViewPrivilege.getRoleName() + ";"); } else if (!oldViewPrivilege.isSimilar(newViewPrivilege)) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " FROM " + newViewPrivilege.getRoleName() + ";"); if (!"".equals(newViewPrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newViewPrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + newViewPrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newViewPrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newViewPrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + newViewPrivilege.getRoleName() + ";"); } } // else similar privilege will not be updated } for (PgRelationPrivilege newViewPrivilege : newView.getPrivileges()) { PgRelationPrivilege oldViewPrivilege = oldView .getPrivilege(newViewPrivilege.getRoleName()); if (oldViewPrivilege == null) { if (!emptyLinePrinted) { writer.println(); } writer.println("REVOKE ALL ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " FROM " + newViewPrivilege.getRoleName() + ";"); if (!"".equals(newViewPrivilege.getPrivilegesSQL(true))) { writer.println("GRANT " + newViewPrivilege.getPrivilegesSQL(true) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + newViewPrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newViewPrivilege.getPrivilegesSQL(false))) { writer.println("GRANT " + newViewPrivilege.getPrivilegesSQL(false) + " ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " TO " + newViewPrivilege.getRoleName() + ";"); } } } } private static void alterPrivilegesColumns(final PrintWriter writer, final PgView oldView, final PgView newView, final SearchPathHelper searchPathHelper) { boolean emptyLinePrinted = false; for (PgColumn newColumn : newView.getColumns()) { final PgColumn oldColumn = oldView.getColumn(newColumn.getName()); if (oldColumn != null) { for (PgColumnPrivilege oldColumnPrivilege : oldColumn .getPrivileges()) { PgColumnPrivilege newColumnPrivilege = newColumn .getPrivilege(oldColumnPrivilege.getRoleName()); if (newColumnPrivilege == null) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL (" + PgDiffUtils.getQuotedName(newColumn.getName()) + ") ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " FROM " + oldColumnPrivilege.getRoleName() + ";"); } } } if (newColumn != null) { for (PgColumnPrivilege newColumnPrivilege : newColumn .getPrivileges()) { PgColumnPrivilege oldColumnPrivilege = null; if (oldColumn != null) { oldColumnPrivilege = oldColumn .getPrivilege(newColumnPrivilege.getRoleName()); } if (!newColumnPrivilege.isSimilar(oldColumnPrivilege)) { if (!emptyLinePrinted) { emptyLinePrinted = true; writer.println(); } writer.println("REVOKE ALL (" + PgDiffUtils.getQuotedName(newColumn.getName()) + ") ON TABLE " + PgDiffUtils.getQuotedName(newView.getName()) + " FROM " + newColumnPrivilege.getRoleName() + ";"); if (!"".equals(newColumnPrivilege.getPrivilegesSQL( true, PgDiffUtils.getQuotedName(newColumn.getName())))) { writer.println("GRANT " + newColumnPrivilege.getPrivilegesSQL(true, PgDiffUtils.getQuotedName(newColumn .getName())) + " ON TABLE " + PgDiffUtils.getQuotedName(newView .getName()) + " TO " + newColumnPrivilege.getRoleName() + " WITH GRANT OPTION;"); } if (!"".equals(newColumnPrivilege.getPrivilegesSQL( false, PgDiffUtils.getQuotedName(newColumn.getName())))) { writer.println("GRANT " + newColumnPrivilege.getPrivilegesSQL( false, PgDiffUtils .getQuotedName(newColumn .getName())) + " ON TABLE " + PgDiffUtils.getQuotedName(newView .getName()) + " TO " + newColumnPrivilege.getRoleName() + ";"); } } } } } } /** * Creates a new instance of PgDiffViews. */ private PgDiffViews() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/Resources.java000066400000000000000000000013331412634760000267530ustar00rootroot00000000000000/** * Copyright 2010 StartNet s.r.o. */ package cz.startnet.utils.pgdiff; import java.util.ResourceBundle; /** * Utility class for accessing localized resources. * * @author fordfrog */ public class Resources { /** * Resource bundle. */ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("cz/startnet/utils/pgdiff/Resources"); /** * Returns string from resource bundle based on the key. * * @param key key * * @return string */ public static String getString(final String key) { return RESOURCE_BUNDLE.getString(key); } /** * Creates new instance of Resources. */ private Resources() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/SearchPathHelper.java000066400000000000000000000017501412634760000301660ustar00rootroot00000000000000/** * Copyright 2010 StartNet s.r.o. */ package cz.startnet.utils.pgdiff; import java.io.PrintWriter; /** * Helps to output search path only if it was not output yet. * * @author fordfrog */ public class SearchPathHelper { /** * Statement to output. */ private final String searchPath; /** * Flag determining whether the statement was already output. */ private boolean wasOutput; /** * Creates new instance of SearchPathHelper. * * @param searchPath {@link #searchPath} */ public SearchPathHelper(final String searchPath) { this.searchPath = searchPath; } /** * Outputs search path if it was not output yet. * * @param writer writer */ public void outputSearchPath(final PrintWriter writer) { if (!wasOutput && searchPath != null && !searchPath.isEmpty()) { writer.println(); writer.println(searchPath); wasOutput = true; } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/loader/000077500000000000000000000000001412634760000254045ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/loader/FileException.java000066400000000000000000000020171412634760000310050ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.loader; /** * Exception thrown if problem occurred while reading or writing file. * * @author fordfrog */ public class FileException extends RuntimeException { /** * Serial version uid. */ private static final long serialVersionUID = 1L; /** * Creates a new instance of {@code FileException} without detail message. */ public FileException() { } /** * Constructs an instance of {@code FileException} with the specified detail * message. * * @param msg the detail message */ public FileException(final String msg) { super(msg); } /** * Constructs an instance of {@code FileException} with the specified detail * message. * * @param msg the detail message * @param cause cause of the exception */ public FileException(final String msg, final Throwable cause) { super(msg, cause); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/loader/PgDumpLoader.java000077500000000000000000000512301412634760000305760ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.loader; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.parsers.AlterSequenceParser; import cz.startnet.utils.pgdiff.parsers.AlterRelationParser; import cz.startnet.utils.pgdiff.parsers.CommentParser; import cz.startnet.utils.pgdiff.parsers.CreateExtensionParser; import cz.startnet.utils.pgdiff.parsers.CreateFunctionParser; import cz.startnet.utils.pgdiff.parsers.CreateTypeParser; import cz.startnet.utils.pgdiff.parsers.CreateIndexParser; import cz.startnet.utils.pgdiff.parsers.CreateSchemaParser; import cz.startnet.utils.pgdiff.parsers.CreateSequenceParser; import cz.startnet.utils.pgdiff.parsers.CreateTableParser; import cz.startnet.utils.pgdiff.parsers.CreateTriggerParser; import cz.startnet.utils.pgdiff.parsers.CreateViewParser; import cz.startnet.utils.pgdiff.parsers.GrantRevokeParser; import cz.startnet.utils.pgdiff.parsers.CreatePolicyParser; import cz.startnet.utils.pgdiff.parsers.CreateProcedureParser; import cz.startnet.utils.pgdiff.parsers.CreateRuleParser; import cz.startnet.utils.pgdiff.schema.PgDatabase; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Loads PostgreSQL dump into classes. * * @author fordfrog */ public class PgDumpLoader { //NOPMD /** * Pattern for testing whether it is CREATE SCHEMA statement. */ private static final Pattern PATTERN_CREATE_SCHEMA = Pattern.compile( "^CREATE[\\s]+SCHEMA[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for parsing default schema (search_path). */ private static final Pattern PATTERN_DEFAULT_SCHEMA = Pattern.compile( "^SET[\\s]+search_path[\\s]*=[\\s]*\"?([^,\\s\"]+)\"?" + "(?:,[\\s]+.*)?;$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE TABLE statement. */ private static final Pattern PATTERN_CREATE_TABLE = Pattern.compile( "^CREATE[\\s]+(UNLOGGED\\s|FOREIGN\\s)*TABLE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE VIEW or CREATE MATERIALIZED * VIEW statement. */ private static final Pattern PATTERN_CREATE_VIEW = Pattern.compile( "^CREATE[\\s]+(?:OR[\\s]+REPLACE[\\s]+)?(?:MATERIALIZED[\\s]+)?VIEW[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is ALTER TABLE statement. */ private static final Pattern PATTERN_ALTER_TABLE = Pattern.compile("^ALTER[\\s](FOREIGN)*TABLE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE SEQUENCE statement. */ private static final Pattern PATTERN_CREATE_SEQUENCE = Pattern.compile( "^CREATE[\\s]+SEQUENCE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is ALTER SEQUENCE statement. */ private static final Pattern PATTERN_ALTER_SEQUENCE = Pattern.compile("^ALTER[\\s]+SEQUENCE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE INDEX statement. */ private static final Pattern PATTERN_CREATE_INDEX = Pattern.compile( "^CREATE[\\s]+(?:UNIQUE[\\s]+)?INDEX[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is SELECT statement. */ private static final Pattern PATTERN_SELECT = Pattern.compile( "^SELECT[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is INSERT INTO statement. */ private static final Pattern PATTERN_INSERT_INTO = Pattern.compile( "^INSERT[\\s]+INTO[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is UPDATE statement. */ private static final Pattern PATTERN_UPDATE = Pattern.compile( "^UPDATE[\\s].*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is DELETE FROM statement. */ private static final Pattern PATTERN_DELETE_FROM = Pattern.compile( "^DELETE[\\s]+FROM[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE TRIGGER statement. */ private static final Pattern PATTERN_CREATE_TRIGGER = Pattern.compile( "^CREATE[\\s]+TRIGGER[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE FUNCTION or CREATE OR REPLACE * FUNCTION statement. */ private static final Pattern PATTERN_CREATE_FUNCTION = Pattern.compile( "^CREATE[\\s]+(?:OR[\\s]+REPLACE[\\s]+)?FUNCTION[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE PROCEDURE or CREATE OR REPLACE * PROCEDURE statement. */ private static final Pattern PATTERN_CREATE_PROCEDURE = Pattern.compile( "^CREATE[\\s]+(?:OR[\\s]+REPLACE[\\s]+)?PROCEDURE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is ALTER VIEW statement. */ private static final Pattern PATTERN_ALTER_VIEW = Pattern.compile( "^ALTER[\\s]+(?:MATERIALIZED[\\s]+)?VIEW[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is COMMENT statement. */ private static final Pattern PATTERN_COMMENT = Pattern.compile( "^COMMENT[\\s]+ON[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE TYPE statement. */ private static final Pattern PATTERN_CREATE_TYPE = Pattern.compile( "^CREATE[\\s]+TYPE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is GRANT statement. */ private static final Pattern PATTERN_GRANT = Pattern.compile( "^GRANT[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is REVOKE statement. */ private static final Pattern PATTERN_REVOKE = Pattern.compile( "^REVOKE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing a dollar quoting tag. */ private static final Pattern PATTERN_DOLLAR_TAG= Pattern.compile( "[\"\\s]", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE EXTENSION statement. */ private static final Pattern PATTERN_CREATE_EXTENSION = Pattern.compile( "^CREATE[\\s]+EXTENSION[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE POLICY statement. */ private static final Pattern PATTERN_CREATE_POLICY = Pattern.compile( "^CREATE[\\s]+POLICY[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE POLICY statement. */ private static final Pattern PATTERN_DISABLE_TRIGGER = Pattern.compile( "ALTER\\s+TABLE+\\s+\"?\\w+\"?.+\"?\\w+\"?\\s+DISABLE+\\s+TRIGGER+\\s+\\w+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** * Pattern for testing whether it is CREATE RULE statement. */ private static final Pattern PATTERN_CREATE_RULE = Pattern.compile( "^CREATE[\\s]+RULE[\\s]+.*$", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); /** /** * Storage of unprocessed line part. */ private static String lineBuffer; /** * Loads database schema from dump file. * * @param inputStream input stream that should be read * @param charsetName charset that should be used to read the * file * @param outputIgnoredStatements whether ignored statements should be * included in the output * @param ignoreSlonyTriggers whether Slony triggers should be ignored * @param ignoreSchemaCreation whether schema creation should be ignored * * @return database schema from dump file */ public static PgDatabase loadDatabaseSchema(final InputStream inputStream, final String charsetName, final boolean outputIgnoredStatements, final boolean ignoreSlonyTriggers, final boolean ignoreSchemaCreation) { final PgDatabase database = new PgDatabase(); BufferedReader reader = null; try { reader = new BufferedReader( new InputStreamReader(inputStream, charsetName)); } catch (final UnsupportedEncodingException ex) { throw new UnsupportedOperationException( Resources.getString("UnsupportedEncoding") + ": " + charsetName, ex); } String statement = getWholeStatement(reader); while (statement != null) { if (PATTERN_CREATE_SCHEMA.matcher(statement).matches()) { CreateSchemaParser.parse(database, statement); } else if (PATTERN_CREATE_EXTENSION.matcher(statement).matches()) { CreateExtensionParser.parse(database, statement); } else if (PATTERN_DEFAULT_SCHEMA.matcher(statement).matches()) { final Matcher matcher = PATTERN_DEFAULT_SCHEMA.matcher(statement); matcher.matches(); database.setDefaultSchema(matcher.group(1)); } else if (PATTERN_CREATE_TABLE.matcher(statement).matches()) { CreateTableParser.parse(database, statement, ignoreSchemaCreation); } else if ((PATTERN_ALTER_TABLE.matcher(statement).matches() || PATTERN_ALTER_VIEW.matcher(statement).matches()) && !PATTERN_DISABLE_TRIGGER.matcher(statement).matches()) { AlterRelationParser.parse( database, statement, outputIgnoredStatements); } else if (PATTERN_CREATE_SEQUENCE.matcher(statement).matches()) { CreateSequenceParser.parse(database, statement); } else if (PATTERN_ALTER_SEQUENCE.matcher(statement).matches()) { AlterSequenceParser.parse( database, statement, outputIgnoredStatements); } else if (PATTERN_CREATE_INDEX.matcher(statement).matches()) { CreateIndexParser.parse(database, statement); } else if (PATTERN_CREATE_VIEW.matcher(statement).matches()) { CreateViewParser.parse(database, statement); } else if (PATTERN_CREATE_TRIGGER.matcher(statement).matches()) { CreateTriggerParser.parse( database, statement, ignoreSlonyTriggers); } else if ( PATTERN_DISABLE_TRIGGER.matcher(statement).matches()) { CreateTriggerParser.parseDisable(database, statement); } else if (PATTERN_CREATE_FUNCTION.matcher(statement).matches()) { CreateFunctionParser.parse(database, statement); } else if (PATTERN_CREATE_PROCEDURE.matcher(statement).matches()) { CreateProcedureParser.parse(database, statement); } else if (PATTERN_CREATE_TYPE.matcher(statement).matches()) { CreateTypeParser.parse(database, statement); } else if (PATTERN_COMMENT.matcher(statement).matches()) { CommentParser.parse( database, statement, outputIgnoredStatements); } else if (PATTERN_SELECT.matcher(statement).matches() || PATTERN_INSERT_INTO.matcher(statement).matches() || PATTERN_UPDATE.matcher(statement).matches() || PATTERN_DELETE_FROM.matcher(statement).matches()) { } else if (PATTERN_GRANT.matcher(statement).matches()) { GrantRevokeParser.parse(database, statement, outputIgnoredStatements); } else if (PATTERN_REVOKE.matcher(statement).matches()) { GrantRevokeParser.parse(database, statement, outputIgnoredStatements); } else if (PATTERN_CREATE_POLICY.matcher(statement).matches()) { CreatePolicyParser.parse(database, statement); } else if (PATTERN_CREATE_RULE.matcher(statement).matches()) { CreateRuleParser.parse(database, statement); } else if (outputIgnoredStatements) { database.addIgnoredStatement(statement); } else { // these statements are ignored if outputIgnoredStatements // is false } statement = getWholeStatement(reader); } return database; } /** * Loads database schema from dump file. * * @param file name of file containing the dump * @param charsetName charset that should be used to read the * file * @param outputIgnoredStatements whether ignored statements should be * included in the output * @param ignoreSlonyTriggers whether Slony triggers should be ignored * @param ignoreSchemaCreation whether Schema creation should be ignored * * @return database schema from dump file */ public static PgDatabase loadDatabaseSchema(final String file, final String charsetName, final boolean outputIgnoredStatements, final boolean ignoreSlonyTriggers, final boolean ignoreSchemaCreation) { if (file.equals("-")) return loadDatabaseSchema(System.in, charsetName, outputIgnoredStatements, ignoreSlonyTriggers, ignoreSchemaCreation); FileInputStream fis = null; try { fis = new FileInputStream(file); return loadDatabaseSchema(fis, charsetName, outputIgnoredStatements, ignoreSlonyTriggers, ignoreSchemaCreation); } catch (final FileNotFoundException ex) { throw new FileException(MessageFormat.format( Resources.getString("FileNotFound"), file), ex); } finally { if (fis != null) { try { fis.close(); } catch (IOException ex){} } } } /** * Reads whole statement from the reader into single-line string. * * @param reader reader to be read * * @return whole statement from the reader into single-line string */ private static String getWholeStatement(final BufferedReader reader) { final StringBuilder sbStatement = new StringBuilder(1024); if (lineBuffer != null) { sbStatement.append(lineBuffer); lineBuffer = null; stripComment(sbStatement); } int pos = sbStatement.indexOf(";"); while (true) { if (pos == -1) { final String newLine; try { newLine = reader.readLine(); } catch (IOException ex) { throw new FileException( Resources.getString("CannotReadFile"), ex); } if (newLine == null) { if (sbStatement.toString().trim().length() == 0) { return null; } else { throw new RuntimeException(MessageFormat.format( Resources.getString("EndOfStatementNotFound"), sbStatement.toString())); } } if (sbStatement.length() > 0) { sbStatement.append(System.getProperty("line.separator")); } pos = sbStatement.length(); sbStatement.append(newLine); stripComment(sbStatement); pos = sbStatement.indexOf(";", pos); } else { if (!isQuoted(sbStatement, pos)) { if (pos == sbStatement.length() - 1) { lineBuffer = null; } else { lineBuffer = sbStatement.substring(pos + 1); sbStatement.setLength(pos + 1); } return sbStatement.toString().trim(); } pos = sbStatement.indexOf(";", pos + 1); } } } /** * Strips comment from statement line. * * @param sbStatement string builder containing statement */ private static void stripComment(final StringBuilder sbStatement) { int pos = sbStatement.indexOf("--"); while (pos >= 0) { if (pos == 0) { sbStatement.setLength(0); return; } else { if (!isQuoted(sbStatement, pos)) { sbStatement.setLength(pos); return; } } pos = sbStatement.indexOf("--", pos + 1); } int endPos = sbStatement.indexOf("*/"); while (endPos >= 0) { if (!isQuoted(sbStatement, endPos)) { int startPos = sbStatement.lastIndexOf("/*", endPos); if (startPos < endPos && !isQuoted(sbStatement, startPos)) { sbStatement.replace(startPos, endPos + 2, ""); } } endPos = sbStatement.indexOf("*/", endPos+2); } } /** * Checks whether specified position in the string builder is quoted. It * might be quoted either by single quote or by dollar sign quoting. * * @param sbString string builder * @param pos position to be checked * * @return true if the specified position is quoted, otherwise false */ @SuppressWarnings("AssignmentToForLoopParameter") private static boolean isQuoted(final StringBuilder sbString, final int pos) { boolean isQuoted = false; boolean insideDoubleQuotes = false; boolean insideSingeQuote = false; // Determine if double quote is inside of a single quote. for (int curPos = 0; curPos < pos; curPos++) { // Check if the quote is inside of a double quotes if (sbString.charAt(curPos) == '\"' && !insideSingeQuote ){ insideDoubleQuotes = !insideDoubleQuotes; } if (sbString.charAt(curPos) == '\'' && !insideDoubleQuotes ){ insideSingeQuote = !insideSingeQuote; } if(!insideDoubleQuotes){ if (sbString.charAt(curPos) == '\'') { isQuoted = !isQuoted; // if quote was escaped by backslash, it's like double quote if (pos > 0 && sbString.charAt(pos - 1) == '\\') { isQuoted = !isQuoted; } } else if (sbString.charAt(curPos) == '$' && !isQuoted) { final int endPos = sbString.indexOf("$", curPos + 1); if (endPos == -1) { return false; } final String tag = sbString.substring(curPos, endPos + 1); if (!isCorrectTag(tag)) { return false; } final int endTagPos = sbString.indexOf(tag, endPos + 1); // if end tag was not found or it was found after the checked // position, it's quoted if (endTagPos == -1 || endTagPos > pos) { return true; } curPos = endTagPos + tag.length() - 1; } } } return isQuoted; } /** * Checks whether dollar quoting tag is correct. * * @param tag tag to be checked * * @return true if the tag is correct, otherwise false */ private static boolean isCorrectTag(final String tag) { return !PATTERN_DOLLAR_TAG.matcher(tag).find(); } /** * Creates a new instance of PgDumpLoader. */ private PgDumpLoader() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/loader/package-info.java000066400000000000000000000001251412634760000305710ustar00rootroot00000000000000/** * Contains PostgreSQL dump loader. */ package cz.startnet.utils.pgdiff.loader; apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/package-info.java000066400000000000000000000001621412634760000273240ustar00rootroot00000000000000/** * Contains tool that creates diff file from two PostgreSQL dump files. */ package cz.startnet.utils.pgdiff; apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/000077500000000000000000000000001412634760000256155ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/AlterRelationParser.java000077500000000000000000000402021412634760000324030ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.*; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; /** * Parses ALTER TABLE statements. * * @author fordfrog */ public class AlterRelationParser { /** * Parses ALTER TABLE statement. * * @param database database * @param statement ALTER TABLE statement * @param outputIgnoredStatements whether ignored statements should be * output in the diff */ public static void parse(final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { final Parser parser = new Parser(statement); parser.expect("ALTER"); /* * PostgreSQL allows using ALTER TABLE on views as well as other * relation types, so we just ignore type here and derive its type from * the original CREATE command. */ parser.expectOptional("FOREIGN"); //OK FOREIGN TABLE if (parser.expectOptional("TABLE")) { parser.expectOptional("ONLY"); } else if (parser.expectOptional("MATERIALIZED", "VIEW") || parser.expectOptional("VIEW")) { // OK, view } else { parser.throwUnsupportedCommand(); } final String relName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(relName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final String objectName = ParserUtils.getObjectName(relName); final PgRelation rel = schema.getRelation(objectName); if (rel == null) { final PgSequence sequence = schema.getSequence(objectName); if (sequence != null) { parseSequence(parser, sequence, outputIgnoredStatements, relName, database); return; } throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindObject"), relName, statement)); } PgTable table = null; if (rel instanceof PgTable) { table = (PgTable) rel; } while (!parser.expectOptional(";")) { if (parser.expectOptional("ALTER")) { parseAlterColumn(parser, rel); } else if (parser.expectOptional("CLUSTER", "ON")) { rel.setClusterIndexName( ParserUtils.getObjectName(parser.parseIdentifier())); } else if (parser.expectOptional("OWNER", "TO")) { rel.setOwnerTo(parser.parseIdentifier()); } else if (table != null && parser.expectOptional("ADD")) { if (parser.expectOptional("FOREIGN", "KEY")) { parseAddForeignKey(parser, table); } else if (parser.expectOptional("CONSTRAINT")) { parseAddConstraint(parser, table, schema); } else { parser.throwUnsupportedCommand(); } } else if (table != null && parser.expectOptional("ENABLE", "ROW", "LEVEL", "SECURITY")) { table.setRLSEnabled(true); } else if (table != null && parser.expectOptional("DISABLE", "ROW", "LEVEL", "SECURITY")) { table.setRLSEnabled(false); } else if (table != null && parser.expectOptional("FORCE", "ROW", "LEVEL", "SECURITY")) { table.setRLSForced(true); } else if (table != null && parser.expectOptional("NO", "FORCE", "ROW", "LEVEL", "SECURITY")) { table.setRLSForced(false); } else if (table != null && parser.expectOptional("ENABLE")) { parseEnable( parser, outputIgnoredStatements, relName, database); } else if (table != null && parser.expectOptional("DISABLE")) { parseDisable( parser, outputIgnoredStatements, relName, database); } else { parser.throwUnsupportedCommand(); } if (parser.expectOptional(";")) { break; } else { parser.expect(","); } } } /** * Parses ENABLE statements. * * @param parser parser * @param outputIgnoredStatements whether ignored statements should be * output in the diff * @param tableName table name as it was specified in the * statement * @param database database information * */ private static void parseEnable(final Parser parser, final boolean outputIgnoredStatements, final String tableName, final PgDatabase database) { if (parser.expectOptional("REPLICA")) { if (parser.expectOptional("TRIGGER")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " ENABLE REPLICA TRIGGER " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else if (parser.expectOptional("RULE")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " ENABLE REPLICA RULE " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else { parser.throwUnsupportedCommand(); } } else if (parser.expectOptional("ALWAYS")) { if (parser.expectOptional("TRIGGER")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " ENABLE ALWAYS TRIGGER " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else if (parser.expectOptional("RULE")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " ENABLE RULE " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else { parser.throwUnsupportedCommand(); } } } /** * Parses DISABLE statements. * * @param parser parser * @param outputIgnoredStatements whether ignored statements should be * output in the diff * @param tableName table name as it was specified in the * statement * @param database database information * */ private static void parseDisable(final Parser parser, final boolean outputIgnoredStatements, final String tableName, final PgDatabase database) { if (parser.expectOptional("TRIGGER")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " DISABLE TRIGGER " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else if (parser.expectOptional("RULE")) { if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + tableName + " DISABLE RULE " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else { parser.throwUnsupportedCommand(); } } /** * Parses ADD CONSTRAINT action. * * @param parser parser * @param table table * @param schema schema */ private static void parseAddConstraint(final Parser parser, final PgTable table, final PgSchema schema) { final String constraintName = ParserUtils.getObjectName(parser.parseIdentifier()); final PgConstraint constraint = new PgConstraint(constraintName); constraint.setTableName(table.getName()); table.addConstraint(constraint); if (parser.expectOptional("PRIMARY", "KEY")) { schema.addPrimaryKey(constraint); constraint.setDefinition("PRIMARY KEY " + parser.getExpression()); } else { constraint.setDefinition(parser.getExpression()); } } /** * Parses ALTER COLUMN action. * * @param parser parser * @param rel view/table */ private static void parseAlterColumn(final Parser parser, final PgRelation rel) { parser.expectOptional("COLUMN"); final String columnName = ParserUtils.getObjectName(parser.parseIdentifier()); if (parser.expectOptional("SET")) { if (parser.expectOptional("STATISTICS")) { final PgColumn column = rel.getColumn(columnName); if (column == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } column.setStatistics(parser.parseInteger()); } else if (parser.expectOptional("NOT NULL")) { if (rel.containsColumn(columnName)) { final PgColumn column = rel.getColumn(columnName); if (column == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } column.setNullValue(false); } else if (rel.containsInheritedColumn(columnName)) { final PgInheritedColumn inheritedColumn = rel.getInheritedColumn(columnName); if (inheritedColumn == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } inheritedColumn.setNullValue(false); } else { throw new ParserException(MessageFormat.format( Resources.getString("CannotFindColumnInTable"), columnName, rel.getName())); } } else if (parser.expectOptional("DEFAULT")) { final String defaultValue = parser.getExpression(); if (rel.containsColumn(columnName)) { final PgColumn column = rel.getColumn(columnName); if (column == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } column.setDefaultValue(defaultValue); } else if (rel.containsInheritedColumn(columnName)) { final PgInheritedColumn column = rel.getInheritedColumn(columnName); if (column == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } column.setDefaultValue(defaultValue); } else { throw new ParserException(MessageFormat.format( Resources.getString("CannotFindColumnInTable"), columnName, rel.getName())); } } else if (parser.expectOptional("STORAGE")) { final PgColumn column = rel.getColumn(columnName); if (column == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTableColumn"), columnName, rel.getName(), parser.getString())); } if (parser.expectOptional("PLAIN")) { column.setStorage("PLAIN"); } else if (parser.expectOptional("EXTERNAL")) { column.setStorage("EXTERNAL"); } else if (parser.expectOptional("EXTENDED")) { column.setStorage("EXTENDED"); } else if (parser.expectOptional("MAIN")) { column.setStorage("MAIN"); } else { parser.throwUnsupportedCommand(); } } else { parser.throwUnsupportedCommand(); } } else if(parser.expectOptional("ADD GENERATED")){ PgColumn column = rel.getColumn(columnName); column.setGenerated("ADD GENERATED " +parser.getExpression()); } else { parser.throwUnsupportedCommand(); } } /** * Parses ADD FOREIGN KEY action. * * @param parser parser * @param table pg table */ private static void parseAddForeignKey(final Parser parser, final PgTable table) { final List columnNames = new ArrayList(1); parser.expect("("); while (!parser.expectOptional(")")) { columnNames.add( ParserUtils.getObjectName(parser.parseIdentifier())); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } final String constraintName = ParserUtils.generateName( table.getName() + "_", columnNames, "_fkey"); final PgConstraint constraint = new PgConstraint(constraintName); table.addConstraint(constraint); constraint.setDefinition(parser.getExpression()); constraint.setTableName(table.getName()); } /** * Parses ALTER TABLE sequence. * * @param parser parser * @param sequence sequence * @param outputIgnoredStatements whether ignored statements should be * output in the diff * @param sequenceName sequence name as it was specified in the * statement * @param database database information */ private static void parseSequence(final Parser parser, final PgSequence sequence, final boolean outputIgnoredStatements, final String sequenceName, final PgDatabase database) { while (!parser.expectOptional(";")) { if (parser.expectOptional("OWNER", "TO")) { // we do not parse this one so we just consume the identifier if (outputIgnoredStatements) { database.addIgnoredStatement("ALTER TABLE " + sequenceName + " OWNER TO " + parser.parseIdentifier() + ';'); } else { parser.parseIdentifier(); } } else { parser.throwUnsupportedCommand(); } } } /** * Creates a new instance of AlterTableParser. */ private AlterRelationParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/AlterSequenceParser.java000066400000000000000000000044011412634760000323740ustar00rootroot00000000000000/** * Copyright 2010 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgSequence; import java.text.MessageFormat; /** * Parses ALTER SEQUENCE statements. * * @author mix86 */ public class AlterSequenceParser { /** * Parses ALTER SEQUENCE statement. * * @param database database * @param statement ALTER SEQUENCE statement * @param outputIgnoredStatements whether ignored statements should be * output in the diff */ public static void parse(final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { final Parser parser = new Parser(statement); parser.expect("ALTER", "SEQUENCE"); final String sequenceName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(sequenceName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final String objectName = ParserUtils.getObjectName(sequenceName); final PgSequence sequence = schema.getSequence(objectName); if (sequence == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSequence"), sequenceName, statement)); } while (!parser.expectOptional(";")) { if (parser.expectOptional("OWNED", "BY")) { if (parser.expectOptional("NONE")) { sequence.setOwnedBy(null); } else { sequence.setOwnedBy(parser.getExpression()); } } else { parser.throwUnsupportedCommand(); } } } /** * Creates new instance of AlterSequenceParser. */ private AlterSequenceParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CommentParser.java000077500000000000000000000257411412634760000312530ustar00rootroot00000000000000/** * Copyright 2010 StartNet s.r.o. */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.*; import java.text.MessageFormat; /** * COMMENT parser. * * @author fordfrog */ public class CommentParser { /** * Parses COMMENT statements. * * @param database database * @param statement COMMENT statement * @param outputIgnoredStatements whether ignored statements should be * output into the diff */ public static void parse(final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { final Parser parser = new Parser(statement); parser.expect("COMMENT", "ON"); if (parser.expectOptional("TABLE")) { parseTable(parser, database); } else if (parser.expectOptional("COLUMN")) { parseColumn(parser, database); } else if (parser.expectOptional("CONSTRAINT")) { parseConstraint(parser, database); } else if (parser.expectOptional("DATABASE")) { parseDatabase(parser, database); } else if (parser.expectOptional("FUNCTION")) { parseFunction(parser, database); } else if (parser.expectOptional("INDEX")) { parseIndex(parser, database); } else if (parser.expectOptional("SCHEMA")) { parseSchema(parser, database); } else if (parser.expectOptional("SEQUENCE")) { parseSequence(parser, database); } else if (parser.expectOptional("TRIGGER")) { parseTrigger(parser, database); } else if (parser.expectOptional("VIEW")) { parseView(parser, database); } else if (outputIgnoredStatements) { database.addIgnoredStatement(statement); } } /** * Parses COMMENT ON TABLE. * * @param parser parser * @param database database */ private static void parseTable(final Parser parser, final PgDatabase database) { final String tableName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(tableName); final String schemaName = ParserUtils.getSchemaName(tableName, database); final PgTable table = database.getSchema(schemaName).getTable(objectName); parser.expect("IS"); table.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON CONSTRAINT. * * @param parser parser * @param database database */ private static void parseConstraint(final Parser parser, final PgDatabase database) { final String constraintName = ParserUtils.getObjectName(parser.parseIdentifier()); parser.expect("ON"); final String tableName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(tableName); final String schemaName = ParserUtils.getSchemaName(tableName, database); final PgConstraint constraint = database.getSchema(schemaName). getTable(objectName).getConstraint(constraintName); parser.expect("IS"); constraint.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON DATABASE. * * @param parser parser * @param database database */ private static void parseDatabase(final Parser parser, final PgDatabase database) { parser.parseIdentifier(); parser.expect("IS"); database.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON INDEX. * * @param parser parser * @param database database */ private static void parseIndex(final Parser parser, final PgDatabase database) { final String indexName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(indexName); final String schemaName = ParserUtils.getSchemaName(indexName, database); final PgSchema schema = database.getSchema(schemaName); final PgIndex index = schema.getIndex(objectName); if (index == null) { final PgConstraint primaryKey = schema.getPrimaryKey(objectName); parser.expect("IS"); primaryKey.setComment(getComment(parser)); parser.expect(";"); } else { parser.expect("IS"); index.setComment(getComment(parser)); parser.expect(";"); } } /** * Parses COMMENT ON SCHEMA. * * @param parser parser * @param database database */ private static void parseSchema(final Parser parser, final PgDatabase database) { final String schemaName = ParserUtils.getObjectName(parser.parseIdentifier()); final PgSchema schema = database.getSchema(schemaName); parser.expect("IS"); schema.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON SEQUENCE. * * @param parser parser * @param database database */ private static void parseSequence(final Parser parser, final PgDatabase database) { final String sequenceName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(sequenceName); final String schemaName = ParserUtils.getSchemaName(sequenceName, database); final PgSequence sequence = database.getSchema(schemaName).getSequence(objectName); parser.expect("IS"); sequence.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON TRIGGER. * * @param parser parser * @param database database */ private static void parseTrigger(final Parser parser, final PgDatabase database) { final String triggerName = ParserUtils.getObjectName(parser.parseIdentifier()); parser.expect("ON"); final String tableName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(tableName); final String schemaName = ParserUtils.getSchemaName(tableName, database); final PgTrigger trigger = database.getSchema(schemaName). getTable(objectName).getTrigger(triggerName); parser.expect("IS"); trigger.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON VIEW. * * @param parser parser * @param database database */ private static void parseView(final Parser parser, final PgDatabase database) { final String viewName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(viewName); final String schemaName = ParserUtils.getSchemaName(viewName, database); final PgView view = database.getSchema(schemaName).getView(objectName); parser.expect("IS"); view.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON COLUMN. * * @param parser parser * @param database database */ private static void parseColumn(final Parser parser, final PgDatabase database) { final String columnName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(columnName); final String relName = ParserUtils.getSecondObjectName(columnName); final String schemaName = ParserUtils.getThirdObjectName(columnName); final PgSchema schema = database.getSchema(schemaName); final PgRelation rel = schema.getRelation(relName); final PgColumn column = rel.getColumn(objectName); if (column == null) { throw new ParserException(MessageFormat.format( Resources.getString("CannotFindColumnInTable"), columnName, rel.getName())); } parser.expect("IS"); column.setComment(getComment(parser)); parser.expect(";"); } /** * Parses COMMENT ON FUNCTION. * * @param parser parser * @param database database */ private static void parseFunction(final Parser parser, final PgDatabase database) { final String functionName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(functionName); final String schemaName = ParserUtils.getSchemaName(functionName, database); final PgSchema schema = database.getSchema(schemaName); parser.expect("("); final PgFunction tmpFunction = new PgFunction(); tmpFunction.setName(objectName); while (!parser.expectOptional(")")) { final String mode; if (parser.expectOptional("IN")) { mode = "IN"; } else if (parser.expectOptional("OUT")) { mode = "OUT"; } else if (parser.expectOptional("INOUT")) { mode = "INOUT"; } else if (parser.expectOptional("VARIADIC")) { mode = "VARIADIC"; } else { mode = null; } final int position = parser.getPosition(); String argumentName = null; String dataType = parser.parseDataType(); final int position2 = parser.getPosition(); if (!parser.expectOptional(")") && !parser.expectOptional(",")) { parser.setPosition(position); argumentName = ParserUtils.getObjectName(parser.parseIdentifier()); dataType = parser.parseDataType(); } else { parser.setPosition(position2); } final PgFunction.Argument argument = new PgFunction.Argument(); argument.setDataType(dataType); argument.setMode(mode); argument.setName(argumentName); tmpFunction.addArgument(argument); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } final PgFunction function = schema.getFunction(tmpFunction.getSignature()); parser.expect("IS"); function.setComment(getComment(parser)); parser.expect(";"); } /** * Parses comment from parser. If comment is "null" string then null is * returned, otherwise the parsed string is returned. * * @param parser parser * * @return string or null */ private static String getComment(final Parser parser) { final String comment = parser.parseString(); if ("null".equalsIgnoreCase(comment)) { return null; } return comment; } /** * Creates new instance of CommentParser. */ private CommentParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateExtensionParser.java000066400000000000000000000027221412634760000327400ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgExtension; import cz.startnet.utils.pgdiff.schema.PgSchema; /** * Parses CREATE EXTENSION statements. * * @author atila */ public class CreateExtensionParser { /** * Parses CREATE EXTENSION statement. * * @param database database * @param statement CREATE EXTENSION statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE", "EXTENSION"); parser.expectOptional("IF", "NOT", "EXISTS"); final String extensionName = parser.parseIdentifier(); final PgExtension extension = new PgExtension(extensionName); parser.expectOptional("WITH"); if (parser.expectOptional("SCHEMA")) { extension.setSchema(new PgSchema(parser.parseString())); } if (parser.expectOptional("VERSION")) { extension.setVersion(parser.parseString()); } if (parser.expectOptional("FROM")) { extension.setFrom(parser.parseString()); } database.addExtension(extension); } /** * Creates a new instance of CreateExtensionParser. */ private CreateExtensionParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateFunctionParser.java000066400000000000000000000070571412634760000325570ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgFunction; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.text.MessageFormat; /** * Parses CREATE FUNCTION and CREATE OR REPLACE FUNCTION statements. * * @author fordfrog */ public class CreateFunctionParser { /** * Parses CREATE FUNCTION and CREATE OR REPLACE FUNCTION statement. * * @param database database * @param statement CREATE FUNCTION statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE"); parser.expectOptional("OR", "REPLACE"); parser.expect("FUNCTION"); final String functionName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(functionName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final PgFunction function = new PgFunction(); function.setName(ParserUtils.getObjectName(functionName)); schema.addFunction(function); parser.expect("("); while (!parser.expectOptional(")")) { final String mode; if (parser.expectOptional("IN")) { mode = "IN"; } else if (parser.expectOptional("OUT")) { mode = "OUT"; } else if (parser.expectOptional("INOUT")) { mode = "INOUT"; } else if (parser.expectOptional("VARIADIC")) { mode = "VARIADIC"; } else { mode = null; } final int position = parser.getPosition(); String argumentName = null; String dataType = parser.parseDataType(); final int position2 = parser.getPosition(); if (!parser.expectOptional(")") && !parser.expectOptional(",") && !parser.expectOptional("=") && !parser.expectOptional("DEFAULT")) { parser.setPosition(position); argumentName = ParserUtils.getObjectName(parser.parseIdentifier()); dataType = parser.parseDataType(); } else { parser.setPosition(position2); } final String defaultExpression; if (parser.expectOptional("=") || parser.expectOptional("DEFAULT")) { defaultExpression = parser.getExpression(); } else { defaultExpression = null; } final PgFunction.Argument argument = new PgFunction.Argument(); argument.setDataType(dataType); argument.setDefaultExpression(defaultExpression); argument.setMode(mode); argument.setName(argumentName); function.addArgument(argument); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } function.setBody(parser.getRest()); } /** * Creates a new instance of CreateFunctionParser. */ private CreateFunctionParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateIndexParser.java000077500000000000000000000044431412634760000320400ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.*; import java.text.MessageFormat; /** * Parses CREATE INDEX statements. * * @author fordfrog */ public class CreateIndexParser { /** * Parses CREATE INDEX statement. * * @param database database * @param statement CREATE INDEX statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE"); final boolean unique = parser.expectOptional("UNIQUE"); parser.expect("INDEX"); parser.expectOptional("CONCURRENTLY"); parser.expectOptional("IF", "NOT", "EXISTS"); final String indexName = ParserUtils.getObjectName(parser.parseIdentifier()); parser.expect("ON"); final String tableName = parser.parseIdentifier(); final String definition = parser.getRest(); final String schemaName = ParserUtils.getSchemaName(tableName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final String objectName = ParserUtils.getObjectName(tableName); final PgTable table = schema.getTable(objectName); final PgView view = schema.getView(objectName); final PgIndex index = new PgIndex(indexName); if (table != null) { table.addIndex(index); } else if (view != null) { view.addIndex(index); } else { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindObject"), tableName, statement)); } schema.addIndex(index); index.setDefinition(definition.trim()); index.setTableName(objectName); index.setUnique(unique); } /** * Creates a new instance of CreateIndexParser. */ private CreateIndexParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreatePolicyParser.java000066400000000000000000000054601412634760000322250ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.*; import java.text.MessageFormat; public class CreatePolicyParser { public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); final PgPolicy policy = new PgPolicy(); parser.expect("CREATE", "POLICY"); final String policyName = parser.parseIdentifier(); parser.expect("ON"); final String qualifiedTableName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(qualifiedTableName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final PgTable table = schema.getTable(ParserUtils.getObjectName(qualifiedTableName)); if (table == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindTable"), qualifiedTableName, statement)); } if (parser.expectOptional("FOR")) { String command = parser.expectOptionalOneOf("ALL", "SELECT", "INSERT", "UPDATE", "DELETE"); policy.setCommand(command); } else { policy.setCommand("ALL"); } if (parser.expectOptional("TO")) { if (parser.expectOptional("PUBLIC")){ policy.getRoles().add("PUBLIC"); } else { String role = parser.parseIdentifier(); policy.getRoles().add(role); while (role != null) { if (parser.expectOptional(",")) { parser.skipWhitespace(); role = parser.parseIdentifier(); policy.getRoles().add(role); } else { role = null; } } } } else { policy.getRoles().add("PUBLIC"); } if (parser.expectOptional("USING")){ parser.expect("("); policy.setUsing(parser.getExpression()); parser.expect(")"); } if (parser.expectOptional("WITH", "CHECK")){ parser.expect("("); policy.setWithCheck(parser.getExpression()); parser.expect(")"); } policy.setName(policyName); policy.setTableName(table.getName()); table.addPolicy(policy); } private CreatePolicyParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateProcedureParser.java000066400000000000000000000071131412634760000327130ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgProcedure; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.text.MessageFormat; /** * Parses CREATE PROCEDURE and CREATE OR REPLACE PROCEDURE statements. * * @author jalissonmello */ public class CreateProcedureParser { /** * Parses CREATE PROCEDURE and CREATE OR REPLACE PROCEDURE statement. * * @param database database * @param statement CREATE PROCEDURE statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE"); parser.expectOptional("OR", "REPLACE"); parser.expect("PROCEDURE"); final String procedureName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(procedureName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final PgProcedure procedure = new PgProcedure(); procedure.setName(ParserUtils.getObjectName(procedureName)); schema.addProcedure(procedure); parser.expect("("); while (!parser.expectOptional(")")) { final String mode; if (parser.expectOptional("IN")) { mode = "IN"; } else if (parser.expectOptional("OUT")) { mode = "OUT"; } else if (parser.expectOptional("INOUT")) { mode = "INOUT"; } else if (parser.expectOptional("VARIADIC")) { mode = "VARIADIC"; } else { mode = null; } final int position = parser.getPosition(); String argumentName = null; String dataType = parser.parseDataType(); final int position2 = parser.getPosition(); if (!parser.expectOptional(")") && !parser.expectOptional(",") && !parser.expectOptional("=") && !parser.expectOptional("DEFAULT")) { parser.setPosition(position); argumentName = ParserUtils.getObjectName(parser.parseIdentifier()); dataType = parser.parseDataType(); } else { parser.setPosition(position2); } final String defaultExpression; if (parser.expectOptional("=") || parser.expectOptional("DEFAULT")) { defaultExpression = parser.getExpression(); } else { defaultExpression = null; } final PgProcedure.Argument argument = new PgProcedure.Argument(); argument.setDataType(dataType); argument.setDefaultExpression(defaultExpression); argument.setMode(mode); argument.setName(argumentName); procedure.addArgument(argument); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } procedure.setBody(parser.getRest()); } /** * Creates a new instance of CreateProcedureParser. */ private CreateProcedureParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateRuleParser.java000077500000000000000000000043441412634760000317000ustar00rootroot00000000000000/** * Copyright 2018 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgRule; import cz.startnet.utils.pgdiff.schema.PgSchema; import java.text.MessageFormat; /** * Parses CREATE RULE statements. * * @author jalissonmello */ public class CreateRuleParser { /** * Parses CREATE VIEW statement. * * @param database database * @param statement CREATE VIEW statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE"); parser.expectOptional("OR", "REPLACE"); parser.expect("RULE"); final String ruleName = parser.parseIdentifier(); final PgRule rule = new PgRule(ParserUtils.getObjectName(ruleName)); parser.expect("AS", "ON"); if (parser.expectOptional("INSERT")) { rule.setEvent("INSERT"); } else if (parser.expectOptional("UPDATE")) { rule.setEvent("UPDATE"); } else if (parser.expectOptional("DELETE")) { rule.setEvent("DELETE"); } else if (parser.expectOptional("SELECT")) { rule.setEvent("SELECT"); } else { parser.throwUnsupportedCommand(); } parser.expect("TO"); final String relationName = parser.parseIdentifier(); final String query = parser.getRest(); rule.setRelationName(ParserUtils.getObjectName(relationName)); rule.setQuery(query); final String schemaName = ParserUtils.getSchemaName(relationName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } schema.addRelation(rule); schema.getRelation(rule.getRelationName()).addRule(rule); } /** * Creates a new instance of CreateRuleParser. */ private CreateRuleParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateSchemaParser.java000066400000000000000000000034061412634760000321640ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; /** * Parses CREATE SCHEMA statements. * * @author fordfrog */ public class CreateSchemaParser { /** * Parses CREATE SCHEMA statement. * * @param database database * @param statement CREATE SCHEMA statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE", "SCHEMA"); if (parser.expectOptional("AUTHORIZATION")) { final PgSchema schema = new PgSchema( ParserUtils.getObjectName(parser.parseIdentifier())); database.addSchema(schema); schema.setAuthorization(schema.getName()); final String definition = parser.getRest(); if (definition != null && !definition.isEmpty()) { schema.setDefinition(definition); } } else { final PgSchema schema = new PgSchema( ParserUtils.getObjectName(parser.parseIdentifier())); database.addSchema(schema); if (parser.expectOptional("AUTHORIZATION")) { schema.setAuthorization( ParserUtils.getObjectName(parser.parseIdentifier())); } final String definition = parser.getRest(); if (definition != null && !definition.isEmpty()) { schema.setDefinition(definition); } } } /** * Creates a new CreateSchemaParser object. */ private CreateSchemaParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateSequenceParser.java000077500000000000000000000065071412634760000325440ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgSequence; import java.text.MessageFormat; /** * Parses CREATE SEQUENCE statements. * * @author fordfrog */ public class CreateSequenceParser { /** * Parses CREATE SEQUENCE statement. * * @param database database * @param statement CREATE SEQUENCE statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE", "SEQUENCE"); parser.expectOptional("IF", "NOT", "EXISTS"); final String sequenceName = parser.parseIdentifier(); final PgSequence sequence = new PgSequence(ParserUtils.getObjectName(sequenceName)); final String schemaName = ParserUtils.getSchemaName(sequenceName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } schema.addSequence(sequence); while (!parser.expectOptional(";")) { if (parser.expectOptional("AS")) { sequence.setDataType(parser.parseString()); } else if (parser.expectOptional("INCREMENT")) { parser.expectOptional("BY"); sequence.setIncrement(parser.parseString()); } else if (parser.expectOptional("MINVALUE")) { sequence.setMinValue(parser.parseString()); } else if (parser.expectOptional("MAXVALUE")) { sequence.setMaxValue(parser.parseString()); } else if (parser.expectOptional("START")) { parser.expectOptional("WITH"); sequence.setStartWith(parser.parseString()); } else if (parser.expectOptional("CACHE")) { sequence.setCache(parser.parseString()); } else if (parser.expectOptional("CYCLE")) { sequence.setCycle(true); } else if (parser.expectOptional("OWNED", "BY")) { if (parser.expectOptional("NONE")) { sequence.setOwnedBy(null); } else { sequence.setOwnedBy(ParserUtils.getObjectName( parser.parseIdentifier())); } } else if (parser.expectOptional("NO")) { if (parser.expectOptional("MINVALUE")) { sequence.setMinValue(null); } else if (parser.expectOptional("MAXVALUE")) { sequence.setMaxValue(null); } else if (parser.expectOptional("CYCLE")) { sequence.setCycle(false); } else { parser.throwUnsupportedCommand(); } } else { parser.throwUnsupportedCommand(); } } } /** * Creates a new instance of CreateSequenceParser. */ private CreateSequenceParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateTableParser.java000066400000000000000000000134221412634760000320120ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgConstraint; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTable; import java.text.MessageFormat; /** * Parses CREATE TABLE statements. * * @author fordfrog */ public class CreateTableParser { /** * Parses CREATE TABLE statement. * * @param database database * @param statement CREATE TABLE statement * @param ignoreSchemaCreation whether schema creation should be ignored */ public static void parse(final PgDatabase database, final String statement, final boolean ignoreSchemaCreation) { final Parser parser = new Parser(statement); parser.expect("CREATE"); final boolean unlogged = parser.expectOptional("UNLOGGED"); final boolean foreign = parser.expectOptional("FOREIGN"); parser.expect("TABLE"); // Optional IF NOT EXISTS, irrelevant for our purposes parser.expectOptional("IF", "NOT", "EXISTS"); final String tableName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(tableName, database); PgSchema schema = database.getSchema(schemaName); if (schema == null) { if (ignoreSchemaCreation) { schema = new PgSchema(schemaName); database.addSchema(schema); } else { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } } final PgTable table = new PgTable(ParserUtils.getObjectName(tableName), database, schema); table.setUnlogged(unlogged); table.setForeign(foreign); schema.addRelation(table); parser.expect("("); while (!parser.expectOptional(")")) { if (parser.expectOptional("CONSTRAINT")) { parseConstraint(parser, table); } else if (parser.expectOptional("PRIMARY", "KEY")) { throw new ParserException(Resources.getString( "CreateTablePrimaryKeyNotSupported")); } else if (parser.expectOptional("UNIQUE")) { throw new ParserException( Resources.getString("CreateTableUniqueNotSupported")); } else { parseColumn(parser, table); } if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } while (!parser.expectOptional(";")) { if (parser.expectOptional("PARTITION","BY")) { table.setPartionBy("PARTITION BY "+parser.getExpression()); } else if (parser.expectOptional("INHERITS")) { parseInherits(database, parser, table); } else if (parser.expectOptional("WITHOUT")) { table.setWith("OIDS=false"); } else if (parser.expectOptional("WITH")) { if (parser.expectOptional("OIDS") || parser.expectOptional("OIDS=true")) { table.setWith("OIDS=true"); } else if (parser.expectOptional("OIDS=false")) { table.setWith("OIDS=false"); } else { table.setWith(parser.getExpression()); } } else if (parser.expectOptional("TABLESPACE")) { table.setTablespace(parser.parseString()); } else if (parser.expectOptional("SERVER")) { table.setForeignServer(parser.getExpression()); } else { parser.throwUnsupportedCommand(); } } } /** * Parses INHERITS. * * @param database database * @param parser parser * @param table pg table */ private static void parseInherits(final PgDatabase database,final Parser parser, final PgTable table) { parser.expect("("); while (!parser.expectOptional(")")) { final String parsedString = parser.parseIdentifier(); final String tableName = ParserUtils.getObjectName(parsedString); final String schemaName = parsedString.contains(".") ? ParserUtils.getSecondObjectName(parsedString) : database.getDefaultSchema().getName(); table.addInherits(schemaName, tableName); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } } /** * Parses CONSTRAINT definition. * * @param parser parser * @param table table */ private static void parseConstraint(final Parser parser, final PgTable table) { final PgConstraint constraint = new PgConstraint( ParserUtils.getObjectName(parser.parseIdentifier())); table.addConstraint(constraint); constraint.setDefinition(parser.getExpression()); constraint.setTableName(table.getName()); } /** * Parses column definition. * * @param parser parser * @param table table */ private static void parseColumn(final Parser parser, final PgTable table) { final PgColumn column = new PgColumn( ParserUtils.getObjectName(parser.parseIdentifier())); table.addColumn(column); column.parseDefinition(parser.getExpression()); } /** * Creates a new instance of CreateTableParser. */ private CreateTableParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateTriggerParser.java000077500000000000000000000132171412634760000323730ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgTrigger; /** * Parses CREATE TRIGGER statements. * * @author fordfrog */ public class CreateTriggerParser { /** * Parses CREATE TRIGGER statement. * * @param database database * @param statement CREATE TRIGGER statement * @param ignoreSlonyTriggers whether Slony triggers should be ignored */ public static void parse(final PgDatabase database, final String statement, final boolean ignoreSlonyTriggers) { final Parser parser = new Parser(statement); parser.expect("CREATE", "TRIGGER"); final String triggerName = parser.parseIdentifier(); final String objectName = ParserUtils.getObjectName(triggerName); final PgTrigger trigger = new PgTrigger(); trigger.setName(objectName); if (parser.expectOptional("BEFORE")) { trigger.setEventTimeQualification(PgTrigger.EventTimeQualification.before); } else if (parser.expectOptional("AFTER")) { trigger.setEventTimeQualification(PgTrigger.EventTimeQualification.after); } else if (parser.expectOptional("INSTEAD OF")) { trigger.setEventTimeQualification(PgTrigger.EventTimeQualification.instead_of); } boolean first = true; while (true) { if (!first && !parser.expectOptional("OR")) { break; } else if (parser.expectOptional("INSERT")) { trigger.setOnInsert(true); } else if (parser.expectOptional("UPDATE")) { trigger.setOnUpdate(true); if (parser.expectOptional("OF")) { do { trigger.addUpdateColumn(parser.parseIdentifier()); } while (parser.expectOptional(",")); } } else if (parser.expectOptional("DELETE")) { trigger.setOnDelete(true); } else if (parser.expectOptional("TRUNCATE")) { trigger.setOnTruncate(true); } else if (first) { break; } else { parser.throwUnsupportedCommand(); } first = false; } parser.expect("ON"); final String relationName = parser.parseIdentifier(); trigger.setRelationName(ParserUtils.getObjectName(relationName)); String referencing="REFERENCING"; if (parser.expectOptional(referencing)) { trigger.setReferencing("\t"+referencing); while (true) { String nextword = parser.getSubString(parser.getPosition(), parser.getPosition() + 3); if (!(nextword.equals("OLD") || nextword.equals("NEW"))) { break; } parseReferencing(parser,trigger); } } if (parser.expectOptional("FOR")) { parser.expectOptional("EACH"); if (parser.expectOptional("ROW")) { trigger.setForEachRow(true); } else if (parser.expectOptional("STATEMENT")) { trigger.setForEachRow(false); } else { parser.throwUnsupportedCommand(); } } if (parser.expectOptional("WHEN")) { parser.expect("("); trigger.setWhen(parser.getExpression()); parser.expect(")"); } parser.expect("EXECUTE"); if (!parser.expectOptional("PROCEDURE") && !parser.expectOptional("FUNCTION")) { parser.throwUnsupportedCommand(); } trigger.setFunction(parser.getRest()); final boolean ignoreSlonyTrigger = ignoreSlonyTriggers && ("_slony_logtrigger".equals(trigger.getName()) || "_slony_denyaccess".equals(trigger.getName())); if (!ignoreSlonyTrigger) { final PgSchema schema = database.getSchema( ParserUtils.getSchemaName(relationName, database)); schema.getRelation(trigger.getRelationName()).addTrigger(trigger); } } /** * Creates a new CreateTableParser object. */ private CreateTriggerParser() { } private static void parseReferencing(Parser parser, PgTrigger trigger) { if (parser.expectOptional("NEW")) { trigger.setReferencing(trigger.getReferencing() + " NEW "); } if (parser.expectOptional("OLD")) { trigger.setReferencing(trigger.getReferencing() + " OLD "); } parser.expect("TABLE"); parser.expect("AS"); trigger.setReferencing(trigger.getReferencing() + "TABLE AS " + parser.parseString()); } public static void parseDisable(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("ALTER", "TABLE"); final String tableName = parser.parseIdentifier(); parser.expect("DISABLE","TRIGGER"); final String objectName = parser.parseIdentifier(); final PgTrigger trigger = new PgTrigger(); trigger.setName(objectName); trigger.setRelationName(ParserUtils.getObjectName(tableName)); final PgSchema schema = database.getSchema( ParserUtils.getSchemaName(tableName, database)); schema.getRelation(trigger.getRelationName()).getTrigger(objectName).setDisable(true); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateTypeParser.java000066400000000000000000000053151412634760000317060ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgType; import java.text.MessageFormat; import javax.xml.parsers.ParserConfigurationException; /** * Parses CREATE TABLE statements. * * @author fordfrog */ public class CreateTypeParser { /** * Parses CREATE TYPE statement. * * @param database database * @param statement CREATE TYPE statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE", "TYPE"); final String typeName = parser.parseIdentifier(); final PgType type = new PgType(ParserUtils.getObjectName(typeName)); final String schemaName = ParserUtils.getSchemaName(typeName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } schema.addType(type); parser.expect("AS"); if (parser.expectOptional("ENUM")) { type.setIsEnum(true); } parser.expect("("); while (!parser.expectOptional(")")) { if (type.getIsEnum()) { String name = parser.getExpression(); type.addEnumValue(name); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } else { parseColumn(parser, type); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } } while (!parser.expectOptional(";")) { } } /** * Parses column definition. * * @param parser parser * @param type type */ private static void parseColumn(final Parser parser, final PgType type) { final PgColumn column = new PgColumn( ParserUtils.getObjectName(parser.parseIdentifier())); type.addColumn(column); column.parseDefinition(parser.getExpression()); } /** * Creates a new instance of CreateTableParser. */ private CreateTypeParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/CreateViewParser.java000066400000000000000000000052531412634760000317000ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgView; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; /** * Parses CREATE VIEW statements. * * @author fordfrog */ public class CreateViewParser { /** * Parses CREATE VIEW statement. * * @param database database * @param statement CREATE VIEW statement */ public static void parse(final PgDatabase database, final String statement) { final Parser parser = new Parser(statement); parser.expect("CREATE"); parser.expectOptional("OR", "REPLACE"); final boolean materialized = parser.expectOptional("MATERIALIZED"); final boolean temporary = parser.expectOptional("TEMPORARY"); final boolean recursive = parser.expectOptional("RECURSIVE"); parser.expect("VIEW"); final String viewName = parser.parseIdentifier(); StringBuilder with = new StringBuilder(); if (parser.expectOptional("WITH")) { parser.expect("("); while (!parser.expectOptional(")")) { with.append(parser.getExpression()); } } final boolean columnsExist = parser.expectOptional("("); final List columnNames = new ArrayList(10); if (columnsExist) { while (!parser.expectOptional(")")) { columnNames.add( ParserUtils.getObjectName(parser.parseIdentifier())); parser.expectOptional(","); } } parser.expect("AS"); final String query = parser.getRest(); final PgView view = new PgView(ParserUtils.getObjectName(viewName)); view.setMaterialized(materialized); view.setTemporary(temporary); view.setRecursive(recursive); view.setWith(with.toString()); view.setDeclaredColumnNames(columnNames); view.setQuery(query); final String schemaName = ParserUtils.getSchemaName(viewName, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } schema.addRelation(view); } /** * Creates a new instance of CreateViewParser. */ private CreateViewParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/GrantRevokeParser.java000066400000000000000000000353721412634760000320760ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import cz.startnet.utils.pgdiff.Resources; import cz.startnet.utils.pgdiff.schema.PgColumn; import cz.startnet.utils.pgdiff.schema.PgColumnPrivilege; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgFunction; import cz.startnet.utils.pgdiff.schema.PgSchema; import cz.startnet.utils.pgdiff.schema.PgSequence; import cz.startnet.utils.pgdiff.schema.PgSequencePrivilege; import cz.startnet.utils.pgdiff.schema.PgTable; import cz.startnet.utils.pgdiff.schema.PgRelationPrivilege; import cz.startnet.utils.pgdiff.schema.PgView; import cz.startnet.utils.pgdiff.schema.PgRelation; /** * Parses GRANT statements. * * @author user */ public class GrantRevokeParser { /** * Parses GRANT statement. * * @param database * database * @param statement * GRANT statement * @param outputIgnoredStatements * whether ignored statements should be output in the diff */ public static void parse(final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { boolean grant; // Map> privileges = new TreeMap>(); List privileges = new ArrayList(); List> privilegesColumns = new ArrayList>(); List identifiers = new ArrayList(); List roles = new ArrayList(); boolean grantOption = false; String revokeMode; final Parser parser = new Parser(statement); grant = parser.expect("GRANT", true); if (!grant) { parser.expect("REVOKE"); grantOption = parser.expect("GRANT OPTION FOR", true); } String privilege = parser.expectOptionalOneOf("ALL", "SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", "USAGE"); List columns = null; if (privilege == null) { // unknown privilege so unsupported object privilege // object role_name is using a different syntax so will always pass // here if (outputIgnoredStatements) { database.addIgnoredStatement(statement); return; } else { return; } } if (privilege != null && "ALL".equalsIgnoreCase(privilege)) { parser.expectOptional("PRIVILEGES"); } if (privilege != null && ("ALL".equalsIgnoreCase(privilege)) || ("SELECT".equalsIgnoreCase(privilege)) || ("INSERT".equalsIgnoreCase(privilege)) || ("UPDATE".equalsIgnoreCase(privilege)) || ("REFERENCES".equalsIgnoreCase(privilege))) { columns = parseColumns(parser, database, statement, outputIgnoredStatements); } else { columns = null; } privileges.add(privilege); privilegesColumns.add(columns); while (privilege != null) { if (parser.expectOptional(",")) { privilege = parser.expectOptionalOneOf("SELECT", "INSERT", "UPDATE", "DELETE", "TRUNCATE", "REFERENCES", "TRIGGER", "USAGE"); if (privilege != null && ("ALL".equalsIgnoreCase(privilege)) || ("SELECT".equalsIgnoreCase(privilege)) || ("INSERT".equalsIgnoreCase(privilege)) || ("UPDATE".equalsIgnoreCase(privilege)) || ("REFERENCES".equalsIgnoreCase(privilege))) { columns = parseColumns(parser, database, statement, outputIgnoredStatements); } else { columns = null; } privileges.add(privilege); privilegesColumns.add(columns); } else { privilege = null; } } boolean separator = parser.expectOptional("ON"); if (!separator) { // column object if (outputIgnoredStatements) { database.addIgnoredStatement(statement); return; } } // TODO check 'ALL TABLES IN SCHEMA' may not work String objectType = parser.expectOptionalOneOf("TABLE", "ALL TABLES IN SCHEMA", "SEQUENCE", "ALL SEQUENCES IN SCHEMA", "DATABASE", "DOMAIN", "FOREIGN DATA WRAPPER", "FOREIGN SERVER", "FUNCTION", "ALL FUNCTIONS IN SCHEMA", "LANGUAGE", "LARGE OBJECT", "SCHEMA", "TABLESPACE", "TYPE"); if (objectType == null) { objectType = "TABLE"; } String identifier = parser.parseIdentifier(); if ("FUNCTION".equalsIgnoreCase(objectType) || "ALL FUNCTIONS IN SCHEMA".equalsIgnoreCase(objectType)) { parseConsumeFunctionSignature(parser, database, statement, outputIgnoredStatements); } identifiers.add(identifier); while (identifier != null) { if (parser.expectOptional(",")) { identifier = parser.parseIdentifier(); if ("FUNCTION".equalsIgnoreCase(objectType) || "ALL FUNCTIONS IN SCHEMA" .equalsIgnoreCase(objectType)) { parseConsumeFunctionSignature(parser, database, statement, outputIgnoredStatements); } identifiers.add(identifier); } else { identifier = null; } } if (grant) { parser.expect("TO"); } else { parser.expect("FROM"); } parser.expectOptional("GROUP"); String role = parser.parseIdentifier(); roles.add(role); while (role != null) { if (parser.expectOptional(",")) { parser.expectOptional("GROUP"); role = parser.parseIdentifier(); roles.add(role); } else { role = null; } } if (grant) { grantOption = parser.expectOptional("WITH GRANT OPTION"); } else { revokeMode = parser.expectOptionalOneOf("RESTRICT", "CASCADE"); if ("CASCADE".equalsIgnoreCase(revokeMode)) { if (outputIgnoredStatements) { database.addIgnoredStatement(statement); return; } } } if ("TABLE".equalsIgnoreCase(objectType)) { for (String name : identifiers) { final String schemaName = ParserUtils.getSchemaName(name, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final String objectName = ParserUtils.getObjectName(name); final PgTable table = schema.getTable(objectName); final PgView view = schema.getView(objectName); if (table == null && view == null) throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindObject"), name, statement)); final PgRelation rel = table != null?table:view; for (int i = 0; i < privileges.size(); i++) { String privKey = privileges.get(i); List privValue = privilegesColumns.get(i); if(privValue != null){ for (String columnName : privValue) { if (rel.containsColumn(columnName)) { final PgColumn column = rel .getColumn(columnName); if (column == null) { throw new RuntimeException( MessageFormat.format( Resources .getString("CannotFindTableColumn"), columnName, rel.getName(), parser .getString())); } for (String roleName : roles) { PgColumnPrivilege columnPrivilege = column .getPrivilege(roleName); if (columnPrivilege == null) { columnPrivilege = new PgColumnPrivilege( roleName); column.addPrivilege(columnPrivilege); } columnPrivilege.setPrivileges(privKey, grant, grantOption); } } else { throw new ParserException( MessageFormat.format( Resources .getString("CannotFindColumnInTable"), columnName, rel.getName())); } } } else { for (String roleName : roles) { PgRelationPrivilege relPrivilege = rel .getPrivilege(roleName); if (relPrivilege == null) { relPrivilege = new PgRelationPrivilege(roleName); rel.addPrivilege(relPrivilege); } relPrivilege.setPrivileges(privKey, grant, grantOption); } } } } } else if ("SEQUENCE".equalsIgnoreCase(objectType)) { for (String name : identifiers) { // final String sequenceName = parser.parseIdentifier(); final String schemaName = ParserUtils.getSchemaName(name, database); final PgSchema schema = database.getSchema(schemaName); if (schema == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSchema"), schemaName, statement)); } final String objectName = ParserUtils.getObjectName(name); final PgSequence sequence = schema.getSequence(objectName); if (sequence == null) { throw new RuntimeException(MessageFormat.format( Resources.getString("CannotFindSequence"), name, statement)); } for (String roleName : roles) { PgSequencePrivilege sequencePrivilege = sequence .getPrivilege(roleName); if (sequencePrivilege == null) { sequencePrivilege = new PgSequencePrivilege(roleName); sequence.addPrivilege(sequencePrivilege); } for (String priv : privileges) { sequencePrivilege.setPrivileges(priv, grant, grantOption); } } } } else { if (outputIgnoredStatements) { database.addIgnoredStatement(statement); } } } private static void parseConsumeFunctionSignature(final Parser parser, final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { parser.expect("("); while (!parser.expectOptional(")")) { final String mode; if (parser.expectOptional("IN")) { mode = "IN"; } else if (parser.expectOptional("OUT")) { mode = "OUT"; } else if (parser.expectOptional("INOUT")) { mode = "INOUT"; } else if (parser.expectOptional("VARIADIC")) { mode = "VARIADIC"; } else { mode = null; } final int position = parser.getPosition(); String argumentName = null; String dataType = parser.parseDataType(); final int position2 = parser.getPosition(); if (!parser.expectOptional(")") && !parser.expectOptional(",")) { parser.setPosition(position); argumentName = ParserUtils.getObjectName(parser .parseIdentifier()); dataType = parser.parseDataType(); } else { parser.setPosition(position2); } final PgFunction.Argument argument = new PgFunction.Argument(); argument.setDataType(dataType); argument.setMode(mode); argument.setName(argumentName); if (parser.expectOptional(")")) { break; } else { parser.expect(","); } } } private static List parseColumns(final Parser parser, final PgDatabase database, final String statement, final boolean outputIgnoredStatements) { List result = new ArrayList(); boolean present = parser.expectOptional("("); if (!present) { return null; } String identifier = parser.parseIdentifier(); result.add(identifier); String separator = parser.expectOptionalOneOf(",", ")"); while (separator != null && ",".equalsIgnoreCase(separator)) { identifier = parser.parseIdentifier(); result.add(identifier); separator = parser.expectOptionalOneOf(",", ")"); } return result; } /** * Creates a new GrantParser object. */ private GrantRevokeParser() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/Parser.java000066400000000000000000000371061412634760000277230ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.Resources; import java.text.MessageFormat; import java.util.Locale; /** * Class for parsing strings. * * @author fordfrog */ @SuppressWarnings("FinalClass") public final class Parser { /** * String to be parsed. */ private String string; /** * Current position. */ private int position; /** * Creates new instance of Parser. * * @param string {@link #string} */ public Parser(final String string) { this.string = string; skipWhitespace(); } /** * Checks whether the string contains given word on current position. If not * then throws an exception. * * @param words list of words to check */ public void expect(final String... words) { for (final String word : words) { expect(word, false); } } /** * Checks whether the string contains given word on current position. If not * and expectation is optional then position is not changed and method * returns true. If expectation is not optional, exception with error * description is thrown. If word is found, position is moved at first * non-whitespace character following the word. * * @param word word to expect * @param optional true if word is optional, otherwise false * * @return true if word was found, otherwise false */ public boolean expect(final String word, final boolean optional) { final int wordEnd = position + word.length(); if (wordEnd <= string.length() && string.substring(position, wordEnd).equalsIgnoreCase(word) && (wordEnd == string.length() || Character.isWhitespace(string.charAt(wordEnd)) || string.charAt(wordEnd) == '(' || string.charAt(wordEnd) == ')' || string.charAt(wordEnd) == ';' || string.charAt(wordEnd) == ',' || string.charAt(wordEnd) == '[' || "(".equals(word) || ",".equals(word) || "[".equals(word) || "]".equals(word))) { position = wordEnd; skipWhitespace(); return true; } if (optional) { return false; } int dumpEndPosition = position + 20; if (string.length() - (position + 1) < 20) { dumpEndPosition = string.length() - 1; } throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringExpectedWord"), string, word, position + 1, string.substring(position, dumpEndPosition))); } /** * Checks whether string contains at current position sequence of the words. * * @param words array of words * * @return true if whole sequence was found, otherwise false */ public boolean expectOptional(final String... words) { final int oldPosition = position; boolean found = expect(words[0], true); if (!found) { return false; } for (int i = 1; i < words.length; i++) { skipWhitespace(); found = expect(words[i], true); if (!found) { position = oldPosition; return false; } } return true; } /** * Moves position in the string to next non-whitespace string. */ public void skipWhitespace() { for (; position < string.length(); position++) { if (!Character.isWhitespace(string.charAt(position))) { break; } } } /** * Parses identifier from current position. If identifier is quoted, it is * returned quoted. If the identifier is not quoted, it is converted to * lowercase. If identifier does not start with letter then exception is * thrown. Position is placed at next first non-whitespace character. * * @return parsed identifier */ public String parseIdentifier() { String identifier = parseIdentifierInternal(); while (string.charAt(position) == '.') { position++; identifier += '.' + parseIdentifierInternal(); } skipWhitespace(); return identifier; } /** * Parses single part of the identifier. * * @return parsed identifier */ private String parseIdentifierInternal() { final boolean quoted = string.charAt(position) == '"'; if (quoted) { final int endPos = string.indexOf('"', position + 1); final String result = string.substring(position, endPos + 1); position = endPos + 1; return result; } else { int endPos = position; for (; endPos < string.length(); endPos++) { final char chr = string.charAt(endPos); if (Character.isWhitespace(chr) || chr == ',' || chr == ')' || chr == '(' || chr == ';' || chr == '.') { break; } } final String result = string.substring(position, endPos).toLowerCase( Locale.ENGLISH); position = endPos; return result; } } /** * Returns rest of the string. If the string ends with ';' then it is * removed from the string before returned. If there is nothing more in the * string, null is returned. * * @return rest of the string, without trailing ';' if present, or null if * there is nothing more in the string */ public String getRest() { final String result; if (string.charAt(string.length() - 1) == ';') { if (position == string.length() - 1) { return null; } else { result = string.substring(position, string.length() - 1); } } else { result = string.substring(position); } position = string.length(); return result; } /** * Parses integer from the string. If next word is not integer then * exception is thrown. * * @return parsed integer value */ public int parseInteger() { int endPos = position; for (; endPos < string.length(); endPos++) { if (!Character.isLetterOrDigit(string.charAt(endPos))) { break; } } try { final int result = Integer.parseInt(string.substring(position, endPos)); position = endPos; skipWhitespace(); return result; } catch (final NumberFormatException ex) { throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringExpectedInteger"), string, position + 1, string.substring(position, position + 20)), ex); } } /** * Parses string from the string. String can be either quoted or unqouted. * Quoted string is parsed till next unescaped quote. Unquoted string is * parsed till whitespace, ',' ')' or ';' is found. If string should be * empty, exception is thrown. * * @return parsed string, if quoted then including quotes */ public String parseString() { final boolean quoted = string.charAt(position) == '\''; if (quoted) { boolean escape = false; int endPos = position + 1; for (; endPos < string.length(); endPos++) { final char chr = string.charAt(endPos); if (chr == '\\') { escape = !escape; } else if (!escape && chr == '\'') { if (endPos + 1 < string.length() && string.charAt(endPos + 1) == '\'') { endPos++; } else { break; } } } final String result; try { if (endPos >= string.length()) { //try to fix StringIndexOutOfBoundsException endPos = string.lastIndexOf('\''); } result = string.substring(position, endPos + 1); } catch (final Throwable ex) { throw new RuntimeException("Failed to get substring: " + string + " start pos: " + position + " end pos: " + (endPos + 1), ex); } position = endPos + 1; skipWhitespace(); return result; } else { int endPos = position; for (; endPos < string.length(); endPos++) { final char chr = string.charAt(endPos); if (Character.isWhitespace(chr) || chr == ',' || chr == ')' || chr == ';') { break; } } if (position == endPos) { throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringExpectedString"), string, position + 1)); } final String result = string.substring(position, endPos); position = endPos; skipWhitespace(); return result; } } /** * Returns expression that is ended either with ',', ')' or with end of the * string. If expression is empty then exception is thrown. * * @return expression string */ public String getExpression() { final int endPos = getExpressionEnd(); if (position == endPos) { throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringExpectedExpression"), string, position + 1, string.substring(position, position + 20))); } final String result = string.substring(position, endPos).trim(); position = endPos; return result; } /** * Returns position of last character of single command within statement * (like CREATE TABLE). Last character is either ',' or ')'. If no such * character is found and method reaches the end of the command then * position after the last character in the command is returned. * * @return end position of the command * * @todo Support for dollar quoted strings is missing here. */ private int getExpressionEnd() { int bracesCount = 0; boolean singleQuoteOn = false; int charPos = position; for (; charPos < string.length(); charPos++) { final char chr = string.charAt(charPos); if (chr == '(' || chr == '[') { bracesCount++; } else if (chr == ')' || chr == ']') { if (bracesCount == 0) { break; } else { bracesCount--; } } else if (chr == '\'') { singleQuoteOn = !singleQuoteOn; // escaped single quote is like two single quotes if (charPos > 0 && string.charAt(charPos - 1) == '\\') { singleQuoteOn = !singleQuoteOn; } } else if ((chr == ',') && !singleQuoteOn && (bracesCount == 0)) { break; } else if (chr == ';' && bracesCount == 0 && !singleQuoteOn) { break; } } return charPos; } /** * Returns current position in the string. * * @return current position in the string */ public int getPosition() { return position; } /** * Returns parsed string. * * @return parsed string */ public String getString() { return string; } /** * Throws exception about unsupported command in statement. */ public void throwUnsupportedCommand() { throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringUnsupportedCommand"), string, position + 1, string.substring(position, string.length() > position + 20 ? position + 20 : string.length()))); } /** * Checks whether one of the words is present at current position. If the * word is present then the word is returned and position is updated. * * @param words words to check * * @return found word or null if non of the words has been found * * @see #expectOptional(java.lang.String[]) */ public String expectOptionalOneOf(final String... words) { for (final String word : words) { if (expectOptional(word)) { return word; } } return null; } /** * Returns substring from the string. * * @param startPos start position * @param endPos end position exclusive * * @return substring */ public String getSubString(final int startPos, final int endPos) { return string.substring(startPos, endPos); } /** * Changes current position in the string. * * @param position new position */ public void setPosition(final int position) { this.position = position; } /** * Parses data type from the string. Position is updated. If data type * definition is not found then exception is thrown. * * @return data type string */ public String parseDataType() { int endPos = position; while (endPos < string.length() && !Character.isWhitespace(string.charAt(endPos)) && string.charAt(endPos) != '(' && string.charAt(endPos) != ')' && string.charAt(endPos) != ',') { endPos++; } if (endPos == position) { throw new ParserException(MessageFormat.format( Resources.getString("CannotParseStringExpectedDataType"), string, position + 1, string.substring(position, position + 20))); } String dataType = string.substring(position, endPos); position = endPos; skipWhitespace(); if ("character".equalsIgnoreCase(dataType) && expectOptional("varying")) { dataType = "character varying"; } else if ("double".equalsIgnoreCase(dataType) && expectOptional("precision")) { dataType = "double precision"; } final boolean timestamp = "timestamp".equalsIgnoreCase(dataType) || "time".equalsIgnoreCase(dataType); if (string.charAt(position) == '(') { dataType += getExpression(); } if (timestamp) { if (expectOptional("with", "time", "zone")) { dataType += " with time zone"; } else if (expectOptional("without", "time", "zone")) { dataType += " without time zone"; } } if (expectOptional("[")) { expect("]"); dataType += "[]"; } return dataType; } /** * Checks whether the whole string has been consumed. * * @return true if there is nothing left to parse, otherwise false */ public boolean isConsumed() { return position == string.length() || position + 1 == string.length() && string.charAt(position) == ';'; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/ParserException.java000066400000000000000000000017761412634760000316060ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; /** * Thrown if parsing problem occurred. * * @author fordfrog */ public class ParserException extends RuntimeException { /** * Serial version uid. */ private static final long serialVersionUID = 1L; /** * Creates a new instance of {@code ParserException} without detail message. */ public ParserException() { } /** * Constructs an instance of {@code ParserException} with the specified * detail message. * * @param msg the detail message */ public ParserException(final String msg) { super(msg); } /** * Constructs an instance of {@code ParserException} with the specified * detail message. * * @param msg the detail message * @param cause cause of the exception */ public ParserException(final String msg, final Throwable cause) { super(msg, cause); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/ParserUtils.java000066400000000000000000000112111412634760000307310ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.schema.PgDatabase; import java.util.ArrayList; import java.util.List; /** * Parser utilities. * * @author fordfrog */ public class ParserUtils { /** * Returns object name from optionally schema qualified name. * * @param name optionally schema qualified name * * @return name of the object */ public static String getObjectName(final String name) { final String[] names = splitNames(name); return names[names.length - 1]; } /** * Returns second (from right) object name from optionally schema qualified * name. * * @param name optionally schema qualified name * * @return name of the object */ public static String getSecondObjectName(final String name) { final String[] names = splitNames(name); return names[names.length - 2]; } /** * Returns third (from right) object name from optionally schema qualified * name. * * @param name optionally schema qualified name * * @return name of the object or null if there is no third object name */ public static String getThirdObjectName(final String name) { final String[] names = splitNames(name); return names.length >= 3 ? names[names.length - 3] : null; } /** * Returns schema name from optionally schema qualified name. * * @param name optionally schema qualified name * @param database database * * @return name of the schema */ public static String getSchemaName(final String name, final PgDatabase database) { final String[] names = splitNames(name); if (names.length < 2) { return database.getDefaultSchema().getName(); } else { return names[0]; } } /** * Generates unique name from the prefix, list of names, and postfix. * * @param prefix prefix * @param names list of names * @param postfix postfix * * @return generated name */ public static String generateName(final String prefix, final List names, final String postfix) { final String adjName; if (names.size() == 1) { adjName = names.get(0); } else { final StringBuilder sbString = new StringBuilder(names.size() * 15); for (final String name : names) { if (sbString.length() > 0) { sbString.append(','); } sbString.append(name); } adjName = Integer.toHexString(sbString.toString().hashCode()); } final StringBuilder sbResult = new StringBuilder(30); if (prefix != null && !prefix.isEmpty()) { sbResult.append(prefix); } sbResult.append(adjName); if (postfix != null && !postfix.isEmpty()) { sbResult.append(postfix); } return sbResult.toString(); } /** * Splits qualified names by dots. If names are quoted then quotes are * removed. * * @param string qualified name * * @return array of names */ private static String[] splitNames(final String string) { if (string.indexOf('"') == -1) { return string.split("\\."); } else { final List strings = new ArrayList(2); int startPos = 0; while (true) { if (string.charAt(startPos) == '"') { final int endPos = string.indexOf('"', startPos + 1); strings.add(string.substring(startPos + 1, endPos)); if (endPos + 1 == string.length()) { break; } else if (string.charAt(endPos + 1) == '.') { startPos = endPos + 2; } else { startPos = endPos + 1; } } else { final int endPos = string.indexOf('.', startPos); if (endPos == -1) { strings.add(string.substring(startPos)); break; } else { strings.add(string.substring(startPos, endPos)); startPos = endPos + 1; } } } return strings.toArray(new String[strings.size()]); } } /** * Creates a new instance of ParserUtils. */ private ParserUtils() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/parsers/package-info.java000066400000000000000000000001451412634760000310040ustar00rootroot00000000000000/** * Parsers for parsing DDLs from PostgreSQL dumps. */ package cz.startnet.utils.pgdiff.parsers; apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/000077500000000000000000000000001412634760000253765ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgColumn.java000077500000000000000000000162321412634760000277740ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Stores column information. * * @author fordfrog */ public class PgColumn { /** * Pattern for parsing NULL arguments. */ private static final Pattern PATTERN_NULL = Pattern.compile("^(.+)[\\s]+NULL$", Pattern.CASE_INSENSITIVE); /** * Pattern for parsing NOT NULL arguments. */ private static final Pattern PATTERN_NOT_NULL = Pattern.compile( "^(.+)[\\s]+NOT[\\s]+NULL$", Pattern.CASE_INSENSITIVE); /** * Pattern for parsing DEFAULT value. */ private static final Pattern PATTERN_DEFAULT = Pattern.compile( "^(.+)[\\s]+DEFAULT[\\s]+(.+)$", Pattern.CASE_INSENSITIVE); /** * Specific statistics value. */ private Integer statistics; /** * Default value of the column. */ private String defaultValue; /** * Name of the column. */ private String name; /** * Type of the column. Always null for view columns. */ private String type; /** * Determines whether null value is allowed in the column. */ private boolean nullValue = true; /** * Contains information about column storage type. */ private String storage; /** * Comment. */ private String comment; /** * List of privileges defined on the table. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List privileges = new ArrayList(); /** * Generated. */ private String generated; /** * Creates a new PgColumn object. * * @param name name of the column */ public PgColumn(final String name) { this.name = name; } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Setter for {@link #defaultValue}. * * @param defaultValue {@link #defaultValue} */ public void setDefaultValue(final String defaultValue) { this.defaultValue = defaultValue; } /** * Getter for {@link #defaultValue}. * * @return {@link #defaultValue} */ public String getDefaultValue() { return defaultValue; } /** * Returns full definition of the column. * * @param addDefaults whether default value should be added in case NOT NULL * constraint is specified but no default value is set * * @return full definition of the column */ public String getFullDefinition(final boolean addDefaults) { final StringBuilder sbDefinition = new StringBuilder(100); sbDefinition.append(PgDiffUtils.getQuotedName(name)); sbDefinition.append(' '); sbDefinition.append(type); if (defaultValue != null && !defaultValue.isEmpty()) { sbDefinition.append(" DEFAULT "); sbDefinition.append(defaultValue); } else if (!nullValue && addDefaults) { final String defaultColValue = PgColumnUtils.getDefaultValue(type); if (defaultColValue != null) { sbDefinition.append(" DEFAULT "); sbDefinition.append(defaultColValue); } } if (!nullValue) { sbDefinition.append(" NOT NULL"); } return sbDefinition.toString(); } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #nullValue}. * * @param nullValue {@link #nullValue} */ public void setNullValue(final boolean nullValue) { this.nullValue = nullValue; } /** * Getter for {@link #nullValue}. * * @return {@link #nullValue} */ public boolean getNullValue() { return nullValue; } /** * Setter for {@link #statistics}. * * @param statistics {@link #statistics} */ public void setStatistics(final Integer statistics) { this.statistics = statistics; } /** * Getter for {@link #statistics}. * * @return {@link #statistics} */ public Integer getStatistics() { return statistics; } /** * Getter for {@link #storage}. * * @return {@link #storage} */ public String getStorage() { return storage; } /** * Setter for {@link #storage}. * * @param storage {@link #storage} */ public void setStorage(final String storage) { this.storage = storage; } /** * Setter for {@link #type}. * * @param type {@link #type} */ public void setType(final String type) { this.type = type; } /** * Getter for {@link #type}. * * @return {@link #type} */ public String getType() { return type; } public void addPrivilege(final PgColumnPrivilege privilege) { privileges.add(privilege); } public PgColumnPrivilege getPrivilege(final String roleName) { for (PgColumnPrivilege privilege : privileges) { if (privilege.getRoleName().equals(roleName)) { return privilege; } } return null; } public List getPrivileges() { return Collections.unmodifiableList(privileges); } /** * Parses definition of the column * * @param definition definition of the column */ public void parseDefinition(final String definition) { String string = definition; Matcher matcher = PATTERN_NOT_NULL.matcher(string); if (matcher.matches()) { string = matcher.group(1).trim(); setNullValue(false); } else { matcher = PATTERN_NULL.matcher(string); if (matcher.matches()) { string = matcher.group(1).trim(); setNullValue(true); } } matcher = PATTERN_DEFAULT.matcher(string); if (matcher.matches()) { string = matcher.group(1).trim(); setDefaultValue(matcher.group(2).trim()); } setType(string); } /** * Getter for {@link #generated}. * * @return {@link #generated} */ public String getGenerated() { return generated; } /** * Setter for {@link #generated}. * * @param generated {@link #generated} */ public void setGenerated(final String generated) { this.generated = generated; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgColumnPrivilege.java000066400000000000000000000140261412634760000316370ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; /** * Stores tablePrivileges information. * * @author user */ public class PgColumnPrivilege { private final String roleName; private boolean select = false; private boolean insert = false; private boolean update = false; private boolean references = false; private boolean selectWithGrantOption = false; private boolean insertWithGrantOption = false; private boolean updateWithGrantOption = false; private boolean referencesWithGrantOption = false; /** * Creates a new PgTablePrivilege object. * * @param roleName * name of the role */ public PgColumnPrivilege(final String roleName) { this.roleName = roleName; } /** * @return the roleName */ public String getRoleName() { return roleName; } public void setPrivileges(final String privilege, final boolean value, final boolean grantOption) { if ("SELECT".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { select = true; if (grantOption) { selectWithGrantOption = true; } } else { selectWithGrantOption = false; if (!grantOption) { select = false; } } } if ("INSERT".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { insert = true; if (grantOption) { insertWithGrantOption = true; } } else { insertWithGrantOption = false; if (!grantOption) { insert = false; } } } if ("UPDATE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { update = true; if (grantOption) { updateWithGrantOption = true; } } else { updateWithGrantOption = false; if (!grantOption) { update = false; } } } if ("REFERENCES".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { references = true; if (grantOption) { referencesWithGrantOption = true; } } else { referencesWithGrantOption = false; if (!grantOption) { references = false; } } } } /** * true the privileges are the same (no matter of roleName). * * @param other * privileges to compare * @return isSimilar */ public boolean isSimilar(final PgColumnPrivilege other) { if (other == null) { return false; } if (select != other.select) { return false; } if (selectWithGrantOption != other.selectWithGrantOption) { return false; } if (insert != other.insert) { return false; } if (insertWithGrantOption != other.insertWithGrantOption) { return false; } if (update != other.update) { return false; } if (updateWithGrantOption != other.updateWithGrantOption) { return false; } if (references != other.references) { return false; } if (referencesWithGrantOption != other.referencesWithGrantOption) { return false; } return true; } public String getPrivilegesSQL(final boolean withGrantOption, String columnName) { if (withGrantOption) { if (selectWithGrantOption && insertWithGrantOption && updateWithGrantOption && referencesWithGrantOption) { return "ALL (" + columnName + ")"; } String result = ""; if (selectWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "SELECT (" + columnName + ")"; } if (insertWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "INSERT (" + columnName + ")"; } if (updateWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "UPDATE (" + columnName + ")"; } if (referencesWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "REFERENCES (" + columnName + ")"; } return result; } else { if (select && insert && update && references) { return "ALL (" + columnName + ")"; } String result = ""; if (select) { if (!"".equals(result)) { result += ", "; } result += "SELECT (" + columnName + ")"; } if (insert) { if (!"".equals(result)) { result += ", "; } result += "INSERT (" + columnName + ")"; } if (update) { if (!"".equals(result)) { result += ", "; } result += "UPDATE (" + columnName + ")"; } if (references) { if (!"".equals(result)) { result += ", "; } result += "REFERENCES (" + columnName + ")"; } return result; } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgColumnUtils.java000066400000000000000000000034121412634760000310060ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import java.util.Locale; /** * Utilities for {@link PgColumn}. * * @author fordfrog */ public class PgColumnUtils { /** * Returns default value for given column type. If no default value is * specified then null is returned. * * @param type column type * * @return found default value or null */ public static String getDefaultValue(final String type) { final String defaultValue; final String adjType = type.toLowerCase(Locale.ENGLISH); if ("smallint".equals(adjType) || "integer".equals(adjType) || "bigint".equals(adjType) || adjType.startsWith("decimal") || adjType.startsWith("numeric") || "real".equals(adjType) || "double precision".equals(adjType) || "int2".equals(adjType) || "int4".equals(adjType) || "int8".equals(adjType) || adjType.startsWith("float") || "double".equals(adjType) || "money".equals(adjType)) { defaultValue = "0"; } else if (adjType.startsWith("character varying") || adjType.startsWith("varchar") || adjType.startsWith("character") || adjType.startsWith("char") || "text".equals(adjType)) { defaultValue = "''"; } else if ("boolean".equals(adjType)) { defaultValue = "false"; } else { defaultValue = null; } return defaultValue; } /** * Creates a new PgColumnUtils object. */ private PgColumnUtils() { } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgConstraint.java000077500000000000000000000124411412634760000306610ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.regex.Pattern; /** * Stores table constraint information. * * @author fordfrog */ public class PgConstraint { /** * Pattern for checking whether the constraint is PRIMARY KEY constraint. */ private static final Pattern PATTERN_PRIMARY_KEY = Pattern.compile(".*PRIMARY[\\s]+KEY.*", Pattern.CASE_INSENSITIVE); /** * Definition of the constraint. */ private String definition; /** * Name of the constraint. */ private String name; /** * Name of the table the constraint is defined on. */ private String tableName; /** * Comment. */ private String comment; /** * Creates a new PgConstraint object. * * @param name {@link #name} */ public PgConstraint(String name) { this.name = name; } /** * Creates and returns SQL for creation of the constraint. * @return created SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("ALTER TABLE "); sbSQL.append(PgDiffUtils.getDropIfExists()); sbSQL.append(PgDiffUtils.getQuotedName(getTableName())); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tADD CONSTRAINT "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(getName())); sbSQL.append(' '); sbSQL.append(getDefinition()); sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON CONSTRAINT "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ON "); sbSQL.append(PgDiffUtils.getQuotedName(tableName)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Setter for {@link #definition}. * * @param definition {@link #definition} */ public void setDefinition(final String definition) { this.definition = definition; } /** * Getter for {@link #definition}. * * @return {@link #definition} */ public String getDefinition() { return definition; } /** * Creates and returns SQL for dropping the constraint. * @return created SQL */ public String getDropSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("ALTER TABLE "); sbSQL.append(PgDiffUtils.getDropIfExists()); sbSQL.append(PgDiffUtils.getQuotedName(getTableName())); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tDROP CONSTRAINT "); sbSQL.append(PgDiffUtils.getDropIfExists()); sbSQL.append(PgDiffUtils.getQuotedName(getName())); sbSQL.append(';'); return sbSQL.toString(); } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Returns true if this is a PRIMARY KEY constraint, otherwise false. * * @return true if this is a PRIMARY KEY constraint, otherwise false */ public boolean isPrimaryKeyConstraint() { return PATTERN_PRIMARY_KEY.matcher(definition).matches(); } /** * Setter for {@link #tableName}. * * @param tableName {@link #tableName} */ public void setTableName(final String tableName) { this.tableName = tableName; } /** * Getter for {@link #tableName}. * * @return {@link #tableName} */ public String getTableName() { return tableName; } /** * {@inheritDoc} * * @param object {@inheritDoc} * * @return {@inheritDoc} */ @Override public boolean equals(final Object object) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgConstraint) { final PgConstraint constraint = (PgConstraint) object; equals = definition.equals(constraint.getDefinition()) && name.equals(constraint.getName()) && tableName.equals(constraint.getTableName()); } return equals; } /** * {@inheritDoc} * * @return {@inheritDoc} */ @Override public int hashCode() { return (getClass().getName() + "|" + definition + "|" + name + "|" + tableName).hashCode(); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgDatabase.java000066400000000000000000000105451412634760000302410ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.parsers.ParserException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; /** * Stores database information. * * @author fordfrog */ public class PgDatabase { /** * List of database schemas. */ private final List schemas = new ArrayList(1); /** * Array of ignored statements. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List ignoredStatements = new ArrayList(); /** * Current default schema. */ private PgSchema defaultSchema; /** * Comment. */ private String comment; /** * List of extensions. */ private final List extensions = new ArrayList(); /** * Creates a new PgDatabase object. */ public PgDatabase() { schemas.add(new PgSchema("public")); defaultSchema = schemas.get(0); } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Sets default schema according to the {@code name} of the schema. * * @param name name of the schema */ public void setDefaultSchema(final String name) { defaultSchema = getSchema(name); } /** * Getter for {@link #defaultSchema}. * * @return {@link #defaultSchema} */ public PgSchema getDefaultSchema() { return defaultSchema; } /** * Getter for {@link #ignoredStatements}. * * @return {@link #ignoredStatements} */ public List getIgnoredStatements() { return Collections.unmodifiableList(ignoredStatements); } /** * Adds ignored statement to the list of ignored statements. * * @param ignoredStatement ignored statement */ public void addIgnoredStatement(final String ignoredStatement) { ignoredStatements.add(ignoredStatement); } /** * Returns schema of given name or null if the schema has not been found. If * schema name is null then default schema is returned. * * @param name schema name or null which means default schema * * @return found schema or null */ public PgSchema getSchema(final String name) { if (name == null) { return getDefaultSchema(); } for (final PgSchema schema : schemas) { if (schema.getName().equals(name)) { return schema; } } return null; } /** * Getter for {@link #schemas}. The list cannot be modified. * * @return {@link #schemas} */ public List getSchemas() { return Collections.unmodifiableList(schemas); } /** * Adds {@code schema} to the lists of schemas. * * @param schema schema */ public void addSchema(final PgSchema schema) { if (schemas.isEmpty()) { schemas.add(schema); } else if (!schemas.stream().filter(o -> o.getName().equals(schema.getName())).findFirst().isPresent()) { schemas.add(schema); } } /** * Getter for {@link #extensions}. The list cannot be modified. * * @return {@link #extensions} */ public List getExtensions() { return Collections.unmodifiableList(extensions); } /** * Adds {@code extension} to the list of extensions. * * @param extension extension */ public void addExtension(final PgExtension extension) { extensions.add(extension); } /** * Returns extension of given name or null if the extension has not been found. * * @param name extension name * @return found extension or null */ public PgExtension getExtension(final String name) { for (final PgExtension extension : extensions) { if (extension.getName().equals(name)) { return extension; } } return null; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgExtension.java000066400000000000000000000061331412634760000305070ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; /** * * @author atila */ public class PgExtension { /** * Name of the extension. */ private final String name; /** * PgSchema */ private PgSchema schema; /** * Version of the extension. */ private String version; /** * Previous version of the extension. */ private String from; public PgExtension(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Getter for {@link #schema}. * * @return {@link #schema} */ public PgSchema getSchema() { return schema; } /** * Setter for {@link #schema}. * * @param schema {@link #schema} */ public void setSchema(PgSchema schema) { this.schema = schema; } /** * Getter for {@link #version}. * * @return {@link #version} */ public String getVersion() { return version; } /** * Setter for {@link #version}. * * @param version {@link #version} */ public void setVersion(String version) { this.version = version; } /** * Getter for {@link #from}. * * @return {@link #from} */ public String getFrom() { return from; } /** * Setter for {@link #from}. * * @param from {@link #from} */ public void setFrom(String from) { this.from = from; } /** * Returns creation SQL of the function. * * @return creation SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(); sbSQL.append("CREATE EXTENSION "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(name)); if (schema != null) { sbSQL.append(" SCHEMA "); sbSQL.append(schema.getName()); } if (version != null && !version.isEmpty()) { sbSQL.append(" VERSION "); sbSQL.append(version); } if (from != null && !from.isEmpty()) { sbSQL.append(" FROM "); sbSQL.append(from); } sbSQL.append(';'); return sbSQL.toString(); } @Override public boolean equals(final Object object) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgExtension) { final PgExtension extension = (PgExtension) object; equals = name.equals(extension.getName()) && from.equals(extension.getFrom()) && version.equals(extension.getVersion()); } return equals; } @Override public int hashCode() { return (getClass().getName() + "|" + name + "|" + version + "|" + from).hashCode(); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgFunction.java000077500000000000000000000304711412634760000303250ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; /** * Stores function information. * * @author fordfrog */ public class PgFunction { /** * Name of the function including argument types. */ private String name; /** * List of arguments. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List arguments = new ArrayList(); /** * Whole definition of the function from RETURNS keyword. */ private String body; /** * Comment. */ private String comment; /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Returns creation SQL of the function. * * @return creation SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(500); sbSQL.append("CREATE OR REPLACE FUNCTION "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append('('); boolean addComma = false; for (final Argument argument : arguments) { if (addComma) { sbSQL.append(", "); } sbSQL.append(argument.getDeclaration(true)); addComma = true; } sbSQL.append(") "); sbSQL.append(body); sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON FUNCTION "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append('('); addComma = false; for (final Argument argument : arguments) { if (addComma) { sbSQL.append(", "); } sbSQL.append(argument.getDeclaration(false)); addComma = true; } sbSQL.append(") IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Setter for {@link #body}. * * @param body {@link #body} */ public void setBody(final String body) { this.body = body; } /** * Getter for {@link #body}. * * @return {@link #body} */ public String getBody() { return body; } /** * Creates and returns SQL for dropping the function. * * @return created SQL */ public String getDropSQL() { final StringBuilder sbString = new StringBuilder(100); sbString.append("DROP FUNCTION "); sbString.append(PgDiffUtils.getDropIfExists()); sbString.append(name); sbString.append('('); boolean addComma = false; for (final Argument argument : arguments) { if ("OUT".equalsIgnoreCase(argument.getMode())) { continue; } if (addComma) { sbString.append(", "); } sbString.append(argument.getDeclaration(false)); addComma = true; } sbString.append(");"); return sbString.toString(); } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Getter for {@link #arguments}. List cannot be modified. * * @return {@link #arguments} */ public List getArguments() { return Collections.unmodifiableList(arguments); } /** * Adds argument to the list of arguments. * * @param argument argument */ public void addArgument(final Argument argument) { arguments.add(argument); } /** * Returns function signature. It consists of unquoted name and argument * data types. * * @return function signature */ public String getSignature() { final StringBuilder sbString = new StringBuilder(100); sbString.append(name); sbString.append('('); boolean addComma = false; for (final Argument argument : arguments) { if ("OUT".equalsIgnoreCase(argument.getMode())) { continue; } if (addComma) { sbString.append(','); } sbString.append(argument.getDataType().toLowerCase(Locale.ENGLISH)); addComma = true; } sbString.append(')'); return sbString.toString(); } @Override public boolean equals(final Object object) { if (!(object instanceof PgFunction)) { return false; } else if (object == this) { return true; } return equals(object, false); } /** * Compares two objects whether they are equal. If both objects are of the * same class but they equal just in whitespace in {@link #body}, they are * considered being equal. * * @param object object to be compared * @param ignoreFunctionWhitespace whether multiple whitespaces in function * {@link #body} should be ignored * * @return true if {@code object} is pg function and the function code is * the same when compared ignoring whitespace, otherwise returns * false */ public boolean equals(final Object object, final boolean ignoreFunctionWhitespace) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgFunction) { final PgFunction function = (PgFunction) object; if (name == null && function.getName() != null || name != null && !name.equals(function.getName())) { return false; } final String thisBody; final String thatBody; if (ignoreFunctionWhitespace) { thisBody = body.replaceAll("\\s+", " "); thatBody = function.getBody().replaceAll("\\s+", " "); } else { thisBody = body; thatBody = function.getBody(); } if (thisBody == null && thatBody != null || thisBody != null && !thisBody.equals(thatBody)) { return false; } if (arguments.size() != function.getArguments().size()) { return false; } else { for (int i = 0; i < arguments.size(); i++) { if (!arguments.get(i).equals(function.getArguments().get(i))) { return false; } } } return true; } return equals; } @Override public int hashCode() { final StringBuilder sbString = new StringBuilder(500); sbString.append(body); sbString.append('|'); sbString.append(name); for (final Argument argument : arguments) { sbString.append('|'); sbString.append(argument.getDeclaration(true)); } return sbString.toString().hashCode(); } /** * Function argument information. */ @SuppressWarnings("PublicInnerClass") public static class Argument { /** * Argument mode. */ private String mode = "IN"; /** * Argument name. */ private String name; /** * Argument data type. */ private String dataType; /** * Argument default expression. */ private String defaultExpression; /** * Getter for {@link #dataType}. * * @return {@link #dataType} */ public String getDataType() { return dataType; } /** * Setter for {@link #dataType}. * * @param dataType {@link #dataType} */ public void setDataType(final String dataType) { this.dataType = dataType; } /** * Getter for {@link #defaultExpression}. * * @return {@link #defaultExpression} */ public String getDefaultExpression() { return defaultExpression; } /** * Setter for {@link #defaultExpression}. * * @param defaultExpression {@link #defaultExpression} */ public void setDefaultExpression(final String defaultExpression) { this.defaultExpression = defaultExpression; } /** * Getter for {@link #mode}. * * @return {@link #mode} */ public String getMode() { return mode; } /** * Setter for {@link #mode}. * * @param mode {@link #mode} */ public void setMode(final String mode) { this.mode = mode == null || mode.isEmpty() ? "IN" : mode; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Creates argument declaration. * * @param includeDefaultValue whether to include default value * * @return argument declaration */ public String getDeclaration(final boolean includeDefaultValue) { final StringBuilder sbString = new StringBuilder(50); if (mode != null && !"IN".equalsIgnoreCase(mode)) { sbString.append(mode); sbString.append(' '); } if (name != null && !name.isEmpty()) { sbString.append(PgDiffUtils.getQuotedName(name)); sbString.append(' '); } sbString.append(dataType); if (includeDefaultValue && defaultExpression != null && !defaultExpression.isEmpty()) { sbString.append(" = "); sbString.append(defaultExpression); } return sbString.toString(); } @Override public boolean equals(final Object obj) { if (!(obj instanceof Argument)) { return false; } else if (this == obj) { return true; } final Argument argument = (Argument) obj; return (dataType == null ? argument.getDataType() == null : dataType.equalsIgnoreCase(argument.getDataType())) && (defaultExpression == null ? argument.getDefaultExpression() == null : defaultExpression.equals(defaultExpression)) && (mode == null ? argument.getMode() == null : mode.equalsIgnoreCase(argument.getMode())) && (name == null ? argument.getName() == null : name.equals(argument.getName())); } @Override public int hashCode() { final StringBuilder sbString = new StringBuilder(50); sbString.append( mode == null ? null : mode.toUpperCase(Locale.ENGLISH)); sbString.append('|'); sbString.append(name); sbString.append('|'); sbString.append(dataType == null ? null : dataType.toUpperCase(Locale.ENGLISH)); sbString.append('|'); sbString.append(defaultExpression); return sbString.toString().hashCode(); } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgIndex.java000077500000000000000000000112611412634760000276030ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; /** * Stores table index information. * * @author fordfrog */ public class PgIndex { /** * Definition of the index. */ private String definition; /** * Name of the index. */ private String name; /** * Table name the index is defined on. */ private String tableName; /** * Whether the index is unique. */ private boolean unique; /** * Comment. */ private String comment; /** * Creates a new PgIndex object. * * @param name {@link #name} */ public PgIndex(final String name) { this.name = name; } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Creates and returns SQL for creation of the index. * * @return created SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("CREATE "); if (isUnique()) { sbSQL.append("UNIQUE "); } sbSQL.append("INDEX "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(getName())); sbSQL.append(" ON "); sbSQL.append(PgDiffUtils.getQuotedName(getTableName())); sbSQL.append(' '); sbSQL.append(getDefinition()); sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON INDEX "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Setter for {@link #definition}. * * @param definition {@link #definition} */ public void setDefinition(final String definition) { this.definition = definition; } /** * Getter for {@link #definition}. * * @return {@link #definition} */ public String getDefinition() { return definition; } /** * Creates and returns SQL statement for dropping the index. * * @return created SQL statement */ public String getDropSQL() { return "DROP INDEX " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + ";"; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #tableName}. * * @param tableName {@link #tableName} */ public void setTableName(final String tableName) { this.tableName = tableName; } /** * Getter for {@link #tableName}. * * @return {@link #tableName} */ public String getTableName() { return tableName; } /** * {@inheritDoc} * * @param object {@inheritDoc} * * @return {@inheritDoc} */ @Override public boolean equals(final Object object) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgIndex) { final PgIndex index = (PgIndex) object; equals = definition.equals(index.getDefinition()) && name.equals(index.getName()) && tableName.equals(index.getTableName()) && unique == index.isUnique(); } return equals; } /** * {@inheritDoc} * * @return {@inheritDoc} */ @Override public int hashCode() { return (getClass().getName() + "|" + definition + "|" + name + "|" + tableName + "|" + unique).hashCode(); } /** * Getter for {@link #unique}. * * @return {@link #unique} */ public boolean isUnique() { return unique; } /** * Setter for {@link #unique}. * * @param unique {@link #unique} */ public void setUnique(final boolean unique) { this.unique = unique; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgInheritedColumn.java000066400000000000000000000031111412634760000316150ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; /** * Stores inherited column information. * * @author dwatson78 */ public class PgInheritedColumn { /** * Inherited column */ private final PgColumn inheritedColumn; public PgInheritedColumn(final PgColumn inheritedColumn) { this.inheritedColumn = inheritedColumn; } /** * Getter for {@link #inheritedColumn}. * * @return {@link #inheritedColumn} */ public PgColumn getInheritedColumn() { return inheritedColumn; } /** * Default value of the column. */ private String defaultValue; /** * Determines whether null value is allowed in the column. */ private boolean nullValue = true; /** * Setter for {@link #defaultValue}. * * @param defaultValue {@link #defaultValue} */ public void setDefaultValue(final String defaultValue) { this.defaultValue = defaultValue; } /** * Getter for {@link #defaultValue}. * * @return {@link #defaultValue} */ public String getDefaultValue() { return defaultValue; } /** * Setter for {@link #nullValue}. * * @param nullValue {@link #nullValue} */ public void setNullValue(final boolean nullValue) { this.nullValue = nullValue; } /** * Getter for {@link #nullValue}. * * @return {@link #nullValue} */ public boolean getNullValue() { return nullValue; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgPolicy.java000066400000000000000000000027501412634760000277730ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Objects; /** * * Stores POLICY information. * */ public class PgPolicy { private String name; private String tableName; private String command; private List roles = new ArrayList(); private String using; private String withCheck; public void setName(final String name) { this.name = name; } public String getName() { return name; } public void setTableName(final String tableName) { this.tableName = tableName; } public String getTableName() { return tableName; } public void setCommand(final String command) { this.command = command; } public String getCommand() { return command; } public List getRoles() { return roles; } public void addRole(final String role) { roles.add(role); } public void setUsing(final String using) { this.using = using; } public String getUsing() { return using; } public void setWithCheck(final String withCheck) { this.withCheck = withCheck; } public String getWithCheck() { return withCheck; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgProcedure.java000066400000000000000000000305331412634760000304640ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; /** * Stores procedure information. * * @author jalissonmello */ public class PgProcedure { /** * Name of the procedure including argument types. */ private String name; /** * List of arguments. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List arguments = new ArrayList(); /** * Whole definition of the procedure from RETURNS keyword. */ private String body; /** * Comment. */ private String comment; /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Returns creation SQL of the procedure. * * @return creation SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(500); sbSQL.append("CREATE OR REPLACE PROCEDURE "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append('('); boolean addComma = false; for (final Argument argument : arguments) { if (addComma) { sbSQL.append(", "); } sbSQL.append(argument.getDeclaration(true)); addComma = true; } sbSQL.append(") "); sbSQL.append(body); sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON PROCEDURE "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append('('); addComma = false; for (final Argument argument : arguments) { if (addComma) { sbSQL.append(", "); } sbSQL.append(argument.getDeclaration(false)); addComma = true; } sbSQL.append(") IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Setter for {@link #body}. * * @param body {@link #body} */ public void setBody(final String body) { this.body = body; } /** * Getter for {@link #body}. * * @return {@link #body} */ public String getBody() { return body; } /** * Creates and returns SQL for dropping the procedure. * * @return created SQL */ public String getDropSQL() { final StringBuilder sbString = new StringBuilder(100); sbString.append("DROP PROCEDURE "); sbString.append(PgDiffUtils.getDropIfExists()); sbString.append(name); sbString.append('('); boolean addComma = false; for (final Argument argument : arguments) { if ("OUT".equalsIgnoreCase(argument.getMode())) { continue; } if (addComma) { sbString.append(", "); } sbString.append(argument.getDeclaration(false)); addComma = true; } sbString.append(");"); return sbString.toString(); } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Getter for {@link #arguments}. List cannot be modified. * * @return {@link #arguments} */ public List getArguments() { return Collections.unmodifiableList(arguments); } /** * Adds argument to the list of arguments. * * @param argument argument */ public void addArgument(final Argument argument) { arguments.add(argument); } /** * Returns procedure signature. It consists of unquoted name and argument * data types. * * @return procedure signature */ public String getSignature() { final StringBuilder sbString = new StringBuilder(100); sbString.append(name); sbString.append('('); boolean addComma = false; for (final Argument argument : arguments) { if ("OUT".equalsIgnoreCase(argument.getMode())) { continue; } if (addComma) { sbString.append(','); } sbString.append(argument.getDataType().toLowerCase(Locale.ENGLISH)); addComma = true; } sbString.append(')'); return sbString.toString(); } @Override public boolean equals(final Object object) { if (!(object instanceof PgProcedure)) { return false; } else if (object == this) { return true; } return equals(object, false); } /** * Compares two objects whether they are equal. If both objects are of the * same class but they equal just in whitespace in {@link #body}, they are * considered being equal. * * @param object object to be compared * @param ignoreProcedureWhitespace whether multiple whitespaces in procedure * {@link #body} should be ignored * * @return true if {@code object} is pg procedure and the procedure code is * the same when compared ignoring whitespace, otherwise returns * false */ public boolean equals(final Object object, final boolean ignoreProcedureWhitespace) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgProcedure) { final PgProcedure procedure = (PgProcedure) object; if (name == null && procedure.getName() != null || name != null && !name.equals(procedure.getName())) { return false; } final String thisBody; final String thatBody; if (ignoreProcedureWhitespace) { thisBody = body.replaceAll("\\s+", " "); thatBody = procedure.getBody().replaceAll("\\s+", " "); } else { thisBody = body; thatBody = procedure.getBody(); } if (thisBody == null && thatBody != null || thisBody != null && !thisBody.equals(thatBody)) { return false; } if (arguments.size() != procedure.getArguments().size()) { return false; } else { for (int i = 0; i < arguments.size(); i++) { if (!arguments.get(i).equals(procedure.getArguments().get(i))) { return false; } } } return true; } return equals; } @Override public int hashCode() { final StringBuilder sbString = new StringBuilder(500); sbString.append(body); sbString.append('|'); sbString.append(name); for (final Argument argument : arguments) { sbString.append('|'); sbString.append(argument.getDeclaration(true)); } return sbString.toString().hashCode(); } /** * Procedure argument information. */ @SuppressWarnings("PublicInnerClass") public static class Argument { /** * Argument mode. */ private String mode = "IN"; /** * Argument name. */ private String name; /** * Argument data type. */ private String dataType; /** * Argument default expression. */ private String defaultExpression; /** * Getter for {@link #dataType}. * * @return {@link #dataType} */ public String getDataType() { return dataType; } /** * Setter for {@link #dataType}. * * @param dataType {@link #dataType} */ public void setDataType(final String dataType) { this.dataType = dataType; } /** * Getter for {@link #defaultExpression}. * * @return {@link #defaultExpression} */ public String getDefaultExpression() { return defaultExpression; } /** * Setter for {@link #defaultExpression}. * * @param defaultExpression {@link #defaultExpression} */ public void setDefaultExpression(final String defaultExpression) { this.defaultExpression = defaultExpression; } /** * Getter for {@link #mode}. * * @return {@link #mode} */ public String getMode() { return mode; } /** * Setter for {@link #mode}. * * @param mode {@link #mode} */ public void setMode(final String mode) { this.mode = mode == null || mode.isEmpty() ? "IN" : mode; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Creates argument declaration. * * @param includeDefaultValue whether to include default value * * @return argument declaration */ public String getDeclaration(final boolean includeDefaultValue) { final StringBuilder sbString = new StringBuilder(50); if (mode != null && !"IN".equalsIgnoreCase(mode)) { sbString.append(mode); sbString.append(' '); } if (name != null && !name.isEmpty()) { sbString.append(PgDiffUtils.getQuotedName(name)); sbString.append(' '); } sbString.append(dataType); if (includeDefaultValue && defaultExpression != null && !defaultExpression.isEmpty()) { sbString.append(" = "); sbString.append(defaultExpression); } return sbString.toString(); } @Override public boolean equals(final Object obj) { if (!(obj instanceof Argument)) { return false; } else if (this == obj) { return true; } final Argument argument = (Argument) obj; return (dataType == null ? argument.getDataType() == null : dataType.equalsIgnoreCase(argument.getDataType())) && (defaultExpression == null ? argument.getDefaultExpression() == null : defaultExpression.equals(defaultExpression)) && (mode == null ? argument.getMode() == null : mode.equalsIgnoreCase(argument.getMode())) && (name == null ? argument.getName() == null : name.equals(argument.getName())); } @Override public int hashCode() { final StringBuilder sbString = new StringBuilder(50); sbString.append( mode == null ? null : mode.toUpperCase(Locale.ENGLISH)); sbString.append('|'); sbString.append(name); sbString.append('|'); sbString.append(dataType == null ? null : dataType.toUpperCase(Locale.ENGLISH)); sbString.append('|'); sbString.append(defaultExpression); return sbString.toString().hashCode(); } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgRelation.java000077500000000000000000000244501412634760000303150ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Base class for tables and views. * * @author Marti Raudsepp */ public abstract class PgRelation { /** * List of columns defined on the relation. */ @SuppressWarnings("CollectionWithoutInitialCapacity") protected final List columns = new ArrayList(); /** * List of indexes defined on the relation. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List indexes = new ArrayList(); /** * List of triggers defined on the table/view. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List triggers = new ArrayList(); /** * List of rules defined on the table/view. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List rules = new ArrayList(); /** * Name of the index on which the table/matview is clustered */ private String clusterIndexName; /** * Name of the relation. */ protected String name; /** * Tablespace value. */ protected String tablespace; /** * Comment. */ String comment; /** * List of privileges defined on the table. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List privileges = new ArrayList(); /** * Column the table is owner to. */ private String ownerTo; /** * Setter for {@link #clusterIndexName}. * * @param name {@link #clusterIndexName} */ public void setClusterIndexName(final String name) { clusterIndexName = name; } /** * Getter for {@link #clusterIndexName}. * * @return {@link #clusterIndexName} */ public String getClusterIndexName() { return clusterIndexName; } /** * Finds column according to specified column {@code name}. * * @param name name of the column to be searched * * @return found column or null if no such column has been found */ public PgColumn getColumn(final String name) { for (PgColumn column : columns) { if (column.getName().equals(name)) { return column; } } return null; } /** * Getter for {@link #columns}. The list cannot be modified. * * @return {@link #columns} */ public List getColumns() { return Collections.unmodifiableList(columns); } /** * Generates SQL code for declaring relation and column comments * * @return SQL code for declaring relation and column comments */ protected String getCommentDefinitionSQL() { final StringBuilder sbSQL = new StringBuilder(100); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON "); sbSQL.append(getRelationKind()); sbSQL.append(' '); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } for (final PgColumn column : columns) { if (column.getComment() != null && !column.getComment().isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON COLUMN "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append('.'); sbSQL.append(PgDiffUtils.getQuotedName(column.getName())); sbSQL.append(" IS "); sbSQL.append(column.getComment()); sbSQL.append(';'); } } return sbSQL.toString(); } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Finds index according to specified index {@code name}. * * @param name name of the index to be searched * * @return found index or null if no such index has been found */ public PgIndex getIndex(final String name) { for (PgIndex index : indexes) { if (index.getName().equals(name)) { return index; } } return null; } /** * Finds trigger according to specified trigger {@code name}. * * @param name name of the trigger to be searched * * @return found trigger or null if no such trigger has been found */ public PgTrigger getTrigger(final String name) { for (PgTrigger trigger : triggers) { if (trigger.getName().equals(name)) { return trigger; } } return null; } /** * Getter for {@link #indexes}. The list cannot be modified. * * @return {@link #indexes} */ public List getIndexes() { return Collections.unmodifiableList(indexes); } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Getter for {@link #triggers}. The list cannot be modified. * * @return {@link #triggers} */ public List getTriggers() { return Collections.unmodifiableList(triggers); } /** * Getter for {@link #rules}. The list cannot be modified. * * @return {@link #rules} */ public List getRules() { return Collections.unmodifiableList(rules); } /** * Getter for {@link #tablespace}. * * @return {@link #tablespace} */ public String getTablespace() { return tablespace; } /** * Setter for {@link #tablespace}. * * @param tablespace {@link #tablespace} */ public void setTablespace(final String tablespace) { this.tablespace = tablespace; } /** * Adds {@code column} to the list of columns. * * @param column column */ public void addColumn(final PgColumn column) { columns.add(column); } /** * Adds {@code index} to the list of indexes. * * @param index index */ public void addIndex(final PgIndex index) { indexes.add(index); } /** * Adds {@code trigger} to the list of triggers. * * @param trigger trigger */ public void addTrigger(final PgTrigger trigger) { triggers.add(trigger); } /** * Adds {@code rule} to the list of rules. * * @param rule rule */ public void addRule(final PgRule rule) { rules.add(rule); } /** * Returns relation kind for CREATE/ALTER/DROP commands. * * @return relation kind */ public abstract String getRelationKind(); /** * Creates and returns SQL statement for dropping the relation. * * @return created SQL statement */ public String getDropSQL() { return "DROP " + getRelationKind() + " " + PgDiffUtils.getDropIfExists()+ PgDiffUtils.getQuotedName(getName()) + ";"; } /** * Returns true if table contains given column {@code name}, otherwise * false. * * @param name name of the column * * @return true if table contains given column {@code name}, otherwise false */ public boolean containsColumn(final String name) { for (PgColumn column : columns) { if (column.getName().equals(name)) { return true; } } return false; } /** * Finds inheritedColumn according to specified name {@code name}. * * @param name name of the inheritedColumn to be searched * * @return found inheritedColumn or null if no such inheritedColumn * has been found */ public PgInheritedColumn getInheritedColumn(final String name) { return null; } /** * Returns true if table contains given inheritedColumn {@code name}, * otherwise false. * * @param name name of the inheritedColumn * * @return true if table contains given inheritedColumn {@code name}, * otherwise false */ public boolean containsInheritedColumn(final String name) { return false; } /** * Returns true if table/matview contains given index {@code name}, otherwise false. * * @param name name of the index * * @return true if table/matview contains given index {@code name}, otherwise false */ public boolean containsIndex(final String name) { for (PgIndex index : indexes) { if (index.getName().equals(name)) { return true; } } return false; } public List getPrivileges() { return Collections.unmodifiableList(privileges); } /** * Getter for {@link #ownerTo}. * * @return {@link #ownerTo} */ public String getOwnerTo() { return ownerTo; } /** * Setter for {@link #ownerTo}. * * @param ownerTo * {@link #ownerTo} */ public void setOwnerTo(final String ownerTo) { this.ownerTo = ownerTo; } public void addPrivilege(final PgRelationPrivilege privilege) { privileges.add(privilege); } public PgRelationPrivilege getPrivilege(final String roleName) { for (PgRelationPrivilege privilege : privileges) { if (privilege.getRoleName().equals(roleName)) { return privilege; } } return null; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgRelationPrivilege.java000066400000000000000000000150421412634760000321560ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; /** * Stores relPrivileges information. * * @author user */ public class PgRelationPrivilege { private final String roleName; private boolean select = false; private boolean insert = false; private boolean update = false; private boolean delete = false; private boolean truncate = false; private boolean references = false; private boolean trigger = false; private boolean selectWithGrantOption = false; private boolean insertWithGrantOption = false; private boolean updateWithGrantOption = false; private boolean deleteWithGrantOption = false; private boolean truncateWithGrantOption = false; private boolean referencesWithGrantOption = false; private boolean triggerWithGrantOption = false; /** * Creates a new PgTablePrivilege object. * * @param roleName * name of the role */ public PgRelationPrivilege(final String roleName) { this.roleName = roleName; } /** * @return the roleName */ public String getRoleName() { return roleName; } public void setPrivileges(final String privilege, final boolean value, final boolean grantOption) { if ("SELECT".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { select = true; if (grantOption) { selectWithGrantOption = true; } } else { selectWithGrantOption = false; if (!grantOption) { select = false; } } } if ("INSERT".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { insert = true; if (grantOption) { insertWithGrantOption = true; } } else { insertWithGrantOption = false; if (!grantOption) { insert = false; } } } if ("UPDATE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { update = true; if (grantOption) { updateWithGrantOption = true; } } else { updateWithGrantOption = false; if (!grantOption) { update = false; } } } if ("DELETE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { delete = true; if (grantOption) { deleteWithGrantOption = true; } } else { deleteWithGrantOption = false; if (!grantOption) { delete = false; } } } if ("TRUNCATE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { truncate = true; if (grantOption) { truncateWithGrantOption = true; } } else { truncateWithGrantOption = false; if (!grantOption) { truncate = false; } } } if ("REFERENCES".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { references = true; if (grantOption) { referencesWithGrantOption = true; } } else { referencesWithGrantOption = false; if (!grantOption) { references = false; } } } if ("TRIGGER".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { trigger = true; if (grantOption) { triggerWithGrantOption = true; } } else { triggerWithGrantOption = false; if (!grantOption) { trigger = false; } } } } /** * true the privileges are the same (no matter of roleName). * * @param other * privileges to compare * @return isSimilar */ public boolean isSimilar(final PgRelationPrivilege other) { if (other == null) { return false; } if (select != other.select) { return false; } if (selectWithGrantOption != other.selectWithGrantOption) { return false; } if (insert != other.insert) { return false; } if (insertWithGrantOption != other.insertWithGrantOption) { return false; } if (update != other.update) { return false; } if (updateWithGrantOption != other.updateWithGrantOption) { return false; } if (delete != other.delete) { return false; } if (deleteWithGrantOption != other.deleteWithGrantOption) { return false; } if (truncate != other.truncate) { return false; } if (truncateWithGrantOption != other.truncateWithGrantOption) { return false; } if (references != other.references) { return false; } if (referencesWithGrantOption != other.referencesWithGrantOption) { return false; } if (trigger != other.trigger) { return false; } if (triggerWithGrantOption != other.triggerWithGrantOption) { return false; } return true; } public String getPrivilegesSQL(final boolean withGrantOption) { if (withGrantOption) { if (selectWithGrantOption && insertWithGrantOption && updateWithGrantOption && deleteWithGrantOption && truncateWithGrantOption && referencesWithGrantOption && triggerWithGrantOption) { return "ALL"; } String result = ""; if (selectWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "SELECT"; } if (insertWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "INSERT"; } if (updateWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "UPDATE"; } if (deleteWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "DELETE"; } if (truncateWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "TRUNCATE"; } if (referencesWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "REFERENCES"; } if (triggerWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "TRIGGER"; } return result; } else { if (select && insert && update && delete && truncate && references && trigger) { return "ALL"; } String result = ""; if (select) { if (!"".equals(result)) { result += ", "; } result += "SELECT"; } if (insert) { if (!"".equals(result)) { result += ", "; } result += "INSERT"; } if (update) { if (!"".equals(result)) { result += ", "; } result += "UPDATE"; } if (delete) { if (!"".equals(result)) { result += ", "; } result += "DELETE"; } if (truncate) { if (!"".equals(result)) { result += ", "; } result += "TRUNCATE"; } if (references) { if (!"".equals(result)) { result += ", "; } result += "REFERENCES"; } if (trigger) { if (!"".equals(result)) { result += ", "; } result += "TRIGGER"; } return result; } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgRule.java000066400000000000000000000065751412634760000274540ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.List; /** * Stores rule information. * * @author jalissonmello */ public class PgRule extends PgRelation { private String query; /** * Name of the relation the rule is defined on. */ private String relationName; /** * event of rule. */ private String event; /** * Creates a new PgView object. * * @param name {@link #name} */ public PgRule(final String name) { setName(name); } /** * Creates and returns SQL for creation of the view. * * @return created SQL statement */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(query.length() * 2); sbSQL.append("CREATE "); sbSQL.append(getRelationKind()); sbSQL.append(' '); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" AS"); sbSQL.append(System.getProperty("line.separator")); sbSQL.append(" ON "); sbSQL.append(event); sbSQL.append(" TO "); sbSQL.append(relationName); sbSQL.append(System.getProperty("line.separator")); sbSQL.append(" "); sbSQL.append(query); sbSQL.append(";"); sbSQL.append(getCommentDefinitionSQL()); return sbSQL.toString(); } /** * Setter for {@link #query}. * * @param query {@link #query} */ public void setQuery(final String query) { this.query = query; } /** * Getter for {@link #query}. * * @return {@link #query} */ public String getQuery() { return query; } /** * Setter for {@link #relationName}. * * @param relationName {@link #relationName} */ public void setRelationName(final String relationName) { this.relationName = relationName; } /** * Getter for {@link #relationName}. * * @return {@link #relationName} */ public String getRelationName() { return relationName; } /** * Setter for {@link #event}. * * @param event {@link #event} */ public void setEvent(final String event) { this.event = event; } /** * Getter for {@link #event}. * * @return {@link #event} */ public String getEvent() { return event; } @Override public String getRelationKind() { return "RULE"; } /** * Creates and returns SQL for dropping the rule. * * @return created SQL */ public String getDropSQL() { return "DROP RULE " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + " ON " + PgDiffUtils.getQuotedName(getRelationName()) + ";"; } @Override public boolean equals(final Object object) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgRule) { final PgRule rule = (PgRule) object; equals = (event == rule.getEvent() && relationName.equals(rule.getRelationName()) && name.equals(rule.getName()) && query.equals(rule.getQuery())); } return equals; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgSchema.java000077500000000000000000000376061412634760000277470ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Stores schema information. * * @author fordfrog */ public class PgSchema { /** * List of functions defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List functions = new ArrayList(); /** * List of procedures defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List procedures = new ArrayList(); /** * List of sequences defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List sequences = new ArrayList(); /** * List of rels defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List rels = new ArrayList(); /** * List of types defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List types = new ArrayList(); /** * List of indexes defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List indexes = new ArrayList(); /** * List of primary keys defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List primaryKeys = new ArrayList(); /** * List of rules defined in the schema. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List rules = new ArrayList(); /** * Name of the schema. */ private final String name; /** * Schema authorization. */ private String authorization; /** * Optional definition of schema elements. */ private String definition; /** * Comment. */ private String comment; /** * Creates a new PgSchema object. * * @param name {@link #name} */ public PgSchema(final String name) { this.name = name; } /** * Setter for {@link #authorization}. * * @param authorization {@link #authorization} */ public void setAuthorization(final String authorization) { this.authorization = authorization; } /** * Getter for {@link #authorization}. * * @return {@link #authorization} */ public String getAuthorization() { return authorization; } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Getter for {@link #definition}. * * @return {@link #definition} */ public String getDefinition() { return definition; } /** * Setter for {@link #definition}. * * @param definition {@link #definition} */ public void setDefinition(final String definition) { this.definition = definition; } /** * Creates and returns SQL for creation of the schema. * * @return created SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(50); sbSQL.append("CREATE SCHEMA "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(getName())); if (getAuthorization() != null) { sbSQL.append(" AUTHORIZATION "); sbSQL.append(PgDiffUtils.getQuotedName(getAuthorization())); } sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON SCHEMA "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Finds function according to specified function {@code signature}. * * @param signature signature of the function to be searched * * @return found function or null if no such function has been found */ public PgFunction getFunction(final String signature) { for (PgFunction function : functions) { if (function.getSignature().equals(signature)) { return function; } } return null; } /** * Getter for {@link #functions}. The list cannot be modified. * * @return {@link #functions} */ public List getFunctions() { return Collections.unmodifiableList(functions); } /** * Finds procedure according to specified procedure {@code signature}. * * @param signature signature of the procedure to be searched * * @return found procedure or null if no such procedure has been found */ public PgProcedure getProcedure(final String signature) { for (PgProcedure procedure : procedures) { if (procedure.getSignature().equals(signature)) { return procedure; } } return null; } /** * Getter for {@link #procedures}. The list cannot be modified. * * @return {@link #procedures} */ public List getProcedures() { return Collections.unmodifiableList(procedures); } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Finds index according to specified index {@code name}. * * @param name name of the index to be searched * * @return found index or null if no such index has been found */ public PgIndex getIndex(final String name) { for (PgIndex index : indexes) { if (index.getName().equals(name)) { return index; } } return null; } /** * Finds primary key according to specified primary key {@code name}. * * @param name name of the primary key to be searched * * @return found primary key or null if no such primary key has been found */ public PgConstraint getPrimaryKey(final String name) { for (PgConstraint constraint : primaryKeys) { if (constraint.getName().equals(name)) { return constraint; } } return null; } /** * Finds sequence according to specified sequence {@code name}. * * @param name name of the sequence to be searched * * @return found sequence or null if no such sequence has been found */ public PgSequence getSequence(final String name) { for (PgSequence sequence : sequences) { if (sequence.getName().equals(name)) { return sequence; } } return null; } /** * Getter for {@link #indexes}. The list cannot be modified. * * @return {@link #indexes} */ public List getIndexes() { return Collections.unmodifiableList(indexes); } /** * Getter for {@link #primaryKeys}. The list cannot be modified. * * @return {@link #primaryKeys} */ public List getPrimaryKeys() { return Collections.unmodifiableList(primaryKeys); } /** * Getter for {@link #sequences}. The list cannot be modified. * * @return {@link #sequences} */ public List getSequences() { return Collections.unmodifiableList(sequences); } /** * Finds table/view according to specified {@code name}. * * @param name name of the table/view to be searched * * @return found table or null if no such table has been found */ public PgRelation getRelation(final String name) { for (PgRelation rel : rels) { if (rel.getName().equals(name)) { return rel; } } return null; } /** * Finds table according to specified table {@code name}. * * @param name name of the table to be searched * * @return found table or null if no such table has been found */ public PgTable getTable(final String name) { PgRelation rel = this.getRelation(name); if (rel == null || !(rel instanceof PgTable)) return null; return (PgTable) rel; } /** * Get a list of tables from {@link #rels}. * * @return list of tables */ public List getTables() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); for (PgRelation rel : rels) { if (rel instanceof PgTable) { list.add((PgTable) rel); } } return list; } /** * Getter for {@link #rels}. The list cannot be modified. * * @return {@link #rels} */ public List getRels() { return Collections.unmodifiableList(rels); } /** * Finds view according to specified view {@code name}. * * @param name name of the view to be searched * * @return found view or null if no such view has been found */ public PgView getView(final String name) { PgRelation rel = this.getRelation(name); if (rel == null || !(rel instanceof PgView)) return null; return (PgView) rel; } /** * Get a list of views from {@link #rels}. * * @return list of views */ public List getViews() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); for (PgRelation rel : rels) { if (rel instanceof PgView) { list.add((PgView) rel); } } return list; } /** * Adds {@code index} to the list of indexes. * * @param index index */ public void addIndex(final PgIndex index) { indexes.add(index); } /** * Adds {@code primary key} to the list of primary keys. * * @param primaryKey index */ public void addPrimaryKey(final PgConstraint primaryKey) { primaryKeys.add(primaryKey); } /** * Adds {@code function} to the list of functions. * * @param function function */ public void addFunction(final PgFunction function) { functions.add(function); } /** * Adds {@code procedure} to the list of procedures. * * @param procedure procedure */ public void addProcedure(final PgProcedure procedure) { procedures.add(procedure); } /** * Adds {@code sequence} to the list of sequences. * * @param sequence sequence */ public void addSequence(final PgSequence sequence) { sequences.add(sequence); } /** * Adds {@code rel} table or view to the list of rels. * * @param rel relation */ public void addRelation(final PgRelation rel) { rels.add(rel); } /** * Adds {@code type} to the list of types. * * @param type type */ public void addType(final PgType type) { types.add(type); } /** * Returns a list of types * * @return types List of PgType */ public List getTypes() { return types; } /** * Finds type according to specified name {@code name}. * * @param name name of the type to be searched * * @return found type or null if no such table has been found */ public PgType getType(final String name) { for (PgType type : types) { if (type.getName().equals(name)) { return type; } } return null; } /** * Get a list of rules from {@link #rels}. * * @return list of rules */ public List getRules() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); for (PgRelation rel : rels) { if (rel instanceof PgRule) { list.add((PgRule) rel); } } return list; } /** * Returns true if schema contains type with given {@code name}, otherwise * false. * * @param name name of the table * * @return true if schema contains table with given {@code name}, otherwise * false. */ public boolean containsRule(final String name) { for (PgRule rule : rules) { if (rule.getName().equals(name)) { return true; } } return false; } /** * Returns true if schema contains type with given {@code name}, otherwise * false. * * @param name name of the table * * @return true if schema contains table with given {@code name}, otherwise * false. */ public boolean containsType(final String name) { for (PgType type : types) { if (type.getName().equals(name)) { return true; } } return false; } /** * Returns true if schema contains function with given {@code signature}, * otherwise false. * * @param signature signature of the function * * @return true if schema contains function with given {@code signature}, * otherwise false */ public boolean containsFunction(final String signature) { for (PgFunction function : functions) { if (function.getSignature().equals(signature)) { return true; } } return false; } /** * Returns true if schema contains procedure with given {@code signature}, * otherwise false. * * @param signature signature of the procedure * * @return true if schema contains procedure with given {@code signature}, * otherwise false */ public boolean containsProcedure(final String signature) { for (PgProcedure procedure : procedures) { if (procedure.getSignature().equals(signature)) { return true; } } return false; } /** * Returns true if schema contains sequence with given {@code name}, * otherwise false. * * @param name name of the sequence * * @return true if schema contains sequence with given {@code name}, * otherwise false */ public boolean containsSequence(final String name) { for (PgSequence sequence : sequences) { if (sequence.getName().equals(name)) { return true; } } return false; } /** * Returns true if schema contains table with given {@code name}, otherwise * false. * * @param name name of the table * * @return true if schema contains table with given {@code name}, otherwise * false. */ public boolean containsTable(final String name) { return getTable(name) != null; } /** * Returns true if schema contains view with given {@code name}, otherwise * false. * * @param name name of the view * * @return true if schema contains view with given {@code name}, otherwise * false. */ public boolean containsView(final String name) { return getView(name) != null; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgSequence.java000077500000000000000000000210541412634760000303050ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import java.util.ArrayList; import java.util.Collections; import java.util.List; import cz.startnet.utils.pgdiff.PgDiffUtils; /** * Stores sequence information. * * @author fordfrog */ public class PgSequence { /** * Value for CACHE or null if no value is specified. */ private String cache; /** * Value for INCREMENT BY or null if no value is specified. */ private String increment; /** * Value for MAXVALUE or null if no value is specified. */ private String maxValue; /** * Value for MINVALUE or null if no value is specified. */ private String minValue; /** * Name of the sequence. */ private String name; /** * Value for START WITH or null if no value is specified. */ private String startWith; /** * True if CYCLE, false if NO CYCLE. */ private boolean cycle; /** * Column the sequence is owned by. */ private String ownedBy; /** * Comment. */ private String comment; /** * List of privileges defined on the sequence. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List privileges = new ArrayList(); /** * Value for AS or null if no value is specified. */ private String dataType; /** * Creates a new PgSequence object. * * @param name name of the sequence */ public PgSequence(final String name) { this.name = name; } /** * Setter for {@link #cache}. * * @param cache {@link #cache} */ public void setCache(final String cache) { this.cache = cache; } /** * Getter for {@link #cache}. * * @return {@link #cache} */ public String getCache() { return cache; } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Creates and returns SQL statement for creation of the sequence. * * @return created SQL statement */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("CREATE SEQUENCE "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(name)); if(dataType!=null){ sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tAS "); sbSQL.append(dataType); } if (startWith != null) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tSTART WITH "); sbSQL.append(startWith); } if (increment != null) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tINCREMENT BY "); sbSQL.append(increment); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\t"); if (maxValue == null) { sbSQL.append("NO MAXVALUE"); } else { sbSQL.append("MAXVALUE "); sbSQL.append(maxValue); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\t"); if (minValue == null) { sbSQL.append("NO MINVALUE"); } else { sbSQL.append("MINVALUE "); sbSQL.append(minValue); } if (cache != null) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tCACHE "); sbSQL.append(cache); } if (cycle) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tCYCLE"); } sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON SEQUENCE "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Creates and returns SQL statement for modification "OWNED BY" parameter. * * @return created SQL statement */ public String getOwnedBySQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("ALTER SEQUENCE "); sbSQL.append(PgDiffUtils.getQuotedName(name)); if (ownedBy != null && !ownedBy.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tOWNED BY "); sbSQL.append(ownedBy); } sbSQL.append(';'); return sbSQL.toString(); } /** * Setter for {@link #cycle}. * * @param cycle {@link #cycle} */ public void setCycle(final boolean cycle) { this.cycle = cycle; } /** * Getter for {@link #cycle}. * * @return {@link #cycle} */ public boolean isCycle() { return cycle; } /** * Creates and returns SQL statement for dropping the sequence. * * @return created SQL */ public String getDropSQL() { return "DROP SEQUENCE " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + ";"; } /** * Setter for {@link #increment}. * * @param increment {@link #increment} */ public void setIncrement(final String increment) { this.increment = increment; } /** * Getter for {@link #increment}. * * @return {@link #increment} */ public String getIncrement() { return increment; } /** * Setter for {@link #maxValue}. * * @param maxValue {@link #maxValue} */ public void setMaxValue(final String maxValue) { this.maxValue = maxValue; } /** * Getter for {@link #maxValue}. * * @return {@link #maxValue} */ public String getMaxValue() { return maxValue; } /** * Setter for {@link #minValue}. * * @param minValue {@link #minValue} */ public void setMinValue(final String minValue) { this.minValue = minValue; } /** * Getter for {@link #minValue}. * * @return {@link #minValue} */ public String getMinValue() { return minValue; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #startWith}. * * @param startWith {@link #startWith} */ public void setStartWith(final String startWith) { this.startWith = startWith; } /** * Getter for {@link #startWith}. * * @return {@link #startWith} */ public String getStartWith() { return startWith; } /** * Getter for {@link #ownedBy}. * * @return {@link #ownedBy} */ public String getOwnedBy() { return ownedBy; } /** * Setter for {@link #ownedBy}. * * @param ownedBy {@link #ownedBy} */ public void setOwnedBy(final String ownedBy) { this.ownedBy = ownedBy; } public List getPrivileges() { return Collections.unmodifiableList(privileges); } public PgSequencePrivilege getPrivilege(final String roleName) { for (PgSequencePrivilege privilege : privileges) { if (privilege.getRoleName().equals(roleName)) { return privilege; } } return null; } public void addPrivilege(final PgSequencePrivilege privilege) { privileges.add(privilege); } /** * Getter for {@link #dataType}. * * @return {@link #dataType} */ public String getDataType() { return dataType; } /** * Setter for {@link #ownedBy}. * * @param dataType {@link #dataType} */ public void setDataType(final String dataType) { this.dataType = dataType; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgSequencePrivilege.java000066400000000000000000000066311412634760000321550ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; /** * Stores sequencePrivileges information. * * @author user */ public class PgSequencePrivilege { private final String roleName; private boolean usage = false; private boolean select = false; private boolean update = false; private boolean usageWithGrantOption = false; private boolean selectWithGrantOption = false; private boolean updateWithGrantOption = false; /** * Creates a new PgSequencePrivilege object. * * @param roleName * name of the role */ public PgSequencePrivilege(final String roleName) { this.roleName = roleName; } /** * @return the roleName */ public String getRoleName() { return roleName; } public void setPrivileges(final String privilege, final boolean value, final boolean grantOption) { if ("USAGE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { usage = true; if (grantOption) { usageWithGrantOption = true; } } else { usageWithGrantOption = false; if (!grantOption) { usage = false; } } } if ("SELECT".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { select = true; if (grantOption) { selectWithGrantOption = true; } } else { selectWithGrantOption = false; if (!grantOption) { select = false; } } } if ("UPDATE".equalsIgnoreCase(privilege) || "ALL".equalsIgnoreCase(privilege)) { if (value) { update = true; if (grantOption) { updateWithGrantOption = true; } } else { updateWithGrantOption = false; if (!grantOption) { update = false; } } } } /** * true the privileges are the same (no matter of roleName). * * @param other * privileges to compare * @return isSimilar */ public boolean isSimilar(final PgSequencePrivilege other) { if (other == null) { return false; } if (usage != other.usage) { return false; } if (usageWithGrantOption != other.usageWithGrantOption) { return false; } if (select != other.select) { return false; } if (selectWithGrantOption != other.selectWithGrantOption) { return false; } if (update != other.update) { return false; } if (updateWithGrantOption != other.updateWithGrantOption) { return false; } return true; } public String getPrivilegesSQL(final boolean withGrantOption) { if (withGrantOption) { if (usageWithGrantOption && selectWithGrantOption && updateWithGrantOption) { return "ALL"; } String result = ""; if (usageWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "USAGE"; } if (selectWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "SELECT"; } if (updateWithGrantOption) { if (!"".equals(result)) { result += ", "; } result += "UPDATE"; } return result; } else { if (usage && select && update) { return "ALL"; } String result = ""; if (select) { if (!"".equals(result)) { result += ", "; } result += "SELECT"; } if (usage) { if (!"".equals(result)) { result += ", "; } result += "USAGE"; } if (update) { if (!"".equals(result)) { result += ", "; } result += "UPDATE"; } return result; } } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgTable.java000077500000000000000000000341741412634760000275730ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.Pair; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Stores table information. * * @author fordfrog */ public class PgTable extends PgRelation { /** * List of inheritedColumns defined on the table. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List inheritedColumns = new ArrayList(); /** * List of constraints defined on the table. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List constraints = new ArrayList(); /** * List of names of inherited tables. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List> inherits = new ArrayList>(); /** * WITH clause. If value is null then it is not set, otherwise can be set to * OIDS=true, OIDS=false, or storage parameters can be set. */ private String with; /** * Is this a UNLOGGED table? */ private boolean unlogged; /** * Is this a FOREIGN table? */ private boolean foreign; /** * Does this table have RLS enabled? */ private Boolean rlsEnabled; /** * Does this table have RLS forced? */ private Boolean rlsForced; private String foreignServer; /** * RLS Policies */ private List policies = new ArrayList(); /** * PgDatabase */ private final PgDatabase database; /** * PgSchema */ private final PgSchema schema; /** * Partion By */ private String partitionBy; /** * Creates a new PgTable object. * * @param name {@link #name} * @param database name of database * @param schema name of schema */ public PgTable(final String name, final PgDatabase database, final PgSchema schema) { setName(name); this.database = database; this.schema = schema; } /** * Finds constraint according to specified constraint {@code name}. * * @param name name of the constraint to be searched * * @return found constraint or null if no such constraint has been found */ public PgConstraint getConstraint(final String name) { for (PgConstraint constraint : constraints) { if (constraint.getName().equals(name)) { return constraint; } } return null; } /** * Getter for {@link #constraints}. The list cannot be modified. * * @return {@link #constraints} */ public List getConstraints() { return Collections.unmodifiableList(constraints); } /** * Returns relation kind for CREATE/ALTER/DROP commands. * * @return relation kind */ public String getRelationKind() { return "TABLE"; } /** * Creates and returns SQL for creation of the table. * * @param schema schema of current statement * * @return created SQL statement */ public String getCreationSQL(final PgSchema schema) { final StringBuilder sbSQL = new StringBuilder(1000); sbSQL.append("CREATE "); if (isUnlogged()) { sbSQL.append("UNLOGGED "); } if (isForeign()) { sbSQL.append("FOREIGN "); } sbSQL.append("TABLE "); sbSQL.append(PgDiffUtils.getCreateIfNotExists()); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ("); sbSQL.append(System.getProperty("line.separator")); boolean first = true; if (columns.isEmpty()) { sbSQL.append(')'); } else { for (PgColumn column : columns) { if (first) { first = false; } else { sbSQL.append(","); sbSQL.append(System.getProperty("line.separator")); } sbSQL.append("\t"); sbSQL.append(column.getFullDefinition(false)); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append(")"); } if(partitionBy!=null && !partitionBy.isEmpty()){ sbSQL.append(" "); sbSQL.append(partitionBy); } if (inherits != null && !inherits.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("INHERITS ("); first = true; for (final Pair inheritPair : inherits) { if (first) { first = false; } else { sbSQL.append(", "); } String inheritTableName = null; if(schema.getName().equals(inheritPair.getL())){ inheritTableName = inheritPair.getR(); } else { inheritTableName = String.format("%s.%s", inheritPair.getL(), inheritPair.getR()); } sbSQL.append(inheritTableName); } sbSQL.append(")"); } if (with != null && !with.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); if ("OIDS=false".equalsIgnoreCase(with)) { sbSQL.append("WITHOUT OIDS"); } else { sbSQL.append("WITH "); if ("OIDS".equalsIgnoreCase(with) || "OIDS=true".equalsIgnoreCase(with)) { sbSQL.append("OIDS"); } else { sbSQL.append(with); } } } if (isForeign()) { sbSQL.append("SERVER "); sbSQL.append(getForeignServer()); } if (tablespace != null && !tablespace.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("TABLESPACE "); sbSQL.append(tablespace); } sbSQL.append(';'); //Inherited column default override for (PgInheritedColumn column : getInheritedColumns()) { if(column.getDefaultValue() != null){ sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("ALTER TABLE ONLY "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tALTER COLUMN "); sbSQL.append( PgDiffUtils.getQuotedName(column.getInheritedColumn().getName())); sbSQL.append(" SET DEFAULT "); sbSQL.append(column.getDefaultValue()); sbSQL.append(';'); } } for (PgColumn column : getColumnsWithStatistics()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("ALTER TABLE ONLY "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ALTER COLUMN "); sbSQL.append( PgDiffUtils.getQuotedName(column.getName())); sbSQL.append(" SET STATISTICS "); sbSQL.append(column.getStatistics()); sbSQL.append(';'); } sbSQL.append(getCommentDefinitionSQL()); return sbSQL.toString(); } /** * Setter for {@link #inherits}. * * @param schemaName name of schema * @param tableName name of inherited table */ public void addInherits(final String schemaName, final String tableName) { inherits.add(new Pair(schemaName, tableName)); final PgTable inheritedTable = database.getSchema(schemaName).getTable(tableName); for( PgColumn column : inheritedTable.getColumns() ) { PgInheritedColumn inheritedColumn = new PgInheritedColumn(column); inheritedColumns.add(inheritedColumn); } for( PgInheritedColumn column : inheritedTable.getInheritedColumns() ) { PgInheritedColumn inheritedColumn = new PgInheritedColumn(column.getInheritedColumn()); inheritedColumns.add(inheritedColumn); } } /** * Getter for {@link #inherits}. * * @return {@link #inherits} */ public List> getInherits() { return Collections.unmodifiableList(inherits); } /** * Setter for {@link #with}. * * @param with {@link #with} */ public void setWith(final String with) { this.with = with; } /** * Getter for {@link #with} * * @return {@link #with} */ public String getWith() { return with; } /** * Getter for {@link #tablespace}. * * @return {@link #tablespace} */ public String getTablespace() { return tablespace; } /** * Setter for {@link #tablespace}. * * @param tablespace {@link #tablespace} */ public void setTablespace(final String tablespace) { this.tablespace = tablespace; } /** * Adds {@code column} to the list of columns. * * @param column column */ public void addColumn(final PgColumn column) { columns.add(column); } /** * Adds {@code inheritedColumn} to the list of inheritedColumns. * * @param inheritedColumn inheritedColumn */ public void addInheritedColumn(final PgInheritedColumn inheritedColumn) { inheritedColumns.add(inheritedColumn); } /** * Finds inheritedColumn according to specified name {@code name}. * * @param name name of the inheritedColumn to be searched * * @return found inheritedColumn or null if no such inheritedColumn * has been found */ public PgInheritedColumn getInheritedColumn(final String name) { if (inherits != null && !inherits.isEmpty()) { for (PgInheritedColumn inheritedColumn : inheritedColumns) { if (inheritedColumn.getInheritedColumn().getName().equals(name)) { return inheritedColumn; } } } return null; } /** * Getter for {@link #inheritedColumns}. The list cannot be modified. * * @return {@link #inheritedColumns} */ public List getInheritedColumns() { return Collections.unmodifiableList(inheritedColumns); } /** * Adds {@code constraint} to the list of constraints. * * @param constraint constraint */ public void addConstraint(final PgConstraint constraint) { constraints.add(constraint); } /** * Returns true if table contains given inheritedColumn {@code name}, * otherwise false. * * @param name name of the inheritedColumn * * @return true if table contains given inheritedColumn {@code name}, * otherwise false */ public boolean containsInheritedColumn(final String name) { if (inherits != null && !inherits.isEmpty()) { for (PgInheritedColumn inheritedColumn : inheritedColumns) { if (inheritedColumn.getInheritedColumn().getName().equals(name)) { return true; } } } return false; } /** * Returns true if table contains given constraint {@code name}, otherwise * false. * * @param name name of the constraint * * @return true if table contains given constraint {@code name}, otherwise * false */ public boolean containsConstraint(final String name) { for (PgConstraint constraint : constraints) { if (constraint.getName().equals(name)) { return true; } } return false; } /** * Returns list of columns that have statistics defined. * * @return list of columns that have statistics defined */ private List getColumnsWithStatistics() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); for (PgColumn column : columns) { if (column.getStatistics() != null) { list.add(column); } } return list; } public boolean isUnlogged() { return unlogged; } public void setUnlogged(boolean unlogged) { this.unlogged = unlogged; } /** * Foreign Tables */ @Override public String getDropSQL() { return "DROP " + ((isForeign()) ? "FOREIGN ":"") + getRelationKind() + " " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + ";"; } public boolean isForeign() { return foreign; } public void setForeign(boolean foreign) { this.foreign = foreign; } public void setForeignServer(String server){ foreignServer = server; } public String getForeignServer(){ return foreignServer; } public Boolean hasRLSEnabled() { return rlsEnabled; } public void setRLSEnabled(Boolean rlsEnabled) { this.rlsEnabled = rlsEnabled; } public Boolean hasRLSForced() { return rlsForced; } public void setRLSForced(Boolean rlsForced) { this.rlsForced = rlsForced; } public void addPolicy(final PgPolicy policy) { policies.add(policy); } public PgPolicy getPolicy(final String name) { for (PgPolicy policy : policies) { if (policy.getName().equals(name)) { return policy; } } return null; } public List getPolicies() { return Collections.unmodifiableList(policies); } public void setPartionBy(String partitionBy){ this.partitionBy = partitionBy; } public String getPartionBy(){ return partitionBy; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgTrigger.java000077500000000000000000000325071412634760000301450ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.HashMap; import java.util.Map; /** * Stores trigger information. * * @author fordfrog */ public class PgTrigger { /** * Enumeration of when, with respect to event, a trigger should fire. * e.g. BEFORE, AFTER or INSTEAD OF an event. */ public enum EventTimeQualification { before, after, instead_of; private static final Map stringRepresentation; static { HashMap aMap = new HashMap(); aMap.put(EventTimeQualification.before, "BEFORE"); aMap.put(EventTimeQualification.after, "AFTER"); aMap.put(EventTimeQualification.instead_of, "INSTEAD OF"); stringRepresentation = Collections.unmodifiableMap(aMap); } public static String toString(EventTimeQualification eventTimeQualification) { return stringRepresentation.get(eventTimeQualification); } } /** * Function name and arguments that should be fired on the trigger. */ private String function; /** * Name of the trigger. */ private String name; /** * Name of the relation the trigger is defined on. */ private String relationName; /** * Whether the trigger should be fired BEFORE, AFTER or INSTEAD OF an event. * Default is before. */ private EventTimeQualification eventTimeQualification = EventTimeQualification.before; /** * Whether the trigger should be fired FOR EACH ROW or FOR EACH STATEMENT. * Default is FOR EACH STATEMENT. */ private boolean forEachRow; /** * Whether the trigger should be fired on DELETE. */ private boolean onDelete; /** * Whether the trigger should be fired on INSERT. */ private boolean onInsert; /** * Whether the trigger should be fired on UPDATE. */ private boolean onUpdate; /** * Whether the trigger should be fired on TRUNCATE. */ private boolean onTruncate; /** * Optional list of columns for UPDATE event. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List updateColumns = new ArrayList(); /** * WHEN condition. */ private String when; /** * Comment. */ private String comment; /** * Referencing clause. */ private String referencing; /** * Disable. */ private boolean disable; /** * Setter for {@link #eventTimeQualification}. * * @param eventTimeQualification {@link #eventTimeQualification} */ public void setEventTimeQualification(final EventTimeQualification eventTimeQualification) { this.eventTimeQualification = eventTimeQualification; } /** * Getter for {@link #eventTimeQualification}. * * @return {@link #eventTimeQualification} */ public EventTimeQualification getEventTimeQualification() { return eventTimeQualification; } /** * Getter for {@link #comment}. * * @return {@link #comment} */ public String getComment() { return comment; } /** * Setter for {@link #comment}. * * @param comment {@link #comment} */ public void setComment(final String comment) { this.comment = comment; } /** * Creates and returns SQL for creation of trigger. * * @return created SQL */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("CREATE TRIGGER "); sbSQL.append(PgDiffUtils.getQuotedName(getName())); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\t"); sbSQL.append(EventTimeQualification.toString(getEventTimeQualification())); boolean firstEvent = true; if (isOnInsert()) { sbSQL.append(" INSERT"); firstEvent = false; } if (isOnUpdate()) { if (firstEvent) { firstEvent = false; } else { sbSQL.append(" OR"); } sbSQL.append(" UPDATE"); if (!updateColumns.isEmpty()) { sbSQL.append(" OF"); boolean first = true; for (final String columnName : updateColumns) { if (first) { first = false; } else { sbSQL.append(','); } sbSQL.append(' '); sbSQL.append(columnName); } } } if (isOnDelete()) { if (!firstEvent) { sbSQL.append(" OR"); } sbSQL.append(" DELETE"); } if (isOnTruncate()) { if (!firstEvent) { sbSQL.append(" OR"); } sbSQL.append(" TRUNCATE"); } sbSQL.append(" ON "); sbSQL.append(PgDiffUtils.getQuotedName(getRelationName())); sbSQL.append(System.getProperty("line.separator")); if(referencing!=null && !referencing.isEmpty()){ sbSQL.append(getReferencing()); sbSQL.append(System.getProperty("line.separator")); } sbSQL.append("\tFOR EACH "); sbSQL.append(isForEachRow() ? "ROW" : "STATEMENT"); if (when != null && !when.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tWHEN ("); sbSQL.append(when); sbSQL.append(')'); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\tEXECUTE PROCEDURE "); sbSQL.append(getFunction()); sbSQL.append(';'); if (comment != null && !comment.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("COMMENT ON TRIGGER "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ON "); sbSQL.append(PgDiffUtils.getQuotedName(relationName)); sbSQL.append(" IS "); sbSQL.append(comment); sbSQL.append(';'); } return sbSQL.toString(); } /** * Creates and returns SQL for dropping the trigger. * * @return created SQL */ public String getDropSQL() { return "DROP TRIGGER " + PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + " ON " + PgDiffUtils.getQuotedName(getRelationName()) + ";"; } /** * Setter for {@link #forEachRow}. * * @param forEachRow {@link #forEachRow} */ public void setForEachRow(final boolean forEachRow) { this.forEachRow = forEachRow; } /** * Getter for {@link #forEachRow}. * * @return {@link #forEachRow} */ public boolean isForEachRow() { return forEachRow; } /** * Setter for {@link #function}. * * @param function {@link #function} */ public void setFunction(final String function) { this.function = function; } /** * Getter for {@link #function}. * * @return {@link #function} */ public String getFunction() { return function; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Setter for {@link #onDelete}. * * @param onDelete {@link #onDelete} */ public void setOnDelete(final boolean onDelete) { this.onDelete = onDelete; } /** * Getter for {@link #onDelete}. * * @return {@link #onDelete} */ public boolean isOnDelete() { return onDelete; } /** * Setter for {@link #onInsert}. * * @param onInsert {@link #onInsert} */ public void setOnInsert(final boolean onInsert) { this.onInsert = onInsert; } /** * Getter for {@link #onInsert}. * * @return {@link #onInsert} */ public boolean isOnInsert() { return onInsert; } /** * Setter for {@link #onUpdate}. * * @param onUpdate {@link #onUpdate} */ public void setOnUpdate(final boolean onUpdate) { this.onUpdate = onUpdate; } /** * Getter for {@link #onUpdate}. * * @return {@link #onUpdate} */ public boolean isOnUpdate() { return onUpdate; } /** * Getter for {@link #onTruncate}. * * @return {@link #onTruncate} */ public boolean isOnTruncate() { return onTruncate; } /** * Setter for {@link #onTruncate}. * * @param onTruncate {@link #onTruncate} */ public void setOnTruncate(final boolean onTruncate) { this.onTruncate = onTruncate; } /** * Setter for {@link #relationName}. * * @param relationName {@link #relationName} */ public void setRelationName(final String relationName) { this.relationName = relationName; } /** * Getter for {@link #relationName}. * * @return {@link #relationName} */ public String getRelationName() { return relationName; } /** * Getter for {@link #updateColumns}. * * @return {@link #updateColumns} */ public List getUpdateColumns() { return Collections.unmodifiableList(updateColumns); } /** * Adds column name to the list of update columns. * * @param columnName column name */ public void addUpdateColumn(final String columnName) { updateColumns.add(columnName); } /** * Getter for {@link #when}. * * @return {@link #when} */ public String getWhen() { return when; } /** * Setter for {@link #when}. * * @param when {@link #when} */ public void setWhen(final String when) { this.when = when; } /** * Getter for {@link #referencing}. * * @return {@link #referencing} */ public String getReferencing() { return referencing; } /** * Setter for {@link #referencing}. * * @param referencing {@link #referencing} */ public void setReferencing(final String referencing) { this.referencing = referencing; } /** * Getter for {@link #disable}. * * @return {@link #disable} */ public boolean isDisable() { return disable; } /** * Setter for {@link #disable}. * * @param disable {@link #disable} */ public void setDisable(final boolean disable) { this.disable = disable; } @Override public boolean equals(final Object object) { boolean equals = false; if (this == object) { equals = true; } else if (object instanceof PgTrigger) { final PgTrigger trigger = (PgTrigger) object; equals = (eventTimeQualification == trigger.getEventTimeQualification()) && (forEachRow == trigger.isForEachRow()) && function.equals(trigger.getFunction()) && name.equals(trigger.getName()) && (onDelete == trigger.isOnDelete()) && (onInsert == trigger.isOnInsert()) && (onUpdate == trigger.isOnUpdate()) && (onTruncate == trigger.isOnTruncate()) && relationName.equals(trigger.getRelationName()); if (equals) { final List sorted1 = new ArrayList(updateColumns); final List sorted2 = new ArrayList(trigger.getUpdateColumns()); Collections.sort(sorted1); Collections.sort(sorted2); equals = sorted1.equals(sorted2); } } return equals; } @Override public int hashCode() { return (getClass().getName() + "|" + eventTimeQualification + "|" + forEachRow + "|" + function + "|" + name + "|" + onDelete + "|" + onInsert + "|" + onUpdate + "|" + onTruncate + "|" + relationName + "|" + disable).hashCode(); } /** * Creates and returns SQL for creation of trigger. * * @return created SQL */ public String getDisableOrEnableSQL() { final StringBuilder sbSQL = new StringBuilder(100); sbSQL.append("ALTER TABLE "); sbSQL.append(relationName); if (disable) { sbSQL.append(" DISABLE"); } else{ sbSQL.append(" ENABLE"); } sbSQL.append(" TRIGGER "); sbSQL.append(name); sbSQL.append(';'); sbSQL.append(System.getProperty("line.separator")); return sbSQL.toString(); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgType.java000077500000000000000000000127621412634760000274640ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Stores table information. * * @author fordfrog */ public class PgType { /** * List of columns defined on the table. */ @SuppressWarnings("CollectionWithoutInitialCapacity") private final List columns = new ArrayList(); private final List enumValues = new ArrayList(); /** * Name of the table. */ private String name; private Boolean isEnum = false; /** * Creates a new PgTable object. * * @param name {@link #name} */ public PgType(final String name) { this.name = name; } /** * Finds column according to specified column {@code name}. * * @param name name of the column to be searched * * @return found column or null if no such column has been found */ public PgColumn getColumn(final String name) { for (PgColumn column : columns) { if (column.getName().equals(name)) { return column; } } return null; } /** * Getter for {@link #columns}. The list cannot be modified. * * @return {@link #columns} */ public List getColumns() { return Collections.unmodifiableList(columns); } /** * Creates and returns SQL for creation of the table. * * @return created SQL statement */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(1000); sbSQL.append("CREATE TYPE "); sbSQL.append(PgDiffUtils.getQuotedName(name)); if (isEnum) { sbSQL.append(" AS ENUM ("); } else { sbSQL.append(" AS ("); } sbSQL.append(System.getProperty("line.separator")); boolean first = true; if (isEnum) { for (String enumValue : enumValues) { if (first) { first = false; } else { sbSQL.append(","); sbSQL.append(System.getProperty("line.separator")); } sbSQL.append("\t"); sbSQL.append(enumValue); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append(")"); } else { if (columns.isEmpty()) { sbSQL.append(')'); } else { for (PgColumn column : columns) { if (first) { first = false; } else { sbSQL.append(","); sbSQL.append(System.getProperty("line.separator")); } sbSQL.append("\t"); sbSQL.append(column.getFullDefinition(false)); } sbSQL.append(System.getProperty("line.separator")); sbSQL.append(")"); } } sbSQL.append(';'); for (PgColumn column : getColumnsWithStatistics()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append("ALTER TABLE ONLY "); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ALTER COLUMN "); sbSQL.append( PgDiffUtils.getQuotedName(column.getName())); sbSQL.append(';'); } return sbSQL.toString(); } /** * Creates and returns SQL statement for dropping the table. * * @return created SQL statement */ public String getDropSQL() { return "DROP TYPE "+ PgDiffUtils.getDropIfExists() + PgDiffUtils.getQuotedName(getName()) + ";"; } /** * Setter for {@link #name}. * * @param name {@link #name} */ public void setName(final String name) { this.name = name; } /** * Getter for {@link #name}. * * @return {@link #name} */ public String getName() { return name; } /** * Adds {@code column} to the list of columns. * * @param column column */ public void addColumn(final PgColumn column) { columns.add(column); } /** * Returns true if table contains given column {@code name}, otherwise * false. * * @param name name of the column * * @return true if table contains given column {@code name}, otherwise false */ public boolean containsColumn(final String name) { for (PgColumn column : columns) { if (column.getName().equals(name)) { return true; } } return false; } /** * Returns list of columns that have statistics defined. * * @return list of columns that have statistics defined */ private List getColumnsWithStatistics() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); for (PgColumn column : columns) { if (column.getStatistics() != null) { list.add(column); } } return list; } public void setIsEnum(boolean value) { isEnum = value; } public boolean getIsEnum() { return isEnum; } public void addEnumValue(String value) { enumValues.add(value); } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/PgView.java000066400000000000000000000157701412634760000274540ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.schema; import cz.startnet.utils.pgdiff.PgDiffUtils; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Stores view information. * * @author fordfrog */ public class PgView extends PgRelation { /** * Were column names explicitly declared as part of the view? */ private boolean declareColumnNames = false; /** * Is this a MATERIALIZED view? */ private boolean materialized; /** * SQL query of the view. */ private String query; /** * Is this a view with security_barrier? */ private String with; /** * Is this a TEMPORARY view? */ private boolean temporary; /** * Is this a RECURSIVE view? */ private boolean recursive; /** * Creates a new PgView object. * * @param name {@link #name} */ public PgView(final String name) { setName(name); } /** * Sets the list of declared column names for the view. * * @param columnNames list of column names */ public void setDeclaredColumnNames(final List columnNames) { // Can only be set once for a view, before defaults/comments are set assert !declareColumnNames; assert columns.isEmpty(); if (columnNames == null || columnNames.isEmpty()) return; declareColumnNames = true; for (final String colName: columnNames) { addColumn(new PgColumn(colName)); } } /** * Returns a list of column names if the names were declared along with the view, null otherwise. * * @return list of column names or null */ public List getDeclaredColumnNames() { @SuppressWarnings("CollectionWithoutInitialCapacity") final List list = new ArrayList(); if (!declareColumnNames) return null; for (PgColumn column : columns) { list.add(column.getName()); } return list; } /** * Returns relation kind for CREATE/ALTER/DROP commands. * * @return relation kind */ public String getRelationKind() { if (materialized) return "MATERIALIZED VIEW"; else return "VIEW"; } /** * Creates and returns SQL for creation of the view. * * @return created SQL statement */ public String getCreationSQL() { final StringBuilder sbSQL = new StringBuilder(query.length() * 2); sbSQL.append("CREATE "); sbSQL.append(getRelationKind()); sbSQL.append(' '); sbSQL.append(PgDiffUtils.getQuotedName(name)); if (declareColumnNames) { assert columns != null && !columns.isEmpty(); sbSQL.append(" ("); for (int i = 0; i < columns.size(); i++) { if (i > 0) { sbSQL.append(", "); } sbSQL.append(PgDiffUtils.getQuotedName(columns.get(i).getName())); } sbSQL.append(')'); } if (Objects.nonNull(with) && !with.isEmpty()) { sbSQL.append(" WITH ("); sbSQL.append(with); sbSQL.append(")"); } sbSQL.append(" AS"); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("\t"); sbSQL.append(query); sbSQL.append(';'); /* Column default values */ for (final PgColumn col : getColumns()) { String defaultValue = col.getDefaultValue(); if (defaultValue != null && !defaultValue.isEmpty()) { sbSQL.append(System.getProperty("line.separator")); sbSQL.append(System.getProperty("line.separator")); sbSQL.append("ALTER "); sbSQL.append(getRelationKind()); sbSQL.append(' '); sbSQL.append(PgDiffUtils.getQuotedName(name)); sbSQL.append(" ALTER COLUMN "); sbSQL.append(PgDiffUtils.getQuotedName(col.getName())); sbSQL.append(" SET DEFAULT "); sbSQL.append(defaultValue); sbSQL.append(';'); } } sbSQL.append(getCommentDefinitionSQL()); return sbSQL.toString(); } /** * Setter for {@link #materialized}. * * @param materialized {@link #materialized} */ public void setMaterialized(boolean materialized) { this.materialized = materialized; } /** * Getter for {@link #materialized}. * * @return {@link #materialized} */ public boolean isMaterialized() { return materialized; } /** * Setter for {@link #with}. * * @param with {@link #with} */ public void setWith(String with) { this.with = with; } /** * Getter for {@link #with}. * * @return {@link #with} */ public String getWith() { return with; } /** * Setter for {@link #temporary}. * * @param temporary {@link #temporary} */ public void setTemporary(boolean temporary) { this.temporary = temporary; } /** * Getter for {@link #temporary}. * * @return {@link #temporary} */ public boolean isTemporary() { return temporary; } /** * Setter for {@link #recursive}. * * @param recursive {@link #recursive} */ public void setRecursive(boolean recursive) { this.recursive = recursive; } /** * Getter for {@link #recursive}. * * @return {@link #recursive} */ public boolean isRecursive() { return recursive; } /** * Setter for {@link #query}. * * @param query {@link #query} */ public void setQuery(final String query) { this.query = query; } /** * Getter for {@link #query}. * * @return {@link #query} */ public String getQuery() { return query; } /** * Finds column according to specified column {@code name}. * * @param name name of the column to be searched * * @return found column or null if no such column has been found */ public PgColumn getColumn(final String name) { PgColumn col = super.getColumn(name); if (col == null && !declareColumnNames) { /* * In views, we don't always know columns beforehand; create a new * column if the view didn't declare col names. */ col = new PgColumn(name); addColumn(col); } return col; } /** * Returns true if table contains given column {@code name}, otherwise * false. * * @param name name of the column * * @return true if table contains given column {@code name}, otherwise false */ public boolean containsColumn(final String name) { return true; } } apgdiff-release_2.7.0/src/main/java/cz/startnet/utils/pgdiff/schema/package-info.java000066400000000000000000000001301412634760000305570ustar00rootroot00000000000000/** * Contains PostgreSQL schema objects. */ package cz.startnet.utils.pgdiff.schema; apgdiff-release_2.7.0/src/main/resources/000077500000000000000000000000001412634760000203505ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/resources/cz/000077500000000000000000000000001412634760000207645ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/resources/cz/startnet/000077500000000000000000000000001412634760000226305ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/000077500000000000000000000000001412634760000237705ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/pgdiff/000077500000000000000000000000001412634760000252275ustar00rootroot00000000000000apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/pgdiff/Resources.properties000066400000000000000000000073141412634760000313240ustar00rootroot00000000000000VersionNumber=2.4.1-SNAPSHOT UsageHelp=\ Usage: apgdiff [options] \n\ \n\ Options:\n\ \n\ --version:\n\ ${tab}displays apgdiff version\n\ \n\ --add-defaults:\n\ ${tab}adds DEFAULT ... in case new column has NOT NULL constraint but no\n\ ${tab}default value (the default value is dropped later).\n\ \n\ --add-transaction:\n\ ${tab}adds START TRANSACTION and COMMIT TRANSACTION to generated diff file.\n\ \n\ --ignore-function-whitespace:\n\ ${tab}ignores multiple spaces and new lines when comparing content of\n\ ${tab}functions - WARNING: this may cause functions to appear to be\n\ ${tab}same in cases they are not, so use this feature only if you know\n\ ${tab}what you are doing.\n\ \n\ --ignore-start-with:\n\ ${tab}ignores START WITH modifications on SEQUENCEs (default: do not ignore\n\ ${tab}these changes).\n\ \n\ --ignore-schema-creation:\n\ ${tab}Removes the need of CREATE SCHEMA command on the input schemas\n\ \n\ --in-charset-name :\n\ ${tab}charset that should be used for reading input files (standard charset\n\ ${tab}name supported by Java; the default is UTF-8).\n\ \n\ --out-charset-name :\n\ ${tab}charset that should be used for writing output (standard charset name\n\ ${tab}supported by Java, default is UTF-8)\n\ \n\ --output-ignored-statements:\n\ ${tab}outputs information about DDL statements that apgdiff ignores at this\n\ ${tab}moment (it will not output any SELECT, INSERT, UPDATE and/or DELETE\n\ ${tab}statements).\n\ \n\ --ignore-slony-triggers:\n\ ${tab}when parsing SQL statements, ignores Slony triggers named\n\ ${tab}_slony_logtrigger and _slony_denyaccess.\n\ \n\ --list-charsets\n\ ${tab}lists all supported charsets Version=Version OriginalDatabaseIgnoredStatements=Original database ignored statements NewDatabaseIgnoredStatements=New database ignored statements ErrorUnknownOption=ERROR: Unknown option WarningUnableToDetermineStorageType=WARNING: Column {0} in new table has no STORAGE set but in old table storage was set. Unable to determine STORAGE type. TypeParameterChange=TYPE change - table: {0} original: {1} new: {2} UnsupportedEncoding=Unsupported encoding CannotReadFile=Cannot read file FileNotFound=File ''{0}'' not found CannotFindColumnInTable=Cannot find column ''{0}'' in table ''{1}'' CannotParseStringExpectedWord=Cannot parse string: {0}\nExpected {1} at position {2} ''{3}'' CannotParseStringExpectedInteger=Cannot parse string: {0}\nExpected integer at position {1} ''{2}'' CannotParseStringExpectedString=Cannot parse string: {0}\nExpected string at position {1} CannotParseStringExpectedExpression=Cannot parse string: {0}\nExpected expression at position {1} ''{2}'' CannotParseStringUnsupportedCommand=Cannot parse string: {0}\nUnsupported command at position {1} ''{2}'' CannotParseStringExpectedDataType=Cannot parse string: {0}\nExpected data type definition at position {1} ''{2}'' CannotFindSchema=Cannot find schema ''{0}'' for statement ''{1}''. Missing CREATE SCHEMA statement? CannotFindView=Cannot find view ''{0}'' for statement ''{1}''. Missing CREATE VIEW statement? CannotFindObject=Cannot find object ''{0}'' for statement ''{1}''. CannotFindTableColumn=Cannot find column ''{0}'' in table ''{1}'' for statement ''{2}''. CannotFindTable=Cannot find table ''{0}'' for statement ''{1}''. Missing CREATE TABLE? CannotFindSequence=Cannot find sequence ''{0}'' for statement ''{1}''. Missing CREATE SEQUENCE? EndOfStatementNotFound=Cannot find ending semicolon of statement: {0} CreateTablePrimaryKeyNotSupported="CREATE TABLE ... PRIMARY KEY ..." is not supported. Use "CREATE TABLE ... CONSTRAINT name PRIMARY KEY ..." instead. CreateTableUniqueNotSupported="CREATE TABLE ... UNIQUE ..." is not supported. Use "CREATE TABLE ... CONSTRAINT name UNIQUE..." instead. apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/pgdiff/Resources_cs.properties000066400000000000000000000114311412634760000320040ustar00rootroot00000000000000UsageHelp=\ Pou\u017eit\u00ed: apgdiff [volby] \n\ \n\ Volby:\n\ \n\ --version:\n\ ${tab}zobraz\u00ed verzi programu\n\ \n\ --add-defaults:\n\ ${tab}p\u0159id\u00e1 DEFAULT ... v p\u0159\u00edpad\u011b, \u017ee nov\u00fd sloupec m\u00e1 definovan\u00e9 omezen\u00ed NOT\n\ ${tab}NULL, ale \u017e\u00e1dnou v\u00fdchoz\u00ed hodnotu (v\u00fdchoz\u00ed hodnota je v takov\u00e9m p\u0159\u00edpad\u011b\n\ ${tab}n\u00e1sledn\u011b odstran\u011bna)\n\ \n\ --add-transaction:\n\ ${tab}p\u0159id\u00e1 START TRANSACTION a COMMIT TRANSACTION do generovan\u00e9ho souboru\n\ \n\ --ignore-function-whitespace:\n\ ${tab}ignoruje v\u00edce mezer a nov\u00e9 \u0159\u00e1dky p\u0159i porovn\u00e1v\u00e1n\u00ed obsahu funkc\u00ed - VAROV\u00c1N\u00cd:\n\ ${tab}toto m\u016f\u017ee zp\u016fsobit, \u017ee funkce budou vyhodnoceny jako shodn\u00e9 i v p\u0159\u00edpadech,\n\ ${tab}ve kter\u00fdch se li\u0161\u00ed, proto pou\u017e\u00edvejte tuhle funkci jen pokud v\u00edte, co\n\ ${tab}d\u011bl\u00e1te\n\ \n\ --ignore-start-with:\n\ ${tab}ignoruje zm\u011bny START WITH v SEQUENCE objektech (v\u00fdchoz\u00ed chov\u00e1n\u00ed je, \u017ee se\n\ ${tab}tyto zm\u011bny neignoruj\u00ed)\n\ \n\ --in-charset-name :\n\ ${tab}k\u00f3dov\u00e1n\u00ed, kter\u00e9 se m\u00e1 pou\u017e\u00edt pro \u010dten\u00ed vstupn\u00edch soubor\u016f (standardn\u00ed n\u00e1zvy\n\ ${tab}k\u00f3dov\u00e1n\u00ed podporovan\u00e9 Javou, v\u00fdchoz\u00ed je UTF-8)\n\ \n\ --out-charset-name :\n\ ${tab}k\u00f3dov\u00e1n\u00ed, kter\u00e9 se m\u00e1 pou\u017e\u00edt pro z\u00e1pis v\u00fdstupn\u00edho souboru (standardn\u00ed\n\ ${tab}n\u00e1zvy k\u00f3dov\u00e1n\u00ed podporovan\u00e9 Javou, v\u00fdchoz\u00ed je UTF-8)\n\ \n\ --output-ignored-statements:\n\ ${tab}vyp\u00ed\u0161e informace o DDL p\u0159\u00edkazech, kter\u00e9 zat\u00edm apgdiff ignoruje (do v\u00fdstupu\n\ ${tab}nebudou zapsan\u00e9 p\u0159\u00edkazy SELECT, INSERT, UPDATE a/nebo DELETE)\n\ \n\ --ignore-slony-triggers:\n\ ${tab}b\u011bhem parsov\u00e1n\u00ed SQL p\u0159\u00edkaz\u016f ignoruje Slony triggery _slony_logtrigger a\n\ ${tab}_slony_denyaccess\n\ \n\ --list-charsets\n\ ${tab}vyp\u00ed\u0161e v\u0161echna podporovan\u00e1 k\u00f3dov\u00e1n\u00ed Version=Verze OriginalDatabaseIgnoredStatements=Ignorovan\u00e9 p\u0159\u00edkazy z p\u016fvodn\u00ed datab\u00e1ze NewDatabaseIgnoredStatements=Ignorovan\u00e9 p\u0159\u00edkazy z nov\u00e9 datab\u00e1ze ErrorUnknownOption=CHYBA: Nezn\u00e1m\u00e1 volba WarningUnableToDetermineStorageType=VAROV\u00c1N\u00cd: Sloupec {0} v nov\u00e9 tabulce nem\u00e1 nastaven parametr STORAGE, ale v p\u016fvodn\u00ed tabulce byl nastaven\u00fd. Nelze ur\u010dit typ STORAGE. TypeParameterChange=Zm\u011bna parametru TYPE - tabulka: {0} p\u016fvodn\u00ed: {1} nov\u00fd: {2} UnsupportedEncoding=Nepodporovan\u00e9 k\u00f3dov\u00e1n\u00ed CannotReadFile=Nelze \u010d\u00edst soubor FileNotFound=Soubor ''{0}'' nebyl nalezen CannotFindColumnInTable=Nelze nal\u00e9zt sloupec ''{0}'' v tabulce ''{1}'' CannotParseStringExpectedWord=Nelze parsovat text: {0}\nO\u010dek\u00e1v\u00e1no {1} na pozici {2} ''{3}'' CannotParseStringExpectedInteger=Nelze parsovat text: {0}\nO\u010dek\u00e1v\u00e1n integer na pozici {1} ''{2}'' CannotParseStringExpectedString=Nelze parsovat text: {0}\nO\u010dek\u00e1v\u00e1n \u0159et\u011bzec na pozici {1} CannotParseStringExpectedExpression=Nelze parsovat text: {0}\nO\u010dek\u00e1v\u00e1n v\u00fdraz na pozici {1} ''{2}'' CannotParseStringUnsupportedCommand=Nelze parsovat text: {0}\nNepodporovan\u00fd p\u0159\u00edkaz na pozici {1} ''{2}'' CannotParseStringExpectedDataType=Nelze parsovat text: {0}\nO\u010dek\u00e1v\u00e1na definice datov\u00e9ho typu na pozici {1} ''{2}'' CannotFindSchema=Nelze nal\u00e9zt sch\u00e9ma ''{0}'' pro p\u0159\u00edkaz ''{1}''. Chyb\u00ed p\u0159\u00edkaz CREATE SCHEMA? CannotFindView=Nelze nal\u00e9zt pohled ''{0}'' pro p\u0159\u00edkaz ''{1}''. Chyb\u00ed p\u0159\u00edkaz CREATE VIEW? CannotFindObject=Nelze nal\u00e9zt objekt ''{0}'' pro p\u0159\u00edkaz ''{1}''. CannotFindTableColumn=Nelze nal\u00e9zt sloupec ''{0}'' v tabulce ''{1}'' pro p\u0159\u00edkaz ''{2}''. CannotFindTable=Nelze nal\u00e9zt tabulku ''{0}'' pro p\u0159\u00edkaz ''{1}''. Chyb\u00ed p\u0159\u00edkaz CREATE TABLE? CannotFindSequence=Nelze nal\u00e9zt sekvenci ''{0}'' pro p\u0159\u00edkaz ''{1}''. Chyb\u00ed p\u0159\u00edkaz CREATE SEQUENCE? EndOfStatementNotFound=Nelze nal\u00e9z ukon\u010duj\u00edc\u00ed st\u0159edn\u00edk: {0} CreateTablePrimaryKeyNotSupported="CREATE TABLE ... PRIMARY KEY ..." nen\u00ed podporov\u00e1no. Pou\u017eijte m\u00edsto toho "CREATE TABLE ... CONSTRAINT n\u00e1zev PRIMARY KEY ...". CreateTableUniqueNotSupported="CREATE TABLE ... UNIQUE ..." nen\u00ed podporov\u00e1no. Pou\u017eijte m\u00edsto toho "CREATE TABLE ... CONSTRAINT n\u00e1zev UNIQUE ...". apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/pgdiff/Resources_es.properties000066400000000000000000000101031412634760000320010ustar00rootroot00000000000000UsageHelp=\ Uso: apgdiff [opciones] \n\ \n\ Opciones:\n\ \n\ --version:\n\ ${tab}muestra la versi\u00f3n de apgdiff\n\ \n\ --add-defaults:\n\ ${tab}agrega DEFAULT ... en caso de que la nueva columna tenga la restricci\u00f3n\n\ ${tab}NOT NULL, pero no tiene opci\u00f3n de valor por defecto (el valor\n\ ${tab}por defecto eliminado despu\u00e9s de la conversi\u00f3n.)\n\ \n\ --add-transaction:\n\ ${tab}agrega START TRANSACTION y COMMIT TRANSACTION al archivo diff generado\n\ \n\ --ignore-function-whitespace:\n\ ${tab}ignora multiples espacios y nuevas l\u00edneas cuando est\u00e1 comparando\n\ ${tab}el contenido de funciones - ADVERTENCIA: esto puede causar\n\ ${tab}que funciones parezcan ser las mismas en casos que no lo son,\n\ ${tab}s\u00f3lo usa \u00e9sta caracter\u00edstica si sabes lo que estas haciendo\n\ \n\ --ignore-start-with:\n\ ${tab}ignora START WITH modificaciones de SEQUENCEs (por defecto no ignora\n\ ${tab}estos cambios)\n\ \n\ --in-charset-name :\n\ ${tab}charset que deber\u00eda ser usado para leer los archivos de entrada\n\ ${tab}(charset est\u00e1ndar soportado por Java, charset por defecto es UTF-8)\n\ \n\ --out-charset-name :\n\ ${tab}charset que deber\u00eda ser usado para escribir los archivos de salida\n\ ${tab}(charset est\u00e1ndar soportado por Java, charset por defecto UTF-8)\n\ \n\ --output-ignored-statements:\n\ ${tab}muestra informaci\u00f3n acerca de declaraciones DDL que apgdiff ignora\n\ ${tab}en estos momentos (no mostrar\u00e1 informaci\u00f3n de ning\u00fana declaraci\u00f3n\n\ ${tab}SELECT, INSERT, UPDATE y/o DELETE)\n\ \n\ --ignore-slony-triggers:\n\ ${tab}cuando se analizan las declaraciones SQL, ignora los disparadores Slony\n\ ${tab}llamados _slony_logtrigger y _slony_denyaccess\n\ \n\ --list-charsets\n\ ${tab}lista todos los charsets soportados Version=Versi\u00f3n OriginalDatabaseIgnoredStatements=Declaraciones de base de datos original ignoradas NewDatabaseIgnoredStatements=Declaraciones de base de datos nueva ignoradas ErrorUnknownOption=ERROR: opci\u00f3n desconocida WarningUnableToDetermineStorageType=ADVERTENCIA: Columna {0} en la tabla nueva no tiene STORAGE pero en la tabla vieja est\u00e1 declarado. No es posible determinar el tipo de STORAGE. TypeParameterChange=TIPO cambio - tabla: {0} original: {1} nueva: {2} UnsupportedEncoding=Encoding no soportado CannotReadFile=No se puede leer el archivo FileNotFound=Archivo ''{0}'' no encontrado CannotFindColumnInTable=No se puede encontrar la columna ''{0}'' en la tabla ''{1}'' CannotParseStringExpectedWord=No se puede an\u00e1lizar la cadena: {0}\nEsperando {1} en la posici\u00f3n {2} ''{3}'' CannotParseStringExpectedInteger=No se puede an\u00e1lizar la cadena: {0}\nEsperando entero en la posici\u00f3n {1} ''{2}'' CannotParseStringExpectedString=No se puede an\u00e1lizar la cadena: {0}\nEsperando cadena en la posici\u00f3n {1} CannotParseStringExpectedExpression=No se puede an\u00e1lizar la cadena: {0}\nEsperando cadena en la posici\u00f3n {1} ''{2}'' CannotParseStringUnsupportedCommand=No se puede an\u00e1lizar la cadena: {0}\nComando no soportado en la posici\u00f3n {1} ''{2}'' CannotParseStringExpectedDataType=No se puede an\u00e1lizar la cadena: {0}\nEsperando definici\u00f3n del tipo de dato en la posici\u00f3n {1} ''{2}'' CannotFindSchema=No se puede encontrar el esquema ''{0}'' para la declaraci\u00f3n ''{1}''. Falta la declaraci\u00f3n CREATE SCHEMA? CannotFindView=No se puede encontrar la vista ''{0}'' para la declaraci\u00f3n ''{1}''. Falta la declaraci\u00f3n CREATE VIEW? CannotFindObject=No se puede encontrar el objeto ''{0}'' para la declaraci\u00f3n ''{1}''. CannotFindTableColumn=No se puede encontrar la columna ''{0}'' en la tabla ''{1}'' para la declaraci\u00f3n ''{2}''. CannotFindTable=No se puede encontrar la tabla ''{0}'' para la declaraci\u00f3n ''{1}''. Falta la declaraci\u00f3n CREATE TABLE? CannotFindSequence=No se puede encontrar la secuencia ''{0}'' para la declaraci\u00f3n ''{1}''. Falta la declaraci\u00f3n CREATE SEQUENCE? EndOfStatementNotFound=No se puede encontrar punto y coma final para la declaraci\u00f3n: {0} apgdiff-release_2.7.0/src/main/resources/cz/startnet/utils/pgdiff/Resources_fr.properties000066400000000000000000000077051412634760000320170ustar00rootroot00000000000000VersionNumber=2.4 UsageHelp=\ Usage: apgdiff [options] \n\ \n\ Options:\n\ \n\ --version:\n\ ${tab}affiche la version d''apgdiff version\n\ \n\ --add-defaults:\n\ ${tab}ajoute DEFAULT ... dans le cas ou une colonne a une contrainte NOT NULL mais pas de valeur\n\ ${tab}par défaut (la valeur par défaut est supprimée ensuite)\n\ \n\ --add-transaction:\n\ ${tab}ajoute START TRANSACTION et COMMIT TRANSACTION au fichier de diff généré\n\ \n\ --ignore-function-whitespace:\n\ ${tab}ignore les espaces consécutifs et les retours chariots quand il compare le contenu de fonctions\n\ ${tab}- WARNING: cela pourrait faire croire que deux fonctions sont identiques alors que\n\ ${tab}ce n''est pas le cas, utilisez cette option seulement si vous savez ce que vous faites\n\ \n\ --ignore-start-with:\n\ ${tab}ignorer les modifications START WITH sur les SEQUENCEs (par defaut cela n''est pas\n\ ${tab}ignoré)\n\ \n\ --in-charset-name :\n\ ${tab}charset a utiliser pour lire les fichiers d''entrée (utilisez les noms de charsets\n\ ${tab}supporté par Java, par defaut c''est UTF-8)\n\ \n\ --out-charset-name :\n\ ${tab}charset a utiliser pour écrire les fichiers de sortie (utilisez les noms de charsets\n\ ${tab}supporté par Java, par defaut c''est UTF-8)\n\ \n\ --output-ignored-statements:\n\ ${tab}afficher les informations sur les instructions DDL qu''apgdiff ignore\n\ ${tab}pour le moment (n''affichera aucune instruction SELECT, INSERT, UPDATE et/ou \n\ ${tab}DELETE)\n\ \n\ --ignore-slony-triggers:\n\ ${tab}ignorer les triggers Slony nommés _slony_logtrigger et _slony_denyaccess lors du parsing\n\ ${tab}des instructions\n\ \n\ --list-charsets\n\ ${tab}liste les charsets supportés Version=Version OriginalDatabaseIgnoredStatements=Instruction a ignorer sur la base d''origine NewDatabaseIgnoredStatements=Instruction a ignorer sur la nouvelle base ErrorUnknownOption=ERREUR: option inconnue WarningUnableToDetermineStorageType=WARNING: la colonne {0} de la nouvelle table n''a pas de STORAGE indiqué mais c''était le cas dans la table d'origine. Impossible de determiner le type de STORAGE TypeParameterChange=Changement de TYPE - table: {0} original: {1} nouveau: {2} UnsupportedEncoding=Encoding non supporté CannotReadFile=Impossible de lire le fichier FileNotFound=Fichier ''{0}'' non trouvé CannotFindColumnInTable=Impossible de trouver la colonne ''{0}'' de la table ''{1}'' CannotParseStringExpectedWord=Impossible de parser la chaine de caractère: {0}\nAttendait {1} a la position {2} ''{3}'' CannotParseStringExpectedInteger=Impossible de parser la chaine de caractère: {0}\nAttendait un entier a la position {1} ''{2}'' CannotParseStringExpectedString=Impossible de parser la chaine de caractère: {0}\nAttendait une chaine a la position {1} CannotParseStringExpectedExpression=Impossible de parser la chaine de caractère: {0}\nAttendait une expression a la position {1} ''{2}'' CannotParseStringUnsupportedCommand=Impossible de parser la chaine de caractère: {0}\nCommande non supportée a la position {1} ''{2}'' CannotParseStringExpectedDataType=Impossible de parser la chaine de caractère: {0}\nAttendait une définition de type a la position {1} ''{2}'' CannotFindSchema=Impossible de trouver le schema ''{0}'' pour l'instruction ''{1}''. Ne manque-t-il pas l''instruction CREATE SCHEMA ? CannotFindView=Impossible de trouver la view ''{0}'' pour l'instruction ''{1}''. Ne manque-t-il pas l''instruction CREATE VIEW? CannotFindObject=Impossible de trouver l''objet ''{0}'' pour l'instruction ''{1}''. CannotFindTableColumn=Impossible de trouver la colonne ''{0}'' de la table ''{1}'' pour l''instruction ''{2}''. CannotFindTable=Impossible de trouver la table ''{0}'' pour l'instruction ''{1}''. Ne manque-t-il pas l''instruction CREATE TABLE? CannotFindSequence=Impossible de trouver la sequence ''{0}'' pour l'instruction ''{1}''. Ne manque-t-il pas l''instruction CREATE SEQUENCE? EndOfStatementNotFound=Impossible de trouver le point-virgule: {0} apgdiff-release_2.7.0/src/test/000077500000000000000000000000001412634760000163715ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/000077500000000000000000000000001412634760000173125ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/000077500000000000000000000000001412634760000177265ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/000077500000000000000000000000001412634760000215725ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/000077500000000000000000000000001412634760000227325ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/000077500000000000000000000000001412634760000241715ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/PgDiffTest.java000077500000000000000000000545211412634760000270450ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Arrays; import java.util.Collection; import java.util.Locale; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /** * Tests for PgDiff class. * * @author fordfrog */ @RunWith(value = Parameterized.class) public class PgDiffTest { /** * Provides parameters for running the tests. * * @return parameters for the tests */ @Parameters public static Collection parameters() { return Arrays.asList( new Object[][]{ // Tests scenario where COLUMN type is modified. {"modify_column_type", false, false, false, false}, // Tests scenario where CLUSTER is added to TABLE. {"add_cluster", false, false, false, false}, // Tests scenario where CLUSTER is dropped from TABLE. {"drop_cluster", false, false, false, false}, // Tests scenario where CLUSTER is changed on TABLE. {"modify_cluster", false, false, false, false}, // Tests scenario where EXTENSION is added to TABLE. {"add_extension", false, false, false, false}, // Tests scenario where EXTENSION is dropped from TABLE. {"drop_extension", false, false, false, false}, // Tests scenario where WITH OIDS is dropped from TABLE. {"drop_with_oids", false, false, false, false}, // Tests scenario where INDEX is added. {"add_index", false, false, false, false}, // Tests scenario where INDEX is dropped. {"drop_index", false, false, false, false}, // Tests scenario where INDEX that TABLE CLUSTER is based // on is dropped. {"drop_index_with_cluster", false, false, false, false}, // Tests scenario where INDEX definition is modified. {"modify_index", false, false, false, false}, // Tests scenario where STATISTICS information is added // to COLUMN. {"add_statistics", false, false, false, false}, // Tests scenario where STATISTICS information is modified. {"modify_statistics", false, false, false, false}, // Tests scenario where STATISTICS information is dropped. {"drop_statistics", false, false, false, false}, // Tests scenario where DEFAULT value is set on COLUMN. {"add_default_value", false, false, false, false}, // Tests scenario where DEFAULT value is modified. {"modify_default_value", false, false, false, false}, // Tests scenario where DEFAULT value is dropped from COLUMN. {"drop_default_value", false, false, false, false}, // Tests scenario where NOT NULL constraint is set on COLUMN. {"add_not_null", false, false, false, false}, // Tests scenario where NOT NULL constraint is dropped // from COLUMN.MATERIALIZED {"drop_not_null", false, false, false, false}, // Tests scenario where COLUMN is added to TABLE definition. {"add_column", false, false, false, false}, // Tests scenario where COLUMN is dropped from TABLE. {"drop_column", false, false, false, false}, // Tests scenario where new TABLE is added. {"add_table", false, false, false, false}, // Tests scenario where TABLE is dropped. {"drop_table", false, false, false, false}, // Tests scenario where TABLE CONSTRAINT is added. {"add_constraint", false, false, false, false}, // Tests scenario where TABLE CONSTRAINT is modified. {"modify_constraint", false, false, false, false}, // Tests scenario where TABLE CONSTRAINT is dropped. {"drop_constraint", false, false, false, false}, // Tests scenario where UNIQUE TABLE CONSTRAINT is added. {"add_unique_constraint", false, false, false, true}, // Tests reading of TABLE with INHERITS. {"read_inherits", false, false, false, false}, // Tests scenario where TABLE with INHERITS is added. {"add_inherits", false, false, false, false}, // Tests scenario where original and new TABLE contain //different INHERITS. {"modify_inherits", false, false, false, false}, // Alter default value of a inherited column {"alter_inherited_column", false, false, false, false}, // Add a table with a default value for a column that belongs to an inherited table {"add_inherits_default_column", false, false, false, false}, // Add a table with a default value for a column that belongs to an inherited table in a different schema {"add_inherits_schema_default_column", false, false, false, false}, // Tests when a default value is changed for a column that belongs to an inherited table {"modify_default_value_inherited_column", false, false, false, false}, // Tests scenario where SEQUENCE is added. {"add_sequence", false, false, false, false}, // Tests scenario where SEQUENCE is dropped. {"drop_sequence", false, false, false, false}, // Tests scenario where INCREMENT BY is modified on SEQUENCE. {"modify_sequence_increment", false, false, false, false}, // Tests scenario where START WITH is modified on SEQUENCE // (both with --ignore-start-with turned off and on). {"modify_sequence_start_ignore_off", false, false, false, false }, {"modify_sequence_start_ignore_on", false, false, false, true }, // Tests scenario where MINVALUE is modified on SEQUENCE // (both setting and unsetting the value). {"modify_sequence_minvalue_set", false, false, false, false}, {"modify_sequence_minvalue_unset", false, false, false, false }, // Tests scenario where MAXVALUE is modified on SEQUENCE // (both setting and unsetting the value). {"modify_sequence_maxvalue_set", false, false, false, false}, {"modify_sequence_maxvalue_unset", false, false, false, false }, // Tests scenario where CACHE is modified on SEQUENCE. {"modify_sequence_cache", false, false, false, false}, // Tests scenario where CYCLE is modified on SEQUENCE. {"modify_sequence_cycle_on", false, false, false, false}, {"modify_sequence_cycle_off", false, false, false, false}, // Tests correct finding of function end. {"modify_function_end_detection", false, false, false, false}, // Tests scenario where new FUNCTION without args is added. {"add_function_noargs", false, false, false, false}, // Tests scenario where FUNCTION without args is dropped. {"drop_function_noargs", false, false, false, false}, // Tests scenario where FUNCTION without args is modified. {"modify_function_noargs", false, false, false, false}, // Tests scenario where new FUNCTION with args is added. {"add_function_args", false, false, false, false}, // Tests scenario where FUNCTION with args is dropped. {"drop_function_args", false, false, false, false}, // Tests scenario where FUNCTION with args is modified. {"modify_function_args", false, false, false, false}, // Tests scenario where new FUNCTION with args is added. {"add_function_args2", false, false, false, false}, // Tests scenario where FUNCTION with args is dropped. {"drop_function_args2", false, false, false, false}, // Tests scenario where FUNCTION with args is modified. {"modify_function_args2", false, false, false, false}, // Tests scenario where FUNCTION with same name but // different args is added. {"add_function_similar", false, false, false, false}, // Tests scenario where FUNCTION with same name but // different args is dropped. {"drop_function_similar", false, false, false, false}, // Tests scenario where FUNCTION with same name but // different args is modified. {"modify_function_similar", false, false, false, false}, // Tests different whitespace formatting in functions {"function_equal_whitespace", false, false, true, false}, // Tests scenario where TRIGGER is added. {"add_trigger", false, false, false, false}, // Tests scenario where TRIGGER is dropped. {"drop_trigger", false, false, false, false}, // Tests scenario where TRIGGER is modified. {"modify_trigger", false, false, false, false}, {"create_trigger_postgres12", false, false, false, false}, // Tests scenario where VIEW is added. {"add_view", false, false, false, false}, // Tests scenario where VIEW is dropped. {"drop_view", false, false, false, false}, // Tests scenario where VIEW is modified. {"modify_view", false, false, false, false}, // Tests scenario where MATERIALIZED VIEW is added. {"add_materialized_view", false, false, false, false}, // Tests scenario where MATERIALIZED VIEW is dropped. {"drop_materialized_view", false, false, false, false}, // Tests scenario where MATERIALIZED VIEW is modified. {"modify_materialized_view", false, false, false, false}, // Tests scenario where --add-defaults is specified. {"add_defaults", true, false, false, false}, // Tests scenario where multiple schemas are in the dumps. {"multiple_schemas", false, false, false, false}, // Tests scenario where --add-transaction is specified. {"multiple_schemas", false, true, false, false}, // Tests dropping view default value {"alter_view_drop_default", false, true, false, false}, // Tests adding view default value {"alter_view_add_default", false, true, false, false}, // Tests adding of comments {"add_comments", false, true, false, false}, // Tests dropping of comments {"drop_comments", false, true, false, false}, // Tests altering of comments {"alter_comments", false, true, false, false}, // Tests changing view default value {"alter_view_change_default", false, true, false, false}, // Tests creation of sequence with bug in MINVALUE value {"add_sequence_bug2100013", false, true, false, false}, // Create Sequence Postgres 10 {"add_sequence_issue225", false, false, false, false}, // Tests view with default value {"view_bug3080388", false, true, false, false}, // Tests function arguments beginning with in_ {"function_bug3084274", false, true, false, false}, // Tests addition of comment when new column has been added {"add_comment_new_column", false, true, false, false}, // Tests handling of quoted schemas in search_path {"quoted_schema", false, true, false, false}, // Tests adding new column with add defaults turned on {"add_column_add_defaults", true, true, false, false}, // Tests adding new sequence that is owned by table {"add_owned_sequence", false, true, false, false}, // Tests adding empty table {"add_empty_table", false, false, false, false}, // Tests view with column names whose query changes {"view_colnames", false, false, false, false}, // Tests objects with the $ sign in the name {"add_table_bug102", false, false, false, false}, // Tests objects with the PARTITION BY {"add_table_partition_by", false, false, false, false}, // Tests scenario where new UNLOGGED TABLE is added. {"add_unlogged_table", false, false, false, false}, // Tests scenario where UNLOGGED TABLE is dropped. {"drop_unlogged_table", false, false, false, false}, // Test scenarios where /**/ comments. {"add_table_issue115", false, false, false, false}, {"add_column_issue134", false, false, false, false}, {"add_column_issue188", false, false, false, false}, {"add_column_issue188", false, false, false, false}, {"view_alias_with_quote", false, false, false, false}, // Tests view triggers (support for 'INSTEAD OF') //90 {"view_triggers", false, false, false, false}, // Tests privileges {"grant_on_table_sequence", false, false, false, false}, {"revoke_on_table_sequence", false, false, false, false}, {"grant_on_view", false, false, false, false}, {"revoke_on_view", false, false, false, false}, {"grant_on_columns", false, false, false, false} // Tests types , {"add_type", false, false, false, false} , {"drop_type", false, false, false, false} , {"alter_type", false, false, false, false} // Test Foreign Tables , {"foreign_create_table", false, false, false, false} , {"foreign_drop_table", false, false, false, false} //100 , {"foreign_alter_type", false, false, false, false} // Tests enable/force rls , {"enable_force_rls", false, false, false, false} , {"disable_no_force_rls", false, false, false, false} // Tests policies , {"create_policies", false, false, false, false} , {"drop_policies", false, false, false, false} , {"alter_policies", false, false, false, false} // Tests scenario where TRIGGER is enable or disable. , {"disable_trigger", false, false, false, false} // Tests grant on new sequence , {"grant_on_new_sequence", false, false, false, false} // Tests alter view owner , {"alter_view_owner", false, false, false, false} , {"grant_on_table_cols_mixed", false, false, false, false} , {"grant_on_view_cols_mixed", false, false, false, false} , {"create_schema_no_change_table", false, false, false, false} , {"add_table_identity_sequence",false,false,false,false} // Test create trigger in PostgreSQL v12 , {"add_trigger_function_postgres12", false, false, false, false} // Test create trigger with referencing tables , {"add_trigger_with_referencing_tables", false, false, false, false} }); } /** * Template name for file names that should be used for the test. Testing * method adds _original.sql, _new.sql and _diff.sql to the file name * template. */ private final String fileNameTemplate; /** * Value for the same named command line argument. */ private final boolean addDefaults; /** * Value for the same named command line argument. */ private final boolean addTransaction; /** * Value for the same named command line argument. */ private final boolean ignoreFunctionWhitespace; /** * Value for the same named command line argument. */ private final boolean ignoreStartWith; /** * Creates a new PgDiffTest object. * * @param fileNameTemplate {@link #fileNameTemplate} * @param addDefaults {@link #addDefaults} * @param addTransaction {@link #addTransaction} * @param ignoreFunctionWhitespace {@link #ignoreFunctionWhitespace} * @param ignoreStartWith {@link #ignoreStartWith} */ public PgDiffTest(final String fileNameTemplate, final boolean addDefaults, final boolean addTransaction, final boolean ignoreFunctionWhitespace, final boolean ignoreStartWith) { super(); this.fileNameTemplate = fileNameTemplate; this.addDefaults = addDefaults; this.addTransaction = addTransaction; this.ignoreFunctionWhitespace = ignoreFunctionWhitespace; this.ignoreStartWith = ignoreStartWith; Locale.setDefault(Locale.ENGLISH); } /** * Runs single test on original schema. * * @throws FileNotFoundException Thrown if expected diff file was not found. * @throws IOException Thrown if problem occurred while reading * expected diff. */ @Test(timeout = 1000) public void runDiffSameOriginal() throws FileNotFoundException, IOException { final ByteArrayOutputStream diffInput = new ByteArrayOutputStream(); final PrintWriter writer = new PrintWriter(diffInput, true); final PgDiffArguments arguments = new PgDiffArguments(); PgDiff.createDiff(writer, arguments, PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_original.sql"), PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_original.sql")); writer.flush(); Assert.assertEquals("File name template: " + fileNameTemplate, "", diffInput.toString().trim()); } /** * Runs single test on new schema. * * @throws FileNotFoundException Thrown if expected diff file was not found. * @throws IOException Thrown if problem occurred while reading * expected diff. */ @Test(timeout = 1000) public void runDiffSameNew() throws FileNotFoundException, IOException { final ByteArrayOutputStream diffInput = new ByteArrayOutputStream(); final PrintWriter writer = new PrintWriter(diffInput, true); final PgDiffArguments arguments = new PgDiffArguments(); PgDiff.createDiff(writer, arguments, PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_new.sql"), PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_new.sql")); writer.flush(); Assert.assertEquals("File name template: " + fileNameTemplate, "", diffInput.toString().trim()); } /** * Runs single test using class member variables. * * @throws FileNotFoundException Thrown if expected diff file was not found. * @throws IOException Thrown if problem occurred while reading * expected diff. */ @Test(timeout = 1000) public void runDiff() throws FileNotFoundException, IOException { final ByteArrayOutputStream diffInput = new ByteArrayOutputStream(); final PrintWriter writer = new PrintWriter(diffInput, true); final PgDiffArguments arguments = new PgDiffArguments(); arguments.setAddDefaults(addDefaults); arguments.setIgnoreFunctionWhitespace(ignoreFunctionWhitespace); arguments.setIgnoreStartWith(ignoreStartWith); PgDiffUtils.setUseExists(true); PgDiff.createDiff(writer, arguments, PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_original.sql"), PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_new.sql")); writer.flush(); final BufferedReader reader = new BufferedReader(new InputStreamReader( PgDiffTest.class.getResourceAsStream( fileNameTemplate + "_diff.sql"))); final char[] part = new char[1024]; final StringBuilder sbExpDiff = new StringBuilder(1024); while (reader.read(part) != -1) { sbExpDiff.append(part); } reader.close(); Assert.assertEquals("File name template: " + fileNameTemplate, sbExpDiff.toString().trim(), diffInput.toString().trim()); } } apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/loader/000077500000000000000000000000001412634760000254375ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/loader/PgDumpLoaderTest.java000066400000000000000000000033111412634760000314630ustar00rootroot00000000000000/** * Copyright 2006 StartNet s.r.o. * * Distributed under MIT license */ package cz.startnet.utils.pgdiff.loader; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; /** * Tests for PgDiffLoader class. * * @author fordfrog */ @RunWith(value = Parameterized.class) public class PgDumpLoaderTest { /** * Provides parameters for running the tests. * * @return parameters for the tests */ @Parameters public static Collection parameters() { return Arrays.asList( new Object[][]{ {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {18} }); } /** * Index of the file that should be tested. */ private final int fileIndex; /** * Creates a new instance of PgDumpLoaderTest. * * @param fileIndex {@link #fileIndex} */ public PgDumpLoaderTest(final int fileIndex) { this.fileIndex = fileIndex; } /** * Runs single test. */ @Test(timeout = 1000) public void loadSchema() { PgDumpLoader.loadDatabaseSchema( getClass().getResourceAsStream("schema_" + fileIndex + ".sql"), "UTF-8", false, false, false); } } apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/parsers/000077500000000000000000000000001412634760000256505ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/java/cz/startnet/utils/pgdiff/parsers/ParserUtilsTest.java000066400000000000000000000071461412634760000316400ustar00rootroot00000000000000/** * Copyright 2010 StartNet s.r.o. */ package cz.startnet.utils.pgdiff.parsers; import cz.startnet.utils.pgdiff.schema.PgDatabase; import cz.startnet.utils.pgdiff.schema.PgSchema; import org.hamcrest.core.IsEqual; import org.junit.Assert; import org.junit.Test; /** * Tests {@link #ParserUtils}. * * @author fordfrog */ public class ParserUtilsTest { @Test(timeout = 1000) public void testParseSchemaBothQuoted() { final PgDatabase database = new PgDatabase(); final PgSchema schema = new PgSchema("juzz_system"); database.addSchema(schema); Assert.assertThat(ParserUtils.getSchemaName( "\"juzz_system\".\"f_obj_execute_node_select\"", database), IsEqual.equalTo("juzz_system")); } @Test(timeout = 1000) public void testParseSchemaFirstQuoted() { final PgDatabase database = new PgDatabase(); final PgSchema schema = new PgSchema("juzz_system"); database.addSchema(schema); Assert.assertThat(ParserUtils.getSchemaName( "\"juzz_system\".f_obj_execute_node_select", database), IsEqual.equalTo("juzz_system")); } @Test(timeout = 1000) public void testParseSchemaSecondQuoted() { final PgDatabase database = new PgDatabase(); final PgSchema schema = new PgSchema("juzz_system"); database.addSchema(schema); Assert.assertThat(ParserUtils.getSchemaName( "juzz_system.\"f_obj_execute_node_select\"", database), IsEqual.equalTo("juzz_system")); } @Test(timeout = 1000) public void testParseSchemaNoneQuoted() { final PgDatabase database = new PgDatabase(); final PgSchema schema = new PgSchema("juzz_system"); database.addSchema(schema); Assert.assertThat(ParserUtils.getSchemaName( "juzz_system.f_obj_execute_node_select", database), IsEqual.equalTo("juzz_system")); } @Test(timeout = 1000) public void testParseSchemaThreeQuoted() { final PgDatabase database = new PgDatabase(); final PgSchema schema = new PgSchema("juzz_system"); database.addSchema(schema); Assert.assertThat(ParserUtils.getSchemaName( "\"juzz_system\".\"f_obj_execute_node_select\".\"test\"", database), IsEqual.equalTo("juzz_system")); } @Test(timeout = 1000) public void testParseObjectBothQuoted() { Assert.assertThat(ParserUtils.getObjectName( "\"juzz_system\".\"f_obj_execute_node_select\""), IsEqual.equalTo("f_obj_execute_node_select")); } @Test(timeout = 1000) public void testParseObjectFirstQuoted() { Assert.assertThat(ParserUtils.getObjectName( "\"juzz_system\".f_obj_execute_node_select"), IsEqual.equalTo("f_obj_execute_node_select")); } @Test(timeout = 1000) public void testParseObjectSecondQuoted() { Assert.assertThat(ParserUtils.getObjectName( "juzz_system.\"f_obj_execute_node_select\""), IsEqual.equalTo("f_obj_execute_node_select")); } @Test(timeout = 1000) public void testParseObjectNoneQuoted() { Assert.assertThat(ParserUtils.getObjectName( "juzz_system.f_obj_execute_node_select"), IsEqual.equalTo("f_obj_execute_node_select")); } @Test(timeout = 1000) public void testParseObjectThreeQuoted() { Assert.assertThat(ParserUtils.getObjectName( "\"juzz_system\".\"f_obj_execute_node_select\".\"test\""), IsEqual.equalTo("test")); } } apgdiff-release_2.7.0/src/test/resources/000077500000000000000000000000001412634760000204035ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/000077500000000000000000000000001412634760000210175ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/000077500000000000000000000000001412634760000226635ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/000077500000000000000000000000001412634760000240235ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/000077500000000000000000000000001412634760000252625ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_cluster_diff.sql000066400000000000000000000011311412634760000312600ustar00rootroot00000000000000 CREATE SEQUENCE IF NOT EXISTS testtable2_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; CREATE TABLE IF NOT EXISTS testtable2 ( id integer DEFAULT nextval('testtable2_id_seq'::regclass) NOT NULL, col1 boolean NOT NULL ); ALTER TABLE testtable2 OWNER TO fordfrog; ALTER SEQUENCE testtable2_id_seq OWNED BY testtable2.id; CREATE INDEX IF NOT EXISTS testindex ON testtable USING btree (field1); CREATE INDEX IF NOT EXISTS testtable2_col1 ON testtable2 USING btree (col1); ALTER TABLE testtable CLUSTER ON testindex; ALTER TABLE testtable2 CLUSTER ON testtable2_col1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_cluster_new.sql000066400000000000000000000047301412634760000311510ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testtable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer NOT NULL, col1 boolean NOT NULL ); ALTER TABLE public.testtable2 OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable2_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable2_id_seq OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable2_id_seq OWNED BY testtable2.id; -- -- Name: testtable2_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable2_id_seq', 1, false); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable2 ALTER COLUMN id SET DEFAULT nextval('testtable2_id_seq'::regclass); -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Data for Name: testtable2; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); ALTER TABLE testtable CLUSTER ON testindex; -- -- Name: testtable2_col1; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testtable2_col1 ON testtable2 USING btree (col1); ALTER TABLE testtable2 CLUSTER ON testtable2_col1; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_cluster_original.sql000066400000000000000000000016521412634760000321640ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_add_defaults_diff.sql000066400000000000000000000002771412634760000336050ustar00rootroot00000000000000 ALTER TABLE table1 ADD COLUMN IF NOT EXISTS col2 integer DEFAULT 0 NOT NULL, ADD COLUMN IF NOT EXISTS col3 integer DEFAULT 5 NOT NULL; ALTER TABLE table1 ALTER COLUMN col2 DROP DEFAULT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_add_defaults_new.sql000066400000000000000000000022611412634760000334610ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: table1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE table1 ( col1 integer, col2 integer NOT NULL, col3 integer DEFAULT 5 NOT NULL ); ALTER TABLE public.table1 OWNER TO fordfrog; -- -- Data for Name: table1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- COPY table1 (col1, col2, col3) FROM stdin; \. -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- add_column_add_defaults_original.sql000066400000000000000000000021451412634760000344160ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: table1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE table1 ( col1 integer ); ALTER TABLE public.table1 OWNER TO fordfrog; -- -- Data for Name: table1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- COPY table1 (col1) FROM stdin; \. -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_diff.sql000066400000000000000000000001301412634760000310720ustar00rootroot00000000000000 ALTER TABLE testtable ADD COLUMN IF NOT EXISTS field5 boolean DEFAULT false NOT NULL; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue134_diff.sql000066400000000000000000000000721412634760000325370ustar00rootroot00000000000000ALTER TABLE test1 ADD COLUMN IF NOT EXISTS type SMALLINT;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue134_new.sql000066400000000000000000000001401412634760000324140ustar00rootroot00000000000000CREATE table "test1" ( "id" BIGINT, "type" SMALLINT /* 1: aaa, 2:bbb */, "value" VARCHAR(255) );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue134_original.sql000066400000000000000000000000731412634760000334340ustar00rootroot00000000000000CREATE table "test1" ( "id" BIGINT, "value" VARCHAR(255) );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue188_diff.sql000066400000000000000000000002671412634760000325560ustar00rootroot00000000000000ALTER TABLE test1 ADD COLUMN IF NOT EXISTS test2 TEXT DEFAULT '*/', ADD COLUMN IF NOT EXISTS test TEXT DEFAULT 'this /*is*/ test', ADD COLUMN IF NOT EXISTS test3 TEXT DEFAULT '*/';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue188_new.sql000066400000000000000000000002771412634760000324400ustar00rootroot00000000000000/* Test table */ CREATE table "test1" ( "id" BIGINT, "value" VARCHAR(255), test2 TEXT DEFAULT '*/', test TEXT DEFAULT 'this /*is*/ test' /* in /*line*/ comment */, test3 TEXT DEFAULT '*/' );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_issue188_original.sql000066400000000000000000000000731412634760000334450ustar00rootroot00000000000000CREATE table "test1" ( "id" BIGINT, "value" VARCHAR(255) );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_new.sql000066400000000000000000000021471412634760000307650ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, field5 boolean DEFAULT false NOT NULL ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_column_original.sql000066400000000000000000000020741412634760000317770ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_comment_new_column_diff.sql000066400000000000000000000003021412634760000334660ustar00rootroot00000000000000ALTER TABLE agent ADD COLUMN IF NOT EXISTS abc BIGINT; COMMENT ON COLUMN agent.id IS 'This ID support schema name'; COMMENT ON COLUMN agent.abc IS 'This agent supports credit system or not.';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_comment_new_column_new.sql000066400000000000000000000003231412634760000333520ustar00rootroot00000000000000CREATE TABLE public."agent"( id BIGINT, abc BIGINT ); COMMENT ON COLUMN "agent"."abc" IS 'This agent supports credit system or not.'; COMMENT ON COLUMN "public"."agent"."id" IS 'This ID support schema name';add_comment_new_column_original.sql000066400000000000000000000000421412634760000343040ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE TABLE agent( id BIGINT );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_comments_diff.sql000066400000000000000000000012551412634760000314330ustar00rootroot00000000000000COMMENT ON DATABASE current_database() IS 'comments database'; COMMENT ON SCHEMA "public" IS 'public schema'; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence'; COMMENT ON TABLE test IS 'test table'; COMMENT ON COLUMN test.id IS 'id column'; COMMENT ON COLUMN test.text IS 'text column'; COMMENT ON VIEW test_view IS 'test view'; COMMENT ON COLUMN test_view.id IS 'view id col'; COMMENT ON COLUMN test_view.text IS 'view text col'; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function'; COMMENT ON CONSTRAINT text_check ON test IS 'text check'; COMMENT ON INDEX test_pkey IS 'primary key'; COMMENT ON TRIGGER test_trigger ON test IS 'test trigger'; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_comments_new.sql000066400000000000000000000036301412634760000313130ustar00rootroot00000000000000COMMENT ON DATABASE comments IS 'comments database'; COMMENT ON SCHEMA public IS 'public schema'; CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function'; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; COMMENT ON TABLE test IS 'test table'; COMMENT ON COLUMN test.id IS 'id column'; COMMENT ON COLUMN test.text IS 'text column'; COMMENT ON CONSTRAINT text_check ON test IS 'text check'; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence'; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; COMMENT ON VIEW test_view IS 'test view'; COMMENT ON COLUMN test_view.id IS 'view id col'; COMMENT ON COLUMN public.test_view.text IS 'view text col'; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); COMMENT ON INDEX test_pkey IS 'primary key'; CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc(); COMMENT ON TRIGGER test_trigger ON test IS 'test trigger'; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_comments_original.sql000066400000000000000000000023561412634760000323320ustar00rootroot00000000000000CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc();apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_constraint_diff.sql000066400000000000000000000002411412634760000317640ustar00rootroot00000000000000 ALTER TABLE IF EXISTS testtable ADD CONSTRAINT IF NOT EXISTS field4check CHECK (((field4 > (-5.0)::double precision) AND (field4 < (5.0)::double precision))); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_constraint_new.sql000066400000000000000000000025311412634760000316510ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL, CONSTRAINT field4check CHECK (((field4 > (-5.0)::double precision) AND (field4 < (5.0)::double precision))) ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_constraint_original.sql000066400000000000000000000023501412634760000326630ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_default_value_diff.sql000066400000000000000000000000751412634760000324250ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field4 SET DEFAULT 0.0; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_default_value_new.sql000066400000000000000000000021101412634760000322760ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision DEFAULT 0.0 ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_default_value_original.sql000066400000000000000000000020741412634760000333220ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_defaults_diff.sql000066400000000000000000000006571412634760000314220ustar00rootroot00000000000000 ALTER TABLE testtable ADD COLUMN IF NOT EXISTS col3 boolean DEFAULT false NOT NULL, ADD COLUMN IF NOT EXISTS col4 character(10) DEFAULT '' NOT NULL, ADD COLUMN IF NOT EXISTS col5 text DEFAULT '' NOT NULL, ALTER COLUMN col1 SET DEFAULT 0, ALTER COLUMN col1 SET NOT NULL; ALTER TABLE testtable ALTER COLUMN col3 DROP DEFAULT, ALTER COLUMN col4 DROP DEFAULT, ALTER COLUMN col5 DROP DEFAULT, ALTER COLUMN col1 DROP DEFAULT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_defaults_new.sql000066400000000000000000000034511412634760000312760ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id integer NOT NULL, col1 smallint NOT NULL, col2 character varying(20), col3 boolean NOT NULL, col4 character(10) NOT NULL, col5 text NOT NULL ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testtable_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable_id_seq OWNER TO fordfrog; -- -- Name: testtable_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable_id_seq OWNED BY testtable.id; -- -- Name: testtable_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable_id_seq', 1, false); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable ALTER COLUMN id SET DEFAULT nextval('testtable_id_seq'::regclass); -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_defaults_original.sql000066400000000000000000000033141412634760000323070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id integer NOT NULL, col1 smallint, col2 character varying(20) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testtable_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable_id_seq OWNER TO fordfrog; -- -- Name: testtable_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable_id_seq OWNED BY testtable.id; -- -- Name: testtable_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable_id_seq', 1, false); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable ALTER COLUMN id SET DEFAULT nextval('testtable_id_seq'::regclass); -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_empty_table_diff.sql000066400000000000000000000001301412634760000321020ustar00rootroot00000000000000CREATE TABLE IF NOT EXISTS empty_table ( ); ALTER TABLE empty_table OWNER TO fordfrog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_empty_table_new.sql000066400000000000000000000017501412634760000317740ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: empty_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE empty_table ( ); ALTER TABLE public.empty_table OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_empty_table_original.sql000066400000000000000000000013311412634760000330020ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_extension_diff.sql000066400000000000000000000000731412634760000316170ustar00rootroot00000000000000 CREATE EXTENSION IF NOT EXISTS plpgsql SCHEMA pg_catalog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_extension_new.sql000066400000000000000000000013301412634760000314750ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_extension_original.sql000066400000000000000000000007261412634760000325200ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args2_diff.sql000066400000000000000000000002511412634760000325240ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION multiply_numbers(number1 integer, number2 integer) RETURNS integer AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args2_new.sql000066400000000000000000000026731412634760000324170ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number1 integer, number2 integer) RETURNS integer AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number1 integer, number2 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args2_original.sql000066400000000000000000000021341412634760000334220ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args_diff.sql000066400000000000000000000002201412634760000324360ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION power_number("input" integer) RETURNS integer AS $$ begin return input * input; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args_new.sql000066400000000000000000000026001412634760000323230ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: power_number(integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION power_number("input" integer) RETURNS integer AS $$ begin return input * input; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.power_number("input" integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_args_original.sql000066400000000000000000000021341412634760000333400ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_noargs_diff.sql000066400000000000000000000001631412634760000330010ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION return_one() RETURNS integer AS $$ begin return 1; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_noargs_new.sql000066400000000000000000000025111412634760000326610ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: return_one(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION return_one() RETURNS integer AS $$ begin return 1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.return_one() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_noargs_original.sql000066400000000000000000000021341412634760000336750ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_similar_diff.sql000066400000000000000000000002631412634760000331510ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION multiply_numbers(number2 smallint, number1 smallint) RETURNS smallint AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_similar_new.sql000066400000000000000000000034571412634760000330420ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; -- -- Name: multiply_numbers(smallint, smallint); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 smallint, number1 smallint) RETURNS smallint AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 smallint, number1 smallint) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_function_similar_original.sql000066400000000000000000000027021412634760000340450ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_index_diff.sql000066400000000000000000000001121412634760000307040ustar00rootroot00000000000000 CREATE INDEX IF NOT EXISTS testindex3 ON testtable USING btree (field3); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_index_new.sql000066400000000000000000000026221412634760000305750ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: testindex3; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex3 ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_index_original.sql000066400000000000000000000023761412634760000316160ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- add_inherits_default_column_diff.sql000066400000000000000000000002141412634760000344270ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff CREATE TABLE IF NOT EXISTS childtable ( ) INHERITS (parenttable); ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 0; add_inherits_default_column_new.sql000066400000000000000000000013611412634760000343140ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); -- -- Name: childtable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE childtable ( ) INHERITS (parenttable); -- -- Name: childtable; Type: DEFAULT; Schema: public; Owner: admin -- ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 0; -- -- PostgreSQL database dump complete --add_inherits_default_column_original.sql000066400000000000000000000007301412634760000353260ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); -- -- PostgreSQL database dump complete --apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_inherits_diff.sql000066400000000000000000000001741412634760000314320ustar00rootroot00000000000000 CREATE TABLE IF NOT EXISTS testtable ( field1 polygon ) INHERITS (parenttable); ALTER TABLE testtable OWNER TO fordfrog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_inherits_new.sql000066400000000000000000000020201412634760000313030ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( id bigserial NOT NULL ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 polygon ) INHERITS (parenttable); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_inherits_original.sql000066400000000000000000000015011412634760000323210ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( id bigserial NOT NULL ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- add_inherits_schema_default_column_diff.sql000066400000000000000000000004071412634760000357530ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff CREATE SCHEMA IF NOT EXISTS schema1; SET search_path = schema1, pg_catalog; CREATE TABLE IF NOT EXISTS childtable ( childtable_date timestamptz NOT NULL ) INHERITS (public.parenttable); ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 0; add_inherits_schema_default_column_new.sql000066400000000000000000000016471412634760000356430ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: schema1; Type: SCHEMA; Schema: -; Owner: admin -- CREATE SCHEMA schema1; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); SET search_path = schema1, pg_catalog; -- -- Name: childtable; Type: TABLE; Schema: schema1; Owner: admin; Tablespace: -- CREATE TABLE childtable ( childtable_date timestamptz NOT NULL ) INHERITS (public.parenttable); -- -- Name: parenttable_id; Type: DEFAULT; Schema: schema1; Owner: admin -- ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 0; -- -- PostgreSQL database dump complete --add_inherits_schema_default_column_original.sql000066400000000000000000000007301412634760000366460ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); -- -- PostgreSQL database dump complete --apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_materialized_view_diff.sql000066400000000000000000000002031412634760000333020ustar00rootroot00000000000000 CREATE MATERIALIZED VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER VIEW testview OWNER TO fordfrog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_materialized_view_new.sql000066400000000000000000000023041412634760000331670ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE MATERIALIZED VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_materialized_view_original.sql000066400000000000000000000017571412634760000342150ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_not_null_diff.sql000066400000000000000000000000721412634760000314340ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field3 SET NOT NULL; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_not_null_new.sql000066400000000000000000000021051412634760000313140ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying NOT NULL, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_not_null_original.sql000066400000000000000000000020741412634760000323340ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_owned_sequence_diff.sql000066400000000000000000000004731412634760000326130ustar00rootroot00000000000000 CREATE SEQUENCE IF NOT EXISTS table2_col1_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; CREATE TABLE IF NOT EXISTS table2 ( col1 integer DEFAULT nextval('table2_col1_seq'::regclass) NOT NULL ); ALTER TABLE table2 OWNER TO fordfrog; ALTER SEQUENCE table2_col1_seq OWNED BY table2.col1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_owned_sequence_new.sql000066400000000000000000000054251412634760000324760ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: table1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE table1 ( col1 integer NOT NULL ); ALTER TABLE public.table1 OWNER TO fordfrog; -- -- Name: table1_col1_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE table1_col1_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.table1_col1_seq OWNER TO fordfrog; -- -- Name: table1_col1_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE table1_col1_seq OWNED BY table1.col1; -- -- Name: table1_col1_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('table1_col1_seq', 1, false); -- -- Name: table2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE table2 ( col1 integer NOT NULL ); ALTER TABLE public.table2 OWNER TO fordfrog; -- -- Name: table2_col1_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE table2_col1_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.table2_col1_seq OWNER TO fordfrog; -- -- Name: table2_col1_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE table2_col1_seq OWNED BY table2.col1; -- -- Name: table2_col1_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('table2_col1_seq', 1, false); -- -- Name: col1; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE ONLY table1 ALTER COLUMN col1 SET DEFAULT nextval('table1_col1_seq'::regclass); -- -- Name: col1; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE ONLY table2 ALTER COLUMN col1 SET DEFAULT nextval('table2_col1_seq'::regclass); -- -- Data for Name: table1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- COPY table1 (col1) FROM stdin; \. -- -- Data for Name: table2; Type: TABLE DATA; Schema: public; Owner: fordfrog -- COPY table2 (col1) FROM stdin; \. -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_owned_sequence_original.sql000066400000000000000000000034531412634760000335100ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: table1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE table1 ( col1 integer NOT NULL ); ALTER TABLE public.table1 OWNER TO fordfrog; -- -- Name: table1_col1_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE table1_col1_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.table1_col1_seq OWNER TO fordfrog; -- -- Name: table1_col1_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE table1_col1_seq OWNED BY table1.col1; -- -- Name: table1_col1_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('table1_col1_seq', 1, false); -- -- Name: col1; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE ONLY table1 ALTER COLUMN col1 SET DEFAULT nextval('table1_col1_seq'::regclass); -- -- Data for Name: table1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- COPY table1 (col1) FROM stdin; \. -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_bug2100013_diff.sql000066400000000000000000000001461412634760000330000ustar00rootroot00000000000000CREATE SEQUENCE IF NOT EXISTS test_id_seq INCREMENT BY 1 MAXVALUE 2147483647 NO MINVALUE CACHE 1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_bug2100013_new.sql000066400000000000000000000001231412634760000326540ustar00rootroot00000000000000CREATE SEQUENCE test_id_seq INCREMENT BY 1 MAXVALUE 2147483647 NO MINVALUE CACHE 1;add_sequence_bug2100013_original.sql000066400000000000000000000000001412634760000336020ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffapgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_diff.sql000066400000000000000000000001511412634760000314100ustar00rootroot00000000000000 CREATE SEQUENCE IF NOT EXISTS testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_issue225_diff.sql000066400000000000000000000002571412634760000330600ustar00rootroot00000000000000 CREATE SEQUENCE IF NOT EXISTS alert_alert_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE sequence_10 AS bigint; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_issue225_new.sql000066400000000000000000000020011412634760000327260ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE alert_alert_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; CREATE SEQUENCE sequence_10 AS bigint START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.alert_alert_id_seq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_issue225_original.sql000066400000000000000000000013731412634760000337540ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; CREATE SEQUENCE sequence_10 AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_new.sql000066400000000000000000000024371412634760000313020ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_sequence_original.sql000066400000000000000000000020741412634760000323120ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_statistics_diff.sql000066400000000000000000000001041412634760000317700ustar00rootroot00000000000000 ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 100; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_statistics_new.sql000066400000000000000000000021771412634760000316650ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 100; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_statistics_original.sql000066400000000000000000000020741412634760000326740ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_bug102_diff.sql000066400000000000000000000005551412634760000317570ustar00rootroot00000000000000CREATE TABLE IF NOT EXISTS "procedureresult$Operation" ( id bigint NOT NULL, name character varying(255), result_id bigint ); ALTER TABLE "procedureresult$Operation" OWNER TO fordfrog; ALTER TABLE IF EXISTS "procedureresult$Operation" ADD CONSTRAINT IF NOT EXISTS $1 FOREIGN KEY (result_id) REFERENCES testtable(field1) ON UPDATE RESTRICT ON DELETE RESTRICT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_bug102_new.sql000066400000000000000000000027771412634760000316500ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: procedureresult$operation; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE "procedureresult$Operation" ( id bigint NOT NULL, name character varying(255), result_id bigint ); ALTER TABLE public."procedureresult$Operation" OWNER TO fordfrog; ALTER TABLE ONLY "procedureresult$Operation" ADD CONSTRAINT "$1" FOREIGN KEY (result_id) REFERENCES testtable(field1) ON UPDATE RESTRICT ON DELETE RESTRICT; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_bug102_original.sql000066400000000000000000000020741412634760000326510ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_diff.sql000066400000000000000000000002121412634760000306650ustar00rootroot00000000000000 CREATE TABLE IF NOT EXISTS testtable2 ( id integer, name character varying(100) NOT NULL ); ALTER TABLE testtable2 OWNER TO fordfrog; add_table_identity_sequence_diff.sql000066400000000000000000000004041412634760000344120ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffALTER TABLE teste ADD COLUMN IF NOT EXISTS id integer NOT NULL; ALTER TABLE teste ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( SEQUENCE NAME public.teste_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 );add_table_identity_sequence_new.sql000066400000000000000000000015661412634760000343050ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffSET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: teste; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.teste ( codigo integer NOT NULL, id integer NOT NULL ); ALTER TABLE public.teste OWNER TO postgres; -- -- Name: teste_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres -- ALTER TABLE public.teste ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( SEQUENCE NAME public.teste_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1 );add_table_identity_sequence_original.sql000066400000000000000000000013341412634760000353110ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 13.3 -- Dumped by pg_dump version 13.3 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: teste; Type: TABLE; Schema: public; Owner: postgres -- CREATE TABLE public.teste ( codigo integer NOT NULL ); ALTER TABLE public.teste OWNER TO postgres; -- -- PostgreSQL database dump complete --apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_issue115_diff.sql000066400000000000000000000000721412634760000323300ustar00rootroot00000000000000CREATE TABLE IF NOT EXISTS test2 ( id serial NOT NULL ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_issue115_new.sql000066400000000000000000000001061412634760000322070ustar00rootroot00000000000000/* create table begin */ create table "test2"( "id" serial NOT NULL );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_issue115_original.sql000066400000000000000000000000001412634760000332130ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_new.sql000066400000000000000000000024351412634760000305570ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testtable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer, name character varying(100) NOT NULL ); ALTER TABLE public.testtable2 OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_original.sql000066400000000000000000000020741412634760000315710ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_partition_by_diff.sql000066400000000000000000000006131412634760000334550ustar00rootroot00000000000000CREATE TABLE IF NOT EXISTS "procedureresult$Operation" ( id bigint NOT NULL, name character varying(255), result_id bigint ) PARTITION BY RANGE(result_id); ALTER TABLE "procedureresult$Operation" OWNER TO fordfrog; ALTER TABLE IF EXISTS "procedureresult$Operation" ADD CONSTRAINT IF NOT EXISTS $1 FOREIGN KEY (result_id) REFERENCES testtable(field1) ON UPDATE RESTRICT ON DELETE RESTRICT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_table_partition_by_new.sql000066400000000000000000000030351412634760000333370ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: procedureresult$operation; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE "procedureresult$Operation" ( id bigint NOT NULL, name character varying(255), result_id bigint ) PARTITION BY RANGE(result_id); ALTER TABLE public."procedureresult$Operation" OWNER TO fordfrog; ALTER TABLE ONLY "procedureresult$Operation" ADD CONSTRAINT "$1" FOREIGN KEY (result_id) REFERENCES testtable(field1) ON UPDATE RESTRICT ON DELETE RESTRICT; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- add_table_partition_by_original.sql000066400000000000000000000020751412634760000342760ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff -- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_transaction_diff.sql000066400000000000000000000012001412634760000321210ustar00rootroot00000000000000START TRANSACTION; DROP SCHEMA testschema1 CASCADE; CREATE SCHEMA testschema2; SET search_path = public, pg_catalog; DROP SEQUENCE testtable2_id_seq; CREATE SEQUENCE testtable3_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; DROP TABLE testtable2; CREATE TABLE testtable3 ( id bigint DEFAULT nextval('testtable3_id_seq'::regclass) NOT NULL ); SET search_path = testschema2, pg_catalog; CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; CREATE TABLE testtable1 ( id integer DEFAULT nextval('testtable1_id_seq'::regclass) NOT NULL ); COMMIT TRANSACTION; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_transaction_new.sql000066400000000000000000000077651412634760000320300ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: testschema2; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA testschema2; ALTER SCHEMA testschema2 OWNER TO fordfrog; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id bigint NOT NULL ); ALTER TABLE public.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); -- -- Name: testtable3; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable3 ( id bigint NOT NULL ); ALTER TABLE public.testtable3 OWNER TO fordfrog; -- -- Name: testtable3_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable3_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable3_id_seq OWNER TO fordfrog; -- -- Name: testtable3_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable3_id_seq OWNED BY testtable3.id; -- -- Name: testtable3_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable3_id_seq', 1, false); SET search_path = testschema2, pg_catalog; -- -- Name: testtable1; Type: TABLE; Schema: testschema2; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id integer NOT NULL ); ALTER TABLE testschema2.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: testschema2; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE testschema2.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: testschema2; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: testschema2; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); SET search_path = public, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable3 ALTER COLUMN id SET DEFAULT nextval('testtable3_id_seq'::regclass); SET search_path = testschema2, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: testschema2; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); SET search_path = public, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Data for Name: testtable3; Type: TABLE DATA; Schema: public; Owner: fordfrog -- SET search_path = testschema2, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: testschema2; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_transaction_original.sql000066400000000000000000000077661412634760000330440ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: testschema1; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA testschema1; ALTER SCHEMA testschema1 OWNER TO fordfrog; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id bigint NOT NULL ); ALTER TABLE public.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); -- -- Name: testtable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer NOT NULL ); ALTER TABLE public.testtable2 OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable2_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable2_id_seq OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable2_id_seq OWNED BY testtable2.id; -- -- Name: testtable2_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable2_id_seq', 1, false); SET search_path = testschema1, pg_catalog; -- -- Name: testtable1; Type: TABLE; Schema: testschema1; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id integer NOT NULL ); ALTER TABLE testschema1.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: testschema1; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE testschema1.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: testschema1; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: testschema1; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); SET search_path = public, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable2 ALTER COLUMN id SET DEFAULT nextval('testtable2_id_seq'::regclass); SET search_path = testschema1, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: testschema1; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); SET search_path = public, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Data for Name: testtable2; Type: TABLE DATA; Schema: public; Owner: fordfrog -- SET search_path = testschema1, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: testschema1; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_trigger_diff.sql000066400000000000000000000003771412634760000312550ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE ON test_table FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); add_trigger_function_postgres12_diff.sql000066400000000000000000000004311412634760000351630ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff CREATE OR REPLACE FUNCTION trigger_test1() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'trigger_test1 invoked'; RETURN NEW; END; $$; CREATE TRIGGER test1_trigger_update AFTER UPDATE ON test1 FOR EACH ROW EXECUTE PROCEDURE public.trigger_test1(); add_trigger_function_postgres12_new.sql000066400000000000000000000043571412634760000350570ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 12.4 -- Dumped by pg_dump version 12.4 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: trigger_test1(); Type: FUNCTION; Schema: public; Owner: krioweb2 -- CREATE FUNCTION public.trigger_test1() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'trigger_test1 invoked'; RETURN NEW; END; $$; ALTER FUNCTION public.trigger_test1() OWNER TO krioweb2; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: test1; Type: TABLE; Schema: public; Owner: krioweb2 -- CREATE TABLE public.test1 ( id integer NOT NULL, text name ); ALTER TABLE public.test1 OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE; Schema: public; Owner: krioweb2 -- CREATE SEQUENCE public.test1_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test1_id_seq OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: krioweb2 -- ALTER SEQUENCE public.test1_id_seq OWNED BY public.test1.id; -- -- Name: test1 id; Type: DEFAULT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ALTER COLUMN id SET DEFAULT nextval('public.test1_id_seq'::regclass); -- -- Data for Name: test1; Type: TABLE DATA; Schema: public; Owner: krioweb2 -- COPY public.test1 (id, text) FROM stdin; 1 mahh \. -- -- Name: test1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: krioweb2 -- SELECT pg_catalog.setval('public.test1_id_seq', 1, true); -- -- Name: test1 test1_pkey; Type: CONSTRAINT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ADD CONSTRAINT test1_pkey PRIMARY KEY (id); -- -- Name: test1 test1_trigger_update; Type: TRIGGER; Schema: public; Owner: krioweb2 -- CREATE TRIGGER test1_trigger_update AFTER UPDATE ON public.test1 FOR EACH ROW EXECUTE FUNCTION public.trigger_test1(); -- -- PostgreSQL database dump complete -- add_trigger_function_postgres12_original.sql000066400000000000000000000033511412634760000360630ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 12.4 -- Dumped by pg_dump version 12.4 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: test1; Type: TABLE; Schema: public; Owner: krioweb2 -- CREATE TABLE public.test1 ( id integer NOT NULL, text name ); ALTER TABLE public.test1 OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE; Schema: public; Owner: krioweb2 -- CREATE SEQUENCE public.test1_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test1_id_seq OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: krioweb2 -- ALTER SEQUENCE public.test1_id_seq OWNED BY public.test1.id; -- -- Name: test1 id; Type: DEFAULT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ALTER COLUMN id SET DEFAULT nextval('public.test1_id_seq'::regclass); -- -- Data for Name: test1; Type: TABLE DATA; Schema: public; Owner: krioweb2 -- COPY public.test1 (id, text) FROM stdin; \. -- -- Name: test1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: krioweb2 -- SELECT pg_catalog.setval('public.test1_id_seq', 1, false); -- -- Name: test1 test1_pkey; Type: CONSTRAINT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ADD CONSTRAINT test1_pkey PRIMARY KEY (id); -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_trigger_new.sql000066400000000000000000000026171412634760000311350ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE ON test_table FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_trigger_original.sql000066400000000000000000000014731412634760000321470ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- add_trigger_with_referencing_tables_diff.sql000066400000000000000000000012001412634760000361140ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff CREATE OR REPLACE FUNCTION trigger_test1() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'trigger_test1 invoked'; RETURN NEW; END; $$; CREATE TRIGGER test1_trigger_ref1 AFTER UPDATE ON test1 REFERENCING OLD TABLE AS old_table FOR EACH ROW EXECUTE PROCEDURE public.trigger_test1(); CREATE TRIGGER test1_trigger_ref2 AFTER UPDATE ON test1 REFERENCING NEW TABLE AS new_table FOR EACH ROW EXECUTE PROCEDURE public.trigger_test1(); CREATE TRIGGER test1_trigger_ref3 AFTER UPDATE ON test1 REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table FOR EACH ROW EXECUTE PROCEDURE public.trigger_test1(); add_trigger_with_referencing_tables_new.sql000066400000000000000000000054131412634760000360070ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 12.4 -- Dumped by pg_dump version 12.4 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: trigger_test1(); Type: FUNCTION; Schema: public; Owner: krioweb2 -- CREATE FUNCTION public.trigger_test1() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'trigger_test1 invoked'; RETURN NEW; END; $$; ALTER FUNCTION public.trigger_test1() OWNER TO krioweb2; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: test1; Type: TABLE; Schema: public; Owner: krioweb2 -- CREATE TABLE public.test1 ( id integer NOT NULL, text name ); ALTER TABLE public.test1 OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE; Schema: public; Owner: krioweb2 -- CREATE SEQUENCE public.test1_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test1_id_seq OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: krioweb2 -- ALTER SEQUENCE public.test1_id_seq OWNED BY public.test1.id; -- -- Name: test1 id; Type: DEFAULT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ALTER COLUMN id SET DEFAULT nextval('public.test1_id_seq'::regclass); -- -- Data for Name: test1; Type: TABLE DATA; Schema: public; Owner: krioweb2 -- COPY public.test1 (id, text) FROM stdin; 1 mahh \. -- -- Name: test1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: krioweb2 -- SELECT pg_catalog.setval('public.test1_id_seq', 1, true); -- -- Name: test1 test1_pkey; Type: CONSTRAINT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ADD CONSTRAINT test1_pkey PRIMARY KEY (id); -- -- Name: test1 test1_trigger_ref1; Type: TRIGGER; Schema: public; Owner: krioweb2 -- CREATE TRIGGER test1_trigger_ref1 AFTER UPDATE ON public.test1 REFERENCING OLD TABLE AS old_table FOR EACH ROW EXECUTE FUNCTION public.trigger_test1(); -- -- Name: test1 test1_trigger_ref2; Type: TRIGGER; Schema: public; Owner: krioweb2 -- CREATE TRIGGER test1_trigger_ref2 AFTER UPDATE ON public.test1 REFERENCING NEW TABLE AS new_table FOR EACH ROW EXECUTE FUNCTION public.trigger_test1(); -- -- Name: test1 test1_trigger_ref3; Type: TRIGGER; Schema: public; Owner: krioweb2 -- CREATE TRIGGER test1_trigger_ref3 AFTER UPDATE ON public.test1 REFERENCING OLD TABLE AS old_table NEW TABLE AS new_table FOR EACH ROW EXECUTE FUNCTION public.trigger_test1(); -- -- PostgreSQL database dump complete -- add_trigger_with_referencing_tables_original.sql000066400000000000000000000033511412634760000370210ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 12.4 -- Dumped by pg_dump version 12.4 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: test1; Type: TABLE; Schema: public; Owner: krioweb2 -- CREATE TABLE public.test1 ( id integer NOT NULL, text name ); ALTER TABLE public.test1 OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE; Schema: public; Owner: krioweb2 -- CREATE SEQUENCE public.test1_id_seq AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test1_id_seq OWNER TO krioweb2; -- -- Name: test1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: krioweb2 -- ALTER SEQUENCE public.test1_id_seq OWNED BY public.test1.id; -- -- Name: test1 id; Type: DEFAULT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ALTER COLUMN id SET DEFAULT nextval('public.test1_id_seq'::regclass); -- -- Data for Name: test1; Type: TABLE DATA; Schema: public; Owner: krioweb2 -- COPY public.test1 (id, text) FROM stdin; \. -- -- Name: test1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: krioweb2 -- SELECT pg_catalog.setval('public.test1_id_seq', 1, false); -- -- Name: test1 test1_pkey; Type: CONSTRAINT; Schema: public; Owner: krioweb2 -- ALTER TABLE ONLY public.test1 ADD CONSTRAINT test1_pkey PRIMARY KEY (id); -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_type_diff.sql000066400000000000000000000003331412634760000305630ustar00rootroot00000000000000CREATE TYPE bug_status AS ENUM ( 'new', 'open', 'closed' ); CREATE TYPE descr_type AS ( name text, amount integer ); CREATE TABLE IF NOT EXISTS t1 ( id integer, descr descr_type ); ALTER TABLE t1 OWNER TO dv; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_type_new.sql000066400000000000000000000033701412634760000304500ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:27:26 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; -- -- TOC entry 556 (class 1247 OID 16397) -- Name: bug_status; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE bug_status AS ENUM ( 'new', 'open', 'closed' ); ALTER TYPE bug_status OWNER TO dv; -- -- TOC entry 549 (class 1247 OID 16389) -- Name: descr_type; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE descr_type AS ( name text, amount integer ); ALTER TYPE descr_type OWNER TO dv; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 16390) -- Name: t1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE t1 ( id integer, descr descr_type ); ALTER TABLE t1 OWNER TO dv; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:27:26 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_type_original.sql000066400000000000000000000020641412634760000314620ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:14:40 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2134 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- TOC entry 2133 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:14:40 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unique_constraint_diff.sql000066400000000000000000000004311412634760000333530ustar00rootroot00000000000000 ALTER TABLE IF EXISTS inventoryitemsupplier ADD CONSTRAINT IF NOT EXISTS inventoryitemsupplier_pkey PRIMARY KEY (id); ALTER TABLE IF EXISTS inventoryitemsupplier ADD CONSTRAINT IF NOT EXISTS inventoryitemsupplier_5a808b9c_key UNIQUE (inventoryitemid, partneridentificationid); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unique_constraint_new.sql000066400000000000000000000034601412634760000332410ustar00rootroot00000000000000-- -- Name: inventoryitemsupplier; Type: TABLE; Schema: public; Owner: intranet; Tablespace: -- CREATE TABLE inventoryitemsupplier ( id integer NOT NULL, code character varying(20) NOT NULL, partneridentificationid integer NOT NULL, inventoryitemid integer NOT NULL, createdbyuserid smallint NOT NULL, datecreated timestamp without time zone NOT NULL, datedeleted timestamp without time zone, datelastmodified timestamp without time zone, deletedbyuserid smallint, lastmodifiedbyuserid smallint ); ALTER TABLE public.inventoryitemsupplier OWNER TO intranet; -- -- Name: inventoryitemsupplier_seq; Type: SEQUENCE; Schema: public; Owner: intranet -- CREATE SEQUENCE inventoryitemsupplier_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.inventoryitemsupplier_seq OWNER TO intranet; -- -- Name: inventoryitemsupplier_5a808b9c_key; Type: CONSTRAINT; Schema: public; Owner: intranet; Tablespace: -- ALTER TABLE ONLY inventoryitemsupplier ADD CONSTRAINT inventoryitemsupplier_5a808b9c_key UNIQUE (inventoryitemid, partneridentificationid); -- -- Name: inventoryitemsupplier_pkey; Type: CONSTRAINT; Schema: public; Owner: intranet; Tablespace: -- ALTER TABLE ONLY inventoryitemsupplier ADD CONSTRAINT inventoryitemsupplier_pkey PRIMARY KEY (id); -- -- Name: inventoryitemsupplier_inventoryitemid_key; Type: INDEX; Schema: public; Owner: intranet; Tablespace: -- CREATE INDEX inventoryitemsupplier_inventoryitemid_key ON inventoryitemsupplier USING btree (inventoryitemid); -- -- Name: inventoryitemsupplier_partneridentificationid_key; Type: INDEX; Schema: public; Owner: intranet; Tablespace: -- CREATE INDEX inventoryitemsupplier_partneridentificationid_key ON inventoryitemsupplier USING btree (partneridentificationid); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unique_constraint_original.sql000066400000000000000000000025061412634760000342540ustar00rootroot00000000000000-- -- Name: inventoryitemsupplier; Type: TABLE; Schema: public; Owner: intranet; Tablespace: -- CREATE TABLE inventoryitemsupplier ( id integer NOT NULL, code character varying(20) NOT NULL, partneridentificationid integer NOT NULL, inventoryitemid integer NOT NULL, createdbyuserid smallint NOT NULL, datecreated timestamp without time zone NOT NULL, datedeleted timestamp without time zone, datelastmodified timestamp without time zone, deletedbyuserid smallint, lastmodifiedbyuserid smallint ); ALTER TABLE public.inventoryitemsupplier OWNER TO intranet; -- -- Name: inventoryitemsupplier_seq; Type: SEQUENCE; Schema: public; Owner: intranet -- CREATE SEQUENCE inventoryitemsupplier_seq INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.inventoryitemsupplier_seq OWNER TO intranet; -- -- Name: inventoryitemsupplier_inventoryitemid_key; Type: INDEX; Schema: public; Owner: intranet; Tablespace: -- CREATE INDEX inventoryitemsupplier_inventoryitemid_key ON inventoryitemsupplier USING btree (inventoryitemid); -- -- Name: inventoryitemsupplier_partneridentificationid_key; Type: INDEX; Schema: public; Owner: intranet; Tablespace: -- CREATE INDEX inventoryitemsupplier_partneridentificationid_key ON inventoryitemsupplier USING btree (partneridentificationid); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unlogged_table_diff.sql000066400000000000000000000003771412634760000325650ustar00rootroot00000000000000SET search_path = radstg, pg_catalog; CREATE UNLOGGED TABLE IF NOT EXISTS asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unlogged_table_new.sql000066400000000000000000000016061412634760000324420ustar00rootroot00000000000000-- -- Name: rad; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA rad; ALTER SCHEMA rad OWNER TO asi; -- -- Name: radstg; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA radstg; ALTER SCHEMA radstg OWNER TO asi; SET search_path = rad, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: rad; Owner: asi; Tablespace: -- CREATE TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; SET search_path = radstg, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: radstg; Owner: asi; Tablespace: -- CREATE UNLOGGED TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_unlogged_table_original.sql000066400000000000000000000010571412634760000334550ustar00rootroot00000000000000-- -- Name: rad; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA rad; ALTER SCHEMA rad OWNER TO asi; -- -- Name: radstg; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA radstg; ALTER SCHEMA radstg OWNER TO asi; SET search_path = rad, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: rad; Owner: asi; Tablespace: -- CREATE TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_view_diff.sql000066400000000000000000000002161412634760000305540ustar00rootroot00000000000000 CREATE VIEW testview WITH (security_barrier) AS SELECT testtable.id, testtable.name FROM testtable; ALTER VIEW testview OWNER TO fordfrog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_view_new.sql000066400000000000000000000023171412634760000304410ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview WITH (security_barrier) AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/add_view_original.sql000066400000000000000000000017571412634760000314630ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_comments_diff.sql000066400000000000000000000012161412634760000320070ustar00rootroot00000000000000COMMENT ON DATABASE current_database() IS 'comments database 2'; COMMENT ON SCHEMA "public" IS 'public schema 2'; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence 2'; COMMENT ON TABLE test IS 'test table 2'; COMMENT ON COLUMN test.id IS 'id column 2'; COMMENT ON COLUMN test.text IS 'text column 2'; COMMENT ON VIEW test_view IS 'test view 2'; COMMENT ON COLUMN test_view.id IS 'view id col 2'; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function 2'; COMMENT ON CONSTRAINT text_check ON test IS 'text check 2'; COMMENT ON INDEX test_pkey IS 'primary key 2'; COMMENT ON TRIGGER test_trigger ON test IS 'test trigger 2';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_comments_new.sql000066400000000000000000000035631412634760000316770ustar00rootroot00000000000000COMMENT ON DATABASE comments IS 'comments database 2'; COMMENT ON SCHEMA public IS 'public schema 2'; CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function 2'; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; COMMENT ON TABLE test IS 'test table 2'; COMMENT ON COLUMN test.id IS 'id column 2'; COMMENT ON COLUMN test.text IS 'text column 2'; COMMENT ON CONSTRAINT text_check ON test IS 'text check 2'; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence 2'; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; COMMENT ON VIEW test_view IS 'test view 2'; COMMENT ON COLUMN test_view.id IS 'view id col 2'; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); COMMENT ON INDEX test_pkey IS 'primary key 2'; CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc(); COMMENT ON TRIGGER test_trigger ON test IS 'test trigger 2';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_comments_original.sql000066400000000000000000000035331412634760000327070ustar00rootroot00000000000000COMMENT ON DATABASE comments IS 'comments database'; COMMENT ON SCHEMA public IS 'public schema'; CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function'; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; COMMENT ON TABLE test IS 'test table'; COMMENT ON COLUMN test.id IS 'id column'; COMMENT ON COLUMN test.text IS 'text column'; COMMENT ON CONSTRAINT text_check ON test IS 'text check'; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence'; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; COMMENT ON VIEW test_view IS 'test view'; COMMENT ON COLUMN test_view.id IS 'view id col'; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); COMMENT ON INDEX test_pkey IS 'primary key'; CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc(); COMMENT ON TRIGGER test_trigger ON test IS 'test trigger';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_inherited_column_diff.sql000066400000000000000000000002211412634760000335050ustar00rootroot00000000000000 ALTER TABLE ONLY childtable ALTER COLUMN a SET DEFAULT "child a"; ALTER TABLE ONLY grandchildtable ALTER COLUMN a SET DEFAULT "grandchild a";apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_inherited_column_new.sql000066400000000000000000000011261412634760000333730ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; CREATE TABLE parenttable ( a text ); CREATE TABLE childtable ( b text ) INHERITS (parenttable); ALTER TABLE ONLY childtable ALTER COLUMN a SET DEFAULT "child a"; CREATE TABLE grandchildtable ( c text ) INHERITS (childtable); ALTER TABLE ONLY grandchildtable ALTER COLUMN a SET DEFAULT "grandchild a"; -- -- PostgreSQL database dump complete --alter_inherited_column_original.sql000066400000000000000000000007041412634760000343300ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; CREATE TABLE parenttable ( a text ); CREATE TABLE childtable ( b text ) INHERITS (parenttable); CREATE TABLE grandchildtable ( c text ) INHERITS (childtable); -- -- PostgreSQL database dump complete --apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_policies_diff.sql000066400000000000000000000010251412634760000317670ustar00rootroot00000000000000DROP POLICY only_owners ON todos; CREATE POLICY only_owners ON todos FOR INSERT TO PUBLIC; ALTER POLICY only_admins ON todos TO admin, manager; ALTER POLICY only_evens ON todos TO PUBLIC USING ( (id % 2) = 0 ); ALTER POLICY only_evens_and_1 ON todos TO PUBLIC USING ( (id % 2) = 0 or id = 1 ); ALTER POLICY check_evens_and_1 ON todos TO PUBLIC WITH CHECK ( (id % 2) = 0 or id = 1 ); ALTER POLICY check_using_evens_and_1 ON todos TO PUBLIC USING ( (id % 2) = 0 or id = 1 ) WITH CHECK ( (id % 2) = 0 or id = 1 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_policies_new.sql000066400000000000000000000012301412634760000316460ustar00rootroot00000000000000create table todos ( id integer ); create policy only_owners on todos for INSERT; create policy no_private on todos for ALL TO anonymous; create policy only_admins on todos TO admin, manager; create policy only_managers on todos; create policy only_evens on todos using ( (id % 2) = 0); create policy only_evens_and_1 on todos using ( (id % 2) = 0 or id = 1 ); create policy only_evens_whitespace_comment on todos using ( (id % 2) = 0 ); create policy check_evens_and_1 on todos with check( (id % 2) = 0 or id = 1 ); create policy check_using_evens_and_1 on todos using ( (id % 2) = 0 or id = 1 ) with check( (id % 2) = 0 or id = 1 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_policies_original.sql000066400000000000000000000011571412634760000326710ustar00rootroot00000000000000create table todos ( id integer ); create policy only_owners on todos for SELECT; create policy no_private on todos for ALL TO anonymous; create policy only_admins on todos TO admin; create policy only_managers on todos TO PUBLIC; create policy only_evens on todos; create policy only_evens_and_1 on todos using ( (id % 2) = 0 ); create policy only_evens_whitespace_comment on todos using ( -- comment 1 (id % 2) = 0 -- comment 2 ); create policy check_evens_and_1 on todos with check( (id % 2) = 0 ); create policy check_using_evens_and_1 on todos using ( (id % 2) = 0 ) with check( (id % 2) = 0 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_type_diff.sql000066400000000000000000000001151412634760000311400ustar00rootroot00000000000000ALTER TYPE descr_type ADD ATTRIBUTE date_create timestamp without time zone;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_type_new.sql000066400000000000000000000034611412634760000310300ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:55:57 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; -- -- TOC entry 556 (class 1247 OID 16397) -- Name: bug_status; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE bug_status AS ENUM ( 'new', 'open', 'closed', 'deleted' ); ALTER TYPE bug_status OWNER TO dv; -- -- TOC entry 549 (class 1247 OID 16389) -- Name: descr_type; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE descr_type AS ( name text, amount integer, date_create timestamp without time zone ); ALTER TYPE descr_type OWNER TO dv; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 16390) -- Name: t1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE t1 ( id integer, descr descr_type ); ALTER TABLE t1 OWNER TO dv; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:55:57 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_type_original.sql000066400000000000000000000033701412634760000320420ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:27:26 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; -- -- TOC entry 556 (class 1247 OID 16397) -- Name: bug_status; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE bug_status AS ENUM ( 'new', 'open', 'closed' ); ALTER TYPE bug_status OWNER TO dv; -- -- TOC entry 549 (class 1247 OID 16389) -- Name: descr_type; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE descr_type AS ( name text, amount integer ); ALTER TYPE descr_type OWNER TO dv; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 16390) -- Name: t1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE t1 ( id integer, descr descr_type ); ALTER TABLE t1 OWNER TO dv; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:27:26 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_add_default_diff.sql000066400000000000000000000000721412634760000334470ustar00rootroot00000000000000ALTER TABLE test ALTER COLUMN test_col SET DEFAULT now(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_add_default_new.sql000066400000000000000000000001531412634760000333300ustar00rootroot00000000000000CREATE VIEW test AS SELECT test_col FROM test2; ALTER VIEW test ALTER COLUMN test_col SET DEFAULT now(); alter_view_add_default_original.sql000066400000000000000000000000611412634760000342620ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE VIEW test AS SELECT test_col FROM test2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_change_default_diff.sql000066400000000000000000000000661412634760000341470ustar00rootroot00000000000000ALTER TABLE test ALTER COLUMN test_col SET DEFAULT 1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_change_default_new.sql000066400000000000000000000001471412634760000340300ustar00rootroot00000000000000CREATE VIEW test AS SELECT test_col FROM test2; ALTER VIEW test ALTER COLUMN test_col SET DEFAULT 1; alter_view_change_default_original.sql000066400000000000000000000001531412634760000347610ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE VIEW test AS SELECT test_col FROM test2; ALTER VIEW test ALTER COLUMN test_col SET DEFAULT now(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_drop_default_diff.sql000066400000000000000000000000651412634760000336650ustar00rootroot00000000000000ALTER TABLE test ALTER COLUMN test_col DROP DEFAULT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_drop_default_new.sql000066400000000000000000000000611412634760000335420ustar00rootroot00000000000000CREATE VIEW test AS SELECT test_col FROM test2; alter_view_drop_default_original.sql000066400000000000000000000001531412634760000345000ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE VIEW test AS SELECT test_col FROM test2; ALTER VIEW test ALTER COLUMN test_col SET DEFAULT now(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_owner_diff.sql000066400000000000000000000000511412634760000323420ustar00rootroot00000000000000 ALTER VIEW items_view OWNER TO webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_owner_new.sql000066400000000000000000000001711412634760000322260ustar00rootroot00000000000000create table items(id integer); create view items_view as select id from items; alter view items_view owner to webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/alter_view_owner_original.sql000066400000000000000000000001671412634760000332460ustar00rootroot00000000000000create table items(id integer); create view items_view as select id from items; alter view items_view owner to admin; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/create_policies_diff.sql000066400000000000000000000010311412634760000321200ustar00rootroot00000000000000SET search_path = public, pg_catalog; CREATE POLICY only_owners ON todos FOR ALL TO PUBLIC; CREATE POLICY check_evens ON todos FOR ALL TO PUBLIC WITH CHECK ( (id % 2) = 0 ); CREATE POLICY check_using_evens ON todos FOR ALL TO PUBLIC USING ( (id % 2) = 0 ) WITH CHECK ( (id % 2) = 0 ); SET search_path = data, pg_catalog; CREATE POLICY only_owners ON sub_tasks FOR ALL TO PUBLIC; CREATE POLICY no_private ON sub_tasks FOR ALL TO anonymous, webuser; CREATE POLICY only_evens ON sub_tasks FOR ALL TO PUBLIC USING ( (id % 2) = 0 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/create_policies_new.sql000066400000000000000000000007441412634760000320130ustar00rootroot00000000000000create table todos ( id integer ); create policy only_owners on todos; create schema data; create table data.sub_tasks ( id integer ); create policy only_owners on data.sub_tasks; create policy no_private on data.sub_tasks to anonymous, webuser; create policy only_evens on data.sub_tasks using ( (id % 2) = 0); create policy check_evens on todos with check( (id % 2) = 0 ); create policy check_using_evens on todos using ( (id % 2) = 0 ) with check( (id % 2) = 0 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/create_policies_original.sql000066400000000000000000000001501412634760000330150ustar00rootroot00000000000000create table todos ( id integer ); create schema data; create table data.sub_tasks ( id integer ); create_schema_no_change_table_diff.sql000066400000000000000000000000021412634760000346370ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff create_schema_no_change_table_new.sql000066400000000000000000000001041412634760000345230ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE SCHEMA public; CREATE TABLE public.node (instance_id text); create_schema_no_change_table_original.sql000066400000000000000000000001041412634760000355360ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE SCHEMA public; CREATE TABLE public.node (instance_id text); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/create_trigger_postgres12_diff.sql000066400000000000000000000004521412634760000340530ustar00rootroot00000000000000 SET search_path = schema_1, pg_catalog; CREATE TABLE IF NOT EXISTS tb_teste3 ( id integer, description character varying ); ALTER TABLE tb_teste3 OWNER TO postgres; CREATE TRIGGER trg_testview_after_insert AFTER INSERT ON tb_teste3 FOR EACH ROW EXECUTE PROCEDURE public.fn_trg_testview(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/create_trigger_postgres12_new.sql000066400000000000000000000030451412634760000337350ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 12.2 -- Dumped by pg_dump version 12.2 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: schema_1; Type: SCHEMA; Schema: -; Owner: postgres -- CREATE SCHEMA schema_1; ALTER SCHEMA schema_1 OWNER TO postgres; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: tb_teste1; Type: TABLE; Schema: schema_1; Owner: postgres -- CREATE TABLE schema_1.tb_teste1 ( id integer, description character varying ); ALTER TABLE schema_1.tb_teste1 OWNER TO postgres; -- -- Name: tb_teste2; Type: TABLE; Schema: schema_1; Owner: postgres -- CREATE TABLE schema_1.tb_teste2 ( id integer, description character varying ); ALTER TABLE schema_1.tb_teste2 OWNER TO postgres; -- -- Name: tb_teste3; Type: TABLE; Schema: schema_1; Owner: postgres -- CREATE TABLE schema_1.tb_teste3 ( id integer, description character varying ); ALTER TABLE schema_1.tb_teste3 OWNER TO postgres; -- -- Name: tb_teste3 trg_testview_after_insert; Type: TRIGGER; Schema: schema_1; Owner: postgres -- CREATE TRIGGER trg_testview_after_insert AFTER INSERT ON schema_1.tb_teste3 FOR EACH ROW EXECUTE FUNCTION public.fn_trg_testview(); -- -- PostgreSQL database dump complete -- create_trigger_postgres12_original.sql000066400000000000000000000021431412634760000346670ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 12.2 -- Dumped by pg_dump version 12.2 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: schema_1; Type: SCHEMA; Schema: -; Owner: postgres -- CREATE SCHEMA schema_1; ALTER SCHEMA schema_1 OWNER TO postgres; SET default_tablespace = ''; SET default_table_access_method = heap; -- -- Name: tb_teste1; Type: TABLE; Schema: schema_1; Owner: postgres -- CREATE TABLE schema_1.tb_teste1 ( id integer, description character varying ); ALTER TABLE schema_1.tb_teste1 OWNER TO postgres; -- -- Name: tb_teste2; Type: TABLE; Schema: schema_1; Owner: postgres -- CREATE TABLE schema_1.tb_teste2 ( id integer, description character varying ); ALTER TABLE schema_1.tb_teste2 OWNER TO postgres; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_no_force_rls_diff.sql000066400000000000000000000001421412634760000331250ustar00rootroot00000000000000 ALTER TABLE items DISABLE ROW LEVEL SECURITY; ALTER TABLE projects NO FORCE ROW LEVEL SECURITY; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_no_force_rls_new.sql000066400000000000000000000001141412634760000330050ustar00rootroot00000000000000create table items ( id integer ); create table projects ( id integer ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_no_force_rls_original.sql000066400000000000000000000002541412634760000340250ustar00rootroot00000000000000create table items ( id integer ); alter table items enable row level security; create table projects ( id integer ); alter table projects force row level security; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_trigger_diff.sql000066400000000000000000000001001412634760000321100ustar00rootroot00000000000000 ALTER TABLE test_table DISABLE TRIGGER test_table_trigger; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_trigger_new.sql000066400000000000000000000030571412634760000320070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL, id_novo int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger AFTER UPDATE ON test_table REFERENCING OLD TABLE AS x NEW TABLE AS Z FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); ALTER TABLE test_table DISABLE TRIGGER test_table_trigger; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/disable_trigger_original.sql000066400000000000000000000027631412634760000330250ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL, id_novo int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger AFTER UPDATE ON test_table REFERENCING OLD TABLE AS x NEW TABLE AS Z FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_cluster_diff.sql000066400000000000000000000000541412634760000314770ustar00rootroot00000000000000 ALTER TABLE testtable SET WITHOUT CLUSTER; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_cluster_new.sql000066400000000000000000000020741412634760000313640ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_cluster_original.sql000066400000000000000000000021511412634760000323730ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); ALTER TABLE testtable CLUSTER ON testindex; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_column_diff.sql000066400000000000000000000000661412634760000313160ustar00rootroot00000000000000 ALTER TABLE testtable DROP COLUMN IF EXISTS field5; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_column_new.sql000066400000000000000000000020741412634760000312000ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_column_original.sql000066400000000000000000000021471412634760000322140ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, field5 boolean DEFAULT false NOT NULL ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_comments_diff.sql000066400000000000000000000007751412634760000316550ustar00rootroot00000000000000COMMENT ON DATABASE current_database() IS NULL; COMMENT ON SCHEMA "public" IS NULL; COMMENT ON SEQUENCE test_id_seq IS NULL; COMMENT ON TABLE test IS NULL; COMMENT ON COLUMN test.id IS NULL; COMMENT ON COLUMN test.text IS NULL; COMMENT ON VIEW test_view IS NULL; COMMENT ON COLUMN test_view.id IS NULL; COMMENT ON FUNCTION test_fnc(arg character varying) IS NULL; COMMENT ON CONSTRAINT text_check ON test IS NULL; COMMENT ON INDEX test_pkey IS NULL; COMMENT ON TRIGGER test_trigger ON test IS NULL;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_comments_new.sql000066400000000000000000000023561412634760000315330ustar00rootroot00000000000000CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc();apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_comments_original.sql000066400000000000000000000035331412634760000325440ustar00rootroot00000000000000COMMENT ON DATABASE comments IS 'comments database'; COMMENT ON SCHEMA public IS 'public schema'; CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function'; CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; COMMENT ON TABLE test IS 'test table'; COMMENT ON COLUMN test.id IS 'id column'; COMMENT ON COLUMN test.text IS 'text column'; COMMENT ON CONSTRAINT text_check ON test IS 'text check'; CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; ALTER SEQUENCE test_id_seq OWNED BY test.id; COMMENT ON SEQUENCE test_id_seq IS 'test table sequence'; CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; COMMENT ON VIEW test_view IS 'test view'; COMMENT ON COLUMN test_view.id IS 'view id col'; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); COMMENT ON INDEX test_pkey IS 'primary key'; CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc(); COMMENT ON TRIGGER test_trigger ON test IS 'test trigger';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_constraint_diff.sql000066400000000000000000000001111412634760000321740ustar00rootroot00000000000000 ALTER TABLE IF EXISTS testtable DROP CONSTRAINT IF EXISTS field4check; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_constraint_new.sql000066400000000000000000000023501412634760000320640ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_constraint_original.sql000066400000000000000000000024571412634760000331070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL, CONSTRAINT field4check CHECK ((field4 > (0.0)::double precision)) ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_default_value_diff.sql000066400000000000000000000000721412634760000326360ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field4 DROP DEFAULT; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_default_value_new.sql000066400000000000000000000020741412634760000325230ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_default_value_original.sql000066400000000000000000000021101412634760000335250ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision DEFAULT 1.0 ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_extension_diff.sql000066400000000000000000000000531412634760000320310ustar00rootroot00000000000000 DROP EXTENSION IF EXISTS plpgsql CASCADE; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_extension_new.sql000066400000000000000000000007261412634760000317210ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_extension_original.sql000066400000000000000000000013301412634760000327240ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args2_diff.sql000066400000000000000000000001151412634760000327370ustar00rootroot00000000000000 DROP FUNCTION IF EXISTS multiply_numbers(number1 integer, number2 integer); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args2_new.sql000066400000000000000000000021341412634760000326230ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args2_original.sql000066400000000000000000000026731412634760000336460ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number1 integer, number2 integer) RETURNS integer AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number1 integer, number2 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args_diff.sql000066400000000000000000000000701412634760000326550ustar00rootroot00000000000000 DROP FUNCTION IF EXISTS power_number("input" integer); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args_new.sql000066400000000000000000000021341412634760000325410ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_args_original.sql000066400000000000000000000026001412634760000335520ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: power_number(integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION power_number("input" integer) RETURNS integer AS $$ begin return input * input; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.power_number("input" integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_noargs_diff.sql000066400000000000000000000000471412634760000332160ustar00rootroot00000000000000 DROP FUNCTION IF EXISTS return_one(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_noargs_new.sql000066400000000000000000000021341412634760000330760ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_noargs_original.sql000066400000000000000000000025111412634760000341100ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: return_one(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION return_one() RETURNS integer AS $$ begin return 1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.return_one() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_similar_diff.sql000066400000000000000000000001171412634760000333630ustar00rootroot00000000000000 DROP FUNCTION IF EXISTS multiply_numbers(number2 smallint, number1 smallint); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_similar_new.sql000066400000000000000000000027021412634760000332460ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_function_similar_original.sql000066400000000000000000000034571412634760000342710ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; -- -- Name: multiply_numbers(smallint, smallint); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 smallint, number1 smallint) RETURNS smallint AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 smallint, number1 smallint) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_index_diff.sql000066400000000000000000000000421412634760000311220ustar00rootroot00000000000000 DROP INDEX IF EXISTS testindex3; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_index_new.sql000066400000000000000000000023761412634760000310170ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_index_original.sql000066400000000000000000000026221412634760000320240ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: testindex3; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex3 ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_index_with_cluster_diff.sql000066400000000000000000000000421412634760000337160ustar00rootroot00000000000000 DROP INDEX IF EXISTS testindex2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_index_with_cluster_new.sql000066400000000000000000000020741412634760000336060ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- drop_index_with_cluster_original.sql000066400000000000000000000023761412634760000345470ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_materialized_view_diff.sql000066400000000000000000000000541412634760000335220ustar00rootroot00000000000000 DROP MATERIALIZED VIEW IF EXISTS testview; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_materialized_view_new.sql000066400000000000000000000017571412634760000334160ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- drop_materialized_view_original.sql000066400000000000000000000023041412634760000343370ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE MATERIALIZED VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_not_null_diff.sql000066400000000000000000000000731412634760000316510ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field3 DROP NOT NULL; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_not_null_new.sql000066400000000000000000000020741412634760000315350ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_not_null_original.sql000066400000000000000000000021051412634760000325430ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying NOT NULL, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_policies_diff.sql000066400000000000000000000004471412634760000316330ustar00rootroot00000000000000SET search_path = public, pg_catalog; DROP POLICY only_owners ON todos; DROP POLICY check_evens ON todos; DROP POLICY check_using_evens ON todos; SET search_path = data, pg_catalog; DROP POLICY only_owners ON sub_tasks; DROP POLICY no_private ON sub_tasks; DROP POLICY only_evens ON sub_tasks; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_policies_new.sql000066400000000000000000000001501412634760000315030ustar00rootroot00000000000000create table todos ( id integer ); create schema data; create table data.sub_tasks ( id integer ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_policies_original.sql000066400000000000000000000007441412634760000325270ustar00rootroot00000000000000create table todos ( id integer ); create policy only_owners on todos; create schema data; create table data.sub_tasks ( id integer ); create policy only_owners on data.sub_tasks; create policy no_private on data.sub_tasks to anonymous, webuser; create policy only_evens on data.sub_tasks using ( (id % 2) = 0); create policy check_evens on todos with check( (id % 2) = 0 ); create policy check_using_evens on todos using ( (id % 2) = 0 ) with check( (id % 2) = 0 ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_sequence_diff.sql000066400000000000000000000000421412634760000316230ustar00rootroot00000000000000 DROP SEQUENCE IF EXISTS testseq; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_sequence_new.sql000066400000000000000000000020741412634760000315130ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_sequence_original.sql000066400000000000000000000024421412634760000325250ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_statistics_diff.sql000066400000000000000000000001031412634760000322030ustar00rootroot00000000000000 ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS -1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_statistics_new.sql000066400000000000000000000020741412634760000320750ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_statistics_original.sql000066400000000000000000000021771412634760000331140ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_table_diff.sql000066400000000000000000000000421412634760000311020ustar00rootroot00000000000000 DROP TABLE IF EXISTS testtable2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_table_new.sql000066400000000000000000000020741412634760000307720ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_table_original.sql000066400000000000000000000024351412634760000320060ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testtable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer, name character varying(100) NOT NULL ); ALTER TABLE public.testtable2 OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_trigger_diff.sql000066400000000000000000000000721412634760000314610ustar00rootroot00000000000000 DROP TRIGGER IF EXISTS test_table_trigger ON test_table; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_trigger_new.sql000066400000000000000000000022611412634760000313440ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_trigger_original.sql000066400000000000000000000026251412634760000323630ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE OF id ON test_table FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_type_diff.sql000066400000000000000000000001331412634760000307750ustar00rootroot00000000000000DROP TABLE IF EXISTS t1; DROP TYPE IF EXISTS bug_status; DROP TYPE IF EXISTS descr_type; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_type_new.sql000066400000000000000000000020641412634760000306630ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:14:40 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2134 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- TOC entry 2133 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:14:40 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_type_original.sql000066400000000000000000000033701412634760000316770ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.2 -- Dumped by pg_dump version 9.5.2 -- Started on 2016-05-02 12:27:26 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; -- -- TOC entry 556 (class 1247 OID 16397) -- Name: bug_status; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE bug_status AS ENUM ( 'new', 'open', 'closed' ); ALTER TYPE bug_status OWNER TO dv; -- -- TOC entry 549 (class 1247 OID 16389) -- Name: descr_type; Type: TYPE; Schema: public; Owner: dv -- CREATE TYPE descr_type AS ( name text, amount integer ); ALTER TYPE descr_type OWNER TO dv; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 16390) -- Name: t1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE t1 ( id integer, descr descr_type ); ALTER TABLE t1 OWNER TO dv; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- Completed on 2016-05-02 12:27:26 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_unlogged_table_diff.sql000066400000000000000000000001221412634760000327650ustar00rootroot00000000000000SET search_path = radstg, pg_catalog; DROP TABLE IF EXISTS asset_country_weight; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_unlogged_table_new.sql000066400000000000000000000010571412634760000326560ustar00rootroot00000000000000-- -- Name: rad; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA rad; ALTER SCHEMA rad OWNER TO asi; -- -- Name: radstg; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA radstg; ALTER SCHEMA radstg OWNER TO asi; SET search_path = rad, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: rad; Owner: asi; Tablespace: -- CREATE TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_unlogged_table_original.sql000066400000000000000000000016061412634760000336710ustar00rootroot00000000000000-- -- Name: rad; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA rad; ALTER SCHEMA rad OWNER TO asi; -- -- Name: radstg; Type: SCHEMA; Schema: -; Owner: asi -- CREATE SCHEMA radstg; ALTER SCHEMA radstg OWNER TO asi; SET search_path = rad, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: rad; Owner: asi; Tablespace: -- CREATE TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; SET search_path = radstg, pg_catalog; -- -- Name: asset_country_weight; Type: TABLE; Schema: radstg; Owner: asi; Tablespace: -- CREATE UNLOGGED TABLE asset_country_weight ( asset integer NOT NULL, country character varying(3) NOT NULL, scaled_weight double precision NOT NULL ); ALTER TABLE asset_country_weight OWNER TO asi; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_view_diff.sql000066400000000000000000000000371412634760000307710ustar00rootroot00000000000000 DROP VIEW IF EXISTS testview; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_view_new.sql000066400000000000000000000017571412634760000306640ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_view_original.sql000066400000000000000000000022671412634760000316740ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_with_oids_diff.sql000066400000000000000000000000521412634760000320050ustar00rootroot00000000000000 ALTER TABLE testtable SET WITHOUT OIDS; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_with_oids_new.sql000066400000000000000000000002441412634760000316710ustar00rootroot00000000000000CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/drop_with_oids_original.sql000066400000000000000000000002561412634760000327070ustar00rootroot00000000000000CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ) WITH OIDS;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/enable_force_rls_diff.sql000066400000000000000000000001361412634760000322570ustar00rootroot00000000000000 ALTER TABLE items ENABLE ROW LEVEL SECURITY; ALTER TABLE projects FORCE ROW LEVEL SECURITY; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/enable_force_rls_new.sql000066400000000000000000000002521412634760000321370ustar00rootroot00000000000000create table items ( id integer ); alter table items enable row level security; create table projects ( id integer ); alter table projects force row level security; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/enable_force_rls_original.sql000066400000000000000000000001141412634760000331470ustar00rootroot00000000000000create table items ( id integer ); create table projects ( id integer ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_alter_type_diff.sql000066400000000000000000000006571412634760000326640ustar00rootroot00000000000000ALTER FOREIGN TABLE foreign_to_alter ADD COLUMN IF NOT EXISTS country_code character varying(5), ALTER COLUMN ref2 TYPE character varying(20) USING ref2::character varying(20) /* TYPE change - table: foreign_to_alter original: character varying(60) new: character varying(20) */, ALTER COLUMN deleted TYPE numeric(1,0) USING deleted::numeric(1,0) /* TYPE change - table: foreign_to_alter original: boolean new: numeric(1,0) */; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_alter_type_new.sql000066400000000000000000000006461412634760000325430ustar00rootroot00000000000000CREATE FOREIGN TABLE foreign_to_alter ( id bigint, user_id bigint, ref1 character varying(60), ref2 character varying(20), inplay_stake_coef numeric, pre_match_stake_coef numeric, punter_limits character varying, name character varying(60), colour_cat character varying(30), deleted numeric(1,0), country_code character varying(5) ) SERVER ats OPTIONS ( updatable 'false' );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_alter_type_original.sql000066400000000000000000000005721412634760000335540ustar00rootroot00000000000000CREATE FOREIGN TABLE foreign_to_alter ( id bigint, user_id bigint, ref1 character varying(60), ref2 character varying(60), inplay_stake_coef numeric, pre_match_stake_coef numeric, punter_limits character varying, name character varying(60), colour_cat character varying(30), deleted boolean ) SERVER ats OPTIONS ( updatable 'false' );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_create_table_diff.sql000066400000000000000000000001621412634760000331150ustar00rootroot00000000000000 CREATE FOREIGN TABLE IF NOT EXISTS foreign_to_create ( id bigint )SERVER ats OPTIONS ( updatable 'false' ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_create_table_new.sql000066400000000000000000000001451412634760000327770ustar00rootroot00000000000000 CREATE FOREIGN TABLE foreign_to_create ( id bigint ) SERVER ats OPTIONS ( updatable 'false' ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_create_table_original.sql000066400000000000000000000000001412634760000340000ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_drop_table_diff.sql000066400000000000000000000000571412634760000326210ustar00rootroot00000000000000 DROP FOREIGN TABLE IF EXISTS foreign_to_drop; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_drop_table_new.sql000066400000000000000000000000001412634760000324660ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/foreign_drop_table_original.sql000066400000000000000000000001441412634760000335120ustar00rootroot00000000000000CREATE FOREIGN TABLE foreign_to_drop ( id bigint ) SERVER ats OPTIONS ( updatable 'false' );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/function_bug3084274_diff.sql000066400000000000000000000004001412634760000322230ustar00rootroot00000000000000CREATE OR REPLACE FUNCTION f_obj_execute_node_select(in_id_model bigint, in_id_object text, in_arr_val text, in_mode bigint) RETURNS bigint LANGUAGE plpgsql SECURITY DEFINER AS $$ DECLARE v_ret bigint; BEGIN RETURN v_ret + 1; END; $$;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/function_bug3084274_new.sql000066400000000000000000000003651412634760000321160ustar00rootroot00000000000000CREATE FUNCTION f_obj_execute_node_select(in_id_model bigint, in_id_object text, in_arr_val text, in_mode bigint) RETURNS bigint LANGUAGE plpgsql SECURITY DEFINER AS $$ DECLARE v_ret bigint; BEGIN RETURN v_ret + 1; END; $$;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/function_bug3084274_original.sql000066400000000000000000000003611412634760000331250ustar00rootroot00000000000000CREATE FUNCTION f_obj_execute_node_select(in_id_model bigint, in_id_object text, in_arr_val text, in_mode bigint) RETURNS bigint LANGUAGE plpgsql SECURITY DEFINER AS $$ DECLARE v_ret bigint; BEGIN RETURN v_ret; END; $$;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/function_equal_whitespace_diff.sql000066400000000000000000000000001412634760000342110ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/function_equal_whitespace_new.sql000066400000000000000000000006241412634760000341060ustar00rootroot00000000000000CREATE FUNCTION update_list_subscription_history() RETURNS "trigger" AS ' BEGIN INSERT INTO list_subscription_history (id, areaid, prefixid, msn, j4f_customer_id, subscriptiondate, seqid, refid, price, stopdate) VALUES (OLD.id, OLD.areaid, OLD.prefixid, OLD.msn, OLD.j4f_customer_id, OLD.subscriptiondate, OLD.seqid, OLD.refid, OLD.price, CURRENT_TIMESTAMP); RETURN OLD; END; ' LANGUAGE plpgsql; function_equal_whitespace_original.sql000066400000000000000000000006241412634760000350420ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE FUNCTION update_list_subscription_history() RETURNS "trigger" AS ' BEGIN INSERT INTO list_subscription_history (id, areaid, prefixid, msn, j4f_customer_id, subscriptiondate, seqid, refid, price, stopdate) VALUES (OLD.id, OLD.areaid, OLD.prefixid, OLD.msn, OLD.j4f_customer_id, OLD.subscriptiondate, OLD.seqid, OLD.refid, OLD.price, CURRENT_TIMESTAMP); RETURN OLD; END; ' LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_columns_diff.sql000066400000000000000000000007201412634760000323410ustar00rootroot00000000000000REVOKE ALL (id) ON TABLE todos FROM admin; GRANT ALL (id) ON TABLE todos TO admin; REVOKE ALL (name) ON TABLE todos FROM anonymous; REVOKE ALL (name) ON TABLE todos FROM admin; GRANT ALL (name) ON TABLE todos TO admin; REVOKE ALL (id) ON TABLE todos_view FROM admin; GRANT ALL (id) ON TABLE todos_view TO admin; REVOKE ALL (name) ON TABLE todos_view FROM anonymous; REVOKE ALL (name) ON TABLE todos_view FROM admin; GRANT ALL (name) ON TABLE todos_view TO admin; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_columns_new.sql000066400000000000000000000005331412634760000322240ustar00rootroot00000000000000create table todos ( id integer, name text ); grant select(id) on todos to anonymous; grant all (id, name) on todos to admin; create view todos_view as select id, name from todos; grant select(id) on todos_view to anonymous; grant all (id, name) on todos_view to admin; -- Just to make sure it gets ignored grant webuser to anonymous; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_columns_original.sql000066400000000000000000000004171412634760000332400ustar00rootroot00000000000000create table todos ( id integer, name text ); grant select(id, name) on todos to anonymous; create view todos_view as select id, name from todos; grant select(id, name) on todos_view to anonymous; -- Just to make sure it gets ignored grant webuser to anonymous; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_new_sequence_diff.sql000066400000000000000000000003161412634760000333430ustar00rootroot00000000000000 CREATE SEQUENCE IF NOT EXISTS task_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; REVOKE ALL ON SEQUENCE task_id_seq FROM webuser; GRANT USAGE ON SEQUENCE task_id_seq TO webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_new_sequence_new.sql000066400000000000000000000002361412634760000332250ustar00rootroot00000000000000CREATE SEQUENCE task_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; GRANT USAGE ON SEQUENCE task_id_seq TO webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_new_sequence_original.sql000066400000000000000000000000111412634760000342270ustar00rootroot00000000000000-- Empty apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_table_cols_mixed_diff.sql000066400000000000000000000013401412634760000341550ustar00rootroot00000000000000 REVOKE ALL ON TABLE items FROM admin; GRANT UPDATE ON TABLE items TO admin; REVOKE ALL ON TABLE items FROM customer; GRANT SELECT ON TABLE items TO customer; REVOKE ALL ON TABLE items FROM webuser; GRANT INSERT, DELETE ON TABLE items TO webuser; REVOKE ALL (id) ON TABLE items FROM admin; GRANT SELECT (id) ON TABLE items TO admin; REVOKE ALL (id) ON TABLE items FROM webuser; GRANT SELECT (id) ON TABLE items TO webuser; REVOKE ALL (name) ON TABLE items FROM admin; GRANT SELECT (name), INSERT (name) ON TABLE items TO admin; REVOKE ALL (name) ON TABLE items FROM customer; GRANT UPDATE (name) ON TABLE items TO customer; REVOKE ALL (name) ON TABLE items FROM webuser; GRANT SELECT (name), UPDATE (name) ON TABLE items TO webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_table_cols_mixed_new.sql000066400000000000000000000003511412634760000340370ustar00rootroot00000000000000create table items(id integer, name text); grant select(id, name), insert(name), update on items to admin; grant select, update(name) on items to customer; grant select(id, name), insert, delete, update(name) on items to webuser; grant_on_table_cols_mixed_original.sql000066400000000000000000000000531412634760000347720ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffcreate table items(id integer, name text); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_table_sequence_diff.sql000066400000000000000000000004361412634760000336440ustar00rootroot00000000000000 REVOKE ALL ON SEQUENCE table1_id_seq FROM public; GRANT SELECT, USAGE ON SEQUENCE table1_id_seq TO public; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; REVOKE ALL ON TABLE table1 FROM public; GRANT SELECT, UPDATE ON TABLE table1 TO public;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_table_sequence_new.sql000066400000000000000000000054431412634760000335300ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 20:51:36 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2144 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 2020 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2022 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2143 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; GRANT SELECT,UPDATE ON TABLE table1 TO PUBLIC; -- -- TOC entry 2147 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; GRANT SELECT,USAGE ON SEQUENCE table1_id_seq TO PUBLIC; -- Completed on 2016-03-28 20:51:36 KRAT -- -- PostgreSQL database dump complete -- grant_on_table_sequence_original.sql000066400000000000000000000046641412634760000344700ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 20:49:16 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2144 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 2020 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2022 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2143 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- Completed on 2016-03-28 20:49:16 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_view_cols_mixed_diff.sql000066400000000000000000000014601412634760000340430ustar00rootroot00000000000000 REVOKE ALL ON TABLE items_view FROM admin; GRANT UPDATE ON TABLE items_view TO admin; REVOKE ALL ON TABLE items_view FROM customer; GRANT SELECT ON TABLE items_view TO customer; REVOKE ALL ON TABLE items_view FROM webuser; GRANT INSERT, DELETE ON TABLE items_view TO webuser; REVOKE ALL (id) ON TABLE items_view FROM admin; GRANT SELECT (id) ON TABLE items_view TO admin; REVOKE ALL (id) ON TABLE items_view FROM webuser; GRANT SELECT (id) ON TABLE items_view TO webuser; REVOKE ALL (name) ON TABLE items_view FROM admin; GRANT SELECT (name), INSERT (name) ON TABLE items_view TO admin; REVOKE ALL (name) ON TABLE items_view FROM customer; GRANT UPDATE (name) ON TABLE items_view TO customer; REVOKE ALL (name) ON TABLE items_view FROM webuser; GRANT SELECT (name), UPDATE (name) ON TABLE items_view TO webuser; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_view_cols_mixed_new.sql000066400000000000000000000004511412634760000337230ustar00rootroot00000000000000create table items(id integer, name text); create view items_view as select id from items; grant select(id, name), insert(name), update on items_view to admin; grant select, update(name) on items_view to customer; grant select(id, name), insert, delete, update(name) on items_view to webuser; grant_on_view_cols_mixed_original.sql000066400000000000000000000001341412634760000346550ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffcreate table items(id integer, name text); create view items_view as select id from items; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_view_diff.sql000066400000000000000000000001271412634760000316340ustar00rootroot00000000000000 REVOKE ALL ON TABLE view1 FROM public; GRANT SELECT, INSERT ON TABLE view1 TO public; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_view_new.sql000066400000000000000000000062571412634760000315270ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 21:21:00 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2149 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2151 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 183 (class 1259 OID 17716) -- Name: view1; Type: VIEW; Schema: public; Owner: dv -- CREATE VIEW view1 AS SELECT table1.id, table1.msg, table1.date_create FROM table1; ALTER TABLE view1 OWNER TO dv; -- -- TOC entry 2024 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2026 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2148 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2150 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- -- TOC entry 2152 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; -- -- TOC entry 2153 (class 0 OID 0) -- Dependencies: 183 -- Name: view1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE view1 FROM PUBLIC; REVOKE ALL ON TABLE view1 FROM dv; GRANT ALL ON TABLE view1 TO dv; GRANT SELECT,INSERT ON TABLE view1 TO PUBLIC; -- Completed on 2016-03-28 21:21:00 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/grant_on_view_original.sql000066400000000000000000000062011412634760000325270ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 21:18:55 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2149 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2151 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 183 (class 1259 OID 17716) -- Name: view1; Type: VIEW; Schema: public; Owner: dv -- CREATE VIEW view1 AS SELECT table1.id, table1.msg, table1.date_create FROM table1; ALTER TABLE view1 OWNER TO dv; -- -- TOC entry 2024 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2026 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2148 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2150 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- -- TOC entry 2152 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; -- -- TOC entry 2153 (class 0 OID 0) -- Dependencies: 183 -- Name: view1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE view1 FROM PUBLIC; REVOKE ALL ON TABLE view1 FROM dv; GRANT ALL ON TABLE view1 TO dv; -- Completed on 2016-03-28 21:18:55 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/inherited_tables_diff.sql000066400000000000000000000000001412634760000322660ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/000077500000000000000000000000001412634760000265305ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_1.sql000066400000000000000000000015021412634760000307270ustar00rootroot00000000000000CREATE TABLE fax_boxes ( fax_box_id serial NOT NULL, name text, CONSTRAINT fax_boxes_pkey PRIMARY KEY (fax_box_id) ); CREATE TABLE extensions (id serial NOT NULL); ALTER TABLE fax_boxes OWNER TO postgres; ALTER TABLE extensions ADD FOREIGN KEY (fax_box_id) REFERENCES fax_boxes (fax_box_id) ON UPDATE RESTRICT ON DELETE RESTRICT; CREATE TABLE faxes ( fax_id serial NOT NULL, fax_box_id int4, from_name text, from_number text, status int4, -- 1=pending, 2=failed, 3=received pages int4, time_received timestamp DEFAULT now(), time_finished_received timestamp, "read" int2 DEFAULT 0, station_id text, CONSTRAINT faxes_pkey PRIMARY KEY (fax_id), CONSTRAINT faxes_fax_box_id_fkey FOREIGN KEY (fax_box_id) REFERENCES fax_boxes (fax_box_id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE CASCADE ); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_10.sql000066400000000000000000000016611412634760000310150ustar00rootroot00000000000000CREATE SCHEMA admin; ALTER SCHEMA admin OWNER TO postgres; SET search_path = admin, pg_catalog; CREATE TABLE acl_role ( id bigint NOT NULL ); ALTER TABLE admin.acl_role OWNER TO postgres; ALTER TABLE ONLY acl_role ADD CONSTRAINT acl_role_pkey PRIMARY KEY (id); CREATE TABLE "user" ( id bigint NOT NULL, email character varying(255) NOT NULL, name character varying(255) NOT NULL, password character varying(40) NOT NULL, is_active boolean DEFAULT false NOT NULL, updated timestamp without time zone DEFAULT now() NOT NULL, created timestamp without time zone DEFAULT now() NOT NULL, role_id bigint NOT NULL, last_visit timestamp without time zone DEFAULT now() NOT NULL ); ALTER TABLE admin."user" OWNER TO postgres; CREATE INDEX fki_user_role_id_fkey ON "user" USING btree (role_id); ALTER TABLE ONLY "user" ADD CONSTRAINT user_role_id_fkey FOREIGN KEY (role_id) REFERENCES acl_role(id);apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_11.sql000066400000000000000000000001411412634760000310060ustar00rootroot00000000000000CREATE FUNCTION curdate() RETURNS date LANGUAGE sql AS $$SELECT CAST('now' AS date); $$; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_12.sql000066400000000000000000000001251412634760000310110ustar00rootroot00000000000000COMMENT ON DATABASE testdb IS 'The status : ''E'' for enabled, ''D'' for disabled.'; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_13.sql000066400000000000000000000002401412634760000310100ustar00rootroot00000000000000CREATE FUNCTION drop_fk_except_for(tables_in character varying[]) RETURNS SETOF character varying LANGUAGE plpgsql AS $$ DECLARE BEGIN -- aaa END; $$;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_14.sql000066400000000000000000000076571412634760000310340ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: comments; Type: COMMENT; Schema: -; Owner: fordfrog -- COMMENT ON DATABASE comments IS 'comments database'; COMMENT ON SCHEMA public IS 'public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: postgres -- CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql; ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres; SET search_path = public, pg_catalog; -- -- Name: test_fnc(character varying); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_fnc(arg character varying) RETURNS boolean LANGUAGE plpgsql AS $$BEGIN RETURN true; END;$$; ALTER FUNCTION public.test_fnc(arg character varying) OWNER TO fordfrog; -- -- Name: FUNCTION test_fnc(arg character varying); Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON FUNCTION test_fnc(arg character varying) IS 'test function'; -- -- Name: trigger_fnc(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION trigger_fnc() RETURNS trigger LANGUAGE plpgsql AS $$begin end;$$; ALTER FUNCTION public.trigger_fnc() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test ( id integer NOT NULL, text character varying(20) NOT NULL, CONSTRAINT text_check CHECK ((length((text)::text) > 0)) ); ALTER TABLE public.test OWNER TO fordfrog; COMMENT ON TABLE test IS 'test table'; -- -- Name: COLUMN test.id; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON COLUMN test.id IS 'id column'; -- -- Name: COLUMN test.text; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON COLUMN test.text IS 'text column'; -- -- Name: CONSTRAINT text_check ON test; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON CONSTRAINT text_check ON test IS 'text check'; -- -- Name: test_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE test_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.test_id_seq OWNER TO fordfrog; -- -- Name: test_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE test_id_seq OWNED BY test.id; -- -- Name: SEQUENCE test_id_seq; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON SEQUENCE test_id_seq IS 'test table sequence'; -- -- Name: test_view; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW test_view AS SELECT test.id, test.text FROM test; ALTER TABLE public.test_view OWNER TO fordfrog; -- -- Name: VIEW test_view; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON VIEW test_view IS 'test view'; -- -- Name: COLUMN test_view.id; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON COLUMN test_view.id IS 'view id col'; -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq'::regclass); -- -- Name: test_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test ADD CONSTRAINT test_pkey PRIMARY KEY (id); -- -- Name: INDEX test_pkey; Type: COMMENT; Schema: public; Owner: fordfrog -- COMMENT ON INDEX test_pkey IS 'primary key'; -- -- Name: test_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_trigger BEFORE UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE trigger_fnc(); COMMENT ON TRIGGER test_trigger ON test IS 'test trigger'; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_15.sql000066400000000000000000000001161412634760000310140ustar00rootroot00000000000000CREATE TABLE test (id bigint); COMMENT ON TABLE test IS 'multiline comment ';apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_16.sql000066400000000000000000000027211412634760000310210ustar00rootroot00000000000000CREATE TABLE cities ( id bigint NOT NULL, regionid bigint DEFAULT 0, loc_region_id bigint DEFAULT 0, name character varying(255) DEFAULT NULL::character varying, name_genitive character varying(255), name_prepositional character varying(255) DEFAULT NULL::character varying, name_ukr character varying(255) DEFAULT NULL::character varying, name_ukr_genetive character varying(255), name_ukr_prepositional character varying(255) DEFAULT NULL::character varying, translit character varying(255) DEFAULT NULL::character varying, mainflag smallint DEFAULT 0 NOT NULL, importance smallint DEFAULT 0, size smallint DEFAULT 1, population numeric(7,0), map boolean DEFAULT false NOT NULL, domain character varying(255) DEFAULT NULL::character varying, renta_item_count bigint DEFAULT 0 NOT NULL, class_flat_count integer[] DEFAULT ARRAY[0, 0, 0, 0], class_room_count integer[] DEFAULT ARRAY[0, 0, 0, 0], class_house_count integer[] DEFAULT ARRAY[0, 0, 0, 0], class_area_count integer[] DEFAULT ARRAY[0, 0, 0, 0], class_commercial_count integer[] DEFAULT ARRAY[0, 0, 0, 0], pos integer DEFAULT 0, user_id bigint DEFAULT 0 NOT NULL, mod_user_id bigint DEFAULT 0 NOT NULL, name_vector tsvector, name_lower character varying(255), name_ukr_lower character varying(255), created timestamp without time zone, modified timestamp without time zone, tel_code character varying(8) );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_17.sql000066400000000000000000000000611412634760000310150ustar00rootroot00000000000000CREATE TABLE test ( test TEXT DEFAULT '*/' );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_18.sql000066400000000000000000000022361412634760000310240ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.13 -- Dumped by pg_dump version 9.5.13 SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; CREATE TABLE public.locations ( id uuid NOT NULL, square_feet integer DEFAULT 0 NOT NULL, name character varying(50), description character varying(255), site_id uuid NOT NULL, default_yearly_hours integer, epact_code_name character varying, savings_percent double precision, ceiling_height integer DEFAULT 0 NOT NULL, map_number integer, project_id uuid, notes character varying, existing_controls boolean DEFAULT false NOT NULL, fixture_height integer DEFAULT 0 NOT NULL, luminescence character varying(255) ); -- -- Name: COLUMN locations.default_yearly_hours; Type: COMMENT; Schema: public; Owner: postgres -- COMMENT ON COLUMN public.locations.default_yearly_hours IS 'Informs audit items on what their default yearly hours should be'; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_2.sql000066400000000000000000000002271412634760000307330ustar00rootroot00000000000000CREATE TABLE contacts(id int PRIMARY KEY, number_pool_id int, name varchar(50)); CREATE INDEX contacts_number_pool_id_idx ON contacts(number_pool_id);apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_3.sql000066400000000000000000000017351412634760000307410ustar00rootroot00000000000000-- -- TOC Entry ID 2 (OID 605638) -- -- Name: admins_aid_seq Type: SEQUENCE Owner: xxxx -- CREATE SEQUENCE "admins_aid_seq" start 1 increment 1 maxvalue 1000000000 minvalue 1 cache 1; -- -- TOC Entry ID 108 (OID 605640) -- -- Name: admins Type: TABLE Owner: enki -- CREATE TABLE "admins" ( "aid" integer DEFAULT nextval('"admins_aid_seq"'::text) NOT NULL, "companyid" integer DEFAULT 0 NOT NULL, "groupid" integer DEFAULT 0 NOT NULL, "username" character varying NOT NULL, "password" character varying(40) NOT NULL, "superuser" boolean DEFAULT 'f'::bool NOT NULL, "name" character varying(40), "surname" character varying(40), "email" character varying(100) NOT NULL, "tel" character varying(40), "mobile" character varying(40), "enabled" boolean DEFAULT 't'::bool NOT NULL, "lastlogints" timestamp with time zone DEFAULT now() NOT NULL, "expirienced" boolean DEFAULT 'f'::bool, Constraint "admins_pkey" Primary Key ("aid") );apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_4.sql000066400000000000000000000002141412634760000307310ustar00rootroot00000000000000CREATE TABLE call_logs ( id bigint NOT NULL ); ALTER TABLE call_logs ALTER COLUMN id SET DEFAULT nextval('call_logs_id_seq'::regclass);apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_5.sql000066400000000000000000000013341412634760000307360ustar00rootroot00000000000000CREATE FUNCTION gtsq_in(cstring) RETURNS gtsq AS '$libdir/tsearch2', 'gtsq_in' LANGUAGE c STRICT; CREATE FUNCTION multiply_numbers(number1 integer, number2 integer) RETURNS integer AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql STRICT; CREATE FUNCTION select_something(number1 integer, number2 integer) RETURNS integer AS $_$SELECT number1 * number2$_$ LANGUAGE plpgsql; CREATE FUNCTION select_something2(number1 integer, number2 integer) RETURNS integer AS 'SELECT number1 * number2 || \'text\'' LANGUAGE plpgsql; CREATE FUNCTION select_something3(number1 integer, number2 integer) RETURNS integer AS ' SELECT number1 * number2 || \'text\' ' LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_6.sql000066400000000000000000000024441412634760000307420ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: postgres -- CREATE PROCEDURAL LANGUAGE plpgsql; CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -- CREATE TABLE test_table ( id bigint, date_deleted timestamp without time zone ); ALTER TABLE public.test_table OWNER TO postgres; -- -- Name: test_table_deleted; Type: INDEX; Schema: public; Owner: postgres; Tablespace: -- CREATE INDEX test_table_deleted ON test_table USING btree (date_deleted) WHERE (date_deleted IS NULL); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_7.sql000066400000000000000000000022411412634760000307360ustar00rootroot00000000000000-- -- Name: common; Type: SCHEMA; Schema: -; Owner: common -- CREATE SCHEMA common; SET search_path = common, pg_catalog; -- -- Name: t_common_casttotext(time with time zone); Type: FUNCTION; Schema: common; Owner: postgres -- CREATE FUNCTION t_common_casttotext(time with time zone) RETURNS text AS $_$SELECT textin(timetz_out($1));$_$ LANGUAGE sql IMMUTABLE STRICT; -- -- Name: t_common_casttotext(time without time zone); Type: FUNCTION; Schema: common; Owner: postgres -- CREATE FUNCTION t_common_casttotext(time without time zone) RETURNS text AS $_$SELECT textin(time_out($1));$_$ LANGUAGE sql IMMUTABLE STRICT; -- -- Name: t_common_casttotext(timestamp with time zone); Type: FUNCTION; Schema: common; Owner: postgres -- CREATE FUNCTION t_common_casttotext(timestamp with time zone) RETURNS text AS $_$SELECT textin(timestamptz_out($1));$_$ LANGUAGE sql IMMUTABLE STRICT; -- -- Name: t_common_casttotext(timestamp without time zone); Type: FUNCTION; Schema: common; Owner: postgres -- CREATE FUNCTION t_common_casttotext(timestamp without time zone) RETURNS text AS $_$SELECT textin(timestamp_out($1));$_$ LANGUAGE sql IMMUTABLE STRICT;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_8.sql000066400000000000000000000015711412634760000307440ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'LATIN2'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: testtt; Type: TYPE; Schema: public; Owner: madej -- CREATE TYPE testtt AS ( a integer, b text ); ALTER TYPE public.testtt OWNER TO madej; -- -- Name: .x(integer); Type: FUNCTION; Schema: public; Owner: madej -- CREATE FUNCTION ".x"(integer) RETURNS boolean AS $_$ declare begin raise notice 'inside: %', $1; return true; end; $_$ LANGUAGE plpgsql; ALTER FUNCTION public.".x"(integer) OWNER TO madej; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/loader/schema_9.sql000066400000000000000000000022551412634760000307450ustar00rootroot00000000000000CREATE TABLE user_data ( id bigint NOT NULL, email character varying(128) NOT NULL, created timestamp with time zone DEFAULT now() ); ALTER TABLE public.user_data OWNER TO postgres; CREATE SEQUENCE user_id_seq INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.user_id_seq OWNER TO postgres; ALTER SEQUENCE user_id_seq OWNED BY user_data.id; ALTER TABLE user_data ALTER COLUMN id SET DEFAULT nextval('user_id_seq'::regclass); CREATE VIEW "user" AS SELECT user_data.id, user_data.email, user_data.created FROM user_data; ALTER TABLE public."user" OWNER TO postgres; ALTER VIEW public."user" OWNER TO postgres; ALTER TABLE "user" ALTER COLUMN created SET DEFAULT now(); ALTER VIEW "user" ALTER COLUMN created SET DEFAULT now(); CREATE RULE on_delete AS ON DELETE TO "user" DO INSTEAD DELETE FROM user_data WHERE (user_data.id = old.id); CREATE RULE on_insert AS ON INSERT TO "user" DO INSTEAD (INSERT INTO user_data (id, email, created) VALUES (new.id, new.email, new.created)); CREATE RULE on_update AS ON UPDATE TO "user" DO INSTEAD (UPDATE user_data SET id = new.id, email = new.email, created = new.created WHERE (user_data.id = old.id));apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_cluster_diff.sql000066400000000000000000000001701412634760000320210ustar00rootroot00000000000000 CREATE INDEX IF NOT EXISTS testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_cluster_new.sql000066400000000000000000000023761412634760000317140ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: testindex2; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex2 ON testtable USING btree (field2); ALTER TABLE testtable CLUSTER ON testindex2; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_cluster_original.sql000066400000000000000000000021511412634760000327160ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); ALTER TABLE testtable CLUSTER ON testindex; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_column_type_diff.sql000066400000000000000000000005161412634760000327020ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field1 TYPE integer USING field1::integer /* TYPE change - table: testtable original: smallint new: integer */, ALTER COLUMN field3 TYPE character varying(150) USING field3::character varying(150) /* TYPE change - table: testtable original: character varying(100) new: character varying(150) */; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_column_type_new.sql000066400000000000000000000016521412634760000325650ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_column_type_original.sql000066400000000000000000000016531412634760000336010ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 smallint, field2 integer, field3 character varying(100) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_constraint_diff.sql000066400000000000000000000003001412634760000325170ustar00rootroot00000000000000 ALTER TABLE IF EXISTS testtable DROP CONSTRAINT IF EXISTS field4check; ALTER TABLE IF EXISTS testtable ADD CONSTRAINT IF NOT EXISTS field4check CHECK ((field4 > (0.0)::double precision)); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_constraint_new.sql000066400000000000000000000024571412634760000324170ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL, CONSTRAINT field4check CHECK ((field4 > (0.0)::double precision)) ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_constraint_original.sql000066400000000000000000000025311412634760000334230ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision, "full" timestamp with time zone DEFAULT '2006-11-10 00:00:00+01'::timestamp with time zone NOT NULL, CONSTRAINT field4check CHECK (((field4 > (-5.0)::double precision) AND (field4 < (5.0)::double precision))) ); ALTER TABLE ONLY testtable ALTER COLUMN "full" SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_default_value_diff.sql000066400000000000000000000000751412634760000331640ustar00rootroot00000000000000 ALTER TABLE testtable ALTER COLUMN field4 SET DEFAULT 1.0; modify_default_value_inherited_column_diff.sql000066400000000000000000000001111412634760000365040ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 1; modify_default_value_inherited_column_new.sql000066400000000000000000000013651412634760000364010ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); -- -- Name: childtable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE childtable ( ) INHERITS (parenttable); -- -- Name: parenttable_id; Type: DEFAULT; Schema: public; Owner: admin -- ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 1; -- -- PostgreSQL database dump complete --modify_default_value_inherited_column_original.sql000066400000000000000000000013651412634760000374140ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE parenttable ( parenttable_id integer NOT NULL, parenttable_date timestamptz NOT NULL ); -- -- Name: childtable; Type: TABLE; Schema: public; Owner: admin; Tablespace: -- CREATE TABLE childtable ( ) INHERITS (parenttable); -- -- Name: parenttable_id; Type: DEFAULT; Schema: public; Owner: admin -- ALTER TABLE ONLY childtable ALTER COLUMN parenttable_id SET DEFAULT 0; -- -- PostgreSQL database dump complete --apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_default_value_new.sql000066400000000000000000000021101412634760000330350ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision DEFAULT 1.0 ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_default_value_original.sql000066400000000000000000000021101412634760000340500ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision DEFAULT 0.0 ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args2_diff.sql000066400000000000000000000002601412634760000332630ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args2_new.sql000066400000000000000000000027021412634760000331470ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args2_original.sql000066400000000000000000000026731412634760000341710ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number1 integer, number2 integer) RETURNS integer AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number1 integer, number2 integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args_diff.sql000066400000000000000000000002211412634760000331760ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION power_number(number integer) RETURNS integer AS $$ begin return number * number; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args_new.sql000066400000000000000000000026001412634760000330620ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: power_number(integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION power_number(number integer) RETURNS integer AS $$ begin return number * number; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.power_number(number integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_args_original.sql000066400000000000000000000026001412634760000340750ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: power_number(integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION power_number("input" integer) RETURNS integer AS $$ begin return input * input; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.power_number("input" integer) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_function_end_detection_diff.sql000066400000000000000000000013301412634760000347710ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff CREATE OR REPLACE FUNCTION afunction(text, text, numeric) RETURNS numeric AS ' DECLARE param1 ALIAS FOR $1; param2 ALIAS FOR $2; param3 ALIAS FOR $3; avg NUMERIC; BEGIN IF param1 = ''value1'' AND param2 = ''value2'' THEN IF param3 = 0 THEN RETURN -0.35; ELSE IF param3 > 60 THEN avg = 0; ELSE avg = 0.29; END IF; END IF; RETURN round(avg, 2); END IF; IF param1 = ''value1'' AND param2 = ''value2'' THEN IF param3 = 0 THEN RETURN -0.35; ELSE IF param3 > 60 THEN avg = 0; ELSE avg = 0.29; END IF; END IF; RETURN round(avg, 2); END IF; RAISE EXCEPTION ''No info''; END; ' LANGUAGE plpgsql IMMUTABLE; modify_function_end_detection_new.sql000066400000000000000000000013131412634760000346530ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE FUNCTION afunction(text, text, numeric) RETURNS numeric AS ' DECLARE param1 ALIAS FOR $1; param2 ALIAS FOR $2; param3 ALIAS FOR $3; avg NUMERIC; BEGIN IF param1 = ''value1'' AND param2 = ''value2'' THEN IF param3 = 0 THEN RETURN -0.35; ELSE IF param3 > 60 THEN avg = 0; ELSE avg = 0.29; END IF; END IF; RETURN round(avg, 2); END IF; IF param1 = ''value1'' AND param2 = ''value2'' THEN IF param3 = 0 THEN RETURN -0.35; ELSE IF param3 > 60 THEN avg = 0; ELSE avg = 0.29; END IF; END IF; RETURN round(avg, 2); END IF; RAISE EXCEPTION ''No info''; END; ' LANGUAGE plpgsql IMMUTABLE;modify_function_end_detection_original.sql000066400000000000000000000007721412634760000356760ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffCREATE FUNCTION afunction(text, text, numeric) RETURNS numeric AS ' DECLARE param1 ALIAS FOR $1; param2 ALIAS FOR $2; param3 ALIAS FOR $3; avg NUMERIC; BEGIN IF param1 = ''value1'' AND param2 = ''value2'' THEN IF param3 = 0 THEN RETURN -0.35; ELSE IF param3 > 60 THEN avg = 0; ELSE avg = 0.29; END IF; END IF; RETURN round(avg, 2); END IF; RAISE EXCEPTION ''This is a very very different function''; END; ' LANGUAGE plpgsql IMMUTABLE;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_noargs_diff.sql000066400000000000000000000001701412634760000335360ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION return_one() RETURNS integer AS $$ begin return -1 + 2; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_noargs_new.sql000066400000000000000000000025161412634760000334250ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: return_one(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION return_one() RETURNS integer AS $$ begin return -1 + 2; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.return_one() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_function_noargs_original.sql000066400000000000000000000025111412634760000343540ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: return_one(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION return_one() RETURNS integer AS $$ begin return 1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.return_one() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_similar_diff.sql000066400000000000000000000002631412634760000337100ustar00rootroot00000000000000 CREATE OR REPLACE FUNCTION multiply_numbers(number1 smallint, number2 smallint) RETURNS smallint AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_function_similar_new.sql000066400000000000000000000034571412634760000336010ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; -- -- Name: multiply_numbers(smallint, smallint); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number1 smallint, number2 smallint) RETURNS smallint AS $$ begin return number1 * number2; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number1 smallint, number2 smallint) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_function_similar_original.sql000066400000000000000000000034571412634760000345350ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: multiply_numbers(integer, integer); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 integer, number1 integer) RETURNS integer AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 integer, number1 integer) OWNER TO fordfrog; -- -- Name: multiply_numbers(smallint, smallint); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION multiply_numbers(number2 smallint, number1 smallint) RETURNS smallint AS $$ begin return number2 * number1; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.multiply_numbers(number2 smallint, number1 smallint) OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_pkey; Type: CONSTRAINT; Schema: public; Owner: fordfrog; Tablespace: -- ALTER TABLE ONLY test_table ADD CONSTRAINT test_table_pkey PRIMARY KEY (id); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_index_diff.sql000066400000000000000000000001521412634760000314470ustar00rootroot00000000000000 DROP INDEX IF EXISTS testindex; CREATE INDEX IF NOT EXISTS testindex ON testtable USING btree (field3); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_index_new.sql000066400000000000000000000020741412634760000313350ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_index_original.sql000066400000000000000000000020741412634760000323500ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field1); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_inherits_diff.sql000066400000000000000000000005111412634760000321640ustar00rootroot00000000000000 CREATE TABLE IF NOT EXISTS parenttable2 ( id bigserial NOT NULL ); ALTER TABLE parenttable2 OWNER TO fordfrog; ALTER TABLE parenttable DROP COLUMN IF EXISTS id, ADD COLUMN IF NOT EXISTS field3 information_schema.cardinal_number; ALTER TABLE testtable NO INHERIT parenttable; ALTER TABLE testtable INHERIT parenttable2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_inherits_new.sql000066400000000000000000000023551412634760000320550ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( field3 information_schema.cardinal_number ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: parenttable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable2 ( id bigserial NOT NULL ); ALTER TABLE public.parenttable2 OWNER TO fordfrog; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 polygon ) INHERITS (parenttable2); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_inherits_original.sql000066400000000000000000000020201412634760000330550ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( id bigserial NOT NULL ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 polygon ) INHERITS (parenttable); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_materialized_view_diff.sql000066400000000000000000000002071412634760000340450ustar00rootroot00000000000000 DROP MATERIALIZED VIEW IF EXISTS testview; CREATE MATERIALIZED VIEW testview AS SELECT testtable.name, testtable.id FROM testtable; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_materialized_view_new.sql000066400000000000000000000023041412634760000337260ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE MATERIALIZED VIEW testview AS SELECT testtable.name, testtable.id FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_materialized_view_original.sql000066400000000000000000000023041412634760000346620ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE MATERIALIZED VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cache_diff.sql000066400000000000000000000000431412634760000332720ustar00rootroot00000000000000 ALTER SEQUENCE testseq CACHE 10; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cache_new.sql000066400000000000000000000014421412634760000331570ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 10; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cache_original.sql000066400000000000000000000014411412634760000341710ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cycle_off_diff.sql000066400000000000000000000000431412634760000341600ustar00rootroot00000000000000 ALTER SEQUENCE testseq NO CYCLE; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cycle_off_new.sql000066400000000000000000000014411412634760000340440ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_cycle_off_original.sql000066400000000000000000000014531412634760000350030ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1 CYCLE; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cycle_on_diff.sql000066400000000000000000000000401412634760000340170ustar00rootroot00000000000000 ALTER SEQUENCE testseq CYCLE; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_cycle_on_new.sql000066400000000000000000000014531412634760000337110ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1 CYCLE; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_cycle_on_original.sql000066400000000000000000000014411412634760000346420ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_increment_diff.sql000066400000000000000000000000521412634760000342130ustar00rootroot00000000000000 ALTER SEQUENCE testseq INCREMENT BY 10; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_sequence_increment_new.sql000066400000000000000000000014421412634760000341000ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 10 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_increment_original.sql000066400000000000000000000014411412634760000350330ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_maxvalue_set_diff.sql000066400000000000000000000000731412634760000346500ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER SEQUENCE testseq MAXVALUE 1000 RESTART WITH 1000; modify_sequence_maxvalue_set_new.sql000066400000000000000000000014471412634760000345370ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 MAXVALUE 1000 NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_maxvalue_set_original.sql000066400000000000000000000014421412634760000355450ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 10 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_maxvalue_unset_diff.sql000066400000000000000000000000461412634760000352130ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER SEQUENCE testseq NO MAXVALUE; modify_sequence_maxvalue_unset_new.sql000066400000000000000000000014451412634760000351000ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_maxvalue_unset_original.sql000066400000000000000000000014471412634760000361150ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 MAXVALUE 1000 NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_minvalue_set_diff.sql000066400000000000000000000000731412634760000346460ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER SEQUENCE testseq MINVALUE 1000 RESTART WITH 1000; modify_sequence_minvalue_set_new.sql000066400000000000000000000014471412634760000345350ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 NO MAXVALUE MINVALUE 1000 CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_minvalue_set_original.sql000066400000000000000000000014421412634760000355430ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 10 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_minvalue_unset_diff.sql000066400000000000000000000000461412634760000352110ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER SEQUENCE testseq NO MINVALUE; modify_sequence_minvalue_unset_new.sql000066400000000000000000000014451412634760000350760ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_minvalue_unset_original.sql000066400000000000000000000014471412634760000361130ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 10 NO MAXVALUE MINVALUE 1000 CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_start_ignore_off_diff.sql000066400000000000000000000000541412634760000355040ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff ALTER SEQUENCE testseq RESTART WITH 1000; modify_sequence_start_ignore_off_new.sql000066400000000000000000000024421412634760000353700ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_start_ignore_off_original.sql000066400000000000000000000024371412634760000364070ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_start_ignore_on_diff.sql000066400000000000000000000000001412634760000353350ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiffmodify_sequence_start_ignore_on_new.sql000066400000000000000000000024421412634760000352320ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1000 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- modify_sequence_start_ignore_on_original.sql000066400000000000000000000024371412634760000362510ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; -- -- Name: testseq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testseq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testseq OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_statistics_diff.sql000066400000000000000000000001041412634760000325270ustar00rootroot00000000000000 ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 200; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_statistics_new.sql000066400000000000000000000021771412634760000324240ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 200; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_statistics_original.sql000066400000000000000000000021771412634760000334370ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE ONLY testtable ALTER COLUMN field4 SET STATISTICS 100; ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testindex; Type: INDEX; Schema: public; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_trigger_diff.sql000066400000000000000000000003071412634760000320050ustar00rootroot00000000000000 DROP TRIGGER IF EXISTS test_table_trigger ON test_table; CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE OF id ON test_table FOR EACH STATEMENT EXECUTE PROCEDURE test_table_trigger(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_trigger_new.sql000066400000000000000000000026331412634760000316720ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE OF id ON test_table FOR EACH STATEMENT EXECUTE PROCEDURE test_table_trigger(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_trigger_original.sql000066400000000000000000000026171412634760000327070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -- CREATE PROCEDURAL LANGUAGE plpgsql; SET search_path = public, pg_catalog; -- -- Name: test_table_trigger(); Type: FUNCTION; Schema: public; Owner: fordfrog -- CREATE FUNCTION test_table_trigger() RETURNS "trigger" AS $$ begin return NEW; end; $$ LANGUAGE plpgsql; ALTER FUNCTION public.test_table_trigger() OWNER TO fordfrog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: test_table; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE test_table ( id serial NOT NULL ); ALTER TABLE public.test_table OWNER TO fordfrog; -- -- Name: test_table_trigger; Type: TRIGGER; Schema: public; Owner: fordfrog -- CREATE TRIGGER test_table_trigger BEFORE INSERT OR UPDATE ON test_table FOR EACH ROW EXECUTE PROCEDURE test_table_trigger(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_view_diff.sql000066400000000000000000000001551412634760000313150ustar00rootroot00000000000000 DROP VIEW IF EXISTS testview; CREATE VIEW testview AS SELECT testtable.name, testtable.id FROM testtable; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_view_new.sql000066400000000000000000000022671412634760000312040ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview AS SELECT testtable.name, testtable.id FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/modify_view_original.sql000066400000000000000000000022671412634760000322170ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/multiple_schemas_diff.sql000066400000000000000000000016101412634760000323270ustar00rootroot00000000000000 DROP SCHEMA IF EXISTS testschema1 CASCADE; CREATE SCHEMA IF NOT EXISTS testschema2; SET search_path = public, pg_catalog; DROP TABLE IF EXISTS testtable2; DROP SEQUENCE IF EXISTS testtable2_id_seq; CREATE SEQUENCE IF NOT EXISTS testtable3_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; CREATE TABLE IF NOT EXISTS testtable3 ( id bigint DEFAULT nextval('testtable3_id_seq'::regclass) NOT NULL ); ALTER TABLE testtable3 OWNER TO fordfrog; ALTER SEQUENCE testtable3_id_seq OWNED BY testtable3.id; SET search_path = testschema2, pg_catalog; CREATE SEQUENCE IF NOT EXISTS testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; CREATE TABLE IF NOT EXISTS testtable1 ( id integer DEFAULT nextval('testtable1_id_seq'::regclass) NOT NULL ); ALTER TABLE testtable1 OWNER TO fordfrog; ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/multiple_schemas_new.sql000066400000000000000000000077651412634760000322310ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: testschema2; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA testschema2; ALTER SCHEMA testschema2 OWNER TO fordfrog; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id bigint NOT NULL ); ALTER TABLE public.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); -- -- Name: testtable3; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable3 ( id bigint NOT NULL ); ALTER TABLE public.testtable3 OWNER TO fordfrog; -- -- Name: testtable3_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable3_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable3_id_seq OWNER TO fordfrog; -- -- Name: testtable3_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable3_id_seq OWNED BY testtable3.id; -- -- Name: testtable3_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable3_id_seq', 1, false); SET search_path = testschema2, pg_catalog; -- -- Name: testtable1; Type: TABLE; Schema: testschema2; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id integer NOT NULL ); ALTER TABLE testschema2.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: testschema2; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE testschema2.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: testschema2; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: testschema2; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); SET search_path = public, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable3 ALTER COLUMN id SET DEFAULT nextval('testtable3_id_seq'::regclass); SET search_path = testschema2, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: testschema2; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); SET search_path = public, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Data for Name: testtable3; Type: TABLE DATA; Schema: public; Owner: fordfrog -- SET search_path = testschema2, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: testschema2; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/multiple_schemas_original.sql000066400000000000000000000077661412634760000332450ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; -- -- Name: testschema1; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA testschema1; ALTER SCHEMA testschema1 OWNER TO fordfrog; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable1; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id bigint NOT NULL ); ALTER TABLE public.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); -- -- Name: testtable2; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer NOT NULL ); ALTER TABLE public.testtable2 OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE; Schema: public; Owner: fordfrog -- CREATE SEQUENCE testtable2_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE public.testtable2_id_seq OWNER TO fordfrog; -- -- Name: testtable2_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fordfrog -- ALTER SEQUENCE testtable2_id_seq OWNED BY testtable2.id; -- -- Name: testtable2_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fordfrog -- SELECT pg_catalog.setval('testtable2_id_seq', 1, false); SET search_path = testschema1, pg_catalog; -- -- Name: testtable1; Type: TABLE; Schema: testschema1; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable1 ( id integer NOT NULL ); ALTER TABLE testschema1.testtable1 OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE; Schema: testschema1; Owner: fordfrog -- CREATE SEQUENCE testtable1_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER TABLE testschema1.testtable1_id_seq OWNER TO fordfrog; -- -- Name: testtable1_id_seq; Type: SEQUENCE OWNED BY; Schema: testschema1; Owner: fordfrog -- ALTER SEQUENCE testtable1_id_seq OWNED BY testtable1.id; -- -- Name: testtable1_id_seq; Type: SEQUENCE SET; Schema: testschema1; Owner: fordfrog -- SELECT pg_catalog.setval('testtable1_id_seq', 1, false); SET search_path = public, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); -- -- Name: id; Type: DEFAULT; Schema: public; Owner: fordfrog -- ALTER TABLE testtable2 ALTER COLUMN id SET DEFAULT nextval('testtable2_id_seq'::regclass); SET search_path = testschema1, pg_catalog; -- -- Name: id; Type: DEFAULT; Schema: testschema1; Owner: fordfrog -- ALTER TABLE testtable1 ALTER COLUMN id SET DEFAULT nextval('testtable1_id_seq'::regclass); SET search_path = public, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: public; Owner: fordfrog -- -- -- Data for Name: testtable2; Type: TABLE DATA; Schema: public; Owner: fordfrog -- SET search_path = testschema1, pg_catalog; -- -- Data for Name: testtable1; Type: TABLE DATA; Schema: testschema1; Owner: fordfrog -- -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/quoted_schema_diff.sql000066400000000000000000000002601412634760000316120ustar00rootroot00000000000000 SET search_path = "ABC", pg_catalog; CREATE TABLE IF NOT EXISTS testtable2 ( id integer, name character varying(100) NOT NULL ); ALTER TABLE testtable2 OWNER TO fordfrog; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/quoted_schema_new.sql000066400000000000000000000032041412634760000314740ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: ABC; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA "ABC"; ALTER SCHEMA "ABC" OWNER TO fordfrog; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = "ABC", pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: ABC; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE "ABC".testtable OWNER TO fordfrog; -- -- Name: testtable2; Type: TABLE; Schema: ABC; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable2 ( id integer, name character varying(100) NOT NULL ); ALTER TABLE "ABC".testtable2 OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: ABC; Owner: fordfrog -- COPY testtable (field1, field2, field3, field4) FROM stdin; \. -- -- Data for Name: testtable2; Type: TABLE DATA; Schema: ABC; Owner: fordfrog -- COPY testtable2 (id, name) FROM stdin; \. -- -- Name: testindex; Type: INDEX; Schema: ABC; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/quoted_schema_original.sql000066400000000000000000000024471412634760000325170ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: ABC; Type: SCHEMA; Schema: -; Owner: fordfrog -- CREATE SCHEMA "ABC"; ALTER SCHEMA "ABC" OWNER TO fordfrog; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = "ABC", pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: ABC; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 integer, field2 integer, field3 character varying(150) DEFAULT 'none'::character varying, field4 double precision ); ALTER TABLE "ABC".testtable OWNER TO fordfrog; -- -- Data for Name: testtable; Type: TABLE DATA; Schema: ABC; Owner: fordfrog -- COPY testtable (field1, field2, field3, field4) FROM stdin; \. -- -- Name: testindex; Type: INDEX; Schema: ABC; Owner: fordfrog; Tablespace: -- CREATE INDEX testindex ON testtable USING btree (field3); -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/read_inherits_diff.sql000066400000000000000000000001341412634760000316110ustar00rootroot00000000000000 ALTER TABLE testtable ADD COLUMN IF NOT EXISTS field2 information_schema.cardinal_number; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/read_inherits_new.sql000066400000000000000000000020761412634760000315010ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( id bigserial NOT NULL ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 bit(1), field2 information_schema.cardinal_number ) INHERITS (parenttable); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/read_inherits_original.sql000066400000000000000000000020171412634760000325070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: parenttable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE parenttable ( id bigserial NOT NULL ); ALTER TABLE public.parenttable OWNER TO fordfrog; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( field1 bit(1) ) INHERITS (parenttable); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/revoke_on_table_sequence_diff.sql000066400000000000000000000001331412634760000340160ustar00rootroot00000000000000 REVOKE ALL ON SEQUENCE table1_id_seq FROM public; REVOKE ALL ON TABLE table1 FROM public;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/revoke_on_table_sequence_new.sql000066400000000000000000000060631412634760000337070ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 21:12:09 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2148 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 2020 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2138 (class 0 OID 17707) -- Dependencies: 182 -- Data for Name: table1; Type: TABLE DATA; Schema: public; Owner: dv -- COPY table1 (id, msg, date_create) FROM stdin; \. -- -- TOC entry 2150 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE SET; Schema: public; Owner: dv -- SELECT pg_catalog.setval('table1_id_seq', 1, false); -- -- TOC entry 2022 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2147 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- -- TOC entry 2149 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; -- Completed on 2016-03-28 21:12:09 KRAT -- -- PostgreSQL database dump complete -- revoke_on_table_sequence_original.sql000066400000000000000000000054431412634760000346440ustar00rootroot00000000000000apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 20:51:36 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2144 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2146 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 2020 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2022 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2143 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2145 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; GRANT SELECT,UPDATE ON TABLE table1 TO PUBLIC; -- -- TOC entry 2147 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; GRANT SELECT,USAGE ON SEQUENCE table1_id_seq TO PUBLIC; -- Completed on 2016-03-28 20:51:36 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/revoke_on_view_diff.sql000066400000000000000000000000461412634760000320140ustar00rootroot00000000000000REVOKE ALL ON TABLE view1 FROM public;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/revoke_on_view_new.sql000066400000000000000000000062011412634760000316740ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 21:18:55 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2149 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2151 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 183 (class 1259 OID 17716) -- Name: view1; Type: VIEW; Schema: public; Owner: dv -- CREATE VIEW view1 AS SELECT table1.id, table1.msg, table1.date_create FROM table1; ALTER TABLE view1 OWNER TO dv; -- -- TOC entry 2024 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2026 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2148 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2150 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- -- TOC entry 2152 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; -- -- TOC entry 2153 (class 0 OID 0) -- Dependencies: 183 -- Name: view1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE view1 FROM PUBLIC; REVOKE ALL ON TABLE view1 FROM dv; GRANT ALL ON TABLE view1 TO dv; -- Completed on 2016-03-28 21:18:55 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/revoke_on_view_original.sql000066400000000000000000000062571412634760000327220ustar00rootroot00000000000000-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.1 -- Dumped by pg_dump version 9.5.1 -- Started on 2016-03-28 21:21:00 KRAT SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET row_security = off; -- -- TOC entry 1 (class 3079 OID 12395) -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- TOC entry 2149 (class 0 OID 0) -- Dependencies: 1 -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- TOC entry 182 (class 1259 OID 17707) -- Name: table1; Type: TABLE; Schema: public; Owner: dv -- CREATE TABLE table1 ( id integer NOT NULL, msg text, date_create timestamp without time zone ); ALTER TABLE table1 OWNER TO dv; -- -- TOC entry 181 (class 1259 OID 17705) -- Name: table1_id_seq; Type: SEQUENCE; Schema: public; Owner: dv -- CREATE SEQUENCE table1_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE table1_id_seq OWNER TO dv; -- -- TOC entry 2151 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: dv -- ALTER SEQUENCE table1_id_seq OWNED BY table1.id; -- -- TOC entry 183 (class 1259 OID 17716) -- Name: view1; Type: VIEW; Schema: public; Owner: dv -- CREATE VIEW view1 AS SELECT table1.id, table1.msg, table1.date_create FROM table1; ALTER TABLE view1 OWNER TO dv; -- -- TOC entry 2024 (class 2604 OID 17710) -- Name: id; Type: DEFAULT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ALTER COLUMN id SET DEFAULT nextval('table1_id_seq'::regclass); -- -- TOC entry 2026 (class 2606 OID 17715) -- Name: table1_pkey; Type: CONSTRAINT; Schema: public; Owner: dv -- ALTER TABLE ONLY table1 ADD CONSTRAINT table1_pkey PRIMARY KEY (id); -- -- TOC entry 2148 (class 0 OID 0) -- Dependencies: 6 -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- TOC entry 2150 (class 0 OID 0) -- Dependencies: 182 -- Name: table1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE table1 FROM PUBLIC; REVOKE ALL ON TABLE table1 FROM dv; GRANT ALL ON TABLE table1 TO dv; -- -- TOC entry 2152 (class 0 OID 0) -- Dependencies: 181 -- Name: table1_id_seq; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON SEQUENCE table1_id_seq FROM PUBLIC; REVOKE ALL ON SEQUENCE table1_id_seq FROM dv; GRANT ALL ON SEQUENCE table1_id_seq TO dv; -- -- TOC entry 2153 (class 0 OID 0) -- Dependencies: 183 -- Name: view1; Type: ACL; Schema: public; Owner: dv -- REVOKE ALL ON TABLE view1 FROM PUBLIC; REVOKE ALL ON TABLE view1 FROM dv; GRANT ALL ON TABLE view1 TO dv; GRANT SELECT,INSERT ON TABLE view1 TO PUBLIC; -- Completed on 2016-03-28 21:21:00 KRAT -- -- PostgreSQL database dump complete -- apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_alias_with_quote_diff.sql000066400000000000000000000001301412634760000333600ustar00rootroot00000000000000DROP VIEW IF EXISTS foo; CREATE VIEW foo AS SELECT bar AS "Foo's bar" FROM tableName; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_alias_with_quote_new.sql000066400000000000000000000000741412634760000332500ustar00rootroot00000000000000CREATE VIEW foo AS SELECT bar AS "Foo's bar" FROM tableName;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_alias_with_quote_original.sql000066400000000000000000000001301412634760000342540ustar00rootroot00000000000000CREATE VIEW foo AS SELECT bar AS "Foo's bar", bar2 AS "Foo's second bar" FROM tableName;apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_bug3080388_diff.sql000066400000000000000000000000011412634760000313470ustar00rootroot00000000000000 apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_bug3080388_new.sql000066400000000000000000000002131412634760000312350ustar00rootroot00000000000000create table t ( pk serial primary key, t text default '' ); create view v as select * from t; alter view v alter column t set default ''; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_bug3080388_original.sql000066400000000000000000000002131412634760000322500ustar00rootroot00000000000000create table t ( pk serial primary key, t text default '' ); create view v as select * from t; alter view v alter column t set default ''; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_colnames_diff.sql000066400000000000000000000000721412634760000316250ustar00rootroot00000000000000DROP VIEW IF EXISTS vx; CREATE VIEW vx (x) AS select 2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_colnames_new.sql000066400000000000000000000000401412634760000315010ustar00rootroot00000000000000create view vx (x) as select 2; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_colnames_original.sql000066400000000000000000000000401412634760000325140ustar00rootroot00000000000000create view vx (x) as select 1; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_triggers_diff.sql000066400000000000000000000010041412634760000316460ustar00rootroot00000000000000DROP TRIGGER IF EXISTS trg_testview_instead_of_delete ON testview; DROP TRIGGER IF EXISTS trg_testview_instead_of_insert ON testview; CREATE TRIGGER trg_testview_instead_of_delete_new_name INSTEAD OF DELETE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_before_update BEFORE UPDATE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_after_insert AFTER INSERT ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_triggers_new.sql000066400000000000000000000036521412634760000315420ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; CREATE FUNCTION fn_trg_testview() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- do nothing RETURN OLD; END; $$; ALTER FUNCTION public.fn_trg_testview() OWNER TO fordfrog; CREATE TRIGGER trg_testview_instead_of_delete_new_name INSTEAD OF DELETE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_instead_of_update INSTEAD OF UPDATE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_before_update before UPDATE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_after_insert after INSERT ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; REVOKE ALL ON FUNCTION fn_trg_testview() FROM PUBLIC; REVOKE ALL ON FUNCTION fn_trg_testview() FROM postgres; GRANT ALL ON FUNCTION fn_trg_testview() TO PUBLIC; GRANT ALL ON FUNCTION fn_trg_testview() TO postgres; apgdiff-release_2.7.0/src/test/resources/cz/startnet/utils/pgdiff/view_triggers_original.sql000066400000000000000000000034651412634760000325570ustar00rootroot00000000000000-- -- PostgreSQL database dump -- SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; -- -- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres -- COMMENT ON SCHEMA public IS 'Standard public schema'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: testtable; Type: TABLE; Schema: public; Owner: fordfrog; Tablespace: -- CREATE TABLE testtable ( id bigint, name character varying(30) ); ALTER TABLE public.testtable OWNER TO fordfrog; -- -- Name: testview; Type: VIEW; Schema: public; Owner: fordfrog -- CREATE VIEW testview AS SELECT testtable.id, testtable.name FROM testtable; ALTER TABLE public.testview OWNER TO fordfrog; CREATE FUNCTION fn_trg_testview() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN -- do nothing RETURN OLD; END; $$; ALTER FUNCTION public.fn_trg_testview() OWNER TO fordfrog; CREATE TRIGGER trg_testview_instead_of_delete INSTEAD OF DELETE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_instead_of_insert INSTEAD OF INSERT ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); CREATE TRIGGER trg_testview_instead_of_update INSTEAD OF UPDATE ON testview FOR EACH ROW EXECUTE PROCEDURE fn_trg_testview(); -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; REVOKE ALL ON FUNCTION fn_trg_testview() FROM PUBLIC; REVOKE ALL ON FUNCTION fn_trg_testview() FROM postgres; GRANT ALL ON FUNCTION fn_trg_testview() TO PUBLIC; GRANT ALL ON FUNCTION fn_trg_testview() TO postgres;