package Ġcom . yo 1 0 0 0 . hay stacks . data . repository . postgresql Ċ Ċ import Ġcom . yo 1 0 0 0 . hay stacks . core . entity .* Ċ import Ġcom . yo 1 0 0 0 . hay stacks . core . repository . Table Repository Ċ import Ġcom . yo 1 0 0 0 . hay stacks . core . value object .* Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Operations Ċ Ċ class ĠPostgres ql Table Repository ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġjdbc Operations : ĠNamed Parameter Jdbc Operations , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhostname : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdatabase : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġschema Name : ĠString Ċ ) Ġ: ĠTable Repository Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ TABLE _ NAME Ġ= Ġ" table _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ TABLE _ COMMENT Ġ= Ġ" table _ comment " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ TABLE _ FQ N Ġ= Ġ" table _ fq n " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ TABLE _ ROWS Ġ= Ġ" table _ rows " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ NAME Ġ= Ġ" column _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ COMMENT Ġ= Ġ" column _ comment " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ FQ N Ġ= Ġ" column _ fq n " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ TYPE Ġ= Ġ" column _ type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ DEFAULT Ġ= Ġ" column _ default " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ COLUMN _ NULL ABLE Ġ= Ġ" column _ nullable " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ PARENT _ TABLE _ NAME Ġ= Ġ" parent _ table _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ PARENT _ COLUMN _ NAME Ġ= Ġ" parent _ column _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ CHILD _ TABLE _ NAME Ġ= Ġ" child _ table _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ CHILD _ COLUMN _ NAME Ġ= Ġ" child _ column _ name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠOUTPUT _ REFERENCE _ COUNT Ġ= Ġ" reference _ count " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINPUT _ SCHEMA _ NAME Ġ= Ġ" schema Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINPUT _ TABLE _ NAME Ġ= Ġ" tableName " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Names ( var arg Ġq : ĠString ): ĠList < Found Names > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠWITH ĊĠĠĠĠĠĠĠ Ġq ry _ tbl _ col ĠAS Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . rel id ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġobj _ oid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ att . att num ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġobj _ sub id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema ĠĠĠĠĠĠĠ ĠAS Ġschema _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ fq n , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ dsc _ tbl . description ĠĠĠĠ ĠAS Ġtable _ comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . n _ live _ tup ĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ rows , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ name ĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ fq n , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ dsc _ col . description ĠĠĠĠ ĠAS Ġcolumn _ comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ default ĠĠĠĠĠ ĠAS Ġcolumn _ default , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . is _ nullable ĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . data _ type ĠĠĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . ordinal _ position ĠĠĠ ĠAS Ġordinal _ position ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . tables Ġals _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . columns Ġals _ col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ tbl . table _ schema Ġ= Ġals _ col . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name ĠĠ Ġ= Ġals _ col . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ stat _ user _ tables Ġals _ st t ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ tbl . table _ schema Ġ= Ġals _ st t . sche man ame ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name ĠĠ Ġ= Ġals _ st t . rel name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ attribute Ġals _ att ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id ĠĠĠĠĠĠ Ġ= Ġals _ att . att rel id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ col . column _ name Ġ= Ġals _ att . att name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ description Ġals _ dsc _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id Ġ= Ġals _ dsc _ tbl . obj oid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ dsc _ tbl . objs ub id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ description Ġals _ dsc _ col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id Ġ Ġ= Ġals _ dsc _ col . obj oid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ att . att num Ġ= Ġals _ dsc _ col . objs ub id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ type Ġ= Ġ' BASE ĠTABLE ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ ĠORDER ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . rel id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . ordinal _ position ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġq ry _ f nd _ tbl ĠAS Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĠDISTINCT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . schema _ name ĠĠĠĠ ĠAS Ġschema _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name ĠĠĠĠĠ ĠAS Ġtable _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ fq n ĠĠĠĠĠĠ ĠAS Ġtable _ fq n ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Ġ${ ( 1 .. q . size ). map Ġ{ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name ĠĠĠĠĠ ĠLIKE ĠCONCAT ( CONCAT ('% ', Ġ: keyword _$ it ), Ġ'% ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR Ġ Ġq ry _ tbl _ col . table _ comment ĠĠ ĠLIKE ĠCONCAT ( CONCAT ('% ', Ġ: keyword _$ it ), Ġ'% ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR Ġ Ġq ry _ tbl _ col . column _ name ĠĠĠĠ ĠLIKE ĠCONCAT ( CONCAT ('% ', Ġ: keyword _$ it ), Ġ'% ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR Ġ Ġq ry _ tbl _ col . column _ comment Ġ ĠLIKE ĠCONCAT ( CONCAT ('% ', Ġ: keyword _$ it ), Ġ'% ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR Ġ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . schema _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= Ġ: keyword _$ it ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOR Ġ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . schema _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= Ġ: keyword _$ it ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Ġ}. join ToString ( separator Ġ= Ġ" ĠOR Ġ" )} Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name ĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ comment ĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ COMMENT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ fq n ĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ FQ N , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ name ĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ comment Ġ ĠAS Ġ$ OUTPUT _ COLUMN _ COMMENT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ fq n ĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ FQ N ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ f nd _ tbl ĊĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġq ry _ f nd _ tbl . schema _ name Ġ= Ġq ry _ tbl _ col . schema _ name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġq ry _ f nd _ tbl . table _ name Ġ= Ġq ry _ tbl _ col . table _ name ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. q . size ). map Ġ{ Ġ" keyword _$ it " Ġto Ġq [ it Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġ( INPUT _ SCHEMA _ NAME Ġto Ġschema Name )). toMap () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Comment Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ COMMENT ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable F qn Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ FQ N ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Comment Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ COMMENT ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn F qn Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ FQ N ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Name Ġ= ĠTable Physical Name ( tableName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogical Name Ġ= ĠLogical Name ( table Comment ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfully QualifiedName Ġ= ĠFull y QualifiedName ( table F qn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġto ĠColumn Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Name Ġ= ĠColumn Physical Name ( columnName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogical Name Ġ= ĠLogical Name ( column Comment ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfully QualifiedName Ġ= ĠFull y QualifiedName ( column F qn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. groupBy ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . first ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . second ĊĠĠĠĠĠĠĠ Ġ}). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFound Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Names Ġ= Ġit . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Names List Ġ= ĠColumn Names List (* it . value . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Table Names All (): ĠList < Table Names > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ FQ N , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġals _ dsc _ tbl . description ĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ COMMENT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . n _ live _ tup ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ ROWS ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . tables Ġals _ tbl ĊĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ stat _ user _ tables Ġals _ st t ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ tbl . table _ schema Ġ= Ġals _ st t . sche man ame ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name ĠĠ Ġ= Ġals _ st t . rel name ĊĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ description Ġals _ dsc _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id Ġ= Ġals _ dsc _ tbl . obj oid ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ dsc _ tbl . objs ub id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema ĠĠĠ Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ type ĠĠĠĠĠ Ġ= Ġ' BASE ĠTABLE ' ĊĠĠĠĠĠĠĠ ĠORDER ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name ĊĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTable Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Name Ġ= ĠTable Physical Name ( resultSet . getString ( OUTPUT _ TABLE _ NAME )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogical Name Ġ= ĠLogical Name ( resultSet . getString ( OUTPUT _ TABLE _ COMMENT ) Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfully QualifiedName Ġ= ĠFull y QualifiedName ( resultSet . getString ( OUTPUT _ TABLE _ FQ N )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Table ( name : ĠTable Physical Name ): ĠTable Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠTable Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf qn : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrows : ĠLong ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠColumn Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf qn : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnullable : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault : ĠString ? ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠRelation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName : ĠString ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠResult Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Item : ĠTable Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Item : ĠColumn Item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Item : ĠRelation Item ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Item : ĠRelation Item ? ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWITH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col ĠAS Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . rel id ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġobj _ oid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ att . att num ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġobj _ sub id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema ĠĠĠĠĠĠĠ ĠAS Ġschema _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ fq n , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ dsc _ tbl . description ĠĠĠĠ ĠAS Ġtable _ comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . n _ live _ tup ĠĠĠĠĠĠĠĠĠ ĠAS Ġtable _ rows , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ name ĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ fq n , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ dsc _ col . description ĠĠĠĠ ĠAS Ġcolumn _ comment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . column _ default ĠĠĠĠĠ ĠAS Ġcolumn _ default , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . is _ nullable ĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCASE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġals _ col . character _ maximum _ length ĠIS ĠNOT ĠNULL ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( als _ col . data _ type , Ġ' (', Ġals _ col . character _ maximum _ length , Ġ') ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġals _ col . data _ type Ġ= Ġ' numeric ' ĠTHEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( als _ col . data _ type , Ġ' (', Ġals _ col . numeric _ precision , Ġ', ', Ġals _ col . numeric _ scale , Ġ') ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠELSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . data _ type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġcolumn _ type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . ordinal _ position ĠĠĠ ĠAS Ġordinal _ position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . tables Ġals _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . columns Ġals _ col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ tbl . table _ schema Ġ= Ġals _ col . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name ĠĠ Ġ= Ġals _ col . table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ stat _ user _ tables Ġals _ st t ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ tbl . table _ schema Ġ= Ġals _ st t . sche man ame ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name ĠĠ Ġ= Ġals _ st t . rel name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ attribute Ġals _ att ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id ĠĠĠĠĠĠ Ġ= Ġals _ att . att rel id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ col . column _ name Ġ= Ġals _ att . att name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ description Ġals _ dsc _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id Ġ= Ġals _ dsc _ tbl . obj oid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ dsc _ tbl . objs ub id Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ description Ġals _ dsc _ col ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ st t . rel id Ġ Ġ= Ġals _ dsc _ col . obj oid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ att . att num Ġ= Ġals _ dsc _ col . objs ub id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ tbl . table _ type Ġ= Ġ' BASE ĠTABLE ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ tbl . table _ name Ġ= Ġ: $ INPUT _ TABLE _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠORDER ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ st t . rel id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ col . ordinal _ position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ rel ĠAS Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ schema ĠĠĠ ĠAS Ġschema _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ name ĠĠĠĠĠ ĠAS Ġchild _ table _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ key _ col _ us g . column _ name ĠAS Ġchild _ column _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ key _ col _ us g . column _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġchild _ column _ fq n , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ col _ us g . table _ name Ġ ĠAS Ġparent _ table _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ col _ us g . column _ name ĠAS Ġparent _ column _ name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONCAT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ schema , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ col _ us g . table _ name , Ġ'.', ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ col _ us g . column _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġparent _ column _ fq n ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . table _ constraints Ġals _ c ns _ tbl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . key _ column _ usage Ġals _ key _ col _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ c ns _ tbl . constraint _ name Ġ= Ġals _ key _ col _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ c ns _ tbl . table _ schema Ġ= Ġals _ key _ col _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . constraint _ column _ usage ĠAS Ġals _ c ns _ col _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġals _ c ns _ tbl . constraint _ name Ġ= Ġals _ c ns _ col _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ c ns _ tbl . table _ schema Ġ= Ġals _ c ns _ col _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ c ns _ tbl . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġals _ c ns _ tbl . constraint _ type Ġ= Ġ' FOREIGN ĠKEY ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĠDISTINCT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ fq n ĠĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ FQ N , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ name ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ comment ĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ COMMENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . table _ rows ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ ROWS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ fq n ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ FQ N , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ name ĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ type ĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ nullable ĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ NULL ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ default ĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . column _ comment ĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ COLUMN _ COMMENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ rel _ cl d . parent _ table _ name ĠĠ ĠAS Ġ$ OUTPUT _ PARENT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ rel _ cl d . parent _ column _ name Ġ ĠAS Ġ$ OUTPUT _ PARENT _ COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ rel _ prt . child _ table _ name ĠĠĠ ĠAS Ġ$ OUTPUT _ CHILD _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġals _ rel _ prt . child _ column _ name ĠĠ ĠAS Ġ$ OUTPUT _ CHILD _ COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col . ordinal _ position ĠĠĠ ĠAS Ġordinal _ position ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ tbl _ col ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ rel ĠAS Ġals _ rel _ cl d ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġq ry _ tbl _ col . schema _ name Ġ= Ġals _ rel _ cl d . schema _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġq ry _ tbl _ col . table _ name Ġ Ġ= Ġals _ rel _ cl d . child _ table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġq ry _ tbl _ col . column _ name Ġ= Ġals _ rel _ cl d . child _ column _ name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLEFT ĠOUT ER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq ry _ rel ĠAS Ġals _ rel _ prt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġq ry _ tbl _ col . schema _ name Ġ= Ġals _ rel _ prt . schema _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġq ry _ tbl _ col . table _ name Ġ= Ġals _ rel _ prt . parent _ table _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġq ry _ tbl _ col . column _ name Ġ= Ġals _ rel _ prt . parent _ column _ name ĊĠĠĠĠĠĠĠĠĠĠĠ ĠORDER ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġordinal _ position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ TABLE _ NAME Ġto Ġname . value ĊĠĠĠĠĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Comment Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ COMMENT ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable F qn Ġ= ĠresultSet . getString ( OUTPUT _ TABLE _ FQ N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Rows Ġ= ĠresultSet . getLong ( OUTPUT _ TABLE _ ROWS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Comment Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ COMMENT ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn F qn Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ FQ N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Type Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ TYPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Nullable Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ NULL ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Default Ġ= ĠresultSet . getString ( OUTPUT _ COLUMN _ DEFAULT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent TableName Ġ= ĠresultSet . getString ( OUTPUT _ PARENT _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent ColumnName Ġ= ĠresultSet . getString ( OUTPUT _ PARENT _ COLUMN _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild TableName Ġ= ĠresultSet . getString ( OUTPUT _ CHILD _ TABLE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild ColumnName Ġ= ĠresultSet . getString ( OUTPUT _ CHILD _ COLUMN _ NAME ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Item Ġ= ĠTable Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠtableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġtable Comment Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf qn Ġ= Ġtable F qn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows Ġ= Ġtable Rows ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Item Ġ= ĠColumn Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠcolumnName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġcolumn Comment Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf qn Ġ= Ġcolumn F qn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġcolumn Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġcolumn Nullable Ġ!= Ġ" NO ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġcolumn Default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Item Ġ= Ġparent ColumnName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= Ġparent TableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Ġ= Ġparent ColumnName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Item Ġ= Ġchild ColumnName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelation Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= Ġchild TableName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName Ġ= Ġchild ColumnName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. groupBy ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . table Item ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( it . column Item , Ġit . parent Item , Ġit . child Item ) ĊĠĠĠĠĠĠĠ Ġ}). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames Ġ= ĠTable Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Name Ġ= ĠTable Physical Name ( it . key . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogical Name Ġ= ĠLogical Name ( it . key . comment ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfully QualifiedName Ġ= ĠFull y QualifiedName ( it . key . fq n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Count Ġ= Ġit . key . rows , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns Ġ= Ġit . value . groupBy ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second Ġto Ġit . third ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames Ġ= ĠColumn Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphysical Name Ġ= ĠColumn Physical Name ( it . key . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogical Name Ġ= ĠLogical Name ( it . key . comment ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfully QualifiedName Ġ= ĠFull y QualifiedName ( it . key . fq n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġit . key . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnullable Ġ= Ġit . key . nullable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġit . key . default , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġit . value . map NotNull Ġ{ Ġit . first Ġ}. first OrNull ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Physical Name Ġ= ĠTable Physical Name ( it . tableName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Physical Name Ġ= ĠColumn Physical Name ( it . columnName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ= Ġit . value . map NotNull Ġ{ Ġit . second Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Physical Name Ġ= ĠTable Physical Name ( it . tableName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Physical Name Ġ= ĠColumn Physical Name ( it . columnName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Column Count Map (): ĠMap < Table Physical Name , ĠInt > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtbl . table _ name ĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ( col . column _ name ) Ġ ĠAS Ġ$ OUTPUT _ REFERENCE _ COUNT ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . tables Ġtbl ĊĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . columns Ġcol ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl . table _ schema Ġ Ġ= Ġcol . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl . table _ name ĠĠĠ Ġ= Ġcol . table _ name ĊĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtbl . table _ schema Ġ Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠ ĠAND Ġtbl . table _ type ĠĠĠ Ġ= Ġ' BASE ĠTABLE ' ĊĠĠĠĠĠĠĠ ĠGROUP ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtbl . table _ name ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name ĊĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTable Physical Name ( resultSet . getString ( OUTPUT _ TABLE _ NAME )) Ġto ĠresultSet . getInt ( OUTPUT _ REFERENCE _ COUNT ) ĊĠĠĠ Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġfind RowCount Map (): ĠMap < Table Physical Name , ĠLong > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtbl . table _ name Ġ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat . n _ live _ tup ĠAS Ġ$ OUTPUT _ TABLE _ ROWS ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . tables Ġtbl ĊĠĠĠĠĠĠĠ ĠINNER ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpg _ stat _ user _ tables Ġstat ĊĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl . table _ schema Ġ= Ġstat . sche man ame ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl . table _ name Ġ= Ġstat . rel name ĊĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtbl . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠ ĠAND Ġtbl . table _ type Ġ= Ġ' BASE ĠTABLE ' ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name ĊĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTable Physical Name ( resultSet . getString ( OUTPUT _ TABLE _ NAME )) Ġto ĠresultSet . getLong ( OUTPUT _ TABLE _ ROWS ) ĊĠĠĠ Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Referenced Count From Children Map (): ĠMap < Table Physical Name , ĠInt > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent _ table ĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ( child _ column ) ĠAS Ġ$ OUTPUT _ REFERENCE _ COUNT ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtbl _ cn str . table _ name ĠĠĠĠĠĠĠ ĠAS Ġchild _ table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol _ us g . column _ name ĠĠĠĠĠĠĠĠ ĠAS Ġchild _ column , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcn str _ col _ us g . table _ name ĠĠĠ ĠAS Ġparent _ table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcn str _ col _ us g . column _ name ĠĠ ĠAS Ġparent _ column ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . table _ constraints Ġtbl _ cn str ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . key _ column _ usage Ġcol _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl _ cn str . constraint _ name Ġ= Ġcol _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . table _ schema Ġ= Ġcol _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . constraint _ column _ usage ĠAS Ġcn str _ col _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl _ cn str . constraint _ name Ġ= Ġcn str _ col _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . table _ schema Ġ= Ġcn str _ col _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtbl _ cn str . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . constraint _ type Ġ= Ġ' FOREIGN ĠKEY ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġparent _ child _ cn str ĊĠĠĠĠĠĠĠ ĠGROUP ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent _ table ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name ĊĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTable Physical Name ( resultSet . getString ( OUTPUT _ TABLE _ NAME )) Ġto ĠresultSet . getInt ( OUTPUT _ REFERENCE _ COUNT ) ĊĠĠĠ Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Refer encing Count To Parent Map (): ĠMap < Table Physical Name , ĠInt > Ġ= Ġjdbc Operations . query (""" ĊĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild _ table ĠĠĠĠĠĠĠĠĠĠĠĠ ĠAS Ġ$ OUTPUT _ TABLE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ( parent _ column ) ĠĠĠ ĠAS Ġ$ OUTPUT _ REFERENCE _ COUNT ĊĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtbl _ cn str . table _ name ĠĠĠĠĠĠĠ ĠAS Ġchild _ table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol _ us g . column _ name ĠĠĠĠĠĠĠĠ ĠAS Ġchild _ column , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcn str _ col _ us g . table _ name ĠĠĠ ĠAS Ġparent _ table , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcn str _ col _ us g . column _ name ĠĠ ĠAS Ġparent _ column ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . table _ constraints Ġtbl _ cn str ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . key _ column _ usage Ġcol _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl _ cn str . constraint _ name Ġ= Ġcol _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . table _ schema Ġ= Ġcol _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJOIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinformation _ schema . constraint _ column _ usage ĠAS Ġcn str _ col _ us g ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON Ġ Ġtbl _ cn str . constraint _ name Ġ= Ġcn str _ col _ us g . constraint _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . table _ schema Ġ= Ġcn str _ col _ us g . table _ schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtbl _ cn str . table _ schema Ġ= Ġ: $ INPUT _ SCHEMA _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġtbl _ cn str . constraint _ type Ġ= Ġ' FOREIGN ĠKEY ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġparent _ child _ cn str ĊĠĠĠĠĠĠĠ ĠGROUP ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild _ table ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINPUT _ SCHEMA _ NAME Ġto Ġschema Name ĊĠĠĠ Ġ)) Ġ{ ĠresultSet , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTable Physical Name ( resultSet . getString ( OUTPUT _ TABLE _ NAME )) Ġto ĠresultSet . getInt ( OUTPUT _ REFERENCE _ COUNT ) ĊĠĠĠ Ġ}. filter Ġ{ Ġit . second Ġ> Ġ 0 Ġ}. toMap () ĊĊĠĠĠ Ġoverride Ġfun Ġfind Statement ByName ( name : ĠTable Physical Name ): ĠStatement Ġ= ĠStatement (""" ĊĠĠĠĠĠĠĠ ĠSorry . ĊĠĠĠĠĠĠĠ ĠD DL Ġdump Ġdirect Ġdisplay Ġfunction Ġis Ġnot Ġsupported . ĊĠĠĠĠĠĠĠ ĠPlease Ġtry Ġthe Ġfollowing Ġcommand . ĊĊĠĠĠĠĠĠĠ Ġpg _ dump Ġ- U Ġ'$ username ' Ġ- h Ġ'$ hostname ' Ġ'$ database ' Ġ- t Ġ'${ name . value }' Ġ- s ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ) Ċ } Ċ