package Ġcom . db flow 5 . processor . definition . column Ċ Ċ import Ġcom . db flow 5 . annotation . Col late Ċ import Ġcom . db flow 5 . annotation . Column Ċ import Ġcom . db flow 5 . annotation . Conflict Action Ċ import Ġcom . db flow 5 . annotation . INDEX _ GENERIC Ċ import Ġcom . db flow 5 . annotation . Index Ċ import Ġcom . db flow 5 . annotation . NotNull Ċ import Ġcom . db flow 5 . annotation . PrimaryKey Ċ import Ġcom . db flow 5 . annotation . Unique Ċ import Ġcom . db flow 5 . processor . ClassNames Ċ import Ġcom . db flow 5 . processor . Processor Manager Ċ import Ġcom . db flow 5 . processor . definition . Base Definition Ċ import Ġcom . db flow 5 . processor . definition . Entity Definition Ċ import Ġcom . db flow 5 . processor . definition . Table Definition Ċ import Ġcom . db flow 5 . processor . definition . behavior . Complex Column Behavior Ċ import Ġcom . db flow 5 . processor . definition . behavior . Cursor Handling Behavior Ċ import Ġcom . db flow 5 . processor . utils . annotation Ċ import Ġcom . db flow 5 . processor . utils . extract Type Mirror From Annotation Ċ import Ġcom . db flow 5 . processor . utils . from Type Mirror Ċ import Ġcom . db flow 5 . processor . utils . isNull OrEmpty Ċ import Ġcom . db flow 5 . processor . utils . to ClassName Ċ import Ġcom . db flow 5 . processor . utils . to Type Element Ċ import Ġcom . db flow 5 . quote Ċ import Ġcom . g ros ner . k po et . code Ċ import Ġcom . squareup . jav ap o et . ClassName Ċ import Ġcom . squareup . jav ap o et . Code Block Ċ import Ġcom . squareup . jav ap o et . Field Spec Ċ import Ġcom . squareup . jav ap o et . Method Spec Ċ import Ġcom . squareup . jav ap o et . Name Allocator Ċ import Ġcom . squareup . jav ap o et . Parameterized TypeName Ċ import Ġcom . squareup . jav ap o et . TypeName Ċ import Ġcom . squareup . jav ap o et . Type Spec Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . lang . model . element . Element Ċ import Ġjavax . lang . model . element . Modifier Ċ import Ġjavax . lang . model . element . Type Element Ċ Ċ open Ġclass ĠColumn Definition Ġ@ Jvm Over loads Ċ constructor ( ĊĠĠĠ Ġprocessor Manager : ĠProcessor Manager , ĊĠĠĠ Ġelement : ĠElement , ĊĠĠĠ Ġval Ġentity Definition : ĠEntity Definition , ĊĠĠĠ Ġis Package Private : ĠBoolean , ĊĠĠĠ Ġval Ġcolumn : ĠColumn ? Ġ= Ġelement . annotation (), ĊĠĠĠ Ġprimary Key : ĠPrimary Key ? Ġ= Ġelement . annotation (), ĊĠĠĠ Ġnot Null Conflict : ĠConflict Action Ġ= ĠConflict Action . NONE Ċ ) Ġ: ĠBase Definition ( element , Ġprocessor Manager ) Ġ{ ĊĊĠĠĠ Ġsealed Ġclass ĠType Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠNormal Ġ: ĠType () ĊĠĠĠĠĠĠĠ Ġobject ĠPrimary Ġ: ĠType () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠPrimary Auto Increment ( val Ġquick Check : ĠBoolean ) Ġ: ĠType () ĊĠĠĠĠĠĠĠ Ġobject ĠRow Id Ġ: ĠType () ĊĊĠĠĠĠĠĠĠ Ġval Ġis Primary Field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġis ĠPrimary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġthis Ġis ĠPrimary Auto Increment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġthis Ġis ĠColumn Definition . Type . Row Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠQU OTE _ PATTERN Ġ= ĠPattern . compile ("\" .* \" ") ĊĊĠĠĠ Ġvar ĠcolumnName : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġproperty FieldName : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġvar Ġtype : ĠType Ġ= ĠType . Normal ĊĊĠĠĠ Ġ// var Ġis Quick Check PrimaryKey Auto Increment : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġlength Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġnot Null Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis NotNull Type Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Nullable Type Ġ= Ġtrue ĊĠĠĠ Ġvar Ġon Null Conflict : ĠConflict Action ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Unique Conflict : ĠConflict Action ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġunique Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġunique Groups : ĠMutable List < Int > Ġ= Ġarray ListOf () ĊĠĠĠ Ġvar Ġindex Groups : ĠMutable List < Int > Ġ= Ġarray ListOf () ĊĊĠĠĠ Ġvar Ġcol late Ġ= ĠCol late . NONE ĊĠĠĠ Ġvar ĠdefaultValue : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġcolumn Accessor : ĠColumn Accessor ĊĊĠĠĠ Ġval Ġcomplex Column Behavior : ĠComplex Column Behavior ĊĊĠĠĠ Ġvar Ġcombin er : ĠCombin er ĊĊĠĠĠ Ġopen Ġval Ġupdate Statement Block : ĠCode Block ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCode Block . of ("${ columnName . quote ()} =? ") ĊĊĠĠĠ Ġopen Ġval Ġinsert Statement ColumnName : ĠCode Block ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCode Block . of ("\ $ L ", ĠcolumnName . quote ()) ĊĊĠĠĠ Ġopen Ġval Ġinsert Statement Values String : ĠCode Block ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( type Ġis ĠType . Primary Auto Increment Ġ&& Ġis NotNull Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode Block . of (" null if ( ?, Ġ 0 )") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode Block . of (" ?") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġval Ġtype Converter Element Names : ĠList < TypeName ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġarray ListOf ( element TypeName ) ĊĊĠĠĠ Ġopen Ġval Ġprimary KeyName : ĠString ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠcolumnName . quote () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . annotation < NotNull >() ?. let Ġ{ Ġnot Null Anno Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Null Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Null Conflict Ġ= Ġnot Null Anno . on Null Conflict ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( on Null Conflict Ġ== ĠConflict Action . NONE Ġ&& Ġnot Null Conflict Ġ!= ĠConflict Action . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Null Conflict Ġ= Ġnot Null Conflict ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Null Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( element TypeName ?. is Primitive Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Type Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NotNull Type Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġspecified , Ġusually Ġfrom ĠKotlin Ġtargets , Ġwe Ġwill Ġnot Ġset Ġnull Ġon Ġthe Ġfield . ĊĠĠĠĠĠĠĠ Ġelement . annotation < org . jetbrains . annotations . NotNull >() ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NotNull Type Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Type Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġandroid Ġsupport Ġannotation ĊĠĠĠĠĠĠĠ Ġif Ġ( element . annotation Mir rors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġit . annotation Type . to Type Element (). to ClassName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ any ĠclassName Ġ== ĠClass Names . NON _ NULL Ġ|| ĠclassName Ġ== ĠClass Names . NON _ NULL _ X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis NotNull Type Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Type Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcolumn ?. let Ġ{ Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . columnName Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn . name Ġ== Ġ"" Ġ-> Ġelement . simple Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcolumn . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ= Ġcolumn . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol late Ġ= Ġcolumn . collate ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġcolumn . defaultValue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column . defaultValue . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( column Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . columnName Ġ= Ġelement . simple Name . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġis String Ġ= Ġ( element TypeName Ġ== ĠClass Name . get ( String :: class . java )) ĊĠĠĠĠĠĠĠ Ġif Ġ( defaultValue Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġis String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! QUOTE _ PATTERN . matcher ( defaultValue ). find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ"\" $ defaultValue \"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isNotNull Type Ġ&& ĠdefaultValue Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġis String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ"\" \"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġname Allocator Ġ= ĠName Allocator () ĊĠĠĠĠĠĠĠ Ġproperty FieldName Ġ= Ġname Allocator . new Name ( this . columnName ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Package Private ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Accessor Ġ= ĠPackage Private Scope Column Accessor ( element Name , ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Name . get ( element . enc lo sing Element Ġas ĠType Element ). simple Name ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Private Scope Column Accessor . put Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( column Accessor Ġas ĠPackage Private Scope Column Accessor ). helper ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcolumnName ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Private Ġ= Ġelement . modifiers . contains ( Modifier . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Accessor Ġ= Ġif Ġ( is Private ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Boolean Ġ= Ġelement TypeName ?. box () Ġ== ĠType Name . BOOLEAN . box () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuse Is Ġ= Ġis Boolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġentity Definition Ġis ĠTable Definition Ġ&& Ġentity Definition . use Is For Private B ooleans ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate Scope Column Accessor ( element Name , Ġobject Ġ: ĠGetter Setter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġgetter Name : ĠString Ġ= Ġcolumn ?. getter Name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsetter Name : ĠString Ġ= Ġcolumn ?. setter Name Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġuse Is For Private B ooleans Ġ= Ġuse Is ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVis ible Scope Column Accessor ( element Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( primaryKey Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key . row ID Ġ-> ĠType . Row Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key . auto increment Ġ-> ĠType . Primary Auto Increment ( quick Check Ġ= Ġprimary Key . quick Check Auto Increment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠType . Primary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelement . annotation < Unique >() ?. let Ġ{ Ġunique Column Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunique Ġ= Ġunique Column . unique ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Unique Conflict Ġ= Ġunique Column . on Unique Conflict ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunique Column . unique Groups . forEach Ġ{ Ġunique Groups . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelement . annotation < Index >() ?. let Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġempty Ġindex , Ġwe Ġassume Ġgeneric ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index . index Groups . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Groups . add ( INDEX _ GENERIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex . index Groups . forEach Ġ{ Ġindex Groups . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Mirror Ġ= Ġcolumn ?. extract Type Mirror From Annotation Ġ{ Ġit . type Converter Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtype Converter ClassName Ġ= Ġtype Mirror ?. let Ġ{ Ġfrom Type Mirror ( type Mirror , Ġmanager ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcomplex Column Behavior Ġ= ĠComplex Column Behavior ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn ClassName Ġ= Ġelement TypeName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Definition Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreferenced Column Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreferenced Column Has Custom Converter Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter ClassName Ġ= Ġtype Converter ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Mirror Ġ= Ġtype Mirror , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager Ġ= Ġmanager ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcombin er Ġ= ĠCombin er ( column Accessor , Ġelement TypeName !! , Ġcomplex Column Behavior . wrapper Accessor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplex Column Behavior . wrapper TypeName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomplex Column Behavior . sub Wrapper Accessor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Def Ġ= Ġentity Definition ĊĠĠĠĠĠĠĠ Ġvar ĠtableName Ġ= Ġtable Def . element Name ĊĠĠĠĠĠĠĠ Ġif Ġ( table Def Ġis ĠTable Definition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= Ġtable Def . associ ational Behavior . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ entity Definition . database Definition . element Name }. $ tableName .${ columnName . quote () }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġadd Property Definition ( type Builder : ĠType Spec . Builder , Ġtable Class : ĠType Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement TypeName ?. let Ġ{ Ġelement TypeName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Non Primitive Type Converter Ġ= Ġ! complex Column Behavior . wrapper Accessor . is Primitive Target () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcomplex Column Behavior . wrapper Accessor Ġis ĠType Converter Scope Column Accessor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Param : ĠType Name Ġ= Ġif Ġ( is Non Primitive Type Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( ClassNames . TYPE _ CONVERT ED _ PROPERTY , Ġcomplex Column Behavior . wrapper TypeName , Ġelement TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! complex Column Behavior . wrapper Accessor . is Primitive Target ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( ClassNames . WRAPPER _ PROPERTY , Ġcomplex Column Behavior . wrapper TypeName , Ġelement TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( ClassNames . PROPERTY , Ġelement TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Builder Ġ= ĠField Spec . builder ( prop Param , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty FieldName , ĠModifier . PUBLIC , ĠModifier . STATIC , ĠModifier . FINAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Non Primitive Type Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Block Ġ= ĠCode Block . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block . add (" new Ġ\$ T (\ $ T . class , Ġ\$ S , Ġtrue ,", Ġprop Param , Ġtable Class , ĠcolumnName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block . add (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ġ${ "$ "} T () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġ${ "$ "} T ĠgetType Converter ( Class <?> Ġmodel Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ "$ "} T Ġadapter Ġ= Ġ(${ "$ "} T ) Ġ${ "$ "} T . get Retrie val Adapter ( model Class ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadapter .${ "$ "} L ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Names . TYPE _ CONVER TER _ GET TER , ĠClass Names . TYPE _ CONVER TER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity Definition . output ClassName , Ġentity Definition . output ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Names . FLOW _ MANAGER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( complex Column Behavior . wrapper Accessor Ġas ĠType Converter Scope Column Accessor ). type Converter FieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Builder . initializer ( code Block . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Builder . initializer (" new Ġ\$ T (\ $ T . class , Ġ\$ S )", Ġprop Param , Ġtable Class , ĠcolumnName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠType . Primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Builder . add Javadoc (" Primary ĠKey ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġis ĠType . Primary Auto Increment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Builder . add Javadoc (" Primary ĠKey ĠAuto Increment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Builder . addField ( field Builder . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġadd Property Case ( method Builder : ĠMethod Spec . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Builder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Control Flow (" case Ġ\$ S : Ġ", ĠcolumnName . quote ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Statement (" return Ġ\$ L ", Ġproperty FieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Control Flow () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġadd ColumnName ( code Builder : ĠCode Block . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Builder . add ( property FieldName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġval Ġcontent Values Statement : ĠCode Block ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĠCode Block . builder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent Values Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode . add Code ( columnName , Ġget DefaultValue Block (), Ġ 0 , Ġmodel Block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcode . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġappend Index Initializer ( initializer : ĠCode Block . Builder , Ġindex : ĠAtomicInteger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index . get () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer . add (", Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitializer . add ( columnName ) ĊĠĠĠĠĠĠĠ Ġindex . increment AndGet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget SQLite Statement Method ( index : ĠAtomicInteger , Ġdefine Property : ĠBoolean Ġ= Ġtrue ) Ġ= Ġcode Ġ{ ĊĠĠĠĠĠĠĠ ĠSql ite Statement Access Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Code ("", Ġget DefaultValue Block (), Ġindex . get (), Ġmodel Block , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefine Property ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Load From Cursor Method ( end Non Primitive If : ĠBoolean , Ġindex : ĠAtomicInteger , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Allocator : ĠName Allocator ) Ġ= Ġcode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( ordered Cursor Lookup , Ġassign Default Values From Cursor ) Ġ= Ġentity Definition . cursor Handling Behavior ĊĠĠĠĠĠĠĠ Ġvar Ġassign DefaultValue Ġ= Ġassign Default Values From Cursor ĊĠĠĠĠĠĠĠ Ġval ĠdefaultValue Block Ġ= Ġget DefaultValue Block () ĊĠĠĠĠĠĠĠ Ġif Ġ( isNotNull Type Ġ&& ĠCode Block . of (" null ") Ġ== ĠdefaultValue Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassign DefaultValue Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLoad From Cursor Access Combin er ( combin er , ĠdefaultValue Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Allocator , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCursor Handling Behavior ( ordered Cursor Lookup , Ġassign DefaultValue )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Code ( columnName , Ġget DefaultValue Block (), Ġindex . get (), Ġmodel Block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġonly Ġused Ġif Ġ[. is PrimaryKey Auto Increment ] Ġis Ġtrue . ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġstatement Ġto Ġuse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġupdate Auto Increment Method ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Auto Increment Access Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Code ( columnName , Ġget DefaultValue Block (), Ġ 0 , Ġmodel Block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Column Access String ( index : ĠInt ) Ġ= Ġcode Ġ{ ĊĠĠĠĠĠĠĠ ĠC aching Id Access Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Code ( columnName , Ġget DefaultValue Block (), Ġindex , Ġmodel Block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Simple Access String () Ġ= Ġcode Ġ{ ĊĠĠĠĠĠĠĠ ĠSimple Access Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Code ( columnName , Ġget DefaultValue Block (), Ġ 0 , Ġmodel Block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġquick Check PrimaryKey : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( type Ġas ? ĠType . Primary Auto Increment )?. quick Check Ġ?: Ġfalse ĊĊĠĠĠ Ġval Ġis Auto Row Id : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtype Ġis ĠType . Row Id Ġ|| Ġtype Ġis ĠType . Primary Auto Increment ĊĊĠĠĠ Ġfun Ġshould Write Ex istence (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Auto Row Id Ġ|| Ġquick Check PrimaryKey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġappend Ex istence Method ( code Builder : ĠCode Block . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEx istence Access Combin er ( combin er , Ġis Auto Row Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquick Check PrimaryKey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Definition . element ClassName !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Builder . add Code ( columnName , Ġget DefaultValue Block (), Ġ 0 , Ġmodel Block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġappend Property Comparison Access Statement ( code Builder : ĠCode Block . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ ĠPrimary Reference Access Combin er ( combin er ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Builder . add Code ( property FieldName , Ġget DefaultValue Block (), Ġ 0 , Ġmodel Block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġval Ġcreation Name : ĠCode Block ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Block Builder Ġ= ĠDefinition Utils . get Creation Statement ( element TypeName , Ġcomplex Column Behavior . wrapper TypeName , ĠcolumnName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠType . Primary Auto Increment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ĠPRIMARY ĠKEY Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity Definition Ġis ĠTable Definition Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! entity Definition . primaryKey Conflict Action Name . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ON ĠCON FLI CT Ġ\$ L Ġ", Ġentity Definition . primaryKey Conflict Action Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" AUTO INCREMENT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" (\ $ L )", Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( collate Ġ!= ĠCol late . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ĠCOLLATE Ġ\$ L ", Ġcol late ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( unique ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ĠUNIQUE ĠON ĠCON FLI CT Ġ\$ L ", Ġon Unique Conflict ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( notNull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ĠNOT ĠNULL ĠON ĠCON FLI CT Ġ\$ L ", Ġon Null Conflict ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcode Block Builder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget DefaultValue Block ( value : ĠString ?, Ġelement TypeName : ĠType Name ?): ĠCode Block Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠdefaultValue Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġif Ġ( defaultValue . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ" null " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( element TypeName Ġ!= Ġnull Ġ&& Ġelement TypeName . is Primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element TypeName Ġ== ĠType Name . BOOLEAN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ" false " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element TypeName Ġ== ĠType Name . BYTE Ġ|| Ġelement TypeName Ġ== ĠType Name . INT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġelement TypeName Ġ== ĠType Name . DOUBLE Ġ|| Ġelement TypeName Ġ== ĠType Name . FLOAT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġelement TypeName Ġ== ĠType Name . LONG Ġ|| Ġelement TypeName Ġ== ĠType Name . SHORT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ" ($ element TypeName ) Ġ 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element TypeName Ġ== ĠType Name . CHAR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġ"' \\ u 0 0 0 0 '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠCode Block . of ( defaultValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget DefaultValue Block () Ġ= Ġget DefaultValue Block ( defaultValue , Ġelement TypeName ) Ċ } Ċ