package Ġapp . cash . sql de light . gradle . squ ash Ċ Ċ import Ġapp . cash . sql de light . core . lang . util . find Children OfType Ċ import Ġapp . cash . sql de light . core . lang . util . range Ċ import Ġapp . cash . sql de light . dialect . api . Migration S qu ash er Ċ import Ġapp . cash . sql de light . dialect . api . alter ed Table Ċ import Ġcom . ale c strong . sql . psi . core . Sql File Base Ċ import Ġcom . ale c strong . sql . psi . core . psi . Schema Contributor Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Alter Table Rules Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Named Element Impl Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Stmt Ċ import Ġcom . intellij . psi . util . parent OfType Ċ import Ġcom . intellij . refactor ing . suggest ed . end Offset Ċ import Ġcom . intellij . refactor ing . suggest ed . start Offset Ċ Ċ class ĠAn si Sql Migration S qu ash er ( ĊĠ Ġprivate Ġval Ġcreate New Sql File : Ġ( String ) Ġ-> ĠSql File Base Ċ ) Ġ: ĠMigration S qu ash er Ġ{ ĊĠ Ġinternal Ġlateinit Ġvar Ġsqu ash er : ĠMigration S qu ash er ĊĊĠ Ġoverride Ġfun Ġsqu ish ( ĊĠĠĠ Ġstatement : ĠSql Stmt , ĊĠĠĠ Ġcurrent File : ĠSql File Base ĊĠ Ġ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġstatement . alter Table Stmt Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġstatement . alter Table Stmt !!. alter Table Rules List . fold ( current File ) Ġ{ Ġcurrent File , Ġrules Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcreate New Sql File ( squ ash er . squ ish ( rules , Ġinto Ġ= Ġcurrent File )) ĊĠĠĠĠĠĠĠ Ġ}. text ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġstatement . drop Index Stmt Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġcurrent File . sql Stmt List !!. stmt List . map NotNull Ġ{ Ġit . create Index Stmt Ġ}. single Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . index Name . text Matches ( statement . drop Index Stmt !!. index Name !!. text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent File . text . replace Range ( create . start Offset .. create . end Offset , Ġ"") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġstatement . drop Table Stmt Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġcurrent File . sql Stmt List !!. stmt List . map NotNull Ġ{ Ġit . createTable Stmt Ġ}. single Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . tableName . text Matches ( statement . drop Table Stmt !!. tableName !!. text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdrops Ġ= Ġcurrent File . find Children OfType < Sql Named Element Impl >() ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . reference ?. resolve () Ġ== Ġcreate . tableName Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent OfType < Schema Contributor >() ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrops . sorted By Descending Ġ{ Ġit . start Offset Ġ}. fold ( current File . text ) Ġ{ Ġfile Text , Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġfile Text . replace Range ( element . start Offset .. element . end Offset , Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġstatement . drop Trigger Stmt Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġcurrent File . sql Stmt List !!. stmt List . map NotNull Ġ{ Ġit . create Trigger Stmt Ġ}. single Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . trigger Name . text Matches ( statement . drop Trigger Stmt !!. trigger Name !!. text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent File . text . replace Range ( create . start Offset .. create . end Offset , Ġ"") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġstatement . drop View Stmt Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Ġ= Ġcurrent File . sql Stmt List !!. stmt List . map NotNull Ġ{ Ġit . create View Stmt Ġ}. single Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . view Name . text Matches ( statement . drop View Stmt !!. view Name !!. text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent File . text . replace Range ( create . start Offset .. create . end Offset , Ġ"") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent File . text Ġ+ Ġstatement . text Ġ+ Ġ"; \ n " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsqu ish ( ĊĠĠĠ Ġalter Table Rules : ĠSql Alter Table Rules , ĊĠĠĠ Ġinto : ĠSql File Base ĊĠ Ġ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġalter Table Rules . alter Table Rename Table Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtableName Ġ= Ġalter Table Rules . alter ed Table ( into ). tableName ĊĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= Ġalter Table Rules . alter Table Rename Table !!. new TableName . text ĊĠĠĠĠĠĠĠ Ġval Ġelements To Rename Ġ= Ġinto . find Children OfType < Sql Named Element Impl >(). filter Ġ{ Ġit . reference ?. resolve () Ġ== ĠtableName Ġ} ĊĠĠĠĠĠĠĠ Ġelements To Rename . sorted By Descending Ġ{ Ġit . start Offset Ġ}. fold ( into . text ) Ġ{ Ġfile Text , Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġfile Text . replace Range ( element . range , ĠnewName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġalter Table Rules . alter Table Add Column Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Table Ġ= Ġalter Table Rules . alter ed Table ( into ) ĊĠĠĠĠĠĠĠ Ġinto . text . replace Range ( ĊĠĠĠĠĠĠĠĠĠ Ġcreate Table . column Def List . first (). start Offset Ġuntil Ġcreate Table . column Def List . last (). end Offset , ĊĠĠĠĠĠĠĠĠĠ Ġ( createTable . column Def List Ġ+ Ġalter Table Rules . alter Table Add Column !!. column Def ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ", \ n Ġ Ġ") Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Cannot Ġsqu ish Ġ${ alter Table Rules . text }") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ