Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createAction } from '@cloudbeaver/core-view';

export const ACTION_DATA_GRID_GENERATE_SQL_CREATE = createAction('data-grid-generate-sql-create', {
label: 'data_grid_table_generate_sql_create',
tooltip: 'data_grid_table_generate_sql_create_tooltip',
});
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,22 @@ import {
IDatabaseDataSource,
isResultSetDataModel,
ResultSetDataAction,
type IDataContainerOptions,
type IDatabaseDataModel,
type IGridColumnKey,
type IGridDataKey,
type IGridRowKey,
} from '@cloudbeaver/plugin-data-viewer';

import { ACTION_DATA_GRID_GENERATE_SQL_CREATE } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_CREATE.js';
import { ACTION_DATA_GRID_GENERATE_SQL_DELETE } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_DELETE.js';
import { ACTION_DATA_GRID_GENERATE_SQL_INSERT } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_INSERT.js';
import { ACTION_DATA_GRID_GENERATE_SQL_SELECT } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_SELECT.js';
import { ACTION_DATA_GRID_GENERATE_SQL_SELECT_MANY } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_SELECT_MANY.js';
import { ACTION_DATA_GRID_GENERATE_SQL_UPDATE } from '../Actions/GenerateSQL/ACTION_DATA_GRID_GENERATE_SQL_UPDATE.js';
import { MENU_DATA_GRID_GENERATE_SQL } from './GenerateSQL/MENU_DATA_GRID_GENERATE_SQL.js';
import type { IDataContextProvider } from '@cloudbeaver/core-data-context';
import { getDefaultQueryGeneratorOptions, GeneratedSqlDialog, SqlGeneratorsResource } from '@cloudbeaver/plugin-sql-generator';
import { getDefaultQueryGeneratorOptions, GeneratedSqlDialog, SqlGeneratorsResource, DDL_GENERATOR_ID } from '@cloudbeaver/plugin-sql-generator';
import { isNotNullDefined } from '@dbeaver/js-helpers';

@injectable(() => [ActionService, MenuService, CommonDialogService, NotificationService, SqlGeneratorsResource])
Expand Down Expand Up @@ -78,6 +80,7 @@ export class DataGridContextMenuGenerateSqlService {
ACTION_DATA_GRID_GENERATE_SQL_DELETE,
ACTION_DATA_GRID_GENERATE_SQL_SELECT,
ACTION_DATA_GRID_GENERATE_SQL_SELECT_MANY,
ACTION_DATA_GRID_GENERATE_SQL_CREATE,
],
});

Expand All @@ -91,13 +94,19 @@ export class DataGridContextMenuGenerateSqlService {
ACTION_DATA_GRID_GENERATE_SQL_DELETE,
ACTION_DATA_GRID_GENERATE_SQL_SELECT,
ACTION_DATA_GRID_GENERATE_SQL_SELECT_MANY,
ACTION_DATA_GRID_GENERATE_SQL_CREATE,
],
isDisabled: context => {
const model = context.get(DATA_CONTEXT_DV_DDM)!;

return model.isLoading();
},
handler: async (context, action) => {
if (action === ACTION_DATA_GRID_GENERATE_SQL_CREATE) {
await this.openEntitySqlDialog(context);
return;
}

await this.openSqlDialog(context, mapGeneratorIdFromAction(action));
},
});
Expand Down Expand Up @@ -171,6 +180,50 @@ export class DataGridContextMenuGenerateSqlService {
}
}

private async openEntitySqlDialog(context: IDataContextProvider): Promise<void> {
const model = context.get(DATA_CONTEXT_DV_DDM)!;
const options = model.source.options as IDataContainerOptions | undefined;
const nodePathList = options?.containerNodePath;

if (!isResultSetDataModel(model)) {
return;
}

const connectionId = model.source.executionContext?.context?.connectionId;

if (!nodePathList || !isNotNullDefined(connectionId)) {
this.notificationService.logError({
title: 'data_grid_table_generate_sql_error_title',
message: 'data_grid_table_generate_sql_error_no_connection',
});
return;
}

try {
const generators = await this.sqlGenerationResource.load(nodePathList);
const createGenerator = generators.find(g => g.id.toLowerCase().includes(DDL_GENERATOR_ID.toLowerCase()));

if (!createGenerator) {
this.notificationService.logError({
title: 'data_grid_table_generate_sql_error_title',
message: 'data_grid_table_generate_sql_error_no_query',
});
return;
}

const query = await this.sqlGenerationResource.generateEntityQuery(createGenerator.id, nodePathList, getDefaultQueryGeneratorOptions());

await this.commonDialogService.open(GeneratedSqlDialog, {
query,
nodeId: connectionId,
options: getDefaultQueryGeneratorOptions(),
regenerateQuery: genOptions => this.sqlGenerationResource.generateEntityQuery(createGenerator.id, nodePathList, genOptions),
});
} catch (e: any) {
this.notificationService.logException(e, 'data_grid_table_generate_sql_error_title');
}
}

private async generateQuery({
projectId,
connectionId,
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'SELECT-Anweisung mit WHERE-Klausel generieren'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'SELECT-Anweisung mit WHERE IN-Klausel generieren'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', 'DDL-Anweisung für Entität generieren'],
['data_grid_table_generate_sql_error_title', 'SQL-Generierungsfehler'],
['data_grid_table_generate_sql_error_no_query', 'Keine Abfrage für das aktuelle Ergebnis verfügbar'],
['data_grid_table_generate_sql_error_no_connection', 'Unbekannter Ausführungskontext'],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'Generate SELECT statement with WHERE clause'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'Generate SELECT statement with WHERE IN clause'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', 'Generate DDL statement for entity'],
['data_grid_table_generate_sql_error_title', 'SQL Generation Error'],
['data_grid_table_generate_sql_error_no_query', 'No query available for the current result'],
['data_grid_table_generate_sql_error_no_connection', 'Unknown execution context'],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'Générer une instruction SELECT avec clause WHERE'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'Générer une instruction SELECT avec clause WHERE IN'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', "Générer une instruction DDL pour l'entité"],
['data_grid_table_generate_sql_error_title', 'Erreur de génération SQL'],
['data_grid_table_generate_sql_error_no_query', 'Aucune requête disponible pour le résultat actuel'],
['data_grid_table_generate_sql_error_no_connection', "Contexte d'exécution inconnu"],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'Genera istruzione SELECT con clausola WHERE'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'Genera istruzione SELECT con clausola WHERE IN'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', "Genera istruzione DDL per l'entità"],
['data_grid_table_generate_sql_error_title', 'Errore di generazione SQL'],
['data_grid_table_generate_sql_error_no_query', 'Nessuna query disponibile per il risultato attuale'],
['data_grid_table_generate_sql_error_no_connection', 'Contesto di esecuzione sconosciuto'],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'Сгенерировать SELECT-запрос с WHERE'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'Сгенерировать SELECT-запрос с WHERE IN'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', 'Сгенерировать DDL-запрос для сущности'],
['data_grid_table_generate_sql_error_title', 'Ошибка генерации SQL'],
['data_grid_table_generate_sql_error_no_query', 'Нет запроса для текущего результата'],
['data_grid_table_generate_sql_error_no_connection', 'Неизвестный контекст выполнения'],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', 'Tạo câu lệnh SELECT với điều kiện WHERE'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', 'Tạo câu lệnh SELECT với điều kiện WHERE IN'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', 'Tạo câu lệnh DDL cho thực thể'],
['data_grid_table_generate_sql_error_title', 'Lỗi Tạo SQL'],
['data_grid_table_generate_sql_error_no_query', 'Không có truy vấn nào cho kết quả hiện tại'],
['data_grid_table_generate_sql_error_no_connection', 'Ngữ cảnh thực thi không xác định'],
Expand Down
2 changes: 2 additions & 0 deletions webapp/packages/plugin-data-spreadsheet-new/src/locales/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ export default [
['data_grid_table_generate_sql_select_tooltip', '生成带 WHERE 子句的 SELECT 语句'],
['data_grid_table_generate_sql_select_many', 'SELECT .. WHERE .. IN'],
['data_grid_table_generate_sql_select_many_tooltip', '生成带 WHERE IN 子句的 SELECT 语句'],
['data_grid_table_generate_sql_create', 'DDL'],
['data_grid_table_generate_sql_create_tooltip', '为实体生成 DDL 语句'],
['data_grid_table_generate_sql_error_title', 'SQL 生成错误'],
['data_grid_table_generate_sql_error_no_query', '当前结果没有可用的查询'],
['data_grid_table_generate_sql_error_no_connection', '未知的执行上下文'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const getDefaultQueryGeneratorOptions = (): SqlQueryGeneratorOptions => (
useFullyQualifiedNames: true,
compactSql: false,
});
export const DDL_GENERATOR_ID = 'tableDDL';

@injectable(() => [GraphQLService, NavNodeInfoResource])
export class SqlGeneratorsResource extends CachedMapResource<string, SqlQueryGenerator[]> {
Expand Down
Loading