package Ġcom . google . cloud . sq le co system . sq lex traction Ċ Ċ import Ġcom . google . cloud . sq le co system . sq lex traction . output . Query Fragment Ċ Ċ private Ġconst Ġval ĠWITH _ DE LIMITER Ġ= Ġ" (( ?< =% 1 \$ s )| (? =% 1 \$ s )) " Ċ Ċ /** Ċ Ġ* ĠR ates Ġa Ġ[ Query Fragment ] Ġa Ġconfidence Ġvalue Ġto Ġindicate Ġhow Ġlikely Ġit Ġis Ġto Ġbe Ġa Ġquery . Ċ Ġ* Ġ@ see Ġrate Ċ Ġ*/ Ċ class ĠConf idence R ater Ġ{ ĊĠĠĠ Ġprivate Ġval Ġkeywords : ĠSet < String > Ġ= Ġsequence Of ( ĊĠĠĠĠĠĠĠ Ġ" Add ", ĊĠĠĠĠĠĠĠ Ġ" All ", ĊĠĠĠĠĠĠĠ Ġ" Alter ", ĊĠĠĠĠĠĠĠ Ġ" And ", ĊĠĠĠĠĠĠĠ Ġ" Any ", ĊĠĠĠĠĠĠĠ Ġ" As ", ĊĠĠĠĠĠĠĠ Ġ" Asc ", ĊĠĠĠĠĠĠĠ Ġ" Backup ", ĊĠĠĠĠĠĠĠ Ġ" Between ", ĊĠĠĠĠĠĠĠ Ġ" Case ", ĊĠĠĠĠĠĠĠ Ġ" Check ", ĊĠĠĠĠĠĠĠ Ġ" Column ", ĊĠĠĠĠĠĠĠ Ġ" Constraint ", ĊĠĠĠĠĠĠĠ Ġ" Create ", ĊĠĠĠĠĠĠĠ Ġ" Database ", ĊĠĠĠĠĠĠĠ Ġ" Default ", ĊĠĠĠĠĠĠĠ Ġ" Delete ", ĊĠĠĠĠĠĠĠ Ġ" Desc ", ĊĠĠĠĠĠĠĠ Ġ" Distinct ", ĊĠĠĠĠĠĠĠ Ġ" Drop ", ĊĠĠĠĠĠĠĠ Ġ" Exec ", ĊĠĠĠĠĠĠĠ Ġ" Exists ", ĊĠĠĠĠĠĠĠ Ġ" Foreign ", ĊĠĠĠĠĠĠĠ Ġ" From ", ĊĠĠĠĠĠĠĠ Ġ" Full ", ĊĠĠĠĠĠĠĠ Ġ" Group ", ĊĠĠĠĠĠĠĠ Ġ" Having ", ĊĠĠĠĠĠĠĠ Ġ" In ", ĊĠĠĠĠĠĠĠ Ġ" Index ", ĊĠĠĠĠĠĠĠ Ġ" Inner ", ĊĠĠĠĠĠĠĠ Ġ" Insert ", ĊĠĠĠĠĠĠĠ Ġ" Is ", ĊĠĠĠĠĠĠĠ Ġ" Join ", ĊĠĠĠĠĠĠĠ Ġ" Left ", ĊĠĠĠĠĠĠĠ Ġ" Like ", ĊĠĠĠĠĠĠĠ Ġ" Limit ", ĊĠĠĠĠĠĠĠ Ġ" Not ", ĊĠĠĠĠĠĠĠ Ġ" Null ", ĊĠĠĠĠĠĠĠ Ġ" Or ", ĊĠĠĠĠĠĠĠ Ġ" Order ", ĊĠĠĠĠĠĠĠ Ġ" Outer ", ĊĠĠĠĠĠĠĠ Ġ" Primary ", ĊĠĠĠĠĠĠĠ Ġ" Procedure ", ĊĠĠĠĠĠĠĠ Ġ" Right ", ĊĠĠĠĠĠĠĠ Ġ" Row Num ", ĊĠĠĠĠĠĠĠ Ġ" Select ", ĊĠĠĠĠĠĠĠ Ġ" Set ", ĊĠĠĠĠĠĠĠ Ġ" Table ", ĊĠĠĠĠĠĠĠ Ġ" Top ", ĊĠĠĠĠĠĠĠ Ġ" Truncate ", ĊĠĠĠĠĠĠĠ Ġ" Union ", ĊĠĠĠĠĠĠĠ Ġ" Unique ", ĊĠĠĠĠĠĠĠ Ġ" Update ", ĊĠĠĠĠĠĠĠ Ġ" Values ", ĊĠĠĠĠĠĠĠ Ġ" View ", ĊĠĠĠĠĠĠĠ Ġ" Where " ĊĠĠĠ Ġ). map Ġ{ Ġit . toUpperCase () Ġ}. toSet () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġ[ query ], Ġreturns Ġa Ġconfidence Ġvalue Ġwithin Ġrange Ġ[ 0 . 0 , Ġ 1 . 0 ], ĊĠĠĠĠ Ġ* Ġwhere Ġ 1 . 0 Ġmeans Ġit Ġis Ġmost Ġlikely Ġa ĠSQL Ġquery ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrate ( query : ĠQuery Fragment ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcount Sql Like Tokens ( query ) ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġ( count ) Ġ/ Ġ( count Ġ+ Ġ 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCount Ġthe Ġnumber Ġof ĠSQL Ġkeywords Ġin Ġ[ query ]. ĊĠĠĠĠ Ġ* ĠKey words Ġare Ġweighted , Ġand Ġthe Ġreturn Ġvalue Ġcan Ġbe Ġhigher Ġthan Ġthe Ġexact Ġcount . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcount Sql Like Tokens ( query : ĠQuery Fragment ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query . complex Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquery . complex . sum By ( this :: count Sql Like Tokens ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( query . literal . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġtoken ) Ġin Ġtokenize ( query . literal ). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlocal Count Ġ= Ġif Ġ( token . toUpperCase () Ġin Ġkeywords ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgive Ġmore Ġpoints Ġfor Ġkeywords Ġfound Ġat Ġthe Ġstart Ġof Ġthe Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 Ġ&& Ġlocal Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġlocal Count ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpl its Ġ[ query ] Ġinto Ġnon - empty Ġtokens . ĊĠĠĠĠ Ġ* ĠWh ites p aces Ġare Ġremoved , Ġbut Ġsymbols Ġare Ġreturned Ġas Ġindividual Ġtokens . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtokenize ( query : ĠString ): ĠSequence < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery . split ( WITH _ DE LIMITER . format ("[ ^ \\ w \\ d ]"). to Regex ()). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠ Ġ} Ċ }