package Ġapp . cash . sql de light . intellij . run Ċ Ċ import Ġapp . cash . sql de light . core . compiler . model . Bind able Query Ċ import Ġapp . cash . sql de light . core . lang . psi . Stmt Identifier Ċ import Ġapp . cash . sql de light . core . lang . util . range Ċ import Ġapp . cash . sql de light . core . lang . util . raw Sql Text Ċ import Ġapp . cash . sql de light . dialect . api . ConnectionManager Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Stmt Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . annotations . Visible ForTesting Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Prev Sibling Ign oring Whitespace Ċ Ċ @ Visible ForTesting Ċ internal Ġclass ĠRun Sql Action ( ĊĠ Ġprivate Ġval Ġstmt : ĠSql Stmt , ĊĠ Ġprivate Ġval Ġconnection Manager : ĠConnection Manager , ĊĠ Ġprivate Ġval Ġproject : ĠProject Ġ= Ġstmt . project , ĊĠ Ġprivate Ġval Ġexecutor : ĠSql Del ight Statement Executor Ġ= ĠSql Del ight Statement Executor ( ĊĠĠĠ Ġproject , ĊĠĠĠ Ġconnection Manager , ĊĠ Ġ), ĊĠ Ġprivate Ġval Ġdialog Factory : ĠArguments Input Dialog . Factory Ġ= ĠArguments Input Dialog Factory Impl () Ċ ) Ġ: ĠAn Action () Ġ{ ĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġval Ġparameters Ġ= Ġfind Parameters ( stmt ) ĊĠĠĠ Ġval Ġreplacement s Ġ= Ġif Ġ( parameters . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġdialog Ġ= Ġdialog Factory . create ( project , Ġparameters ) ĊĠĠĠĠĠ Ġif Ġ(! dialog . show AndGet () Ġ|| Ġdialog . result . any Ġ{ Ġit . value . isEmpty () Ġ}) Ġreturn ĊĠĠĠĠĠ Ġdialog . result . map Ġ{ Ġp Ġ-> Ġp . range Ġto Ġp . value Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsql Stmt Ġ= Ġstmt . raw Sql Text ( replacement s ). trim (). replace ("\\ s +". to Regex (), Ġ" Ġ") ĊĠĠĠ Ġval Ġidentifier Ġ= Ġstmt . get Prev Sibling Ign oring Whitespace () Ġas ? ĠStmt Identifier ĊĠĠĠ Ġexecutor . execute ( sql Stmt , Ġidentifier ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Parameters ( ĊĠĠĠ Ġsql Stmt : ĠSql Stmt ĊĠ Ġ): ĠList < Sql Parameter > Ġ{ ĊĠĠĠ Ġval Ġbind able Query Ġ= Ġobject Ġ: ĠBind able Query ( null , Ġsql Stmt ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġval Ġid Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġargument List : ĠList < Int Range > Ġ= Ġbind able Query . arguments ĊĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . bind Args Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . range Ġ} ĊĠĠĠ Ġval Ġparameters : ĠList < String > Ġ= Ġbind able Query . parameters . map Ġ{ Ġit . name Ġ} ĊĠĠĠ Ġreturn Ġargument List . zip ( parameters ) Ġ{ Ġrange , Ġname Ġ-> ĊĠĠĠĠĠ ĠSql Parameter ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġrange Ġ= Ġrange ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ