From 95f580d51c43ecfced31f625637db0952772b90c Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 21 Aug 2024 10:16:39 +0200 Subject: [PATCH 1/3] v5.3.5-beta.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bad3f5a7d..56755bccb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "5.3.5-beta.3", + "version": "5.3.5-beta.6", "name": "dbgate-all", "workspaces": [ "packages/*", From a51bd70e803a962c98d8ab12d3a121131bfa88b2 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 21 Aug 2024 13:10:28 +0200 Subject: [PATCH 2/3] generic nosql data editor --- packages/datalib/src/CollectionGridDisplay.ts | 8 ++++++-- packages/datalib/src/GridDisplay.ts | 6 ++++++ packages/web/src/datagrid/DataGridCore.svelte | 6 ++++-- plugins/dbgate-plugin-mongo/src/backend/Analyser.js | 4 ++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/datalib/src/CollectionGridDisplay.ts b/packages/datalib/src/CollectionGridDisplay.ts index 572341c82..1a7d6e1f2 100644 --- a/packages/datalib/src/CollectionGridDisplay.ts +++ b/packages/datalib/src/CollectionGridDisplay.ts @@ -66,6 +66,10 @@ function getDisplayColumn(basePath, columnName, display: CollectionGridDisplay) filterBehaviour: display?.driver?.getFilterBehaviour(null, standardFilterBehaviours) ?? mongoFilterBehaviour, pureName: display.collection?.pureName, schemaName: display.collection?.schemaName, + + isPartitionKey: !!display?.collection?.partitionKey?.find(x => x.columnName == uniqueName), + isClusterKey: !!display?.collection?.clusterKey?.find(x => x.columnName == uniqueName), + isUniqueKey: !!display?.collection?.uniqueKey?.find(x => x.columnName == uniqueName), }; } @@ -105,10 +109,10 @@ export class CollectionGridDisplay extends GridDisplay { this.columns = analyseCollectionDisplayColumns([...(loadedRows || []), ...changedDocs, ...insertedDocs], this); this.filterable = true; this.sortable = true; - this.editable = !readOnly; + this.editable = !readOnly && collection.uniqueKey?.length > 0; this.supportsReload = true; this.isDynamicStructure = true; - this.changeSetKeyFields = ['_id']; + this.changeSetKeyFields = collection.uniqueKey?.map(x => x.columnName); this.baseCollection = collection; } } diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 5b4d49a7e..3ea5c1ffd 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -28,6 +28,12 @@ export interface DisplayColumn { notNull?: boolean; autoIncrement?: boolean; isPrimaryKey?: boolean; + + // NoSQL specific + isPartitionKey?: boolean; + isClusterKey?: boolean; + isUniqueKey?: boolean; + foreignKey?: ForeignKeyInfo; isForeignKeyUnique?: boolean; isExpandable?: boolean; diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index 486a10975..ec51a266f 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -559,7 +559,7 @@ for (const column of display.columns) { if (column.uniquePath.length > 1) continue; if (column.autoIncrement) continue; - if (column.columnName == '_id' && isDynamicStructure) continue; + if (column.isClusterKey) continue; grider.setCellValue(rowIndex, column.uniqueName, grider.getRowData(index)[column.uniqueName]); } @@ -959,7 +959,9 @@ export async function mergeSelectionIntoMirror({ fullRows, mergeMode = 'merge' }) { const file = display.baseTableOrSimilar?.pureName; - const mergeKey = display.baseCollection ? ['_id'] : display.baseTable?.primaryKey.columns.map(x => x.columnName); + const mergeKey = display.baseCollection + ? display.baseCollection?.uniqueKey?.map(x => x.columnName) + : display.baseTable?.primaryKey.columns.map(x => x.columnName); const cells = cellsToRegularCells(selectedCells); const rowIndexes = _.sortBy(_.uniq(cells.map(x => x[0]))); diff --git a/plugins/dbgate-plugin-mongo/src/backend/Analyser.js b/plugins/dbgate-plugin-mongo/src/backend/Analyser.js index 88843f0f8..0e4a80fb7 100644 --- a/plugins/dbgate-plugin-mongo/src/backend/Analyser.js +++ b/plugins/dbgate-plugin-mongo/src/backend/Analyser.js @@ -35,10 +35,14 @@ class Analyser extends DatabaseAnalyser { pureName: x.name, tableRowCount: stats[index]?.count, uniqueKey: [{ columnName: '_id' }], + partitionKey: [{ columnName: '_id' }], + clusterKey: [{ columnName: '_id' }], })), ...views.map((x, index) => ({ pureName: x.name, uniqueKey: [{ columnName: '_id' }], + partitionKey: [{ columnName: '_id' }], + clusterKey: [{ columnName: '_id' }], })), ], }); From b27f58be9ffa73a2c251b434265b29c927939212 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 21 Aug 2024 14:50:25 +0200 Subject: [PATCH 3/3] formatting --- plugins/dbgate-plugin-mongo/src/frontend/driver.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/dbgate-plugin-mongo/src/frontend/driver.js b/plugins/dbgate-plugin-mongo/src/frontend/driver.js index 6b986950f..b8056bdcd 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/driver.js @@ -101,8 +101,8 @@ const driver = { getCollectionExportQueryScript(collection, condition, sort) { return `db.collection('${collection}') - .find(${JSON.stringify(convertToMongoCondition(condition) || {})}) - .sort(${JSON.stringify(convertToMongoSort(sort) || {})})`; + .find(${JSON.stringify(convertToMongoCondition(condition) || {})}) + .sort(${JSON.stringify(convertToMongoSort(sort) || {})})`; }, getCollectionExportQueryJson(collection, condition, sort) { return {