1- // Copyright © 2015, 2018 IBM Corp. All rights reserved.
1+ // Copyright © 2015, 2019 IBM Corp. All rights reserved.
22//
33// Licensed under the Apache License, Version 2.0 (the "License");
44// you may not use this file except in compliance with the License.
@@ -25,6 +25,18 @@ const Client = require('./lib/client.js');
2525// return a URL.
2626var reconfigure = require ( './lib/reconfigure.js' ) ;
2727
28+ // Helper function for optional parameter `opts`.
29+ function getCallback ( opts , callback ) {
30+ if ( typeof opts === 'function' ) {
31+ callback = opts ;
32+ opts = { } ;
33+ }
34+ if ( typeof opts === 'undefined' ) {
35+ opts = { } ;
36+ }
37+ return { opts, callback} ;
38+ }
39+
2840// This IS the Cloudant API. It is mostly nano, with a few functions.
2941function Cloudant ( options , callback ) {
3042 debug ( 'Initialize' , options ) ;
@@ -150,7 +162,81 @@ function Cloudant(options, callback) {
150162 body : query } , callback ) ;
151163 } ;
152164
165+ // Partitioned Databases
166+ // ---------------------
167+
168+ function partitionInfo ( partitionKey , callback ) {
169+ return nano . request (
170+ { db : db , path : '_partition/' + partitionKey } , callback
171+ ) ;
172+ }
173+
174+ function executePartitionedView ( partitionKey , ddoc , viewName , meta , qs , callback ) {
175+ meta . viewPath = '_partition/' + partitionKey + '/_design/' + ddoc + '/_' +
176+ meta . type + '/' + viewName ;
177+ // Note: No need to pass `ddoc` or `viewName` to the `baseView` function
178+ // as they are passed in the `meta.viewPath`.
179+ return nano . _use ( db ) . baseView ( null , null , meta , qs , callback ) ;
180+ }
181+
182+ function partitionedList ( partitionKey , qs0 , callback0 ) {
183+ const { opts, callback} = getCallback ( qs0 , callback0 ) ;
184+ let path = '_partition/' + partitionKey + '/_all_docs' ;
185+ return nano . request ( { db : db , path : path , qs : opts } , callback ) ;
186+ }
187+
188+ function partitionedListAsStream ( partitionKey , qs ) {
189+ let path = '_partition/' + partitionKey + '/_all_docs' ;
190+ return nano . request (
191+ { db : db , path : path , qs : qs , stream : true } , callback
192+ ) ;
193+ }
194+
195+ function partitionedFind ( partitionKey , selector , callback ) {
196+ return nano . request ( {
197+ db : db ,
198+ path : '_partition/' + partitionKey + '/_find' ,
199+ method : 'POST' ,
200+ body : selector
201+ } , callback ) ;
202+ }
203+
204+ function partitionedFindAsStream ( partitionKey , selector ) {
205+ return nano . request ( {
206+ db : db ,
207+ path : '_partition/' + partitionKey + '/_find' ,
208+ method : 'POST' ,
209+ body : selector ,
210+ stream : true
211+ } ) ;
212+ }
213+
214+ function partitionedSearch ( partitionKey , ddoc , viewName , qs , callback ) {
215+ return executePartitionedView (
216+ partitionKey , ddoc , viewName , { type : 'search' } , qs , callback
217+ ) ;
218+ }
219+
220+ function partitionedSearchAsStream ( partitionKey , ddoc , viewName , qs ) {
221+ return executePartitionedView (
222+ partitionKey , ddoc , viewName , { type : 'search' , stream : true } , qs
223+ ) ;
224+ }
225+
226+ function partitionedView ( partitionKey , ddoc , viewName , qs , callback ) {
227+ return executePartitionedView (
228+ partitionKey , ddoc , viewName , { type : 'view' } , qs , callback
229+ ) ;
230+ }
231+
232+ function partitionedViewAsStream ( partitionKey , ddoc , viewName , qs ) {
233+ return executePartitionedView (
234+ partitionKey , ddoc , viewName , { type : 'view' , stream : true } , qs
235+ ) ;
236+ }
237+
153238 var obj = nano . _use ( db ) ;
239+
154240 obj . geo = geo ;
155241 obj . bulk_get = bulk_get ; // eslint-disable-line camelcase
156242 obj . get_security = get_security ; // eslint-disable-line camelcase
@@ -159,6 +245,16 @@ function Cloudant(options, callback) {
159245 obj . index . del = index_del ; // eslint-disable-line camelcase
160246 obj . find = find ;
161247
248+ obj . partitionInfo = partitionInfo ;
249+ obj . partitionedFind = partitionedFind ;
250+ obj . partitionedFindAsStream = partitionedFindAsStream ;
251+ obj . partitionedList = partitionedList ;
252+ obj . partitionedListAsStream = partitionedListAsStream ;
253+ obj . partitionedSearch = partitionedSearch ;
254+ obj . partitionedSearchAsStream = partitionedSearchAsStream ;
255+ obj . partitionedView = partitionedView ;
256+ obj . partitionedViewAsStream = partitionedViewAsStream ;
257+
162258 return obj ;
163259 } ;
164260
0 commit comments