couchbase 3.0.0.alpha.2-universal-darwin-19 → 3.0.0.alpha.3-universal-darwin-19
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 +4 -4
- data/.github/workflows/tests-dev-preview.yml +52 -0
- data/.gitmodules +3 -0
- data/.idea/vcs.xml +1 -0
- data/.yardopts +1 -0
- data/README.md +1 -1
- data/Rakefile +5 -1
- data/bin/init-cluster +13 -5
- data/couchbase.gemspec +2 -1
- data/examples/managing_query_indexes.rb +1 -1
- data/examples/managing_search_indexes.rb +62 -0
- data/examples/search.rb +187 -0
- data/ext/.clang-tidy +1 -0
- data/ext/build_version.hxx.in +1 -1
- data/ext/couchbase/bucket.hxx +0 -40
- data/ext/couchbase/couchbase.cxx +2578 -1368
- data/ext/couchbase/io/http_session.hxx +27 -7
- data/ext/couchbase/io/mcbp_parser.hxx +2 -0
- data/ext/couchbase/io/mcbp_session.hxx +53 -24
- data/ext/couchbase/io/session_manager.hxx +6 -1
- data/ext/couchbase/operations.hxx +13 -0
- data/ext/couchbase/operations/bucket_create.hxx +1 -0
- data/ext/couchbase/operations/bucket_drop.hxx +1 -0
- data/ext/couchbase/operations/bucket_flush.hxx +1 -0
- data/ext/couchbase/operations/bucket_get.hxx +1 -0
- data/ext/couchbase/operations/bucket_get_all.hxx +1 -0
- data/ext/couchbase/operations/bucket_update.hxx +1 -0
- data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +1 -0
- data/ext/couchbase/operations/collection_create.hxx +6 -1
- data/ext/couchbase/operations/collection_drop.hxx +1 -0
- data/ext/couchbase/operations/command.hxx +86 -11
- data/ext/couchbase/operations/document_decrement.hxx +1 -0
- data/ext/couchbase/operations/document_exists.hxx +1 -0
- data/ext/couchbase/operations/document_get.hxx +1 -0
- data/ext/couchbase/operations/document_get_and_lock.hxx +1 -0
- data/ext/couchbase/operations/document_get_and_touch.hxx +1 -0
- data/ext/couchbase/operations/document_get_projected.hxx +243 -0
- data/ext/couchbase/operations/document_increment.hxx +4 -1
- data/ext/couchbase/operations/document_insert.hxx +1 -0
- data/ext/couchbase/operations/document_lookup_in.hxx +1 -0
- data/ext/couchbase/operations/document_mutate_in.hxx +1 -0
- data/ext/couchbase/operations/document_query.hxx +13 -2
- data/ext/couchbase/operations/document_remove.hxx +1 -0
- data/ext/couchbase/operations/document_replace.hxx +1 -0
- data/ext/couchbase/operations/document_search.hxx +337 -0
- data/ext/couchbase/operations/document_touch.hxx +1 -0
- data/ext/couchbase/operations/document_unlock.hxx +1 -0
- data/ext/couchbase/operations/document_upsert.hxx +1 -0
- data/ext/couchbase/operations/query_index_build_deferred.hxx +1 -0
- data/ext/couchbase/operations/query_index_create.hxx +1 -0
- data/ext/couchbase/operations/query_index_drop.hxx +1 -0
- data/ext/couchbase/operations/query_index_get_all.hxx +1 -0
- data/ext/couchbase/operations/scope_create.hxx +1 -0
- data/ext/couchbase/operations/scope_drop.hxx +1 -0
- data/ext/couchbase/operations/scope_get_all.hxx +2 -0
- data/ext/couchbase/operations/search_index.hxx +62 -0
- data/ext/couchbase/operations/search_index_analyze_document.hxx +92 -0
- data/ext/couchbase/operations/search_index_control_ingest.hxx +78 -0
- data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +80 -0
- data/ext/couchbase/operations/search_index_control_query.hxx +80 -0
- data/ext/couchbase/operations/search_index_drop.hxx +77 -0
- data/ext/couchbase/operations/search_index_get.hxx +80 -0
- data/ext/couchbase/operations/search_index_get_all.hxx +82 -0
- data/ext/couchbase/operations/search_index_get_documents_count.hxx +81 -0
- data/ext/couchbase/operations/search_index_upsert.hxx +106 -0
- data/ext/couchbase/protocol/client_opcode.hxx +10 -0
- data/ext/couchbase/protocol/cmd_get_collection_id.hxx +117 -0
- data/ext/couchbase/timeout_defaults.hxx +32 -0
- data/ext/couchbase/version.hxx +1 -1
- data/ext/test/main.cxx +5 -5
- data/lib/couchbase/binary_collection.rb +16 -12
- data/lib/couchbase/binary_collection_options.rb +4 -0
- data/lib/couchbase/cluster.rb +88 -8
- data/lib/couchbase/collection.rb +39 -15
- data/lib/couchbase/collection_options.rb +19 -2
- data/lib/couchbase/json_transcoder.rb +2 -2
- data/lib/couchbase/management/bucket_manager.rb +37 -23
- data/lib/couchbase/management/collection_manager.rb +15 -6
- data/lib/couchbase/management/query_index_manager.rb +16 -6
- data/lib/couchbase/management/search_index_manager.rb +61 -14
- data/lib/couchbase/search_options.rb +1492 -0
- data/lib/couchbase/version.rb +1 -1
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5523baaeabe62572762a0af31a6636401970e9b8f760b071c855a9c59766e7ef
|
4
|
+
data.tar.gz: 860e1fd99369e1e075fbc80629e051f4f1f41515b2ee084a64c5342a35fea7a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7655d328ee6cd5b5b4d830deaf75053b0d5ccdd15ee77eafd188be81841c05f1433c560be08aa71a2b7ab58d59b5ff427fd1cee9ea095fb2874075b39c7b8023
|
7
|
+
data.tar.gz: 85510dc74b15eadecf816aa8b59938dad14d9e1dc118d3f6b665161a581d1d4493faadd5e6cdece784a22bd63e3d036e07f734848de65a13a4857be620501ca7
|
@@ -0,0 +1,52 @@
|
|
1
|
+
name: tests-dev-preview
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
services:
|
15
|
+
couchbase:
|
16
|
+
image: couchbase:enterprise-6.5.1
|
17
|
+
ports:
|
18
|
+
- 8091-8094:8091-8094
|
19
|
+
- 11210:11210
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- name: Install build environment
|
23
|
+
run: sudo apt-get install -y libssl-dev cmake gcc g++ curl
|
24
|
+
|
25
|
+
- uses: actions/checkout@v2
|
26
|
+
with:
|
27
|
+
submodules: recursive
|
28
|
+
|
29
|
+
- name: Set up ruby
|
30
|
+
uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: 2.6
|
33
|
+
|
34
|
+
- name: Install dependencies
|
35
|
+
run: bundle install
|
36
|
+
|
37
|
+
- name: Initialize couchbase
|
38
|
+
run: ./bin/init-cluster
|
39
|
+
env:
|
40
|
+
DEVELOPER_PREVIEW: yes
|
41
|
+
|
42
|
+
- name: Compile extension
|
43
|
+
run: bundle exec rake compile
|
44
|
+
|
45
|
+
- name: Display library version
|
46
|
+
run: bundle exec ruby -I lib -r couchbase -e 'pp Couchbase::VERSION'
|
47
|
+
|
48
|
+
- name: Run tests
|
49
|
+
run: bundle exec rake test
|
50
|
+
env:
|
51
|
+
DEVELOPER_PREVIEW: yes
|
52
|
+
TEST_SERVER_VERSION: 6.5.1
|
data/.gitmodules
CHANGED
data/.idea/vcs.xml
CHANGED
@@ -8,5 +8,6 @@
|
|
8
8
|
<mapping directory="$PROJECT_DIR$/ext/third_party/json" vcs="Git" />
|
9
9
|
<mapping directory="$PROJECT_DIR$/ext/third_party/snappy" vcs="Git" />
|
10
10
|
<mapping directory="$PROJECT_DIR$/ext/third_party/spdlog" vcs="Git" />
|
11
|
+
<mapping directory="$PROJECT_DIR$/test_data/sdk_test_cases" vcs="Git" />
|
11
12
|
</component>
|
12
13
|
</project>
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--output-dir doc/couchbase-ruby-client-master lib - README.md
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -33,12 +33,16 @@ task :doc do
|
|
33
33
|
input_dir = File.join(__dir__, "lib")
|
34
34
|
output_dir = File.join(__dir__, "doc", "couchbase-ruby-client-#{Couchbase::VERSION[:sdk]}")
|
35
35
|
rm_rf output_dir
|
36
|
-
sh "yard doc --output-dir #{output_dir} #{input_dir}"
|
36
|
+
sh "yard doc --output-dir #{output_dir} #{input_dir} - README.md"
|
37
37
|
puts "#{File.realpath(output_dir)}/index.html"
|
38
38
|
end
|
39
39
|
|
40
40
|
task :docs => :doc
|
41
41
|
|
42
|
+
task :undocumented => :doc do
|
43
|
+
sh "yard stats --list-undoc --compact"
|
44
|
+
end
|
45
|
+
|
42
46
|
task :render_git_revision do
|
43
47
|
build_version_path = File.join(__dir__, 'ext', 'build_version.hxx.in')
|
44
48
|
File.write(build_version_path, File.read(build_version_path).gsub('@BACKEND_GIT_REVISION@', `git rev-parse HEAD`.strip))
|
data/bin/init-cluster
CHANGED
@@ -14,9 +14,12 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
HOST
|
18
|
-
USERNAME
|
19
|
-
PASSWORD
|
17
|
+
HOST=${HOST:-localhost}
|
18
|
+
USERNAME=${USERNAME:-Administrator}
|
19
|
+
PASSWORD=${PASSWOWRD:-password}
|
20
|
+
QUOTA=${QUOTA:-256}
|
21
|
+
DEVELOPER_PREVIEW=${DEVELOPER_PREVIEW:-no}
|
22
|
+
|
20
23
|
CREDS="${USERNAME}:${PASSWORD}"
|
21
24
|
|
22
25
|
sleep 1
|
@@ -33,11 +36,11 @@ curl -sS -w "\n" -u ${CREDS} http://${HOST}:8091/nodes/self/controller/settings
|
|
33
36
|
|
34
37
|
# Setup Services
|
35
38
|
curl -sS -w "\n" -u ${CREDS} http://${HOST}:8091/node/controller/setupServices \
|
36
|
-
-d 'services=kv%2Cn1ql%2Cindex'
|
39
|
+
-d 'services=kv%2Cn1ql%2Cindex%2Cfts'
|
37
40
|
|
38
41
|
# Setup Memory Quotas
|
39
42
|
curl -sS -w "\n" -u ${CREDS} http://${HOST}:8091/pools/default \
|
40
|
-
-d
|
43
|
+
-d "memoryQuota=${QUOTA}" \
|
41
44
|
-d 'indexMemoryQuota=256'
|
42
45
|
|
43
46
|
# Setup Administrator username and password
|
@@ -60,3 +63,8 @@ curl -sS -w "\n" -u ${CREDS} http://${HOST}:8091/pools/default/buckets \
|
|
60
63
|
-d 'ramQuotaMB=100' \
|
61
64
|
-d 'bucketType=membase' \
|
62
65
|
-d 'name=default'
|
66
|
+
|
67
|
+
if [ "x${DEVELOPER_PREVIEW}" != "xno" ]; then
|
68
|
+
curl -sS -w "\n" -u ${CREDS} http://${HOST}:8091/settings/developerPreview \
|
69
|
+
-d "enabled=true"
|
70
|
+
fi
|
data/couchbase.gemspec
CHANGED
@@ -29,9 +29,10 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.metadata["homepage_uri"] = spec.homepage
|
30
30
|
spec.metadata["source_code_uri"] = "https://github.com/couchbase/couchbase-ruby-client"
|
31
31
|
spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/releases"
|
32
|
+
spec.metadata["github_repo"] = "ssh://github.com/couchbase/couchbase-ruby-client"
|
32
33
|
|
33
34
|
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
34
|
-
`git ls-files --recurse-submodules -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
35
|
+
`git ls-files --recurse-submodules -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|test_data)/}) }
|
35
36
|
end
|
36
37
|
spec.bindir = "exe"
|
37
38
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -28,7 +28,7 @@ bucket_name = "beer-sample"
|
|
28
28
|
|
29
29
|
options = Cluster::ClusterOptions.new
|
30
30
|
options.authenticate("Administrator", "password")
|
31
|
-
cluster = Cluster.connect("couchbase://
|
31
|
+
cluster = Cluster.connect("couchbase://localhost", options)
|
32
32
|
|
33
33
|
display_indexes(cluster.query_indexes.get_all_indexes(bucket_name), bucket_name)
|
34
34
|
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "couchbase"
|
2
|
+
include Couchbase
|
3
|
+
|
4
|
+
def measure(msg)
|
5
|
+
start = Time.now
|
6
|
+
yield
|
7
|
+
printf "%s in %.2f seconds\n", msg, Time.now - start
|
8
|
+
end
|
9
|
+
|
10
|
+
options = Cluster::ClusterOptions.new
|
11
|
+
options.authenticate("Administrator", "password")
|
12
|
+
cluster = Cluster.connect("couchbase://localhost", options)
|
13
|
+
|
14
|
+
search_indexes = cluster.search_indexes.get_all_indexes
|
15
|
+
puts "There are #{search_indexes.size} search indexes on the cluster"
|
16
|
+
search_indexes.each do |index|
|
17
|
+
num_docs = cluster.search_indexes.get_indexed_documents_count(index.name)
|
18
|
+
puts "* #{index.name.inspect} contains #{num_docs} documents"
|
19
|
+
end
|
20
|
+
|
21
|
+
search_index_name = "my_index"
|
22
|
+
begin
|
23
|
+
index = cluster.search_indexes.get_index(search_index_name)
|
24
|
+
measure("index #{index.name.inspect} has been dropped") do
|
25
|
+
cluster.search_indexes.drop_index(index.name)
|
26
|
+
end
|
27
|
+
rescue Error::IndexNotFound
|
28
|
+
# Ignored
|
29
|
+
end
|
30
|
+
|
31
|
+
index = Management::SearchIndex.new
|
32
|
+
index.type = "fulltext-index"
|
33
|
+
index.name = search_index_name
|
34
|
+
index.source_type = "couchbase"
|
35
|
+
index.source_name = "beer-sample"
|
36
|
+
|
37
|
+
measure("index #{search_index_name.inspect} has been created") do
|
38
|
+
cluster.search_indexes.upsert_index(index)
|
39
|
+
end
|
40
|
+
num_indexed = 0
|
41
|
+
loop do
|
42
|
+
sleep(1)
|
43
|
+
num = cluster.search_indexes.get_indexed_documents_count(search_index_name)
|
44
|
+
break if num_indexed == num
|
45
|
+
num_indexed = num
|
46
|
+
puts "#{index.name.inspect} indexed #{num_indexed}"
|
47
|
+
end
|
48
|
+
|
49
|
+
search_indexes = cluster.search_indexes.get_all_indexes
|
50
|
+
puts "There are #{search_indexes.size} search indexes on the cluster"
|
51
|
+
search_indexes.each do |index|
|
52
|
+
num_docs = cluster.search_indexes.get_indexed_documents_count(index.name)
|
53
|
+
puts "* #{index.name.inspect} contains #{num_docs} documents"
|
54
|
+
end
|
55
|
+
|
56
|
+
document = {
|
57
|
+
title: "Hello world",
|
58
|
+
content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
|
59
|
+
}
|
60
|
+
analysis = cluster.search_indexes.analyze_document(search_index_name, document)
|
61
|
+
puts "Analysis of document using definition of the index #{search_index_name}:"
|
62
|
+
pp analysis
|
data/examples/search.rb
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'couchbase'
|
2
|
+
|
3
|
+
include Couchbase
|
4
|
+
|
5
|
+
options = Cluster::ClusterOptions.new
|
6
|
+
options.authenticate("Administrator", "password")
|
7
|
+
cluster = Cluster.connect("couchbase://localhost", options)
|
8
|
+
|
9
|
+
# create index definition, if it does not exist already
|
10
|
+
search_index_name = "beer_search"
|
11
|
+
|
12
|
+
begin
|
13
|
+
cluster.search_indexes.get_index(search_index_name)
|
14
|
+
rescue Error::IndexNotFound
|
15
|
+
index = Management::SearchIndex.new
|
16
|
+
index.type = "fulltext-index"
|
17
|
+
index.name = search_index_name
|
18
|
+
index.source_type = "couchbase"
|
19
|
+
index.source_name = "beer-sample"
|
20
|
+
index.params = {
|
21
|
+
mapping: {
|
22
|
+
default_datetime_parser: "dateTimeOptional",
|
23
|
+
types: {
|
24
|
+
"beer" => {
|
25
|
+
properties: {
|
26
|
+
"abv" => {
|
27
|
+
fields: [
|
28
|
+
{
|
29
|
+
name: "abv",
|
30
|
+
type: "number",
|
31
|
+
include_in_all: true,
|
32
|
+
index: true,
|
33
|
+
store: true,
|
34
|
+
docvalues: true,
|
35
|
+
}
|
36
|
+
]
|
37
|
+
},
|
38
|
+
"category" => {
|
39
|
+
fields: [
|
40
|
+
{
|
41
|
+
name: "category",
|
42
|
+
type: "text",
|
43
|
+
include_in_all: true,
|
44
|
+
include_term_vectors: true,
|
45
|
+
index: true,
|
46
|
+
store: true,
|
47
|
+
docvalues: true,
|
48
|
+
}
|
49
|
+
]
|
50
|
+
},
|
51
|
+
"description" => {
|
52
|
+
fields: [
|
53
|
+
{
|
54
|
+
name: "description",
|
55
|
+
type: "text",
|
56
|
+
include_in_all: true,
|
57
|
+
include_term_vectors: true,
|
58
|
+
index: true,
|
59
|
+
store: true,
|
60
|
+
docvalues: true,
|
61
|
+
}
|
62
|
+
]
|
63
|
+
},
|
64
|
+
"name" => {
|
65
|
+
fields: [
|
66
|
+
{
|
67
|
+
name: "name",
|
68
|
+
type: "text",
|
69
|
+
include_in_all: true,
|
70
|
+
include_term_vectors: true,
|
71
|
+
index: true,
|
72
|
+
store: true,
|
73
|
+
docvalues: true,
|
74
|
+
}
|
75
|
+
]
|
76
|
+
},
|
77
|
+
"style" => {
|
78
|
+
fields: [
|
79
|
+
{
|
80
|
+
name: "style",
|
81
|
+
type: "text",
|
82
|
+
include_in_all: true,
|
83
|
+
include_term_vectors: true,
|
84
|
+
index: true,
|
85
|
+
store: true,
|
86
|
+
docvalues: true,
|
87
|
+
}
|
88
|
+
]
|
89
|
+
},
|
90
|
+
"updated" => {
|
91
|
+
fields: [
|
92
|
+
{
|
93
|
+
name: "updated",
|
94
|
+
type: "datetime",
|
95
|
+
include_in_all: true,
|
96
|
+
index: true,
|
97
|
+
store: true,
|
98
|
+
docvalues: true,
|
99
|
+
}
|
100
|
+
]
|
101
|
+
},
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
cluster.search_indexes.upsert_index(index)
|
109
|
+
|
110
|
+
num_indexed = 0
|
111
|
+
loop do
|
112
|
+
sleep(1)
|
113
|
+
num = cluster.search_indexes.get_indexed_documents_count(search_index_name)
|
114
|
+
break if num_indexed == num
|
115
|
+
num_indexed = num
|
116
|
+
puts "indexing #{search_index_name.inspect}: #{num_indexed} documents"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# search with facets advanced sort
|
121
|
+
query = Cluster::SearchQuery.match_phrase("hop beer")
|
122
|
+
options = Cluster::SearchOptions.new
|
123
|
+
options.limit = 10
|
124
|
+
options.fields = %w[name]
|
125
|
+
options.highlight_style = :html
|
126
|
+
options.highlight_fields = %w[name description]
|
127
|
+
options.sort = [
|
128
|
+
Cluster::SearchSort.field("abv") do |spec|
|
129
|
+
spec.type = :number
|
130
|
+
end,
|
131
|
+
Cluster::SearchSort.score do |spec|
|
132
|
+
spec.desc = true
|
133
|
+
end,
|
134
|
+
"category",
|
135
|
+
Cluster::SearchSort.id,
|
136
|
+
]
|
137
|
+
|
138
|
+
res = cluster.search_query(search_index_name, query, options)
|
139
|
+
res.rows.each_with_index do |row, idx|
|
140
|
+
document = row.fields
|
141
|
+
puts "\n#{idx}. #{document["name"]} (id: #{row.id.inspect})"
|
142
|
+
row.fragments.each do |field, fragments|
|
143
|
+
puts " * #{field}"
|
144
|
+
fragments.each do |fragment|
|
145
|
+
puts " - #{fragment.gsub(/\n/, ' ')}"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# search with facets
|
151
|
+
query = Cluster::SearchQuery.term("beer")
|
152
|
+
query.field = "type"
|
153
|
+
|
154
|
+
options = Cluster::SearchOptions.new
|
155
|
+
options.facets = {}
|
156
|
+
|
157
|
+
term_facet = Cluster::SearchFacet.term("name")
|
158
|
+
term_facet.size = 3
|
159
|
+
options.facets["by_name"] = term_facet
|
160
|
+
|
161
|
+
date_facet = Cluster::SearchFacet.date_range("updated")
|
162
|
+
date_facet.add("old", nil, Time.new(2013, 1, 1))
|
163
|
+
date_facet.size = 3
|
164
|
+
options.facets["by_time"] = date_facet
|
165
|
+
|
166
|
+
numeric_facet = Cluster::SearchFacet.numeric_range("abv")
|
167
|
+
numeric_facet.size = 3
|
168
|
+
numeric_facet.add("strong", 4.9, nil)
|
169
|
+
numeric_facet.add("light", nil, 4.89)
|
170
|
+
options.facets["by_strength"] = numeric_facet
|
171
|
+
|
172
|
+
res = cluster.search_query(search_index_name, query, options)
|
173
|
+
|
174
|
+
puts "\n==== Top 3 beer names (out of #{res.facets["by_name"].total}):"
|
175
|
+
res.facets["by_name"].terms.each_with_index do |term, idx|
|
176
|
+
puts "#{idx}. #{term.term} (#{term.count} records)"
|
177
|
+
end
|
178
|
+
|
179
|
+
puts "\n==== Beer by strength (out of #{res.facets["by_strength"].total}):"
|
180
|
+
res.facets["by_strength"].numeric_ranges.each_with_index do |range, idx|
|
181
|
+
puts "#{idx}. #{range.name}, ABV: [#{range.min}..#{range.max}] (#{range.count} records)"
|
182
|
+
end
|
183
|
+
|
184
|
+
puts "\n==== The most recently updated (out of #{res.facets["by_time"].total}):"
|
185
|
+
res.facets["by_time"].date_ranges.each_with_index do |range, idx|
|
186
|
+
puts "#{idx}. #{range.name} [#{range.start_time}..#{range.end_time}] (#{range.count} records)"
|
187
|
+
end
|
data/ext/.clang-tidy
CHANGED
data/ext/build_version.hxx.in
CHANGED
@@ -22,5 +22,5 @@
|
|
22
22
|
#define BACKEND_C_COMPILER "@CMAKE_C_COMPILER_ID@ @CMAKE_C_COMPILER_VERSION@"
|
23
23
|
#define BACKEND_SYSTEM "@CMAKE_SYSTEM@"
|
24
24
|
#define BACKEND_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@"
|
25
|
-
#define BACKEND_GIT_REVISION "
|
25
|
+
#define BACKEND_GIT_REVISION "86b887957baf7230bfbe853de48b4507b9c2c18d"
|
26
26
|
|
data/ext/couchbase/bucket.hxx
CHANGED
@@ -24,7 +24,6 @@
|
|
24
24
|
|
25
25
|
namespace couchbase
|
26
26
|
{
|
27
|
-
|
28
27
|
class bucket
|
29
28
|
{
|
30
29
|
public:
|
@@ -51,16 +50,6 @@ class bucket
|
|
51
50
|
return;
|
52
51
|
}
|
53
52
|
|
54
|
-
auto session_manifest = session->manifest();
|
55
|
-
if (!manifest_cache_) {
|
56
|
-
if (session_manifest) {
|
57
|
-
manifest_cache_ = session_manifest.value();
|
58
|
-
}
|
59
|
-
} else {
|
60
|
-
if (session_manifest && session_manifest->uid > manifest_cache_->uid) {
|
61
|
-
manifest_cache_ = session->manifest().value();
|
62
|
-
}
|
63
|
-
}
|
64
53
|
sessions_.emplace(index, std::move(session));
|
65
54
|
}
|
66
55
|
|
@@ -81,14 +70,6 @@ class bucket
|
|
81
70
|
size_t index = 0;
|
82
71
|
std::tie(request.partition, index) = config_.map_key(request.id.key);
|
83
72
|
auto session = sessions_.at(index);
|
84
|
-
if (manifest_cache_) {
|
85
|
-
request.id.collection_uid = get_collection_uid(request.id.collection);
|
86
|
-
} else {
|
87
|
-
if (!request.id.collection.empty() && request.id.collection != "_default._default") {
|
88
|
-
handler(make_response(std::make_error_code(error::common_errc::unsupported_operation), request, {}));
|
89
|
-
return;
|
90
|
-
}
|
91
|
-
}
|
92
73
|
auto cmd = std::make_shared<operations::command<Request>>(ctx_, std::move(request));
|
93
74
|
cmd->send_to(session, std::forward<Handler>(handler));
|
94
75
|
}
|
@@ -105,32 +86,11 @@ class bucket
|
|
105
86
|
}
|
106
87
|
|
107
88
|
private:
|
108
|
-
[[nodiscard]] uint32_t get_collection_uid(const std::string& collection_path)
|
109
|
-
{
|
110
|
-
Expects(manifest_cache_.has_value());
|
111
|
-
Expects(!collection_path.empty());
|
112
|
-
auto dot = collection_path.find('.');
|
113
|
-
Expects(dot != std::string::npos);
|
114
|
-
std::string scope = collection_path.substr(0, dot);
|
115
|
-
std::string collection = collection_path.substr(dot + 1);
|
116
|
-
for (const auto& s : manifest_cache_->scopes) {
|
117
|
-
if (s.name == scope) {
|
118
|
-
for (const auto& c : s.collections) {
|
119
|
-
if (c.name == collection) {
|
120
|
-
return gsl::narrow_cast<std::uint32_t>(c.uid);
|
121
|
-
}
|
122
|
-
}
|
123
|
-
}
|
124
|
-
}
|
125
|
-
Ensures(false); // FIXME: return collection not found
|
126
|
-
return 0;
|
127
|
-
}
|
128
89
|
|
129
90
|
asio::io_context& ctx_;
|
130
91
|
std::string name_;
|
131
92
|
configuration config_;
|
132
93
|
bool closed_{ false };
|
133
|
-
std::optional<collections_manifest> manifest_cache_{};
|
134
94
|
std::map<size_t, std::shared_ptr<io::mcbp_session>> sessions_{};
|
135
95
|
};
|
136
96
|
} // namespace couchbase
|