Class: DynamoidAdvancedWhere::QueryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamoid_advanced_where/query_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass:, projected_fields: [], record_limit: nil, start_hash: nil, root_node: nil, &blk) ⇒ QueryBuilder

Returns a new instance of QueryBuilder.



13
14
15
16
17
18
19
20
21
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 13

def initialize(klass:, projected_fields: [], record_limit: nil, start_hash: nil, root_node: nil, &blk)
  self.klass = klass
  self.root_node = root_node || Nodes::RootNode.new(klass: klass, &blk)
  self.start_hash = start_hash
  self.record_limit = record_limit
  self.projected_fields = projected_fields

  freeze
end

Instance Attribute Details

#klassObject

Returns the value of attribute klass.



9
10
11
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 9

def klass
  @klass
end

#projected_fieldsObject

Returns the value of attribute projected_fields.



9
10
11
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 9

def projected_fields
  @projected_fields
end

#record_limitObject

Returns the value of attribute record_limit.



9
10
11
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 9

def record_limit
  @record_limit
end

#root_nodeObject

Returns the value of attribute root_node.



9
10
11
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 9

def root_node
  @root_node
end

#start_hashObject

Returns the value of attribute start_hash.



9
10
11
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 9

def start_hash
  @start_hash
end

Instance Method Details

#batch_updateObject



27
28
29
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 27

def batch_update
  BatchedUpdater.new(query_builder: self)
end

#limit(value) ⇒ Object



57
58
59
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 57

def limit(value)
  dup_with_changes(record_limit: value)
end

#project(*fields) ⇒ Object



53
54
55
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 53

def project(*fields)
  dup_with_changes(projected_fields: projected_fields + fields)
end

#query_materializerObject



23
24
25
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 23

def query_materializer
  QueryMaterializer.new(query_builder: self)
end

#start(key_hash) ⇒ Object



61
62
63
64
65
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 61

def start(key_hash)
  return self if key_hash.nil? || key_hash.empty?

  dup_with_changes(start_hash: key_hash)
end

#upsert(*args) ⇒ Object



31
32
33
34
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 31

def upsert(*args)
  update_fields = args.extract_options!
  batch_update.set_values(update_fields).apply(*args)
end

#where(other_builder = nil, &blk) ⇒ Object Also known as: and



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/dynamoid_advanced_where/query_builder.rb', line 36

def where(other_builder = nil, &blk)
  raise 'cannot use a block and an argument' if other_builder && blk

  other_builder = self.class.new(klass: klass, &blk) if blk

  raise 'passed argument must be a query builder' unless other_builder.is_a?(self.class)

  local_root_node = root_node
  self.class.new(klass: klass) do
    Nodes::AndNode.new(
      other_builder.root_node.child_node,
      local_root_node.child_node
    )
  end
end