/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġkotlin sql . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġlic enced Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe Ġlicense Ġwith Ġthe Ġsource Ġdistribution . Ċ Ġ* ĠAlternatively , Ġyou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . github . pd v rie ze . kotlin sql . d ml . impl Ċ Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . Column Ref Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . Table Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . columns . PreparedStatement Helper Ċ import Ġio . github . pd v rie ze . kotlin sql . d ml . Insert Ċ import Ġio . github . pd v rie ze . kotlin sql . d ml . Insert Values Ċ Ċ abstract Ġclass Ġ_ Base Insert ( val Ġtable : ĠTable , Ġprivate Ġval Ġupdate : ĠBoolean , Ġvar arg Ġval Ġcolumns : ĠColumn Ref < *, Ġ*, Ġ* >) Ġ: ĊĠĠĠ ĠInsert Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Table Prefix Map (): ĠMap < String , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġbatch : ĠMutable List <_ Base Insert Values > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun Ġto SQL () Ġ= ĊĠĠĠĠĠĠĠ Ġto SQL ( createTable Prefix Map ()) ĊĊĠĠĠ Ġoverride Ġfun Ġto SQL ( prefix Map : ĠMap < String , ĠString >? ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . join To ( this , Ġ", Ġ", Ġ" INSERT ĠINTO Ġ${ table . name ( prefix Map )} Ġ( ", Ġ") ") Ġ{ Ġcol Ġ-> Ġcol . name ( prefix Map ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . join To ( this , Ġ", Ġ", Ġ" INSERT ĠINTO Ġ${ table . name ( prefix Map )} Ġ( ", Ġ") ") Ġ{ Ġcol Ġ-> Ġcol . name ( prefix Map ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. columns . size ). join To ( this , Ġprefix Ġ= Ġ" ĠVALUES Ġ( ", Ġpostfix Ġ= Ġ") ") Ġ{ Ġ" ?" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprimary Key Ġ= Ġtable ._ primaryKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Columns Ġ= Ġcolumns . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġprimary Key ?. let Ġ{ Ġpk Ġ-> Ġit Ġ! in Ġpk Ġ} Ġ?: Ġtrue Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Columns . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" An Ġinsert Ġthat Ġonly Ġto uches Ġthe Ġprimary Ġkey Ġcannot Ġbe Ġan Ġupdate ."); Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠON ĠD UP LIC ATE ĠKEY ĠUPDATE Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Columns . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name ( prefix Map ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join To ( this ) Ġ{ Ġ"$ it Ġ= ĠVALUES ($ it )" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġinner Ġclass Ġ_ Base Insert Values ( private Ġvar arg Ġval Ġvalues : ĠAny ?): ĠInsert Values Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġset Params ( statement Helper : ĠPreparedStatement Helper , Ġfirst : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcolumns . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns [ i ]. type . cast Set Param ( statement Helper , Ġfirst Ġ+ Ġi , Ġvalues [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfirst Ġ+ Ġcolumns . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġvalues . join ToString ( prefix Ġ= Ġ"( Ġ", Ġpostfix Ġ= Ġ" Ġ) ", Ġtransform Ġ= ĠAny ? :: toString ) ĊĠĠĠ Ġ} Ċ }