package Ġcom . db flow 5 . processor . definition . column Ċ Ċ import Ġcom . g ros ner . k po et . code Ċ 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 . data . Blob Ċ import Ġcom . db flow 5 . processor . Processor Manager Ċ import Ġcom . db flow 5 . processor . definition . Base Definition Ċ import Ġcom . db flow 5 . processor . definition . Base Table Definition Ċ import Ġcom . db flow 5 . processor . definition . Table Definition Ċ import Ġcom . db flow 5 . processor . definition . Type Converter Definition Ċ import Ġcom . db flow 5 . processor . utils . annotation Ċ import Ġcom . db flow 5 . processor . utils . from Type Mirror Ċ import Ġcom . db flow 5 . processor . utils . getType Element Ċ 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 . squareup . jav ap o et . Array TypeName Ċ 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 . Element Kind Ċ import Ġjavax . lang . model . element . Modifier Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . lang . model . type . Mir rored Type Exception Ċ import Ġjavax . lang . model . type . Type Mirror Ċ import Ġjavax . tools . Diagnostic Ċ Ċ open Ġclass ĠColumn Definition Ġ@ Jvm Over loads Ċ constructor ( processor Manager : ĠProcessor Manager , Ġelement : ĠElement , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbase Table Definition : ĠBase Table Definition , Ġis Package Private : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcolumn : ĠColumn ? Ġ= Ġelement . annotation (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key : ĠPrimary Key ? Ġ= Ġelement . annotation (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot Null Conflict : ĠConflict Action Ġ= ĠConflict Action . NONE ) ĊĠĠĠ Ġ: ĠBase Definition ( element , Ġprocessor Manager ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠQU OTE _ PATTERN Ġ= ĠPattern . compile ("\" .* \" ") ĊĊĠĠĠ Ġvar ĠcolumnName : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġproperty FieldName : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġvar Ġhas Type Converter : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis PrimaryKey : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis PrimaryKey Auto Increment : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġis Quick Check PrimaryKey Auto Increment : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Row Id : Ġ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 ĊĠĠĠ Ġvar Ġwrapper Accessor : ĠColumn Accessor ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġwrapper TypeName : ĠType Name ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠWrap s Ġfor Ġspecial Ġcases Ġsuch Ġas Ġfor Ġa ĠBlob Ġconverter Ġsince Ġwe Ġcannot Ġuse Ġconvention al Ġconverter ĊĠĠĠ Ġvar Ġsub Wrapper Accessor : ĠColumn Accessor ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġcombin er : ĠCombin er ĊĊĠĠĠ Ġvar Ġhas Custom Converter : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ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 Ġ( is PrimaryKey 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 ĊĠĠĠĠĠĠĠ Ġelement . annotation Mir rors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . annotation Type . to Type Element (). to ClassName () Ġ== Ġcom . db flow 5 . processor . ClassNames . NON _ NULL Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis NotNull Type Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Nullable Type Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcolumn ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . columnName Ġ= Ġif Ġ( it . name Ġ== Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . simple Name . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ= Ġit . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol late Ġ= Ġit . collate ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue Ġ= Ġit . defaultValue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . 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 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Table Definition . database Definition ?. class Separator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Private ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Boolean Ġ= Ġelement TypeName ?. box () Ġ== ĠType Name . BOOLEAN . box () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuse Is Ġ= Ġis Boolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġbase Table Definition Ġis ĠTable Definition Ġ&& Ġ( base Table Definition Ġas ĠTable Definition ). use Is For Private B ooleans ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Accessor Ġ= Ġ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 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Accessor Ġ= ĠVis ible Scope Column Accessor ( element Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( primaryKey Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key . row ID Ġ-> Ġis Row Id Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key . auto increment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis PrimaryKey Auto Increment Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Quick Check PrimaryKey Auto Increment Ġ= Ġprimary Key . quick Check Auto Increment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġis PrimaryKey Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġtype Converter ClassName : ĠClass Name ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtype Mirror : ĠType Mirror ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn ?. type Converter ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( m te : ĠMir rored Type Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Mirror Ġ= Ġm te . type Mirror ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter ClassName Ġ= Ġfrom Type Mirror ( type Mirror , Ġmanager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġhas Custom Converter Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġhandle Specified Type Converter ( type Converter ClassName , Ġtype Mirror ) ĊĠĠĠĠĠĠĠ Ġevaluate If Wr apping Ne cessary ( element , Ġprocessor Manager ) ĊĊĠĠĠĠĠĠĠ Ġcombin er Ġ= ĠCombin er ( column Accessor , Ġelement TypeName !! , Ġwrapper Accessor , Ġwrapper TypeName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Wrapper Accessor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Specified Type Converter ( type Converter ClassName : ĠClass Name ?, Ġtype Mirror : ĠType Mirror ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Converter ClassName Ġ!= Ġnull Ġ&& Ġtype Mirror Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter ClassName Ġ!= Ġcom . db flow 5 . processor . ClassNames . TYPE _ CONVER TER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluate Type Converter ( Type Converter Definition ( type Converter ClassName , Ġtype Mirror , Ġmanager ), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevaluate If Wr apping Ne cessary ( element : ĠElement , Ġprocessor Manager : ĠProcessor Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Custom Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Element Ġ= ĠgetType Element ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Element Ġ!= Ġnull Ġ&& Ġtype Element . kind Ġ== ĠElement Kind . ENUM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠEnum Column Accessor ( element TypeName !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= ĠClass Name . get ( String :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element TypeName Ġ== ĠClass Name . get ( Blob :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠBlob Column Accessor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= ĠArray TypeName . of ( TypeName . BYTE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element TypeName Ġis ĠParameter ized TypeName Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement TypeName Ġ== ĠArray TypeName . of ( TypeName . BYTE . un box ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing , Ġfor Ġnow . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element TypeName Ġis ĠArray TypeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor Manager . mess ager . print Message ( Diagnostic . Kind . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Columns Ġcannot Ġbe Ġof Ġarray Ġtype . ĠFound Ġ$ element TypeName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( element TypeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Name . BOOLEAN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠBoolean Column Accessor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= ĠType Name . BOOLEAN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Name . CHAR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠChar Column Accessor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= ĠType Name . CHAR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠType Name . BYTE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠByte Column Accessor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= ĠType Name . BYTE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġevaluate Type Converter ( element TypeName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessor Manager . getType Converter Definition ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevaluate Type Converter ( type Converter Definition : ĠType Converter Definition ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Custom : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAny Ġannotated Ġmembers , Ġotherwise Ġwe Ġwill Ġuse Ġthe Ġscanner Ġto Ġfind Ġother Ġones ĊĠĠĠĠĠĠĠ Ġtype Converter Definition ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . model TypeName Ġ!= Ġelement TypeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . log Error (" The Ġspecified Ġcustom ĠType Converter 's ĠModel ĠValue Ġ${ it . model TypeName }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom Ġ${ it . className } Ġmust Ġmatch Ġthe Ġtype Ġof Ġthe Ġcolumn Ġ$ element TypeName . Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Type Converter Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Custom Converter Ġ= Ġis Custom ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġif Ġ( has Custom Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Table Definition . addColumn For Custom Type Converter ( this , Ġit . className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Table Definition . addColumn ForType Converter ( this , Ġit . className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper Accessor Ġ= ĠType Converter Scope Column Accessor ( fieldName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrapper TypeName Ġ= Ġit . db TypeName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspecial Ġcase Ġof Ġblob ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( wrapper TypeName Ġ== ĠClass Name . get ( Blob :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Wrapper Accessor Ġ= ĠBlob Column Accessor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtable Def Ġ= Ġbase Table Definition ĊĠĠĠĠĠĠĠ Ġvar ĠtableName Ġ= Ġtable Def . element Name ĊĠĠĠĠĠĠĠ Ġif Ġ( table Def Ġis ĠTable Definition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtableName Ġ= Ġtable Def . tableName Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ base Table Definition . database Definition ?. database ClassName }. $ 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 Ġ= Ġ! wrapper Accessor . is Primitive Target () Ġ&& Ġwrapper Accessor Ġis ĠType Converter Scope Column Accessor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Param : ĠType Name Ġ= Ġif Ġ( is Non Primitive Type Converter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( com . db flow 5 . processor . ClassNames . TYPE _ CONVERT ED _ PROPERTY , Ġwrapper TypeName , Ġelement TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! wrapper Accessor . is Primitive Target ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( com . db flow 5 . processor . ClassNames . WRAPPER _ PROPERTY , Ġwrapper TypeName , Ġelement TypeName . box ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParameter ized TypeName . get ( com . db flow 5 . processor . 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 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . db flow 5 . processor . ClassNames . TYPE _ CONVER TER _ GET TER , Ġcom . db flow 5 . processor . ClassNames . TYPE _ CONVER TER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Table Definition . output ClassName , Ġbase Table Definition . output ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . db flow 5 . processor . ClassNames . FLOW _ MANAGER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 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 Ġ( is PrimaryKey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Builder . add Javadoc (" Primary ĠKey ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is PrimaryKey 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 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġassign DefaultValue Ġ= Ġbase Table Definition . 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 , Ġbase Table Definition . ordered Cursor Look Up , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ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 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġappend Ex istence Method ( code Builder : ĠCode Block . Builder ) Ġ{ ĊĠĠĠĠĠĠĠ ĠEx istence Access Combin er ( combin er , Ġis Row Id Ġ|| Ġis PrimaryKey Auto Increment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Quick Check PrimaryKey Auto Increment , Ġbase Table 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 , Ġwrapper TypeName , ĠcolumnName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is PrimaryKey Auto Increment Ġ&& Ġ! is Row Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ĠPRIMARY ĠKEY Ġ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( base Table Definition Ġis ĠTable Definition Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!( base Table Definition Ġas ĠTable Definition ). primaryKey Conflict Action Name . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Block Builder . add (" ON ĠCON FLI CT Ġ\$ L Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( base Table Definition Ġas ĠTable 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 ) Ċ } Ċ