dynamoid_advanced_where 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 239094fa5509e994cefa186a296b6f00bbc7a13913ea67803f82f173e6aea82a
|
4
|
+
data.tar.gz: cb46ded36d28fc09b54ea3b1598c34e2172232824056c9b6462f846f491e9673
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bce42bfde6205d3a63ea557b0624391170f586220247fc3c7ab17a1203eb6876d4356b6758a41df0756ea9de07ee06b29ce84ba4c40b516143a803d2d361a9cc
|
7
|
+
data.tar.gz: 633267b36adc9112e67aa8c541946d4ce9a56821d68aa339af211c5ffa400c6b6491b188e33f1dcda01ebd4ea32842fffcde432a783687d14080fc589beecb52
|
@@ -6,15 +6,16 @@ require_relative './batched_updater'
|
|
6
6
|
|
7
7
|
module DynamoidAdvancedWhere
|
8
8
|
class QueryBuilder
|
9
|
-
attr_accessor :klass, :root_node, :start_hash, :record_limit
|
9
|
+
attr_accessor :klass, :root_node, :start_hash, :record_limit, :projected_fields
|
10
10
|
|
11
11
|
delegate :all, :each_page, :each, to: :query_materializer
|
12
12
|
|
13
|
-
def initialize(klass:, record_limit: nil, start_hash: nil, root_node: nil, &blk)
|
13
|
+
def initialize(klass:, projected_fields: [], record_limit: nil, start_hash: nil, root_node: nil, &blk)
|
14
14
|
self.klass = klass
|
15
15
|
self.root_node = root_node || Nodes::RootNode.new(klass: klass, &blk)
|
16
16
|
self.start_hash = start_hash
|
17
17
|
self.record_limit = record_limit
|
18
|
+
self.projected_fields = projected_fields
|
18
19
|
|
19
20
|
freeze
|
20
21
|
end
|
@@ -49,6 +50,10 @@ module DynamoidAdvancedWhere
|
|
49
50
|
end
|
50
51
|
alias and where
|
51
52
|
|
53
|
+
def project(*fields)
|
54
|
+
dup_with_changes(projected_fields: projected_fields + fields)
|
55
|
+
end
|
56
|
+
|
52
57
|
def limit(value)
|
53
58
|
dup_with_changes(record_limit: value)
|
54
59
|
end
|
@@ -68,6 +73,7 @@ module DynamoidAdvancedWhere
|
|
68
73
|
klass: klass,
|
69
74
|
start_hash: start_hash,
|
70
75
|
root_node: root_node,
|
76
|
+
projected_fields: projected_fields,
|
71
77
|
}.merge(changes))
|
72
78
|
end
|
73
79
|
end
|
@@ -44,11 +44,13 @@ module DynamoidAdvancedWhere
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
query =
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
def enumerate_results(starting_query)
|
48
|
+
query = starting_query.dup
|
49
|
+
|
50
|
+
unless query_builder.projected_fields.empty?
|
51
|
+
query[:select] = 'SPECIFIC_ATTRIBUTES'
|
52
|
+
query[:projection_expression] = query_builder.projected_fields.map(&:to_s).join(',')
|
53
|
+
end
|
52
54
|
|
53
55
|
query[:limit] = query_builder.record_limit if query_builder.record_limit
|
54
56
|
|
@@ -56,7 +58,8 @@ module DynamoidAdvancedWhere
|
|
56
58
|
|
57
59
|
Enumerator.new do |yielder|
|
58
60
|
loop do
|
59
|
-
|
61
|
+
query[:exclusive_start_key] = page_start
|
62
|
+
results = yield(query)
|
60
63
|
|
61
64
|
items = (results.items || []).map do |item|
|
62
65
|
klass.from_database(item.symbolize_keys)
|
@@ -73,32 +76,25 @@ module DynamoidAdvancedWhere
|
|
73
76
|
end.lazy
|
74
77
|
end
|
75
78
|
|
76
|
-
def
|
79
|
+
def each_page_via_query
|
77
80
|
query = {
|
78
81
|
table_name: table_name,
|
79
|
-
|
80
|
-
|
81
|
-
query[:limit] = query_builder.record_limit if query_builder.record_limit
|
82
|
-
|
83
|
-
page_start = start_hash
|
84
|
-
|
85
|
-
Enumerator.new do |yielder|
|
86
|
-
loop do
|
87
|
-
results = client.scan(query.merge(exclusive_start_key: page_start))
|
88
|
-
|
89
|
-
items = (results.items || []).map do |item|
|
90
|
-
klass.from_database(item.symbolize_keys)
|
91
|
-
end
|
92
|
-
|
93
|
-
yielder.yield(items, results)
|
82
|
+
index_name: selected_index_for_query,
|
83
|
+
}.merge(filter_builder.to_query_filter)
|
94
84
|
|
95
|
-
|
85
|
+
enumerate_results(query) do |q|
|
86
|
+
client.query(q)
|
87
|
+
end
|
88
|
+
end
|
96
89
|
|
97
|
-
|
90
|
+
def each_page_via_scan
|
91
|
+
query = {
|
92
|
+
table_name: table_name,
|
93
|
+
}.merge(filter_builder.to_scan_filter)
|
98
94
|
|
99
|
-
|
100
|
-
|
101
|
-
end
|
95
|
+
enumerate_results(query) do |q|
|
96
|
+
client.scan(q)
|
97
|
+
end
|
102
98
|
end
|
103
99
|
|
104
100
|
def filter_builder
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamoid_advanced_where
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Malinconico
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dynamoid
|