diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js
index fd51b5b32..b81fe77cc 100644
--- a/packages/api/src/controllers/databaseConnections.js
+++ b/packages/api/src/controllers/databaseConnections.js
@@ -34,6 +34,8 @@ const pipeForkLogs = require('../utility/pipeForkLogs');
const crypto = require('crypto');
const loadModelTransform = require('../utility/loadModelTransform');
const exportDbModelSql = require('../utility/exportDbModelSql');
+const axios = require('axios');
+const { getAuthProxyUrl } = require('../utility/authProxy');
const logger = getLogger('databaseConnections');
@@ -562,4 +564,35 @@ module.exports = {
return true;
},
+
+ textToSql_meta: true,
+ async textToSql({ conid, database, text, dialect }) {
+ const existing = this.opened.find(x => x.conid == conid && x.database == database);
+ const { structure } = existing || {};
+ if (!structure) return { errorMessage: 'No database structure' };
+ const model = {
+ tables: structure.tables.map(table => ({
+ name: table.pureName,
+ columns: table.columns.map(column => column.columnName),
+ primaryKey: table.primaryKey?.columns?.map(column => column.columnName),
+ foreignKeys: table.foreignKeys.map(fk => ({
+ refTable: fk.refTableName,
+ column: fk.columns[0]?.columnName,
+ refColumn: fk.columns[0]?.refColumnName,
+ })),
+ })),
+ };
+
+ const resp = await axios.default.post(`${getAuthProxyUrl()}/text-to-sql`, {
+ text,
+ model,
+ dialect,
+ });
+
+ if (!resp.data.sql) {
+ return { errorMessage: 'No SQL generated' };
+ }
+
+ return resp.data;
+ },
};
diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte
index 4ebd0b50a..c81d2e56f 100644
--- a/packages/web/src/tabs/QueryTab.svelte
+++ b/packages/web/src/tabs/QueryTab.svelte
@@ -512,7 +512,14 @@
-
+ {
+ isAiAssistantVisible = false;
+ }}
+ />
diff --git a/packages/web/src/widgets/WidgetColumnBarItem.svelte b/packages/web/src/widgets/WidgetColumnBarItem.svelte
index f973957cd..f52f95654 100644
--- a/packages/web/src/widgets/WidgetColumnBarItem.svelte
+++ b/packages/web/src/widgets/WidgetColumnBarItem.svelte
@@ -16,6 +16,7 @@
export let collapsed = null;
export let storageName = null;
+ export let onClose = null;
let size = 0;
@@ -70,7 +71,8 @@
(visible = !visible) : null}
- data-testid={$$props['data-testid']}>{title}{title}
{#if visible}
diff --git a/packages/web/src/widgets/WidgetTitle.svelte b/packages/web/src/widgets/WidgetTitle.svelte
index a4a3bd0f3..b7c692277 100644
--- a/packages/web/src/widgets/WidgetTitle.svelte
+++ b/packages/web/src/widgets/WidgetTitle.svelte
@@ -1,18 +1,35 @@
-
+
+ {#if onClose}
+
+
+
+ {/if}