package Ġtk . mall um o . k db Ċ Ċ import Ġtk . mall um o . k db . sqlite . Sqlite DB Ċ Ċ internal Ġobject ĠDb Re creating Functions Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġdb Def Columns Ġ= ĊĠĠĠĠĠĠĠ Ġ" NAME _ TABLE , ĠNAME _ COLUMN , ĠTYPE , ĠDEFAULT _ VALUE , ĠIS _ UNIQUE , ĠIS _ INDEX ED " ĊĠĠĠ Ġprivate Ġconst Ġval Ġdb Def Columns Creator Ġ= ĊĠĠĠĠĠĠĠ Ġ" NAME _ TABLE ĠLONG VARCHAR , ĠNAME _ COLUMN ĠLONG VARCHAR , ĠTYPE ĠLONG VARCHAR , ĠDEFAULT _ VALUE ĠLONG VARCHAR , ĠIS _ UNIQUE ĠINT , ĠIS _ INDEX ED ĠINT " ĊĠĠĠ Ġprivate Ġconst Ġval Ġdb Def Table Ġ= Ġ"__ DB _ DEF " ĊĊĠĠĠ Ġsuspend Ġfun Ġrebuild Database ( ĊĠĠĠĠĠĠĠ Ġdb : ĠSql ite DB , ĊĠĠĠĠĠĠĠ Ġdb Def Array : ĠArrayList < Impl K db Table Def >, ĊĠĠĠĠĠĠĠ Ġdebug : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrebuild Tables ( db , Ġread Old Db Def ( db , Ġdb Def Array , Ġdebug ), Ġdb Def Array , Ġdebug ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrebuild Tables ( ĊĠĠĠĠĠĠĠ Ġdb : ĠSql ite DB , ĊĠĠĠĠĠĠĠ Ġold Definition Arr : ĠList < Impl K db Table Def >, ĊĠĠĠĠĠĠĠ Ġnew Definition Arr : ĠArrayList < Impl K db Table Def >, ĊĠĠĠĠĠĠĠ Ġdebug : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwrite Changes Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġnew Definition Arr . forEach Ġ{ Ġnew Def Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Def Ġ= Ġold Definition Arr . first OrNull Ġ{ Ġit . name Ġ== Ġnew Def . name Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( old Def Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Def . sql Creator ( re declare Type Ġ= Ġfalse , Ġis Sqlite Ġ= Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Def . apply Indexes (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Changes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġre declare Table Ġ= Ġnew Def . get Unique (). toString () Ġ!= Ġold Def . get Unique (). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalter Column Ġ= Ġarray ListOf < Impl K db Table Def . Item >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Def . columns . forEach Ġ{ Ġnew C Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Def . columns . first OrNull Ġ{ Ġold C Ġ-> Ġold C . name Ġ== Ġnew C . name Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalter Column . add ( new C ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ new Def . name }.${ new C }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Changes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . defaultValue Ġ!= Ġnew C . defaultValue Ġ|| Ġit . type Ġ!= Ġnew C . type ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ it . defaultValue }.${ new C . defaultValue Ġ} Ġ${ it . type } Ġ${ new C . type } Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre declare Table Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! re declare Table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeleted Columns Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Def . columns . filter Ġ{ Ġod Ġ-> Ġ! new Def . columns . any Ġ{ Ġnd Ġ-> Ġnd . name Ġ== Ġod . name Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted Columns . isNotEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ new Def . name }.${ deleted Columns . join ToString (",") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre declare Table Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalter Column . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog (" ALTER ĠTABLE Ġ${ new Def . name } ĠADD Ġ${ it . sql Creator ( true )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec (" ALTER ĠTABLE Ġ${ new Def . name } ĠADD Ġ${ it . sql Creator ( true )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" ERR : ĠALTER ĠTABLE Ġ${ new Def . name } ĠADD Ġ${ it . sql Creator ( true )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re declare Table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Changes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Def . sql Creator ( true , Ġis Sqlite Ġ= Ġtrue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( new Def . re declare 1 _ Ref ill ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( new Def . re declare 2 _ Drop ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( new Def . re declare 3 _ Rename ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Def . get Indexes (). toString () Ġ!= Ġold Def . get Indexes (). toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Changes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Def . apply Indexes ( old Def . get Indexes ()). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . exec ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( write Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog (" WR IT ING ĠDATABASE ĠCH ANG ES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite New Db Def ( db , Ġnew Definition Arr ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog (" NO ĠDATABASE ĠCH ANG ES ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġwrite New Db Def ( db : ĠSql ite DB , Ġdb Def Array : ĠArrayList < Impl K db Table Def >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdb . exec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCREATE ĠTABLE ĠIF ĠNOT ĠEXISTS Ġ$ db Def Table Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ if Ġ( true ) Ġdb Def Columns Ġelse Ġdb Def Columns Creator }, ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUNIQUE Ġ( NAME _ TABLE , ĠNAME _ COLUMN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ if Ġ( true ) Ġ" ON ĠCON FLI CT ĠREPLACE " Ġelse Ġ"" }) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdb . insert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ${ if Ġ( true ) Ġ" INSERT " Ġelse Ġ" MERGE "} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINTO Ġ$ db Def Table Ġ(${ db Def Columns }) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ${ if Ġ( true ) Ġ"" Ġelse Ġ" KEY Ġ( NAME _ TABLE , ĠNAME _ COLUMN ) "} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVALUES Ġ( ?,?, ?,?, ?, ?) ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Def Array . forEach Ġ{ Ġdef Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef . columns . forEach Ġ{ Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . string ( 0 ) Ġ{ Ġdef . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . string ( 1 ) Ġ{ Ġcolumn . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . string ( 2 ) Ġ{ Ġcolumn . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . string ( 3 ) Ġ{ Ġcolumn . defaultValue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . int ( 4 ) Ġ{ Ġif Ġ( column . unique ) Ġ 1 Ġelse Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . int ( 5 ) Ġ{ Ġif Ġ( column . index ) Ġ 1 Ġelse Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . commit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpod m Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Def Array . map Ġ{ Ġtable Ġ-> Ġtable . columns . map Ġ{ Ġcolumn Ġ-> Ġ"' ${ table . name }-${ column . name } '" Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (",") Ġ{ Ġit . join ToString (",") Ġ} ĊĠĠĠĠĠĠĠ Ġdb . exec (" DELETE ĠFROM Ġ$ db Def Table ĠWHERE Ġ( NAME _ TABLE Ġ|| Ġ'-' Ġ|| ĠNAME _ COLUMN ) ĠNOT ĠIN Ġ($ pod m )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġread Old Def Direct ( db : ĠSql ite DB ): ĠList < Impl K db Table Def >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠImp l K db Table Def >() ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ$ db Def Columns ĊĠĠĠĠĠĠĠĠĠĠ ĠFROM Ġ$ db Def Table ĊĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . string ( 0 ) Ġ{ Ġtab lename Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠImp l K db Table Def . Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . string ( 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . name Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . string ( 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . type Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . string ( 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . defaultValue Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . int ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . unique Ġ= Ġit Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . int ( 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . index Ġ= Ġit Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġmap [ tablename ] Ġ?: ĠImp l K db Table Def ( tablename ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable . columns . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ tablename ] Ġ= Ġtable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . values . toList () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġread Old Db Def ( ĊĠĠĠĠĠĠĠ Ġdb : ĠSql ite DB , ĊĠĠĠĠĠĠĠ Ġnew Db Def Array : ĠArrayList < Impl K db Table Def >, ĊĠĠĠĠĠĠĠ Ġdebug : ĠBoolean ĊĠĠĠ Ġ): ĠList < Impl K db Table Def > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread Old Def Direct ( db ) Ġ?: Ġread Old Def From Tables ( db , Ġnew Db Def Array , Ġdebug ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġread Old Def From Tables ( ĊĠĠĠĠĠĠĠ Ġdb : ĠSql ite DB , ĊĠĠĠĠĠĠĠ Ġnew Db Def Array : ĠArrayList < Impl K db Table Def >, ĊĠĠĠĠĠĠĠ Ġdebug : ĠBoolean ĊĠĠĠ Ġ): ĠList < Impl K db Table Def > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Def Ġ= Ġarray ListOf < Impl K db Table Def >() ĊĠĠĠĠĠĠĠ Ġnew Db Def Array . forEach Ġ{ Ġdef Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= ĠImp l K db Table Def ( def . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . query (" SELECT Ġ* ĠFROM Ġ${ def . name } ĠLIMIT Ġ 1 ") Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . columns . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable . columns . add ( Impl K db Table Def . Item ( it . toUpperCase ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog (" RE CRE ATING ĠTABLE Ġ${ def . name } ĠFO UND ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Def . add ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( debug ) Ġlog (" RE CRE ATING ĠTABLE Ġ${ def . name } ĠNOT ĠFO UND ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġold Def ĊĠĠĠ Ġ} ĊĊ Ċ }