package Ġorg . vit riv r . cott ont ail . dbms . queries . operators . physical . merge Ċ Ċ import Ġorg . vit riv r . cott ont ail . core . database . Column Def Ċ import Ġorg . vit riv r . cott ont ail . core . queries . binding . Binding Context Ċ import Ġorg . vit riv r . cott ont ail . core . queries . nodes . traits . Limit Trait Ċ import Ġorg . vit riv r . cott ont ail . core . queries . nodes . traits . Order Trait Ċ import Ġorg . vit riv r . cott ont ail . core . queries . nodes . traits . Trait Ċ import Ġorg . vit riv r . cott ont ail . core . queries . nodes . traits . Trait Type Ċ import Ġorg . vit riv r . cott ont ail . core . queries . planning . cost . Cost Ċ import Ġorg . vit riv r . cott ont ail . core . queries . sort . SortOrder Ċ import Ġorg . vit riv r . cott ont ail . core . values . types . Types Ċ import Ġorg . vit riv r . cott ont ail . dbms . execution . operators . basics . Operator Ċ import Ġorg . vit riv r . cott ont ail . dbms . execution . operators . sort . Merge Limit ing Heap Sort Operator Ċ import Ġorg . vit riv r . cott ont ail . dbms . execution . operators . transform . Merge Operator Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . context . Query Context Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . operators . physical . NA ry Physical Operator Node Ċ import Ġorg . vit riv r . cott ont ail . dbms . queries . operators . physical . sort . Limit ing Sort Physical Operator Node Ċ import Ġjava . lang . Long . min Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ NA ry Physical Operator Node ] Ġthat Ġrepresents Ġthe Ġmerging , Ġsorting Ġand Ġlimiting Ġof Ġinputs Ġfrom Ġdifferent Ġstr ands Ġof Ġexecution . Ċ Ġ* Ċ Ġ* ĠThis Ġparticular Ġoperator Ġonly Ġexists Ġas Ġphysical Ġoperator Ġand Ġin her ently Ġimplies Ġpotential Ġfor Ġparallel ism Ġin Ġan Ġexecution Ġplan . Ċ Ġ* ĠSince Ġthe Ġcollection Ġof Ġthe Ġdifferent Ġstr ands Ġmay Ġpotentially Ġtake Ġplace Ġconcurrent ly , Ġthe Ġoutput Ġorder Ġof Ġ Ġelements Ġis Ġusually Ċ Ġ* Ġundefined . ĠFurthermore , Ġthis Ġoperator Ġmust Ġorche strate Ġa Ġswitching Ġof Ġ[ Binding Context ] Ġinstances . Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 2 . 4 . 0 Ċ Ġ*/ Ċ class ĠMerge Limit ing Sort Physical Operator Node ( var arg Ġinputs : ĠPhysical , Ġval Ġsort On : ĠList < Pair < Column Def <* >, ĠSort Order >>, Ġval Ġlimit : ĠLong ): ĠNA ry Physical Operator Node (* inputs ) Ġ{ ĊĊĠĠĠ Ġ/** ĠName Ġof Ġthe Ġ[ Merge Limit ing Sort Physical Operator Node ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġ= Ġ" Merge Limit ing Sort " ĊĊĠĠĠ Ġ/** ĠThe Ġoutput Ġsize Ġof Ġall Ġ[ Merge Limit ing Sort Physical Operator Node ] s Ġis Ġusually Ġthe Ġspecified Ġlimit . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġoutput Size : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmin ( this . inputs . sum Of Ġ{ Ġit . output Size Ġ}, Ġthis . limit ) ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Cost ] Ġinc urred Ġby Ġthe Ġ[ Merge Limit ing Sort Physical Operator Node ] Ġis Ġsimilar Ġto Ġthat Ġof Ġthe Ġ[ Limit ing Sort Physical Operator Node ]. Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcost : ĠCost ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠCost ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġcpu Ġ= Ġ 2 Ġ* Ġthis . inputs . sum Of Ġ{ Ġit . output Size Ġ} Ġ* Ġthis . sort On . size Ġ* ĠCost . MEMORY _ ACCESS . cpu , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory Ġ= Ġ( this . columns . sum Of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . type Ġ== ĠTypes . String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . statistics [ it ] !!. avg Width Ġ* ĠChar . SIZE _ BYTES ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type . physical Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ* Ġthis . output Size ). toFloat () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Cost ] Ġinc urred Ġby Ġmerging Ġis Ġusually Ġne gl igible . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġparalle liz able Cost : ĠCost ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis . inputs . map Ġ{ Ġit . total Cost Ġ}. reduce Ġ{ c 1 , Ġc 2 Ġ-> Ġc 1 Ġ+ Ġc 2 } ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Merge Limit ing Sort Physical Operator Node ] Ġover writes / sets Ġthe Ġ[ Order Trait ] Ġand Ġthe Ġ[ Limit Trait ]. Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġtraits : ĠMap < Trait Type <* >, ĠTrait > Ġ= Ġmap Of ( Order Trait Ġto ĠOrder Trait ( this . sort On ), ĠLimit Trait Ġto ĠLimit Trait ( this . limit )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġand Ġreturns Ġa Ġcopy Ġof Ġthis Ġ[ Merge Limit ing Sort Physical Operator Node ] Ġwithout Ġany Ġchildren Ġor Ġparents . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠCopy Ġof Ġthis Ġ[ Merge Limit ing Sort Physical Operator Node ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠMerge Limit ing Sort Physical Operator Node ( sort On Ġ= Ġthis . sort On , Ġlimit Ġ= Ġthis . limit ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthis Ġ[ Merge Limit ing Sort Physical Operator Node ] Ġto Ġa Ġ[ Merge Operator ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx ĠThe Ġ[ Query Context ] Ġused Ġfor Ġthe Ġconversion Ġ( e . g . Ġlate Ġbinding ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Operator ( ctx : ĠQuery Context ): ĠOperator Ġ= ĠMerge Limit ing Heap Sort Operator ( this . inputs . map Ġ{ Ġit . to Operator ( ctx . split ()) Ġ}, Ġctx . bindings , Ġthis . sort On , Ġthis . limit ) Ċ }