/* Ċ Ġ* ĠCopyright Ġ[ 2 0 1 9 ] ĠCoding 4 fun Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġru . coding 4 fun . ts ql . dataSource Ċ Ċ import Ġcom . intellij . database . model . Das Object Ċ import Ġcom . intellij . sql . dialect s . mss ql . Ms Dialect Ċ import Ġcom . intellij . sql . psi . Sql Create Statement Ċ import Ġcom . intellij . sql . psi . Sql Reference Expression Ċ import Ġru . coding 4 fun . ts ql . psi . getObject Reference ĊĊ Ċ object ĠPath Part Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpath Regex Ġ= ĠRegex ("^ / (? < root >[ ^ / ]+)/ (? < db Source >[ ^ / ]+)/ (? < db Folder >[ ^ / ]+)/ (? < db >[ ^ / ]+)/ (? < schema Folder >[ ^ / ]+)/ (? < schema >[ ^ / ]+)/ (? < table Folder >[ ^ / ]+)/ (? < table >[ ^ / ]+) ([ .] sql | /. + )$ ") ĊĊĠĠĠ Ġfun Ġget Reference From FilePath ( createStatement : ĠSql Create Statement ): ĠSql Reference Expression ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġpath Regex . match Ent ire ( createStatement . containing File . virtual File . path ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġmatch . groups [" db "] !!. value ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġmatch . groups [" schema "] !!. value ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġmatch . groups [" table "] !!. value ĊĊĠĠĠĠĠĠĠ Ġreturn ĠgetObject Reference (" [$ db ]. [$ schema ]. [$ table ]", Ġcreate Statement ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġare Same ( das Object : ĠDas Object , Ġsql Reference Expression : ĠSql Reference Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatement Text Sb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Das Object : ĠDas Object ? Ġ= Ġdas Object ĊĠĠĠĠĠĠĠ Ġvar Ġiteration Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġwhile Ġ( current Das Object Ġ!= Ġnull Ġ&& Ġ++ iteration Ġ<= Ġ 3 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Das Object . name . isBlank ()) Ġbreak Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstatement Name Ġ= ĠMs Dialect . INSTANCE . quote Identifier ( current Das Object . name , Ġtrue , Ġfalse ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( statement Text Sb . isNotEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement Name Ġ+= Ġ"." Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatement Text Sb . insert ( 0 , Ġstatement Name ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Das Object Ġ= Ġcurrent Das Object . das Parent Ġ?: Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsql Reference Expression . text . endsWith ( statement Text Sb , Ġtrue ) ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊ