couchbase 4.2.5 → 4.2.6-dev.1
Sign up to get free protection for your applications and to get access to all the features.
- package/deps/couchbase-cxx-client/CMakeLists.txt +9 -1
- package/deps/couchbase-cxx-client/bin/api.rb +234 -0
- package/deps/couchbase-cxx-client/bin/create-search-index +18 -135
- package/deps/couchbase-cxx-client/bin/init-cluster +17 -139
- package/deps/couchbase-cxx-client/bin/load-sample-buckets +54 -0
- package/deps/couchbase-cxx-client/core/cluster.hxx +33 -12
- package/deps/couchbase-cxx-client/core/cluster_options.hxx +3 -0
- package/deps/couchbase-cxx-client/core/crud_component.cxx +51 -22
- package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +115 -50
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +6 -0
- package/deps/couchbase-cxx-client/core/impl/create_bucket.cxx +155 -0
- package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +172 -59
- package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +2 -1
- package/deps/couchbase-cxx-client/core/impl/drop_bucket.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +138 -59
- package/deps/couchbase-cxx-client/core/impl/flush_bucket.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/get_all_buckets.cxx +163 -0
- package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +67 -37
- package/deps/couchbase-cxx-client/core/impl/get_bucket.cxx +153 -0
- package/deps/couchbase-cxx-client/core/impl/internal_manager_error_context.cxx +113 -0
- package/deps/couchbase-cxx-client/core/impl/internal_manager_error_context.hxx +60 -0
- package/deps/couchbase-cxx-client/core/impl/key_value_error_category.cxx +2 -4
- package/deps/couchbase-cxx-client/core/impl/manager_error_context.cxx +100 -0
- package/deps/couchbase-cxx-client/core/impl/query.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/update_bucket.cxx +130 -0
- package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +53 -29
- package/deps/couchbase-cxx-client/core/io/dns_client.cxx +71 -38
- package/deps/couchbase-cxx-client/core/io/dns_config.cxx +5 -4
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +5 -6
- package/deps/couchbase-cxx-client/core/meta/features.hxx +6 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.cxx +11 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -0
- package/deps/couchbase-cxx-client/core/origin.cxx +270 -0
- package/deps/couchbase-cxx-client/core/origin.hxx +2 -0
- package/deps/couchbase-cxx-client/core/protocol/status.cxx +2 -2
- package/deps/couchbase-cxx-client/core/range_scan_options.cxx +3 -27
- package/deps/couchbase-cxx-client/core/range_scan_options.hxx +13 -17
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +367 -170
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.hxx +13 -2
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator_options.hxx +5 -3
- package/deps/couchbase-cxx-client/core/scan_options.hxx +0 -19
- package/deps/couchbase-cxx-client/core/scan_result.cxx +19 -5
- package/deps/couchbase-cxx-client/core/scan_result.hxx +5 -2
- package/deps/couchbase-cxx-client/core/timeout_defaults.hxx +2 -3
- package/deps/couchbase-cxx-client/core/topology/capabilities.hxx +1 -0
- package/deps/couchbase-cxx-client/core/topology/capabilities_fmt.hxx +2 -0
- package/deps/couchbase-cxx-client/core/topology/collections_manifest_fmt.hxx +1 -1
- package/deps/couchbase-cxx-client/core/topology/configuration.hxx +5 -0
- package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +2 -0
- package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +4 -0
- package/deps/couchbase-cxx-client/couchbase/behavior_options.hxx +19 -2
- package/deps/couchbase-cxx-client/couchbase/bucket_manager.hxx +135 -0
- package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +14 -0
- package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +7 -48
- package/deps/couchbase-cxx-client/couchbase/create_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/create_primary_query_index_options.hxx +0 -29
- package/deps/couchbase-cxx-client/couchbase/create_query_index_options.hxx +0 -33
- package/deps/couchbase-cxx-client/couchbase/drop_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/drop_primary_query_index_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/drop_query_index_options.hxx +0 -31
- package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +1 -2
- package/deps/couchbase-cxx-client/couchbase/flush_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_buckets_options.hxx +44 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +0 -30
- package/deps/couchbase-cxx-client/couchbase/get_bucket_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/management/bucket_settings.hxx +116 -0
- package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +29 -53
- package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +16 -83
- package/deps/couchbase-cxx-client/couchbase/query_options.hxx +18 -0
- package/deps/couchbase-cxx-client/couchbase/security_options.hxx +15 -0
- package/deps/couchbase-cxx-client/couchbase/update_bucket_options.hxx +41 -0
- package/deps/couchbase-cxx-client/couchbase/watch_query_indexes_options.hxx +0 -31
- package/deps/couchbase-cxx-client/docs/cbc-analytics.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-get.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc-query.md +1 -0
- package/deps/couchbase-cxx-client/docs/cbc.md +10 -0
- package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +6 -0
- package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +5 -0
- package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +137 -1
- package/deps/couchbase-cxx-client/test/test_integration_management.cxx +709 -266
- package/deps/couchbase-cxx-client/test/test_integration_query.cxx +19 -7
- package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +351 -112
- package/deps/couchbase-cxx-client/test/test_integration_search.cxx +10 -1
- package/deps/couchbase-cxx-client/test/test_transaction_public_async_api.cxx +13 -12
- package/deps/couchbase-cxx-client/test/test_transaction_public_blocking_api.cxx +27 -21
- package/deps/couchbase-cxx-client/test/test_unit_query.cxx +75 -0
- package/deps/couchbase-cxx-client/test/utils/server_version.hxx +5 -0
- package/deps/couchbase-cxx-client/test/utils/wait_until.cxx +29 -10
- package/deps/couchbase-cxx-client/test/utils/wait_until.hxx +3 -1
- package/deps/couchbase-cxx-client/tools/utils.cxx +4 -1
- package/dist/binding.d.ts +21 -16
- package/dist/binding.js +1 -4
- package/dist/bindingutilities.d.ts +6 -1
- package/dist/bindingutilities.js +36 -1
- package/dist/collection.d.ts +65 -3
- package/dist/collection.js +107 -0
- package/dist/crudoptypes.d.ts +34 -0
- package/dist/crudoptypes.js +18 -1
- package/dist/queryexecutor.js +1 -0
- package/dist/querytypes.d.ts +7 -0
- package/dist/rangeScan.d.ts +107 -0
- package/dist/rangeScan.js +91 -0
- package/dist/streamablepromises.d.ts +6 -0
- package/dist/streamablepromises.js +25 -1
- package/package.json +13 -13
- package/src/addondata.hpp +1 -0
- package/src/binding.cpp +5 -2
- package/src/connection.cpp +108 -2
- package/src/connection.hpp +1 -0
- package/src/constants.cpp +2 -12
- package/src/jstocbpp_autogen.hpp +49 -22
- package/src/jstocbpp_basic.hpp +2 -8
- package/src/mutationtoken.cpp +13 -0
- package/src/scan_iterator.cpp +90 -0
- package/src/scan_iterator.hpp +30 -0
- package/tools/gen-bindings-json.py +9 -8
- package/deps/couchbase-cxx-client/core/impl/collection_query_index_manager.cxx +0 -93
package/dist/bindingutilities.js
CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
27
|
};
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
-
exports.errorFromCpp = exports.contextFromCpp = exports.pingStateFromCpp = exports.txnOpExeptionFromCpp = exports.txnExternalExceptionStringFromCpp = exports.endpointStateFromCpp = exports.serviceTypeFromCpp = exports.serviceTypeToCpp = exports.mutationStateToCpp = exports.searchHighlightStyleToCpp = exports.searchScanConsistencyToCpp = exports.analyticsStatusFromCpp = exports.analyticsScanConsistencyToCpp = exports.queryProfileToCpp = exports.queryScanConsistencyToCpp = exports.viewOrderingToCpp = exports.viewScanConsistencyToCpp = exports.storeSemanticToCpp = exports.replicateToToCpp = exports.persistToToCpp = exports.durabilityToCpp = void 0;
|
29
|
+
exports.scanTypeToCpp = exports.errorFromCpp = exports.contextFromCpp = exports.pingStateFromCpp = exports.txnOpExeptionFromCpp = exports.txnExternalExceptionStringFromCpp = exports.endpointStateFromCpp = exports.serviceTypeFromCpp = exports.serviceTypeToCpp = exports.mutationStateToCpp = exports.searchHighlightStyleToCpp = exports.searchScanConsistencyToCpp = exports.analyticsStatusFromCpp = exports.analyticsScanConsistencyToCpp = exports.queryProfileToCpp = exports.queryScanConsistencyToCpp = exports.viewOrderingToCpp = exports.viewScanConsistencyToCpp = exports.storeSemanticToCpp = exports.replicateToToCpp = exports.persistToToCpp = exports.durabilityToCpp = void 0;
|
30
30
|
const analyticstypes_1 = require("./analyticstypes");
|
31
31
|
const binding_1 = __importDefault(require("./binding"));
|
32
32
|
const diagnosticstypes_1 = require("./diagnosticstypes");
|
@@ -34,6 +34,7 @@ const errctxs = __importStar(require("./errorcontexts"));
|
|
34
34
|
const errs = __importStar(require("./errors"));
|
35
35
|
const generaltypes_1 = require("./generaltypes");
|
36
36
|
const querytypes_1 = require("./querytypes");
|
37
|
+
const rangeScan_1 = require("./rangeScan");
|
37
38
|
const searchtypes_1 = require("./searchtypes");
|
38
39
|
const viewtypes_1 = require("./viewtypes");
|
39
40
|
/**
|
@@ -755,3 +756,37 @@ function errorFromCpp(err) {
|
|
755
756
|
return baseErr;
|
756
757
|
}
|
757
758
|
exports.errorFromCpp = errorFromCpp;
|
759
|
+
/**
|
760
|
+
* @internal
|
761
|
+
*/
|
762
|
+
function scanTypeToCpp(scanType) {
|
763
|
+
var _a, _b, _c, _d;
|
764
|
+
if (scanType instanceof rangeScan_1.RangeScan) {
|
765
|
+
return {
|
766
|
+
from: scanType.start !== undefined
|
767
|
+
? {
|
768
|
+
term: scanType.start.term,
|
769
|
+
exclusive: (_b = (_a = scanType.start) === null || _a === void 0 ? void 0 : _a.exclusive) !== null && _b !== void 0 ? _b : false,
|
770
|
+
}
|
771
|
+
: undefined,
|
772
|
+
to: scanType.end !== undefined
|
773
|
+
? {
|
774
|
+
term: scanType.end.term,
|
775
|
+
exclusive: (_d = (_c = scanType.end) === null || _c === void 0 ? void 0 : _c.exclusive) !== null && _d !== void 0 ? _d : false,
|
776
|
+
}
|
777
|
+
: undefined,
|
778
|
+
};
|
779
|
+
}
|
780
|
+
else if (scanType instanceof rangeScan_1.SamplingScan) {
|
781
|
+
return {
|
782
|
+
limit: scanType.limit,
|
783
|
+
seed: scanType.seed,
|
784
|
+
};
|
785
|
+
}
|
786
|
+
else {
|
787
|
+
return {
|
788
|
+
prefix: scanType.prefix,
|
789
|
+
};
|
790
|
+
}
|
791
|
+
}
|
792
|
+
exports.scanTypeToCpp = scanTypeToCpp;
|
package/dist/collection.d.ts
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
/// <reference types="node" />
|
2
2
|
import { IncrementOptions, DecrementOptions, AppendOptions, PrependOptions, BinaryCollection } from './binarycollection';
|
3
|
-
import { CppDocumentId, CppConnection } from './binding';
|
3
|
+
import { CppDocumentId, CppConnection, CppScanIterator, CppRangeScanOrchestratorOptions } from './binding';
|
4
4
|
import { Cluster } from './cluster';
|
5
|
-
import { CounterResult, ExistsResult, GetReplicaResult, GetResult, LookupInResult, MutateInResult, MutationResult } from './crudoptypes';
|
5
|
+
import { CounterResult, ExistsResult, GetReplicaResult, GetResult, LookupInResult, MutateInResult, MutationResult, ScanResult } from './crudoptypes';
|
6
6
|
import { CouchbaseList, CouchbaseMap, CouchbaseQueue, CouchbaseSet } from './datastructures';
|
7
7
|
import { DurabilityLevel, StoreSemantics } from './generaltypes';
|
8
|
+
import { MutationState } from './mutationstate';
|
8
9
|
import { CollectionQueryIndexManager } from './queryindexmanager';
|
10
|
+
import { RangeScan, SamplingScan, PrefixScan } from './rangeScan';
|
9
11
|
import { Scope } from './scope';
|
10
12
|
import { LookupInSpec, MutateInSpec } from './sdspecs';
|
11
|
-
import { StreamableReplicasPromise } from './streamablepromises';
|
13
|
+
import { StreamableReplicasPromise, StreamableScanPromise } from './streamablepromises';
|
12
14
|
import { Transcoder } from './transcoders';
|
13
15
|
import { NodeCallback, Cas } from './utilities';
|
14
16
|
/**
|
@@ -318,6 +320,45 @@ export interface MutateInOptions {
|
|
318
320
|
*/
|
319
321
|
upsertDocument?: boolean;
|
320
322
|
}
|
323
|
+
/**
|
324
|
+
* Volatile: This API is subject to change at any time.
|
325
|
+
*
|
326
|
+
* @category Key-Value
|
327
|
+
*/
|
328
|
+
export interface ScanOptions {
|
329
|
+
/**
|
330
|
+
* Specifies an explicit transcoder to use for this specific operation.
|
331
|
+
*/
|
332
|
+
transcoder?: Transcoder;
|
333
|
+
/**
|
334
|
+
* The timeout for this operation, represented in milliseconds.
|
335
|
+
*/
|
336
|
+
timeout?: number;
|
337
|
+
/**
|
338
|
+
* If the scan should only return document ids.
|
339
|
+
*/
|
340
|
+
idsOnly?: boolean;
|
341
|
+
/**
|
342
|
+
* The limit applied to the number of bytes returned from the server
|
343
|
+
* for each partition batch.
|
344
|
+
*/
|
345
|
+
batchByteLimit?: number;
|
346
|
+
/**
|
347
|
+
* The limit applied to the number of items returned from the server
|
348
|
+
* for each partition batch.
|
349
|
+
*/
|
350
|
+
batchItemLimit?: number;
|
351
|
+
/**
|
352
|
+
* Specifies a MutationState which the scan should be consistent with.
|
353
|
+
*
|
354
|
+
* @see {@link MutationState}
|
355
|
+
*/
|
356
|
+
consistentWith?: MutationState;
|
357
|
+
/**
|
358
|
+
* Specifies the number of vBuckets which the client should scan in parallel.
|
359
|
+
*/
|
360
|
+
concurrency?: number;
|
361
|
+
}
|
321
362
|
/**
|
322
363
|
* Exposes the operations which are available to be performed against a collection.
|
323
364
|
* Namely the ability to perform KV operations.
|
@@ -332,6 +373,9 @@ export declare class Collection {
|
|
332
373
|
private _scope;
|
333
374
|
private _name;
|
334
375
|
private _conn;
|
376
|
+
private _kvScanTimeout;
|
377
|
+
private _scanBatchItemLimit;
|
378
|
+
private _scanBatchByteLimit;
|
335
379
|
/**
|
336
380
|
@internal
|
337
381
|
*/
|
@@ -495,6 +539,24 @@ export declare class Collection {
|
|
495
539
|
* @param callback A node-style callback to be invoked after execution.
|
496
540
|
*/
|
497
541
|
unlock(key: string, cas: Cas, options?: UnlockOptions, callback?: NodeCallback<void>): Promise<void>;
|
542
|
+
/**
|
543
|
+
* @internal
|
544
|
+
*/
|
545
|
+
_continueScan(iterator: CppScanIterator, transcoder: Transcoder, emitter: StreamableScanPromise<ScanResult[], ScanResult>): void;
|
546
|
+
/**
|
547
|
+
* @internal
|
548
|
+
*/
|
549
|
+
_doScan(scanType: RangeScan | SamplingScan | PrefixScan, options: CppRangeScanOrchestratorOptions, transcoder: Transcoder, callback?: NodeCallback<ScanResult[]>): StreamableScanPromise<ScanResult[], ScanResult>;
|
550
|
+
/**
|
551
|
+
* Performs a key-value scan operation.
|
552
|
+
*
|
553
|
+
* Volatile: This API is subject to change at any time.
|
554
|
+
*
|
555
|
+
* @param scanType The type of scan to execute.
|
556
|
+
* @param options Optional parameters for the scan operation.
|
557
|
+
* @param callback A node-style callback to be invoked after execution.
|
558
|
+
*/
|
559
|
+
scan(scanType: RangeScan | SamplingScan | PrefixScan, options?: ScanOptions, callback?: NodeCallback<ScanResult[]>): Promise<ScanResult[]>;
|
498
560
|
/**
|
499
561
|
* Performs a lookup-in operation against a document, fetching individual fields or
|
500
562
|
* information about specific fields inside the document value.
|
package/dist/collection.js
CHANGED
@@ -29,8 +29,10 @@ const binding_1 = __importStar(require("./binding"));
|
|
29
29
|
const bindingutilities_1 = require("./bindingutilities");
|
30
30
|
const crudoptypes_1 = require("./crudoptypes");
|
31
31
|
const datastructures_1 = require("./datastructures");
|
32
|
+
const errors_1 = require("./errors");
|
32
33
|
const generaltypes_1 = require("./generaltypes");
|
33
34
|
const queryindexmanager_1 = require("./queryindexmanager");
|
35
|
+
const rangeScan_1 = require("./rangeScan");
|
34
36
|
const sdspecs_1 = require("./sdspecs");
|
35
37
|
const sdutils_1 = require("./sdutils");
|
36
38
|
const streamablepromises_1 = require("./streamablepromises");
|
@@ -55,6 +57,9 @@ class Collection {
|
|
55
57
|
this._scope = scope;
|
56
58
|
this._name = collectionName;
|
57
59
|
this._conn = scope.conn;
|
60
|
+
this._kvScanTimeout = 75000;
|
61
|
+
this._scanBatchByteLimit = 15000;
|
62
|
+
this._scanBatchItemLimit = 50;
|
58
63
|
}
|
59
64
|
/**
|
60
65
|
@internal
|
@@ -805,6 +810,108 @@ class Collection {
|
|
805
810
|
});
|
806
811
|
}, callback);
|
807
812
|
}
|
813
|
+
/**
|
814
|
+
* @internal
|
815
|
+
*/
|
816
|
+
_continueScan(iterator, transcoder, emitter) {
|
817
|
+
iterator.next((cppErr, resp) => {
|
818
|
+
const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
|
819
|
+
if (err) {
|
820
|
+
emitter.emit('error', err);
|
821
|
+
emitter.emit('end');
|
822
|
+
return;
|
823
|
+
}
|
824
|
+
if (typeof resp === 'undefined') {
|
825
|
+
emitter.emit('end');
|
826
|
+
return;
|
827
|
+
}
|
828
|
+
const key = resp.key;
|
829
|
+
if (typeof resp.body !== 'undefined') {
|
830
|
+
const cas = resp.body.cas;
|
831
|
+
const expiry = resp.body.expiry;
|
832
|
+
this._decodeDoc(transcoder, resp.body.value, resp.body.flags, (err, content) => {
|
833
|
+
if (err) {
|
834
|
+
emitter.emit('error', err);
|
835
|
+
emitter.emit('end');
|
836
|
+
return;
|
837
|
+
}
|
838
|
+
emitter.emit('result', new crudoptypes_1.ScanResult({
|
839
|
+
id: key,
|
840
|
+
content: content,
|
841
|
+
cas: cas,
|
842
|
+
expiryTime: expiry,
|
843
|
+
}));
|
844
|
+
});
|
845
|
+
}
|
846
|
+
else {
|
847
|
+
emitter.emit('result', new crudoptypes_1.ScanResult({
|
848
|
+
id: key,
|
849
|
+
}));
|
850
|
+
}
|
851
|
+
if (emitter.cancelRequested && !iterator.cancelled) {
|
852
|
+
iterator.cancel();
|
853
|
+
}
|
854
|
+
this._continueScan(iterator, transcoder, emitter);
|
855
|
+
return;
|
856
|
+
});
|
857
|
+
}
|
858
|
+
/**
|
859
|
+
* @internal
|
860
|
+
*/
|
861
|
+
_doScan(scanType, options, transcoder, callback) {
|
862
|
+
const bucketName = this._scope.bucket.name;
|
863
|
+
const scopeName = this._scope.name;
|
864
|
+
const collectionName = this._name;
|
865
|
+
return utilities_1.PromiseHelper.wrapAsync(() => {
|
866
|
+
const { cppErr, result } = this._conn.scan(bucketName, scopeName, collectionName, scanType.getScanType(), (0, bindingutilities_1.scanTypeToCpp)(scanType), options);
|
867
|
+
const err = (0, bindingutilities_1.errorFromCpp)(cppErr);
|
868
|
+
if (err) {
|
869
|
+
throw err;
|
870
|
+
}
|
871
|
+
const emitter = new streamablepromises_1.StreamableScanPromise((results) => results);
|
872
|
+
this._continueScan(result, transcoder, emitter);
|
873
|
+
return emitter;
|
874
|
+
}, callback);
|
875
|
+
}
|
876
|
+
/**
|
877
|
+
* Performs a key-value scan operation.
|
878
|
+
*
|
879
|
+
* Volatile: This API is subject to change at any time.
|
880
|
+
*
|
881
|
+
* @param scanType The type of scan to execute.
|
882
|
+
* @param options Optional parameters for the scan operation.
|
883
|
+
* @param callback A node-style callback to be invoked after execution.
|
884
|
+
*/
|
885
|
+
scan(scanType, options, callback) {
|
886
|
+
if (options instanceof Function) {
|
887
|
+
callback = arguments[2];
|
888
|
+
options = undefined;
|
889
|
+
}
|
890
|
+
if (!options) {
|
891
|
+
options = {};
|
892
|
+
}
|
893
|
+
const transcoder = options.transcoder || this.transcoder;
|
894
|
+
const timeout = options.timeout || this._kvScanTimeout;
|
895
|
+
const idsOnly = options.idsOnly || false;
|
896
|
+
const batchByteLimit = options.batchByteLimit || this._scanBatchByteLimit;
|
897
|
+
const batchItemLimit = options.batchByteLimit || this._scanBatchItemLimit;
|
898
|
+
if (typeof options.concurrency !== 'undefined' && options.concurrency < 1) {
|
899
|
+
throw new errors_1.InvalidArgumentError(new Error('Concurrency option must be positive'));
|
900
|
+
}
|
901
|
+
const concurrency = options.concurrency || 1;
|
902
|
+
if (scanType instanceof rangeScan_1.SamplingScan && scanType.limit < 1) {
|
903
|
+
throw new errors_1.InvalidArgumentError(new Error('Sampling scan limit must be positive'));
|
904
|
+
}
|
905
|
+
const orchestratorOptions = {
|
906
|
+
ids_only: idsOnly,
|
907
|
+
consistent_with: (0, bindingutilities_1.mutationStateToCpp)(options.consistentWith),
|
908
|
+
batch_item_limit: batchItemLimit,
|
909
|
+
batch_byte_limit: batchByteLimit,
|
910
|
+
concurrency: concurrency,
|
911
|
+
timeout: timeout,
|
912
|
+
};
|
913
|
+
return this._doScan(scanType, orchestratorOptions, transcoder, callback);
|
914
|
+
}
|
808
915
|
/**
|
809
916
|
* Performs a lookup-in operation against a document, fetching individual fields or
|
810
917
|
* information about specific fields inside the document value.
|
package/dist/crudoptypes.d.ts
CHANGED
@@ -42,6 +42,40 @@ export declare class GetResult {
|
|
42
42
|
*/
|
43
43
|
get expiry(): number | undefined;
|
44
44
|
}
|
45
|
+
/**
|
46
|
+
* Contains the results of a Range or Sampling Scan operation.
|
47
|
+
*
|
48
|
+
* @category Key-Value
|
49
|
+
*/
|
50
|
+
export declare class ScanResult {
|
51
|
+
/**
|
52
|
+
* The content of the document.
|
53
|
+
*/
|
54
|
+
id: string;
|
55
|
+
/**
|
56
|
+
* The content of the document.
|
57
|
+
*/
|
58
|
+
content?: any;
|
59
|
+
/**
|
60
|
+
* The CAS of the document.
|
61
|
+
*/
|
62
|
+
cas?: Cas;
|
63
|
+
/**
|
64
|
+
* The expiry of the document, if it was requested.
|
65
|
+
*
|
66
|
+
* @see {@link GetOptions.withExpiry}
|
67
|
+
*/
|
68
|
+
expiryTime?: number;
|
69
|
+
/**
|
70
|
+
* @internal
|
71
|
+
*/
|
72
|
+
constructor(data: {
|
73
|
+
id: string;
|
74
|
+
content?: any;
|
75
|
+
cas?: Cas;
|
76
|
+
expiryTime?: number;
|
77
|
+
});
|
78
|
+
}
|
45
79
|
/**
|
46
80
|
* Contains the results of an exists operation.
|
47
81
|
*
|
package/dist/crudoptypes.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.CounterResult = exports.MutateInResult = exports.MutateInResultEntry = exports.LookupInResult = exports.LookupInResultEntry = exports.GetReplicaResult = exports.MutationResult = exports.ExistsResult = exports.GetResult = void 0;
|
3
|
+
exports.CounterResult = exports.MutateInResult = exports.MutateInResultEntry = exports.LookupInResult = exports.LookupInResultEntry = exports.GetReplicaResult = exports.MutationResult = exports.ExistsResult = exports.ScanResult = exports.GetResult = void 0;
|
4
4
|
/**
|
5
5
|
* Contains the results of a Get operation.
|
6
6
|
*
|
@@ -36,6 +36,23 @@ class GetResult {
|
|
36
36
|
}
|
37
37
|
}
|
38
38
|
exports.GetResult = GetResult;
|
39
|
+
/**
|
40
|
+
* Contains the results of a Range or Sampling Scan operation.
|
41
|
+
*
|
42
|
+
* @category Key-Value
|
43
|
+
*/
|
44
|
+
class ScanResult {
|
45
|
+
/**
|
46
|
+
* @internal
|
47
|
+
*/
|
48
|
+
constructor(data) {
|
49
|
+
this.id = data.id;
|
50
|
+
this.content = data.content;
|
51
|
+
this.cas = data.cas;
|
52
|
+
this.expiryTime = data.expiryTime;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
exports.ScanResult = ScanResult;
|
39
56
|
/**
|
40
57
|
* Contains the results of an exists operation.
|
41
58
|
*
|
package/dist/queryexecutor.js
CHANGED
@@ -95,6 +95,7 @@ class QueryExecutor {
|
|
95
95
|
readonly: options.readOnly || false,
|
96
96
|
flex_index: options.flexIndex || false,
|
97
97
|
preserve_expiry: options.preserveExpiry || false,
|
98
|
+
use_replica: options.useReplica,
|
98
99
|
max_parallelism: options.maxParallelism,
|
99
100
|
scan_cap: options.scanCap,
|
100
101
|
scan_wait: options.scanWait,
|
package/dist/querytypes.d.ts
CHANGED
@@ -280,6 +280,13 @@ export interface QueryOptions {
|
|
280
280
|
* the ability for the query to make any changes to the data.
|
281
281
|
*/
|
282
282
|
readOnly?: boolean;
|
283
|
+
/**
|
284
|
+
* Uncommitted: This API is subject to change in the future.
|
285
|
+
*
|
286
|
+
* Specifies whether the query engine should use replica nodes for kv fetches,
|
287
|
+
* if the active node is down.
|
288
|
+
*/
|
289
|
+
useReplica?: boolean;
|
283
290
|
/**
|
284
291
|
* Specifies the level of profiling that should be used for the query.
|
285
292
|
*/
|
@@ -0,0 +1,107 @@
|
|
1
|
+
/**
|
2
|
+
* Represents a search term for a RangeScan.
|
3
|
+
*
|
4
|
+
* Volatile: This API is subject to change at any time.
|
5
|
+
*
|
6
|
+
* @see {@link RangeScan}
|
7
|
+
* @category Key-Value
|
8
|
+
*/
|
9
|
+
export declare class ScanTerm {
|
10
|
+
/**
|
11
|
+
* The scan term.
|
12
|
+
*
|
13
|
+
* @see {@link MutationState}
|
14
|
+
*/
|
15
|
+
term: string;
|
16
|
+
/**
|
17
|
+
* Set to true for the scan term to be exclusive. Defaults to false (inclusive).
|
18
|
+
*/
|
19
|
+
exclusive?: boolean;
|
20
|
+
/**
|
21
|
+
* @internal
|
22
|
+
*/
|
23
|
+
constructor(term: string, exclusive?: boolean);
|
24
|
+
}
|
25
|
+
/**
|
26
|
+
*
|
27
|
+
* @internal
|
28
|
+
*/
|
29
|
+
export interface ScanType {
|
30
|
+
/**
|
31
|
+
* Returns string representation of scan type.
|
32
|
+
*/
|
33
|
+
getScanType(): string;
|
34
|
+
}
|
35
|
+
/**
|
36
|
+
* A RangeScan performs a scan on a range of keys with the range specified through
|
37
|
+
* a start and end ScanTerm.
|
38
|
+
*
|
39
|
+
* Volatile: This API is subject to change at any time.
|
40
|
+
*
|
41
|
+
* @category Key-Value
|
42
|
+
*/
|
43
|
+
export declare class RangeScan implements ScanType {
|
44
|
+
/**
|
45
|
+
* RangeScan start term.
|
46
|
+
*/
|
47
|
+
start?: ScanTerm;
|
48
|
+
/**
|
49
|
+
* RangeScan end term.
|
50
|
+
*/
|
51
|
+
end?: ScanTerm;
|
52
|
+
/**
|
53
|
+
* @internal
|
54
|
+
*/
|
55
|
+
constructor(start?: ScanTerm, end?: ScanTerm);
|
56
|
+
/**
|
57
|
+
* Returns string representation of scan type.
|
58
|
+
*/
|
59
|
+
getScanType(): string;
|
60
|
+
}
|
61
|
+
/**
|
62
|
+
* A SamplingScan performs a scan on a random sampling of keys with the sampling bounded by
|
63
|
+
* a limit.
|
64
|
+
*
|
65
|
+
* Volatile: This API is subject to change at any time.
|
66
|
+
*
|
67
|
+
* @category Key-Value
|
68
|
+
*/
|
69
|
+
export declare class SamplingScan implements ScanType {
|
70
|
+
/**
|
71
|
+
* SamplingScan limit.
|
72
|
+
*/
|
73
|
+
limit: number;
|
74
|
+
/**
|
75
|
+
* SamplingScan seed.
|
76
|
+
*/
|
77
|
+
seed?: number;
|
78
|
+
/**
|
79
|
+
* @internal
|
80
|
+
*/
|
81
|
+
constructor(limit: number, seed?: number);
|
82
|
+
/**
|
83
|
+
* Returns string representation of scan type.
|
84
|
+
*/
|
85
|
+
getScanType(): string;
|
86
|
+
}
|
87
|
+
/**
|
88
|
+
* A PrefixScan scan type selects every document whose ID starts with a certain prefix.
|
89
|
+
*
|
90
|
+
* Volatile: This API is subject to change at any time.
|
91
|
+
*
|
92
|
+
* @category key-value
|
93
|
+
*/
|
94
|
+
export declare class PrefixScan implements ScanType {
|
95
|
+
/**
|
96
|
+
* PrefixScan prefix.
|
97
|
+
*/
|
98
|
+
prefix: string;
|
99
|
+
/**
|
100
|
+
* @internal
|
101
|
+
*/
|
102
|
+
constructor(prefix: string);
|
103
|
+
/**
|
104
|
+
* Returns string representation of scan type.
|
105
|
+
*/
|
106
|
+
getScanType(): string;
|
107
|
+
}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.PrefixScan = exports.SamplingScan = exports.RangeScan = exports.ScanTerm = void 0;
|
4
|
+
/**
|
5
|
+
* Represents a search term for a RangeScan.
|
6
|
+
*
|
7
|
+
* Volatile: This API is subject to change at any time.
|
8
|
+
*
|
9
|
+
* @see {@link RangeScan}
|
10
|
+
* @category Key-Value
|
11
|
+
*/
|
12
|
+
class ScanTerm {
|
13
|
+
/**
|
14
|
+
* @internal
|
15
|
+
*/
|
16
|
+
constructor(term, exclusive) {
|
17
|
+
this.term = term;
|
18
|
+
this.exclusive = exclusive;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
exports.ScanTerm = ScanTerm;
|
22
|
+
/**
|
23
|
+
* A RangeScan performs a scan on a range of keys with the range specified through
|
24
|
+
* a start and end ScanTerm.
|
25
|
+
*
|
26
|
+
* Volatile: This API is subject to change at any time.
|
27
|
+
*
|
28
|
+
* @category Key-Value
|
29
|
+
*/
|
30
|
+
class RangeScan {
|
31
|
+
/**
|
32
|
+
* @internal
|
33
|
+
*/
|
34
|
+
constructor(start, end) {
|
35
|
+
this.start = start;
|
36
|
+
this.end = end;
|
37
|
+
}
|
38
|
+
/**
|
39
|
+
* Returns string representation of scan type.
|
40
|
+
*/
|
41
|
+
getScanType() {
|
42
|
+
return 'range_scan';
|
43
|
+
}
|
44
|
+
}
|
45
|
+
exports.RangeScan = RangeScan;
|
46
|
+
/**
|
47
|
+
* A SamplingScan performs a scan on a random sampling of keys with the sampling bounded by
|
48
|
+
* a limit.
|
49
|
+
*
|
50
|
+
* Volatile: This API is subject to change at any time.
|
51
|
+
*
|
52
|
+
* @category Key-Value
|
53
|
+
*/
|
54
|
+
class SamplingScan {
|
55
|
+
/**
|
56
|
+
* @internal
|
57
|
+
*/
|
58
|
+
constructor(limit, seed) {
|
59
|
+
this.limit = limit;
|
60
|
+
this.seed = seed;
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Returns string representation of scan type.
|
64
|
+
*/
|
65
|
+
getScanType() {
|
66
|
+
return 'sampling_scan';
|
67
|
+
}
|
68
|
+
}
|
69
|
+
exports.SamplingScan = SamplingScan;
|
70
|
+
/**
|
71
|
+
* A PrefixScan scan type selects every document whose ID starts with a certain prefix.
|
72
|
+
*
|
73
|
+
* Volatile: This API is subject to change at any time.
|
74
|
+
*
|
75
|
+
* @category key-value
|
76
|
+
*/
|
77
|
+
class PrefixScan {
|
78
|
+
/**
|
79
|
+
* @internal
|
80
|
+
*/
|
81
|
+
constructor(prefix) {
|
82
|
+
this.prefix = prefix;
|
83
|
+
}
|
84
|
+
/**
|
85
|
+
* Returns string representation of scan type.
|
86
|
+
*/
|
87
|
+
getScanType() {
|
88
|
+
return 'prefix_scan';
|
89
|
+
}
|
90
|
+
}
|
91
|
+
exports.PrefixScan = PrefixScan;
|
@@ -39,4 +39,10 @@ export declare class StreamableRowPromise<T, TRow, TMeta> extends StreamableProm
|
|
39
39
|
export declare class StreamableReplicasPromise<T, TRep> extends StreamablePromise<T> {
|
40
40
|
constructor(fn: (replicas: TRep[]) => T);
|
41
41
|
}
|
42
|
+
export declare class StreamableScanPromise<T, TRes> extends StreamablePromise<T> {
|
43
|
+
private _cancelRequested;
|
44
|
+
constructor(fn: (results: TRes[]) => T);
|
45
|
+
get cancelRequested(): boolean;
|
46
|
+
cancelStreaming(): void;
|
47
|
+
}
|
42
48
|
export {};
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.StreamableReplicasPromise = exports.StreamableRowPromise = exports.StreamablePromise = void 0;
|
6
|
+
exports.StreamableScanPromise = exports.StreamableReplicasPromise = exports.StreamableRowPromise = exports.StreamablePromise = void 0;
|
7
7
|
/* eslint jsdoc/require-jsdoc: off */
|
8
8
|
const events_1 = __importDefault(require("events"));
|
9
9
|
/**
|
@@ -87,3 +87,27 @@ class StreamableReplicasPromise extends StreamablePromise {
|
|
87
87
|
}
|
88
88
|
}
|
89
89
|
exports.StreamableReplicasPromise = StreamableReplicasPromise;
|
90
|
+
class StreamableScanPromise extends StreamablePromise {
|
91
|
+
constructor(fn) {
|
92
|
+
super((emitter, resolve, reject) => {
|
93
|
+
let err;
|
94
|
+
const results = [];
|
95
|
+
emitter.on('result', (r) => results.push(r));
|
96
|
+
emitter.on('error', (e) => (err = e));
|
97
|
+
emitter.on('end', () => {
|
98
|
+
if (err) {
|
99
|
+
return reject(err);
|
100
|
+
}
|
101
|
+
resolve(fn(results));
|
102
|
+
});
|
103
|
+
});
|
104
|
+
this._cancelRequested = false;
|
105
|
+
}
|
106
|
+
get cancelRequested() {
|
107
|
+
return this._cancelRequested;
|
108
|
+
}
|
109
|
+
cancelStreaming() {
|
110
|
+
this._cancelRequested = true;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
exports.StreamableScanPromise = StreamableScanPromise;
|
package/package.json
CHANGED
@@ -55,7 +55,7 @@
|
|
55
55
|
"type": "git",
|
56
56
|
"url": "http://github.com/couchbase/couchnode.git"
|
57
57
|
},
|
58
|
-
"version": "4.2.
|
58
|
+
"version": "4.2.6-dev.1",
|
59
59
|
"config": {
|
60
60
|
"native": false
|
61
61
|
},
|
@@ -80,17 +80,17 @@
|
|
80
80
|
]
|
81
81
|
},
|
82
82
|
"optionalDependencies": {
|
83
|
-
"@couchbase/couchbase-darwin-arm64-openssl1": "4.2.
|
84
|
-
"@couchbase/couchbase-darwin-arm64-openssl3": "4.2.
|
85
|
-
"@couchbase/couchbase-darwin-x64-openssl1": "4.2.
|
86
|
-
"@couchbase/couchbase-darwin-x64-openssl3": "4.2.
|
87
|
-
"@couchbase/couchbase-linux-arm64-openssl1": "4.2.
|
88
|
-
"@couchbase/couchbase-linux-arm64-openssl3": "4.2.
|
89
|
-
"@couchbase/couchbase-linux-x64-openssl1": "4.2.
|
90
|
-
"@couchbase/couchbase-linux-x64-openssl3": "4.2.
|
91
|
-
"@couchbase/couchbase-linuxmusl-x64-openssl1": "4.2.
|
92
|
-
"@couchbase/couchbase-linuxmusl-x64-openssl3": "4.2.
|
93
|
-
"@couchbase/couchbase-win32-x64-openssl1": "4.2.
|
94
|
-
"@couchbase/couchbase-win32-x64-openssl3": "4.2.
|
83
|
+
"@couchbase/couchbase-darwin-arm64-openssl1": "4.2.6-dev.1",
|
84
|
+
"@couchbase/couchbase-darwin-arm64-openssl3": "4.2.6-dev.1",
|
85
|
+
"@couchbase/couchbase-darwin-x64-openssl1": "4.2.6-dev.1",
|
86
|
+
"@couchbase/couchbase-darwin-x64-openssl3": "4.2.6-dev.1",
|
87
|
+
"@couchbase/couchbase-linux-arm64-openssl1": "4.2.6-dev.1",
|
88
|
+
"@couchbase/couchbase-linux-arm64-openssl3": "4.2.6-dev.1",
|
89
|
+
"@couchbase/couchbase-linux-x64-openssl1": "4.2.6-dev.1",
|
90
|
+
"@couchbase/couchbase-linux-x64-openssl3": "4.2.6-dev.1",
|
91
|
+
"@couchbase/couchbase-linuxmusl-x64-openssl1": "4.2.6-dev.1",
|
92
|
+
"@couchbase/couchbase-linuxmusl-x64-openssl3": "4.2.6-dev.1",
|
93
|
+
"@couchbase/couchbase-win32-x64-openssl1": "4.2.6-dev.1",
|
94
|
+
"@couchbase/couchbase-win32-x64-openssl3": "4.2.6-dev.1"
|
95
95
|
}
|
96
96
|
}
|
package/src/addondata.hpp
CHANGED