Class: Dynamoid::AdapterPlugin::AwsSdkV3::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb

Constant Summary collapse

OPTIONS_KEYS =
%i[
  consistent_read scan_index_forward select index_name batch_size
  exclusive_start_key record_limit scan_limit project
].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, table, key_conditions, non_key_conditions, options) ⇒ Query

Returns a new instance of Query.



21
22
23
24
25
26
27
28
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 21

def initialize(client, table, key_conditions, non_key_conditions, options)
  @client = client
  @table = table

  @key_conditions = key_conditions
  @non_key_conditions = non_key_conditions
  @options = options.slice(*OPTIONS_KEYS)
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



19
20
21
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 19

def client
  @client
end

#conditionsObject (readonly)

Returns the value of attribute conditions.



19
20
21
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 19

def conditions
  @conditions
end

#optionsObject (readonly)

Returns the value of attribute options.



19
20
21
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 19

def options
  @options
end

#tableObject (readonly)

Returns the value of attribute table.



19
20
21
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 19

def table
  @table
end

Instance Method Details

#callObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/dynamoid/adapter_plugin/aws_sdk_v3/query.rb', line 30

def call
  request = build_request

  Enumerator.new do |yielder|
    api_call = lambda do |req|
      client.query(req).tap do |response|
        yielder << response
      end
    end

    middlewares = Middleware::Backoff.new(
      Middleware::StartKey.new(
        Middleware::Limit.new(api_call, record_limit: record_limit, scan_limit: scan_limit)
      )
    )

    catch :stop_pagination do
      loop do
        middlewares.call(request)
      end
    end
  end
end