renameCollection, cloneCollection - in driver

This commit is contained in:
SPRINX0\prochazka
2024-08-28 13:03:03 +02:00
parent 61c3ff423a
commit e71d278b20
2 changed files with 23 additions and 10 deletions

View File

@@ -93,7 +93,7 @@
{
divider: true,
},
{
hasPermission('dbops/model/edit') && {
label: 'Drop table',
isDrop: true,
requiresWriteAccess: true,
@@ -394,22 +394,22 @@
forceNewTab: true,
icon: 'img perspective',
},
{
hasPermission('dbops/export') && {
label: 'Export',
isExport: true,
functionName: 'tableReader',
},
{
hasPermission('dbops/model/edit') && {
label: 'Drop collection',
isDropCollection: true,
requiresWriteAccess: true,
},
{
hasPermission('dbops/table/rename') && {
label: 'Rename collection',
isRenameCollection: true,
requiresWriteAccess: true,
},
{
hasPermission('dbops/table/backup') && {
label: 'Create collection backup',
isDuplicateCollection: true,
requiresWriteAccess: true,
@@ -563,11 +563,11 @@
value: data.pureName,
onConfirm: async newName => {
const dbid = _.pick(data, ['conid', 'database']);
await apiCall('database-connections/run-script', {
...dbid,
sql: `db.renameCollection('${data.pureName}', '${newName}')`,
runOperationOnDatabase(dbid, {
type: 'renameCollection',
collection: data.pureName,
newName,
});
apiCall('database-connections/sync-model', dbid);
},
});
} else if (menu.isDuplicateCollection) {
@@ -577,7 +577,11 @@
message: `Really create collection copy named ${newName}?`,
onConfirm: async () => {
const dbid = _.pick(data, ['conid', 'database']);
saveScriptToDatabase(dbid, `db.collection('${data.pureName}').aggregate([{$out: '${newName}'}]).toArray()`);
runOperationOnDatabase(dbid, {
type: 'cloneCollection',
collection: data.pureName,
newName,
});
},
});
} else if (menu.isDuplicateTable) {

View File

@@ -107,6 +107,15 @@ const driver = {
case 'dropCollection':
await this.script(pool, `db.dropCollection('${operation.collection}')`);
break;
case 'renameCollection':
await this.script(pool, `db.renameCollection('${operation.collection}', '${operation.newName}')`);
break;
case 'cloneCollection':
await this.script(
pool,
`db.collection('${operation.collection}').aggregate([{$out: '${operation.newName}'}]).toArray()`
);
break;
default:
throw new Error(`Operation type ${type} not supported`);
}