package Ġorg . vit riv r . cott ont ail . database . queries . planning . nodes . physical . predicates Ċ Ċ import Ġorg . vit riv r . cott ont ail . database . column . Column Def Ċ import Ġorg . vit riv r . cott ont ail . database . queries . Operator Node Ċ import Ġorg . vit riv r . cott ont ail . database . queries . Query Context Ċ import Ġorg . vit riv r . cott ont ail . database . queries . binding . Binding Context Ċ import Ġorg . vit riv r . cott ont ail . database . queries . planning . cost . Cost Ċ import Ġorg . vit riv r . cott ont ail . database . queries . planning . nodes . physical . Unary Physical Operator Node Ċ import Ġorg . vit riv r . cott ont ail . database . queries . predicates . bool . Boolean Predicate Ċ import Ġorg . vit riv r . cott ont ail . database . queries . predicates . bool . Comparison Operator Ċ import Ġorg . vit riv r . cott ont ail . database . queries . predicates . knn . K nn Predicate Ċ import Ġorg . vit riv r . cott ont ail . database . statistics . select ivity . Na ive Select ivity Calculator Ċ import Ġorg . vit riv r . cott ont ail . database . statistics . select ivity . Select ivity Ċ import Ġorg . vit riv r . cott ont ail . execution . Transaction Context Ċ import Ġorg . vit riv r . cott ont ail . execution . operators . basics . Operator Ċ import Ġorg . vit riv r . cott ont ail . execution . operators . predicates . Filter Operator Ċ import Ġorg . vit riv r . cott ont ail . execution . operators . transform . Merge Operator Ċ import Ġorg . vit riv r . cott ont ail . model . values . types . Value Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Unary Physical Operator Node ] Ġthat Ġrepresents Ġapplication Ġof Ġa Ġ[ Boolean Predicate ] Ġon Ġsome Ġintermediate Ġresult . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 2 . 1 . 0 Ċ Ġ*/ Ċ class ĠFilter Physical Operator Node ( input : ĠOperator Node . Physical ? Ġ= Ġnull , Ġval Ġpredicate : ĠBoolean Predicate ) Ġ: ĠUnary Physical Operator Node ( input ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNODE _ NAME Ġ= Ġ" Filter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġname Ġof Ġthis Ġ[ Filter On Sub Select Physical Operator Node ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠNODE _ NAME ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Filter Physical Operator Node ] Ġreturns Ġthe Ġ[ Column Def ] Ġof Ġits Ġinput . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcolumns : ĠArray < Column Def <* >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . input ?. columns Ġ?: Ġempty Array () ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Filter Physical Operator Node ] Ġrequires Ġall Ġ[ Column Def ] s Ġused Ġin Ġthe Ġ[ K nn Predicate ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġrequires : ĠArray < Column Def <* >> Ġ= Ġthis . predicate . columns . to Typed Array () ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Filter Physical Operator Node ] Ġcan Ġonly Ġbe Ġexecuted Ġif Ġit Ġdoesn 't Ġcontain Ġany Ġ[ Comparison Operator . Binary . Match ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġexecutable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsuper . executable Ġ&& Ġthis . predicate . atom ics . none Ġ{ Ġit . operator Ġis ĠComparison Operator . Binary . Match Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġestimated Ġoutput Ġsize Ġof Ġthis Ġ[ Filter On Sub Select Physical Operator Node ]. ĠCalcul ated Ġbased Ġon Ġ[ Select ivity ] Ġestimates . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġoutput Size : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠNa ive Select ivity Calculator . estimate ( this . predicate , Ġthis . statistics ). invoke ( this . input ?. output Size Ġ?: Ġ 0 ) ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Cost ] Ġof Ġthis Ġ[ Filter Physical Operator Node ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcost : ĠCost Ġ= ĠCost ( cpu Ġ= Ġthis . predicate . atomic Cpu Cost ) Ġ* Ġ( this . input ?. output Size Ġ?: Ġ 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġand Ġreturns Ġa Ġcopy Ġof Ġthis Ġ[ Filter Physical Operator Node ] Ġwithout Ġany Ġchildren Ġor Ġparents . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠCopy Ġof Ġthis Ġ[ Filter Physical Operator Node ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠFilter Physical Operator Node ( predicate Ġ= Ġthis . predicate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPart itions Ġthis Ġ[ Filter Physical Operator Node ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġp ĠThe Ġnumber Ġof Ġpartitions Ġto Ġcreate . ĊĠĠĠĠ Ġ* Ġ@ return ĠList Ġof Ġ[ Operator Node . Physical ], Ġeach Ġrepresenting Ġa Ġpartition Ġof Ġthe Ġoriginal Ġtree . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġpartition ( p : ĠInt ): ĠList < Physical > Ġ= ĊĠĠĠĠĠĠĠ Ġthis . input ?. partition ( p )?. map Ġ{ ĠFilter Physical Operator Node ( it , Ġthis . predicate ) Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Cannot Ġpartition Ġdisconnected ĠOperator Node Ġ( node Ġ= Ġ$ this )") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthis Ġ[ Filter Physical Operator Node ] Ġto Ġa Ġ[ Filter Operator ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtx ĠThe Ġ[ Transaction Context ] Ġused Ġfor Ġexecution . ĊĠĠĠĠ Ġ* Ġ@ param Ġctx ĠThe Ġ[ Query Context ] Ġused Ġfor Ġthe Ġconversion Ġ( e . g . Ġlate Ġbinding ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Operator ( tx : ĠTransaction Context , Ġctx : ĠQuery Context ): ĠOperator Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparallel isation Ġ= Ġthis . cost . parallel isation () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . can Be Partition ed Ġ&& Ġparallel isation Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperators Ġ= Ġthis . input ?. partition ( parallel isation )?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Operator ( it . to Operator ( tx , Ġctx ), Ġthis . predicate . bind Values ( ctx . values )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Cannot Ġconvert Ġdisconnected ĠOperator Node Ġto ĠOperator Ġ( node Ġ= Ġ$ this )") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMerge Operator ( operators ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Operator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . input ?. to Operator ( tx , Ġctx ) Ġ?: Ġthrow ĠIllegalStateException (" Cannot Ġconvert Ġdisconnected ĠOperator Node Ġto ĠOperator Ġ( node Ġ= Ġ$ this )"), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . predicate . bind Values ( ctx . values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBind s Ġvalues Ġfrom Ġthe Ġprovided Ġ[ Binding Context ] Ġto Ġthis Ġ[ Filter Physical Operator Node ]' s Ġ[ Boolean Predicate ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx ĠThe Ġ[ Binding Context ] Ġused Ġfor Ġvalue Ġbinding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġbind Values ( ctx : ĠBinding Context < Value >): ĠOperator Node Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . predicate . bind Values ( ctx ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . bind Values ( ctx ) Ġ/* ĠImport ant ! Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGenerates Ġand Ġreturns Ġa Ġ[ String ] Ġrepresentation Ġof Ġthis Ġ[ Filter Physical Operator Node ]. Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"${ super . toString ()} [ ${ this . predicate }] " ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠFilter Physical Operator Node ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate Ġ!= Ġother . predicate ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġthis . predicate . hashCode () Ċ }