couchbase 3.5.3-arm64-darwin

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.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +202 -0
  3. data/README.md +154 -0
  4. data/ext/extconf.rb +0 -0
  5. data/lib/active_support/cache/couchbase_store.rb +342 -0
  6. data/lib/couchbase/3.1/libcouchbase.bundle +0 -0
  7. data/lib/couchbase/3.2/libcouchbase.bundle +0 -0
  8. data/lib/couchbase/3.3/libcouchbase.bundle +0 -0
  9. data/lib/couchbase/analytics_options.rb +109 -0
  10. data/lib/couchbase/authenticator.rb +66 -0
  11. data/lib/couchbase/binary_collection.rb +130 -0
  12. data/lib/couchbase/binary_collection_options.rb +26 -0
  13. data/lib/couchbase/bucket.rb +146 -0
  14. data/lib/couchbase/cluster.rb +462 -0
  15. data/lib/couchbase/cluster_registry.rb +49 -0
  16. data/lib/couchbase/collection.rb +707 -0
  17. data/lib/couchbase/collection_options.rb +401 -0
  18. data/lib/couchbase/config_profiles.rb +57 -0
  19. data/lib/couchbase/configuration.rb +58 -0
  20. data/lib/couchbase/datastructures/couchbase_list.rb +160 -0
  21. data/lib/couchbase/datastructures/couchbase_map.rb +194 -0
  22. data/lib/couchbase/datastructures/couchbase_queue.rb +134 -0
  23. data/lib/couchbase/datastructures/couchbase_set.rb +128 -0
  24. data/lib/couchbase/datastructures.rb +26 -0
  25. data/lib/couchbase/diagnostics.rb +183 -0
  26. data/lib/couchbase/errors.rb +414 -0
  27. data/lib/couchbase/json_transcoder.rb +41 -0
  28. data/lib/couchbase/key_value_scan.rb +119 -0
  29. data/lib/couchbase/libcouchbase.rb +6 -0
  30. data/lib/couchbase/logger.rb +87 -0
  31. data/lib/couchbase/management/analytics_index_manager.rb +1129 -0
  32. data/lib/couchbase/management/bucket_manager.rb +445 -0
  33. data/lib/couchbase/management/collection_manager.rb +472 -0
  34. data/lib/couchbase/management/collection_query_index_manager.rb +224 -0
  35. data/lib/couchbase/management/query_index_manager.rb +619 -0
  36. data/lib/couchbase/management/scope_search_index_manager.rb +200 -0
  37. data/lib/couchbase/management/search_index_manager.rb +426 -0
  38. data/lib/couchbase/management/user_manager.rb +470 -0
  39. data/lib/couchbase/management/view_index_manager.rb +239 -0
  40. data/lib/couchbase/management.rb +31 -0
  41. data/lib/couchbase/mutation_state.rb +65 -0
  42. data/lib/couchbase/options.rb +2846 -0
  43. data/lib/couchbase/protostellar/binary_collection.rb +55 -0
  44. data/lib/couchbase/protostellar/bucket.rb +55 -0
  45. data/lib/couchbase/protostellar/client.rb +99 -0
  46. data/lib/couchbase/protostellar/cluster.rb +171 -0
  47. data/lib/couchbase/protostellar/collection.rb +152 -0
  48. data/lib/couchbase/protostellar/connect_options.rb +63 -0
  49. data/lib/couchbase/protostellar/error_handling.rb +203 -0
  50. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +61 -0
  51. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +35 -0
  52. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +57 -0
  53. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +36 -0
  54. data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +61 -0
  55. data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +37 -0
  56. data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +72 -0
  57. data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +44 -0
  58. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +52 -0
  59. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +30 -0
  60. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +70 -0
  61. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +36 -0
  62. data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +97 -0
  63. data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +46 -0
  64. data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +57 -0
  65. data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +30 -0
  66. data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +52 -0
  67. data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +30 -0
  68. data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +99 -0
  69. data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +30 -0
  70. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +57 -0
  71. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +36 -0
  72. data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +51 -0
  73. data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +30 -0
  74. data/lib/couchbase/protostellar/generated.rb +9 -0
  75. data/lib/couchbase/protostellar/management/bucket_manager.rb +67 -0
  76. data/lib/couchbase/protostellar/management/collection_manager.rb +94 -0
  77. data/lib/couchbase/protostellar/management/collection_query_index_manager.rb +124 -0
  78. data/lib/couchbase/protostellar/management/query_index_manager.rb +112 -0
  79. data/lib/couchbase/protostellar/management.rb +24 -0
  80. data/lib/couchbase/protostellar/request.rb +78 -0
  81. data/lib/couchbase/protostellar/request_behaviour.rb +42 -0
  82. data/lib/couchbase/protostellar/request_generator/admin/bucket.rb +124 -0
  83. data/lib/couchbase/protostellar/request_generator/admin/collection.rb +94 -0
  84. data/lib/couchbase/protostellar/request_generator/admin/query.rb +130 -0
  85. data/lib/couchbase/protostellar/request_generator/admin.rb +24 -0
  86. data/lib/couchbase/protostellar/request_generator/kv.rb +474 -0
  87. data/lib/couchbase/protostellar/request_generator/query.rb +133 -0
  88. data/lib/couchbase/protostellar/request_generator/search.rb +387 -0
  89. data/lib/couchbase/protostellar/request_generator.rb +26 -0
  90. data/lib/couchbase/protostellar/response_converter/admin/bucket.rb +55 -0
  91. data/lib/couchbase/protostellar/response_converter/admin/collection.rb +42 -0
  92. data/lib/couchbase/protostellar/response_converter/admin/query.rb +59 -0
  93. data/lib/couchbase/protostellar/response_converter/admin.rb +24 -0
  94. data/lib/couchbase/protostellar/response_converter/kv.rb +151 -0
  95. data/lib/couchbase/protostellar/response_converter/query.rb +84 -0
  96. data/lib/couchbase/protostellar/response_converter/search.rb +136 -0
  97. data/lib/couchbase/protostellar/response_converter.rb +26 -0
  98. data/lib/couchbase/protostellar/retry/action.rb +38 -0
  99. data/lib/couchbase/protostellar/retry/orchestrator.rb +60 -0
  100. data/lib/couchbase/protostellar/retry/reason.rb +67 -0
  101. data/lib/couchbase/protostellar/retry/strategies/best_effort.rb +49 -0
  102. data/lib/couchbase/protostellar/retry/strategies.rb +26 -0
  103. data/lib/couchbase/protostellar/retry.rb +28 -0
  104. data/lib/couchbase/protostellar/scope.rb +57 -0
  105. data/lib/couchbase/protostellar/timeout_defaults.rb +30 -0
  106. data/lib/couchbase/protostellar/timeouts.rb +83 -0
  107. data/lib/couchbase/protostellar.rb +29 -0
  108. data/lib/couchbase/query_options.rb +122 -0
  109. data/lib/couchbase/railtie.rb +47 -0
  110. data/lib/couchbase/raw_binary_transcoder.rb +39 -0
  111. data/lib/couchbase/raw_json_transcoder.rb +40 -0
  112. data/lib/couchbase/raw_string_transcoder.rb +42 -0
  113. data/lib/couchbase/scope.rb +258 -0
  114. data/lib/couchbase/search_options.rb +1650 -0
  115. data/lib/couchbase/subdoc.rb +293 -0
  116. data/lib/couchbase/transcoder_flags.rb +64 -0
  117. data/lib/couchbase/utils/generic_logger_adapter.rb +40 -0
  118. data/lib/couchbase/utils/stdlib_logger_adapter.rb +67 -0
  119. data/lib/couchbase/utils/time.rb +71 -0
  120. data/lib/couchbase/utils.rb +23 -0
  121. data/lib/couchbase/version.rb +25 -0
  122. data/lib/couchbase/view_options.rb +67 -0
  123. data/lib/couchbase.rb +30 -0
  124. data/lib/rails/generators/couchbase/config/config_generator.rb +29 -0
  125. metadata +190 -0
@@ -0,0 +1,258 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2020-2021 Couchbase, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require "couchbase/collection"
18
+ require "couchbase/query_options"
19
+ require "couchbase/analytics_options"
20
+
21
+ module Couchbase
22
+ # The scope identifies a group of collections and allows high application density as a result.
23
+ class Scope
24
+ attr_reader :bucket_name
25
+ attr_reader :name
26
+
27
+ alias inspect to_s
28
+
29
+ # @param [Couchbase::Backend] backend
30
+ # @param [String] bucket_name name of the bucket
31
+ # @param [String] scope_name name of the scope
32
+ def initialize(backend, bucket_name, scope_name)
33
+ @backend = backend
34
+ @bucket_name = bucket_name
35
+ @name = scope_name
36
+ end
37
+
38
+ # Opens the default collection for this scope
39
+ #
40
+ # @param [String] collection_name name of the collection
41
+ #
42
+ # @return [Collection]
43
+ def collection(collection_name)
44
+ Collection.new(@backend, @bucket_name, @name, collection_name)
45
+ end
46
+
47
+ # Performs a query against the query (N1QL) services.
48
+ #
49
+ # The query will be implicitly scoped using current bucket and scope names.
50
+ #
51
+ # @see Options::Query#scope_qualifier
52
+ # @see Cluster#query
53
+ #
54
+ # @param [String] statement the N1QL query statement
55
+ # @param [Options::Query] options the custom options for this query
56
+ #
57
+ # @example Select first ten hotels from travel sample dataset
58
+ # scope.query("SELECT * FROM `travel-sample` WHERE type = $type LIMIT 10",
59
+ # Options::Query(named_parameters: {type: "hotel"}, metrics: true))
60
+ #
61
+ # @return [QueryResult]
62
+ def query(statement, options = Options::Query::DEFAULT)
63
+ resp = @backend.document_query(statement, options.to_backend(scope_name: @name, bucket_name: @bucket_name))
64
+
65
+ Cluster::QueryResult.new do |res|
66
+ res.meta_data = Cluster::QueryMetaData.new do |meta|
67
+ meta.status = resp[:meta][:status]
68
+ meta.request_id = resp[:meta][:request_id]
69
+ meta.client_context_id = resp[:meta][:client_context_id]
70
+ meta.signature = JSON.parse(resp[:meta][:signature]) if resp[:meta][:signature]
71
+ meta.profile = JSON.parse(resp[:meta][:profile]) if resp[:meta][:profile]
72
+ meta.metrics = Cluster::QueryMetrics.new do |metrics|
73
+ if resp[:meta][:metrics]
74
+ metrics.elapsed_time = resp[:meta][:metrics][:elapsed_time]
75
+ metrics.execution_time = resp[:meta][:metrics][:execution_time]
76
+ metrics.sort_count = resp[:meta][:metrics][:sort_count]
77
+ metrics.result_count = resp[:meta][:metrics][:result_count]
78
+ metrics.result_size = resp[:meta][:metrics][:result_size]
79
+ metrics.mutation_count = resp[:meta][:metrics][:mutation_count]
80
+ metrics.error_count = resp[:meta][:metrics][:error_count]
81
+ metrics.warning_count = resp[:meta][:metrics][:warning_count]
82
+ end
83
+ end
84
+ meta.warnings = resp[:warnings].map { |warn| Cluster::QueryWarning.new(warn[:code], warn[:message]) } if resp[:warnings]
85
+ end
86
+ res.instance_variable_set(:@rows, resp[:rows])
87
+ end
88
+ end
89
+
90
+ # Performs an analytics query
91
+ #
92
+ # The query will be implicitly scoped using current bucket and scope names.
93
+ #
94
+ # @param [String] statement the N1QL query statement
95
+ # @param [Options::Analytics] options the custom options for this query
96
+ #
97
+ # @example Select name of the given user
98
+ # scope.analytics_query("SELECT u.name AS uname FROM GleambookUsers u WHERE u.id = $user_id ",
99
+ # Options::Analytics(named_parameters: {user_id: 2}))
100
+ #
101
+ # @return [AnalyticsResult]
102
+ def analytics_query(statement, options = Options::Analytics::DEFAULT)
103
+ resp = @backend.document_analytics(statement, options.to_backend(scope_name: @name, bucket_name: @bucket_name))
104
+
105
+ Cluster::AnalyticsResult.new do |res|
106
+ res.transcoder = options.transcoder
107
+ res.meta_data = Cluster::AnalyticsMetaData.new do |meta|
108
+ meta.status = resp[:meta][:status]
109
+ meta.request_id = resp[:meta][:request_id]
110
+ meta.client_context_id = resp[:meta][:client_context_id]
111
+ meta.signature = JSON.parse(resp[:meta][:signature]) if resp[:meta][:signature]
112
+ meta.profile = JSON.parse(resp[:meta][:profile]) if resp[:meta][:profile]
113
+ meta.metrics = Cluster::AnalyticsMetrics.new do |metrics|
114
+ if resp[:meta][:metrics]
115
+ metrics.elapsed_time = resp[:meta][:metrics][:elapsed_time]
116
+ metrics.execution_time = resp[:meta][:metrics][:execution_time]
117
+ metrics.result_count = resp[:meta][:metrics][:result_count]
118
+ metrics.result_size = resp[:meta][:metrics][:result_size]
119
+ metrics.error_count = resp[:meta][:metrics][:error_count]
120
+ metrics.warning_count = resp[:meta][:metrics][:warning_count]
121
+ metrics.processed_objects = resp[:meta][:metrics][:processed_objects]
122
+ end
123
+ end
124
+ res[:warnings] = resp[:warnings].map { |warn| Cluster::AnalyticsWarning.new(warn[:code], warn[:message]) } if resp[:warnings]
125
+ end
126
+ res.instance_variable_set(:@rows, resp[:rows])
127
+ end
128
+ end
129
+
130
+ # Performs a Full Text Search (FTS) query
131
+ #
132
+ # @param [String] index_name the name of the search index
133
+ # @param [SearchQuery] query the query tree
134
+ # @param [Options::Search] options the query tree
135
+ #
136
+ # @example Return first 10 results of "hop beer" query and request highlighting
137
+ # cluster.search_query("travel_index", Cluster::SearchQuery.match_phrase("green"),
138
+ # Options::Search(
139
+ # limit: 10,
140
+ # collections: ["landmark", "hotel"]
141
+ # fields: %w[name],
142
+ # highlight_style: :html,
143
+ # highlight_fields: %w[name description]
144
+ # ))
145
+ #
146
+ # @return [SearchResult]
147
+ def search_query(index_name, query, options = Options::Search::DEFAULT)
148
+ resp = @backend.document_search(@bucket_name, @name, index_name, JSON.generate(query), {}, options.to_backend)
149
+ convert_search_result(resp, options)
150
+ end
151
+
152
+ # Performs a request against the Full Text Search (FTS) service.
153
+ #
154
+ # @param [String] index_name the name of the search index
155
+ # @param [SearchRequest] search_request the request
156
+ # @param [Options::Search] options the custom options for this search request
157
+ #
158
+ # @return [SearchResult]
159
+ def search(index_name, search_request, options = Options::Search::DEFAULT)
160
+ encoded_query, encoded_req = search_request.to_backend
161
+ resp = @backend.document_search(@bucket_name, @name, index_name, encoded_query, encoded_req, options.to_backend(show_request: false))
162
+ convert_search_result(resp, options)
163
+ end
164
+
165
+ # @return [Management::ScopeSearchIndexManager]
166
+ def search_indexes
167
+ Management::ScopeSearchIndexManager.new(@backend, @bucket_name, @name)
168
+ end
169
+
170
+ private
171
+
172
+ # @api private
173
+ def convert_search_result(resp, options)
174
+ SearchResult.new do |res|
175
+ res.meta_data = SearchMetaData.new do |meta|
176
+ meta.metrics.max_score = resp[:meta_data][:metrics][:max_score]
177
+ meta.metrics.error_partition_count = resp[:meta_data][:metrics][:error_partition_count]
178
+ meta.metrics.success_partition_count = resp[:meta_data][:metrics][:success_partition_count]
179
+ meta.metrics.took = resp[:meta_data][:metrics][:took]
180
+ meta.metrics.total_rows = resp[:meta_data][:metrics][:total_rows]
181
+ meta.errors = resp[:meta_data][:errors]
182
+ end
183
+ res.rows = resp[:rows].map do |r|
184
+ SearchRow.new do |row|
185
+ row.transcoder = options.transcoder
186
+ row.index = r[:index]
187
+ row.id = r[:id]
188
+ row.score = r[:score]
189
+ row.fragments = r[:fragments]
190
+ unless r[:locations].empty?
191
+ row.locations = SearchRowLocations.new(
192
+ r[:locations].map do |loc|
193
+ SearchRowLocation.new do |location|
194
+ location.field = loc[:field]
195
+ location.term = loc[:term]
196
+ location.position = loc[:position]
197
+ location.start_offset = loc[:start_offset]
198
+ location.end_offset = loc[:end_offset]
199
+ location.array_positions = loc[:array_positions]
200
+ end
201
+ end
202
+ )
203
+ end
204
+ row.instance_variable_set(:@fields, r[:fields])
205
+ row.explanation = JSON.parse(r[:explanation]) if r[:explanation]
206
+ end
207
+ end
208
+ if resp[:facets]
209
+ res.facets = resp[:facets].each_with_object({}) do |(k, v), o|
210
+ facet = case options.facets[k]
211
+ when SearchFacet::SearchFacetTerm
212
+ SearchFacetResult::TermFacetResult.new do |f|
213
+ f.terms =
214
+ if v[:terms]
215
+ v[:terms].map do |t|
216
+ SearchFacetResult::TermFacetResult::TermFacet.new(t[:term], t[:count])
217
+ end
218
+ else
219
+ []
220
+ end
221
+ end
222
+ when SearchFacet::SearchFacetDateRange
223
+ SearchFacetResult::DateRangeFacetResult.new do |f|
224
+ f.date_ranges =
225
+ if v[:date_ranges]
226
+ v[:date_ranges].map do |r|
227
+ SearchFacetResult::DateRangeFacetResult::DateRangeFacet.new(r[:name], r[:count], r[:start_time], r[:end_time])
228
+ end
229
+ else
230
+ []
231
+ end
232
+ end
233
+ when SearchFacet::SearchFacetNumericRange
234
+ SearchFacetResult::NumericRangeFacetResult.new do |f|
235
+ f.numeric_ranges =
236
+ if v[:numeric_ranges]
237
+ v[:numeric_ranges].map do |r|
238
+ SearchFacetResult::NumericRangeFacetResult::NumericRangeFacet.new(r[:name], r[:count], r[:min], r[:max])
239
+ end
240
+ else
241
+ []
242
+ end
243
+ end
244
+ else
245
+ next # ignore unknown facet result
246
+ end
247
+ facet.name = v[:name]
248
+ facet.field = v[:field]
249
+ facet.total = v[:total]
250
+ facet.missing = v[:missing]
251
+ facet.other = v[:other]
252
+ o[k] = facet
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end