package Ġorg . vit riv r . cott ont ail . dbms . queries . planning . rules . logical Ċ Ċ import Ġorg . vit riv r . cott ont ail . core . queries . predicates . Boolean Predicate Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . context . Query Context Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . operators . Operator Node Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . operators . logical . predicates . Filter Logical Operator Node Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . planning . rules . Rewrite Rule Ċ Ċ /** Ċ Ġ* ĠDe comp o ses Ġa Ġ[ Filter Logical Operator Node ] Ġthat Ġcontains Ġa Ġ[ Boolean Predicate . Compound . And ] Ċ Ġ* Ġinto Ġa Ġsequence Ġof Ġtwo Ġ[ Filter Logical Operator Node ] s . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 2 . 0 Ċ Ġ*/ Ċ object ĠRight Con junction Rewrite Rule Ġ: ĠRewrite Rule Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġthis Ġ[ Right Con junction Rewrite Rule ] Ġcan Ġbe Ġapplied Ġto Ġthe Ġgiven Ġ[ Operator Node ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnode ĠThe Ġinput Ġ[ Operator Node ] Ġto Ġcheck . ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġ[ Rewrite Rule ] Ġcan Ġbe Ġapplied , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcan Be Applied ( node : ĠOperator Node , Ġctx : ĠQuery Context ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġnode Ġis ĠFilter Logical Operator Node Ġ&& Ġnode . predicate Ġis ĠBoolean Predicate . Compound . And ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe comp o ses Ġthe Ġprovided Ġ[ Filter Logical Operator Node ] Ġwith Ġa Ġconjunction Ġ( AND ) Ġinto Ġtwo ĊĠĠĠĠ Ġ* Ġconsecutive Ġ[ Filter Logical Operator Node ] s , Ġwhere Ġeach Ġresulting Ġ[ Filter Logical Operator Node ] ĊĠĠĠĠ Ġ* Ġcovers Ġone Ġpart Ġof Ġthe Ġconjunction . ĠG ives Ġprecedence Ġto Ġthe Ġright Ġpart Ġof Ġthe Ġconjunction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnode ĠThe Ġinput Ġ[ Operator Node ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġctx ĠThe Ġ[ Query Context ] Ġin Ġwhich Ġquery Ġplanning Ġtakes Ġplace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġoutput Ġ[ Operator Node ] Ġor Ġnull , Ġif Ġno Ġrewrite Ġwas Ġdone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġapply ( node : ĠOperator Node , Ġctx : ĠQuery Context ): ĠOperator Node Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠMake Ġsure , Ġthat Ġnode Ġis Ġa ĠLeft Con junction Rewrite Rule . Ġ*/ ĊĠĠĠĠĠĠĠ Ġrequire ( node Ġis ĠFilter Logical Operator Node ) Ġ{ Ġ" Called ĠRight Con junction Rewrite Rule . apply () Ġwith Ġnode Ġof Ġtype Ġ${ node . java Class . simple Name } Ġthat Ġis Ġnot Ġa ĠFilter Logical Operator Node . ĠThis Ġis Ġa Ġprogrammer 's Ġerror ! "} ĊĠĠĠĠĠĠĠ Ġrequire ( node . predicate Ġis ĠBoolean Predicate . Compound . And ) Ġ{ Ġ" Called ĠRight Con junction Rewrite Rule . apply () Ġwith Ġnode Ġa Ġpredicate Ġthat Ġis Ġnot Ġa Ġconjunction . ĠThis Ġis Ġa Ġprogrammer 's Ġerror !" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġnode . input ?. copy With Inputs () Ġ?: Ġthrow ĠIllegalStateException (" Encounter ed Ġnull Ġnode Ġin Ġlogical Ġoperator Ġnode Ġtree Ġ( node Ġ= Ġ$ node ). ĠThis Ġis Ġa Ġprogrammer 's Ġerror !") ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠFilter Logical Operator Node ( Filter Logical Operator Node ( parent , Ġnode . predicate . p 2 ), Ġnode . predicate . p 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode . output ?. copy With Output ( ret ) Ġ?: Ġret ĊĠĠĠ Ġ} Ċ }