package Ġorg . jetbrains . ex posed . sql . statements . api Ċ Ċ import Ġorg . jetbrains . ex posed . sql . vendors . ANSI _ SQL _ 2 0 0 3 _ KEYWORD S Ċ import Ġorg . jetbrains . ex posed . sql . vendors . V END ORS _ KEYWORD S Ċ import Ġorg . jetbrains . ex posed . sql . vendors . current Dialect Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠIdentifier Manager Api Ġ{ ĊĠĠĠ Ġabstract Ġval Ġquote String Ġ: ĠString ĊĠĠĠ Ġprotected Ġabstract Ġval Ġis UpperCase Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġval Ġis UpperCase Quoted Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġval Ġis LowerCase Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġval Ġis LowerCase Quoted Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġval Ġsupports Mixed Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġval Ġsupports Mixed Quoted Identifiers Ġ: ĠBoolean ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġdb Keywords () Ġ: ĠList < String > ĊĠĠĠ Ġval Ġkeywords Ġby Ġlazy Ġ{ ĠANSI _ SQL _ 2 0 0 3 _ KEYWORD S Ġ+ ĠV END ORS _ KEYWORD S [ current Dialect . name ]. or Empty () Ġ+ Ġdb Keywords () Ġ} ĊĠĠĠ Ġprotected Ġabstract Ġval Ġextra Name Characters Ġ: ĠString ĊĠĠĠ Ġprotected Ġabstract Ġval Ġoracle Version Ġ: ĠOracle Version ĊĠĠĠ Ġprotected Ġabstract Ġval Ġmax ColumnName Length Ġ: ĠInt ĊĊĠĠĠ Ġprotected Ġenum Ġclass ĠOracle Version Ġ{ ĠOracle 1 1 g , ĠOracle 1 2 plus , ĠNon Oracle Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġidentifier Length Limit Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( oracle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOracle Version . Oracle 1 1 g Ġ-> Ġ 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOracle Version . Oracle 1 2 plus Ġ-> Ġ 1 2 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmax ColumnName Length . take If Ġ{ Ġit Ġ> Ġ 0 Ġ} Ġ?: ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġchecked Id entities Ġ= Ġobject Ġ: ĠLinkedHashMap < String , ĠBoolean >( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove El dest Entry ( el dest : ĠMutable Map . Mutable Entry < String , ĠBoolean >? ): ĠBoolean Ġ= Ġsize Ġ>= Ġ 1 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . is Identifier () Ġ= Ġ! isEmpty () Ġ&& Ġfirst (). is Identifier Start () Ġ&& Ġall Ġ{ Ġit . is Identifier Start () Ġ|| Ġit Ġin Ġ' 0 ' .. ' 9 ' Ġ} ĊĠĠĠ Ġprivate Ġfun ĠChar . is Identifier Start (): ĠBoolean Ġ= Ġthis Ġin Ġ' a ' .. ' z ' Ġ|| Ġthis Ġin Ġ' A ' .. ' Z ' Ġ|| Ġthis Ġ== Ġ'_' Ġ|| Ġthis Ġin Ġextra Name Characters ĊĊĠĠĠ Ġfun Ġneed Quotes Ġ( identity : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchecked Id entities . get Or Put ( identity . toLowerCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeywords . any Ġ{ Ġidentity . equals ( it , Ġtrue ) Ġ} Ġ|| Ġ! identity . is Identifier () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . is Already Quoted () Ġ Ġ= Ġstart sWith ( quote String ) Ġ&& Ġend sWith ( quote String ) ĊĊĠĠĠ Ġfun Ġshould Quote Identifier ( identity : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalready Quoted Ġ= Ġidentity . is Already Quoted () ĊĠĠĠĠĠĠĠ Ġval Ġalready Lower Ġ= Ġidentity Ġ== Ġidentity . toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġalready Upper Ġ= Ġidentity Ġ== Ġidentity . toUpperCase () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Quoted Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupports Mixed Identifiers Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Lower Ġ&& Ġis LowerCase Identifiers Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Upper Ġ&& Ġis UpperCase Identifiers Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoracle Version Ġ!= ĠOracle Version . Non Oracle Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupports Mixed Quoted Identifiers Ġ&& Ġ(! already Lower Ġ&& Ġ! already Upper ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġin Pro per Case ( identity : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalready Quoted Ġ= Ġidentity . is Already Quoted () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Quoted Ġ&& Ġsupports Mixed Quoted Identifiers Ġ-> Ġidentity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Quoted Ġ&& Ġis UpperCase Quoted Identifiers Ġ-> Ġidentity . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalready Quoted Ġ&& Ġis LowerCase Quoted Identifiers Ġ-> Ġidentity . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupports Mixed Identifiers Ġ-> Ġidentity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoracle Version Ġ!= ĠOracle Version . Non Oracle Ġ-> Ġidentity . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis UpperCase Identifiers Ġ-> Ġidentity . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis LowerCase Identifiers Ġ-> Ġidentity . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġidentity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquote If Ne cessary Ġ( identity : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( identity . contains ('. ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity . split ('. '). join ToString (".") Ġ{ quote Token If Ne cessary ( it )} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquote Token If Ne cessary ( identity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquote Identifier When Wrong Case Or Ne cessary ( identity : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġin Pro per Case Ġ= Ġin Pro per Case ( identity ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( should Quote Identifier ( identity ) Ġ&& Ġin Pro per Case Ġ!= Ġidentity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquote ( identity ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquote If Ne cessary ( in Pro per Case ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcut If Ne cessary And Quote ( identity : ĠString ) Ġ= Ġquote If Ne cessary ( identity . take ( identifier Length Limit )) ĊĊĠĠĠ Ġprivate Ġfun Ġquote Token If Ne cessary ( token : ĠString ) Ġ: ĠString Ġ= Ġif Ġ( need Quotes ( token )) Ġquote ( token ) Ġelse Ġtoken ĊĊĠĠĠ Ġprivate Ġfun Ġquote ( identity : ĠString ) Ġ= Ġ"$ quote String $ identity $ quote String ". trim () Ċ }