Module: RR::TableScanHelper
- Included in:
- DirectTableScan, ProxyBlockCursor, TableScan
- Defined in:
- lib/rubyrep/table_scan_helper.rb
Overview
Some helper functions that are of use to all TableScan classes
Class Method Summary collapse
-
.scan_class(session) ⇒ Object
Returns the correct class for the table scan based on the type of the session (proxied or direct).
Instance Method Summary collapse
-
#rank_rows(left_row, right_row) ⇒ Object
Compares the primary keys of left_row and right_row to determine their rank.
Class Method Details
.scan_class(session) ⇒ Object
Returns the correct class for the table scan based on the type of the session (proxied or direct).
38 39 40 41 42 43 44 |
# File 'lib/rubyrep/table_scan_helper.rb', line 38 def self.scan_class(session) if session.proxied? ProxiedTableScan else DirectTableScan end end |
Instance Method Details
#rank_rows(left_row, right_row) ⇒ Object
Compares the primary keys of left_row and right_row to determine their rank. Assumes there is a function primary_key_names returning the array of primary keys that are relevant for this comparison
Assumes that at least one of left_row and right_row is not nil A nil row counts as infinite.
-
left_row is something and right_row is nil ==> left_row is smaller ==> return -1
-
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rubyrep/table_scan_helper.rb', line 16 def rank_rows(left_row, right_row) raise "At least one of left_row and right_row must not be nil!" unless left_row or right_row return -1 unless right_row return 1 unless left_row rank = 0 primary_key_names.any? do |key| if left_row[key].kind_of?(String) # When databases order strings, then 'a' < 'A' while for Ruby 'A' < 'a' # ==> Use a combination of case sensitive and case insensitive comparing to # reproduce the database behaviour. rank = left_row[key].casecmp(right_row[key]) # deal with 'a' to 'B' comparisons rank = -(left_row[key] <=> right_row[key]) if rank == 0 # deal with 'a' to 'A' comparisons else rank = left_row[key] <=> right_row[key] end rank != 0 end rank end |