package Ġcn . j uer wh ang . jg bot . utils Ċ Ċ import Ġcn . j uer wh ang . jg bot . arguments Ċ import Ġme . li u wj . kt orm . database . Database Ċ import Ġme . li u wj . kt orm . expression .* Ċ import Ġme . li u wj . kt orm . logging . Console Logger Ċ import Ġme . li u wj . kt orm . logging . LogLevel Ċ import Ġme . li u wj . kt orm . schema .* Ċ import Ġme . li u wj . kt orm . support . sqlite . SQLite Dialect Ċ import Ġme . li u wj . kt orm . support . sqlite . SQLite Formatter Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashMap Ċ Ċ const Ġval ĠDB _ PATH Ġ= Ġ"./ jg . bot . sqlite " Ċ fun Ġinit Connect () Ġ{ ĊĠĠĠ ĠDatabase . connect ( ĊĠĠĠĠĠĠĠ Ġurl Ġ= Ġ" jdbc : sqlite :% s ". format ( DB _ PATH ), ĊĠĠĠĠĠĠĠ Ġdriver Ġ= Ġ" org . sqlite . JDBC ", ĊĠĠĠĠĠĠĠ Ġdialect Ġ= ĠCallable SQLite Dialect (), ĊĠĠĠĠĠĠĠ Ġlogger Ġ= Ġif Ġ( arguments . debug Mode ) ĠConsole Logger ( LogLevel . DEBUG ) Ġelse Ġnull ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠDb Call Func Expression < T Ġ: ĠAny >( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġargs : ĠList < Sql Expression >, ĊĠĠĠ Ġoverride Ġval Ġsql Type : ĠSql Type < T >, ĊĠĠĠ Ġoverride Ġval Ġis Leaf Node : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġoverride Ġval Ġextra Properties : ĠMap < String , ĠAny > Ġ= Ġempty Map () Ċ ): ĠScalar Expression < T >() Ċ Ċ class ĠDb Call Func Sql Formatter ( ĊĠĠĠ Ġdatabase : ĠDatabase , ĊĠĠĠ Ġbe aut ify Sql : ĠBoolean , ĊĠĠĠ Ġindent Size : ĠInt Ċ ): ĠSQLite Formatter ( database , Ġbe aut ify Sql , Ġindent Size ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġvisit Unknown ( expr : ĠSql Expression ): ĠSql Expression Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( expr Ġis ĠDb Call Func Expression <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( expr . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expr . args . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit ( expr . args [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expr . args . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( arg Ġin Ġexpr . args . sub List ( 1 , Ġexpr . args . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Last Blank () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpr ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Unknown ( expr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCallable SQLite Dialect : ĠSQLite Dialect () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Sql Formatter ( database : ĠDatabase , Ġbe aut ify Sql : ĠBoolean , Ġindent Size : ĠInt ): ĠSql Formatter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDb Call Func Sql Formatter ( database , Ġbe aut ify Sql , Ġindent Size ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< T : ĠAny > Ġcall ( name : ĠString , Ġvar arg Ġargs : ĠAny ): ĠDb Call Func Expression < T > Ġ{ ĊĠĠĠ Ġval Ġreal Args Ġ= ĠLinkedList < Sql Expression >() ĊĠĠĠ Ġfor Ġ( arg Ġin Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreal Args . add ( if Ġ( arg Ġ! is ĠSql Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg Ġis ĠLocalDateTime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArgument Expression ( arg Ġas ĠLocalDateTime , ĠLocalDateTime Sql Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( arg Ġis ĠColumn <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Ġ= Ġarg Ġas ĠColumn < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Expression ( column . table . tableName , Ġcolumn . name , Ġcolumn . sql Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArgument Expression ( arg . toString (), ĠV arch ar Sql Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarg ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġreturn ĠDb Call Func Expression ( name , Ġreal Args , Ġcall Func Sql Type . get OrDefault ( name , ĠInt Sql Type ) Ġas ĠSql Type < T >) Ċ } Ċ Ċ val Ġcall Func Sql Type Ġ= ĠHashMap < String , ĠSql Type <* >>() ĊĊ