lib/alf/operator/relational/rank.rb in alf-0.10.1 vs lib/alf/operator/relational/rank.rb in alf-0.11.0
- old
+ new
@@ -1,55 +1,22 @@
module Alf
- module Operator::Relational
- class Rank < Alf::Operator()
- include Operator::Relational, Operator::Shortcut, Operator::Unary
-
- signature do |s|
- s.argument :order, Ordering, []
- s.argument :as, AttrName, :rank
- end
-
- class SortBased
- include Operator, Operator::Cesure
-
- def initialize(order, as)
- @by_key = AttrList.coerce(order)
- @as = as
+ module Operator
+ module Relational
+ class Rank
+ include Relational, Unary
+
+ signature do |s|
+ s.argument :order, Ordering, []
+ s.argument :as, AttrName, :rank
end
-
- protected
-
- # (see Operator::Cesure#project)
- def project(tuple)
- @by_key.project(tuple, false)
- end
-
- # (see Operator::Cesure#start_cesure)
- def start_cesure(key, receiver)
- @rank ||= 0
- @last_block = 0
- end
-
- # (see Operator::Cesure#accumulate_cesure)
- def accumulate_cesure(tuple, receiver)
- receiver.call tuple.merge(@as => @rank)
- @last_block += 1
- end
-
- # (see Operator::Cesure#flush_cesure)
- def flush_cesure(key, receiver)
- @rank += @last_block
- end
-
- end # class SortBased
-
- protected
-
- def longexpr
- chain SortBased.new(@order, @as),
- Operator::NonRelational::Sort.new(@order),
- datasets
- end
-
- end # class Rank
- end # module Operator::Relational
+
+ # (see Operator#each)
+ def compile
+ op = Engine::Sort.new(operand, order)
+ op = Engine::Rank::Cesure.new(op, order, as)
+ op
+ end
+
+ end # class Rank
+ end # module Relational
+ end # module Operator
end # module Alf