package Ġd acr . model Ċ Ċ import Ġd acr . ind ata . Col Attribute Ċ Ċ /** Ċ Ġ* ĠA Ġmodel Ġclass Ġrepresenting Ġaggreg ates Ġof ĠGr ains . Ċ Ġ* Ċ Ġ* ĠGet Ġvalues Ġgenerated Ġby ĠGr ain Ġin Ġlist Ġformat . Ċ Ġ* ĠGenerate Ġone Ġrow Ġat Ġa Ġtime . Ċ Ġ*/ Ċ class ĠSphere ( col List : ĠList < Col Attribute >) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġgr ains : ĠMutable List < IG rain > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠMap Ġof ĠCount Ġof ĠColumns Ġto Ġmake ĠPK Ġjud gment Ġand ĠPrimary Key . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġfollowing Ġcase Ġof ĠPK Ġjudge ment ĊĠĠĠĠ Ġ* Ġ 1 . ĠPK Ġspecified Ġcolumn Ġis Ġ" Variable " ï¼Ī ignore Ġwhen Ġ" Fix ing " ï¼ī ĊĠĠĠĠ Ġ* Ġ 2 . ĠPK Ġspecified Ġcolumn Ġdoes Ġnot Ġcontain Ġany Ġ" auto Increment ". ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWhen Ġ- 1 Ġis Ġset Ġas Ġthe Ġcount , Ġcounting Ġis Ġnot Ġperformed Ġthere after . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpk Map Ġ= Ġmutable Map Of < String , ĠBoolean >() ĊĠĠĠ Ġprivate Ġvar Ġjudge PK Cnt Ġ= Ġ 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġgr ain : ĠI Gr ain ĊĠĠĠĠĠĠĠ Ġfor ( column Ġin Ġcol List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgr ain Ġ= Ġwhen Ġ( column . dataType . toUpperCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ CHAR ĠĠĠĠĠ Ġ-> ĠGr ain Char ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ VARCHAR ĠĠ Ġ-> ĠGr ain V arch ar ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ VARCHAR 2 Ġ Ġ-> ĠGr ain V arch ar ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ INT ĠĠĠĠĠĠ Ġ-> ĠGr ain Integer ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ INTEGER ĠĠ Ġ-> ĠGr ain Integer ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ DATE ĠĠĠĠĠ Ġ-> ĠGr ain Date ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ DATETIME Ġ Ġ-> ĠGr ain Date ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCol Attribute . DATA _ TYPE _ TIMESTAMP Ġ-> ĠGr ain Timestamp ( column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ Ġthrow ĠIllegalStateException (" unsupported ĠDataType . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠcolumnName =" Ġ+ Ġcolumn . name Ġ+ Ġ" ĠdataType =" Ġ+ Ġcolumn . dataType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset PK Information ( gr ain ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgr ains . add ( gr ain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset PK Information ( gr ain : ĠI Gr ain ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! gr ain . is PrimaryKey () Ġ|| Ġgr ain . is Fix ing Value () Ġ|| Ġjudge PK Cnt Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( gr ain . is Auto Increment ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjudge PK Cnt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjudge PK Cnt ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate (): ĠList < String > Ġ= Ġif ( judge PK Cnt Ġ> Ġ 0 ) Ġcreate With PK () Ġelse Ġgr ains . map ( IG rain :: create ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate With PK (): ĠList < String > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġduplicate Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġshould Ġfl uct uate Ġaccording Ġto Ġgeneration Ġnumber ĊĠĠĠĠĠĠĠ Ġval Ġmax Duplicate Count Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ ĠPK is Duplicate @ Ġwhile ( true ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( duplicate Count Ġ> Ġmax Duplicate Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġnumber Ġof Ġgeneration Ġattempts Ġhas Ġreached Ġthe Ġupper Ġlimit ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stopped Ġbecause Ġthere Ġwas Ġa Ġpossibility Ġof Ġinfinite Ġloop .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpk Cnt Ġ= Ġjudge PK Cnt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpk Concat Str Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( gr ain Ġin Ġgr ains ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġgr ain . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( gr ain . is PrimaryKey () Ġ&& Ġ! gr ain . is Fix ing Value ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpk Concat Str Ġ+= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpk Cnt -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pk Cnt Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pk Map . containsKey ( pk Concat Str )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduplicate Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ PK is Duplicate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpk Map . put ( pk Concat Str , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . add ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues ĊĠĠĠ Ġ} Ċ }