Use partitioned query for all docs (#1195)
diff --git a/app/addons/documents/base.js b/app/addons/documents/base.js
index 3b8a659..6294b00 100644
--- a/app/addons/documents/base.js
+++ b/app/addons/documents/base.js
@@ -69,6 +69,9 @@
},
apiurl: function (databaseName, partitionKey, query) {
return Helpers.getApiUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
+ },
+ server: function (databaseName, partitionKey, query) {
+ return Helpers.getServerUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
}
});
diff --git a/app/addons/documents/components/actions.js b/app/addons/documents/components/actions.js
index 6da915e..d9b266f 100644
--- a/app/addons/documents/components/actions.js
+++ b/app/addons/documents/components/actions.js
@@ -15,15 +15,16 @@
export default {
fetchAllDocsWithKey: (database, partitionKey) => {
- const keyPrefix = partitionKey ? `${partitionKey}:` : "";
return (id, callback) => {
const query = '?' + app.utils.queryParams({
- startkey: JSON.stringify(keyPrefix + id),
- endkey: JSON.stringify(keyPrefix + id + "\u9999"),
+ startkey: JSON.stringify(id),
+ endkey: JSON.stringify(id + "\u9999"),
limit: 30
});
- const url = FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
+ const url = partitionKey ?
+ FauxtonAPI.urls('partitioned_allDocs', 'server', database.safeID(), encodeURIComponent(partitionKey), query) :
+ FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
get(url).then(res => {
let options = [];
if (!res.error) {
diff --git a/app/addons/documents/index-results/api.js b/app/addons/documents/index-results/api.js
index 7bf6370..b8bcd8f 100644
--- a/app/addons/documents/index-results/api.js
+++ b/app/addons/documents/index-results/api.js
@@ -19,10 +19,6 @@
export const queryAllDocs = (fetchUrl, partitionKey, params) => {
// Exclude params 'group', 'reduce' and 'group_level' if present since they not allowed for '_all_docs'
Object.assign(params, {reduce: undefined, group: undefined, group_level: undefined});
- if (partitionKey) {
- // partition filter overrides any 'between keys' values set
- Object.assign(params, {inclusive_end: false, start_key: `"${partitionKey}:"`, end_key: `"${partitionKey}:\ufff0"`});
- }
const query = app.utils.queryString(params);
const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
return get(url).then(json => {
diff --git a/app/addons/documents/routes-documents.js b/app/addons/documents/routes-documents.js
index a6d9345..3e9f914 100644
--- a/app/addons/documents/routes-documents.js
+++ b/app/addons/documents/routes-documents.js
@@ -103,7 +103,9 @@
const params = this.createParams(options);
const docParams = params.docParams;
- const url = FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
+ const url = partitionKey ?
+ FauxtonAPI.urls('partitioned_allDocs', 'server', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
+ FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
// this is used for the header and sidebar
this.database.buildAllDocs(docParams);