Class: Querrel::Querreller
- Inherits:
-
Object
- Object
- Querrel::Querreller
- Defined in:
- lib/querrel/querreller.rb
Instance Attribute Summary collapse
-
#connection_resolver ⇒ Object
Returns the value of attribute connection_resolver.
Instance Method Summary collapse
-
#initialize(dbs, db_names = false) ⇒ Querreller
constructor
A new instance of Querreller.
- #map(scope, options = {}) ⇒ Object
- #query(scope, options = {}) ⇒ Object
- #reduce(buckets) ⇒ Object
- #while_connected_to(db, resolver, &b) ⇒ Object
Constructor Details
#initialize(dbs, db_names = false) ⇒ Querreller
Returns a new instance of Querreller.
7 8 9 |
# File 'lib/querrel/querreller.rb', line 7 def initialize(dbs, db_names = false) @connection_resolver = ConnectionResolver.new(dbs, db_names) end |
Instance Attribute Details
#connection_resolver ⇒ Object
Returns the value of attribute connection_resolver.
5 6 7 |
# File 'lib/querrel/querreller.rb', line 5 def connection_resolver @connection_resolver end |
Instance Method Details
#map(scope, options = {}) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/querrel/querreller.rb', line 16 def map(scope, = {}) if .key?(:on) resolver = ConnectionResolver.new(dbs, !![:db_names]) dbs = resolver.configurations.keys else resolver = @connection_resolver dbs = @connection_resolver.configurations.keys end sql = scope.to_sql query_model = scope.model results = {} threads = [] dbs.each do |db| threads << Thread.new do while_connected_to(db, resolver) do |conn| result_set = conn.select_all(sql, "Querrel Load") column_types = result_set.column_types results[db] = result_set.map { |record| query_model.instantiate(record, column_types).tap{ |r| r.readonly! } } end end end threads.each(&:join) results end |
#query(scope, options = {}) ⇒ Object
11 12 13 14 |
# File 'lib/querrel/querreller.rb', line 11 def query(scope, = {}) buckets = map(scope, ) reduce(buckets) end |
#reduce(buckets) ⇒ Object
45 46 47 |
# File 'lib/querrel/querreller.rb', line 45 def reduce(buckets) buckets.flat_map{ |db, results| results } end |
#while_connected_to(db, resolver, &b) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/querrel/querreller.rb', line 49 def while_connected_to(db, resolver, &b) conf = resolver.spec(db.to_sym) pool = ActiveRecord::ConnectionAdapters::ConnectionPool.new(conf) pool.with_connection(&b) ensure pool.disconnect! end |