feat(query-editor): 支持 AI 行内补全与文本生成 SQL

- 新增 SQL 编辑器 AI 辅助服务,接入已配置供应商并生成行内补全

- 增加 Text-to-SQL 弹窗与插入、替换选区、替换全文应用模式

- 补齐多语言文案和定向测试覆盖
This commit is contained in:
Syngnat
2026-07-02 21:36:44 +08:00
parent b0f077ffbb
commit 5eafd2aa3c
12 changed files with 1098 additions and 6 deletions

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "SQL mit AI optimieren",
"query_editor.action.ai_optimize_sql_menu": "SQL optimieren",
"query_editor.action.ai_schema_analysis": "Schema-Analyse",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "SQL-Datei exportieren",
"query_editor.action.format": "Formatieren",
"query_editor.action.find_in_editor": "Suchen",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "Formatierung fehlgeschlagen: Die SQL-Syntax ist möglicherweise ungültig.",
"query_editor.message.format_restore_success": "Der SQL-Stand vor der Formatierung wurde wiederhergestellt.",
"query_editor.message.insert_success": "Code an der aktuellen Cursorposition eingefügt.",
"query_editor.message.ai_model_missing": "Für den aktiven AI Provider ist kein Modell ausgewählt. Wählen Sie zuerst in den AI-Einstellungen ein Modell aus.",
"query_editor.message.ai_provider_missing": "Konfigurieren und aktivieren Sie zuerst einen AI Provider in den AI-Einstellungen.",
"query_editor.message.ai_service_unavailable": "Der AI-Dienst ist noch nicht bereit. Versuchen Sie es später erneut oder prüfen Sie die AI-Einstellungen.",
"query_editor.message.no_executable_sql": "Kein ausführbares SQL.",
"query_editor.message.no_format_restore_snapshot": "Es ist kein SQL-Stand vor der Formatierung zum Wiederherstellen verfügbar.",
"query_editor.message.current_line_no_copyable_content": "Die aktuelle Zeile enthält keinen kopierbaren Inhalt.",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "Wählen Sie zuerst eine Datenbank aus.",
"query_editor.message.sql_file_saved": "SQL-Datei gespeichert.",
"query_editor.message.statement_failed_prefix": "Anweisung {{index}} fehlgeschlagen: ",
"query_editor.message.text_to_sql_empty_instruction": "Geben Sie die SQL-Anforderung ein, die erzeugt werden soll.",
"query_editor.message.text_to_sql_empty_result": "AI hat kein einfügbares SQL zurückgegeben.",
"query_editor.message.text_to_sql_failed": "Text-to-SQL-Erzeugung fehlgeschlagen: {{error}}",
"query_editor.message.text_to_sql_success": "SQL wurde erzeugt und in den Editor geschrieben.",
"query_editor.message.unsupported_source": "Diese Datenquelle unterstützt den SQL-Abfrageeditor nicht. Verwenden Sie stattdessen die zugehörige Seite.",
"query_editor.object_info.column": "Spalte",
"query_editor.object_info.database": "Datenbank",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "Anforderung beschreiben und Anweisung erzeugen",
"query_editor.slash_command.sql.label": "SQL erzeugen",
"query_editor.slash_command.sql.prompt": "Erzeuge SQL für diese Anforderung:",
"query_editor.text_to_sql.description": "Beschreiben Sie die Daten, die Sie abfragen oder ändern möchten. GoNavi nutzt die aktuelle Verbindung, Datenbank und geladene Schema-Informationen zum Erzeugen von SQL.",
"query_editor.text_to_sql.generate": "SQL erzeugen",
"query_editor.text_to_sql.mode.insert": "Am Cursor einfügen",
"query_editor.text_to_sql.mode.replace_all": "Alles ersetzen",
"query_editor.text_to_sql.mode.replace_selection": "Auswahl ersetzen",
"query_editor.text_to_sql.placeholder": "Beispiel: tägliche Bestellsumme der letzten 30 Tage zusammenfassen und nach Datum aufsteigend sortieren",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "Das SQL verweist auf eine Spalte, die nicht im Ergebnissatz enthalten ist, anders geschrieben wurde oder in der aktuellen Tabelle nicht existiert.",
"query_editor.sql_error.rule.column_missing.label": "Spalte existiert nicht",
"query_editor.sql_error.rule.column_missing.suggestion": "Prüfe Spaltennamen, Aliasse, Groß-/Kleinschreibung, Tabellenaliase und ob die Spalte zum aktuellen FROM/JOIN-Objekt gehört.",

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "AI Optimize SQL",
"query_editor.action.ai_optimize_sql_menu": "Optimize SQL",
"query_editor.action.ai_schema_analysis": "Schema analysis",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "Export SQL file",
"query_editor.action.format": "Format",
"query_editor.action.find_in_editor": "Find",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "Format failed: SQL syntax may be invalid.",
"query_editor.message.format_restore_success": "Restored the pre-format SQL snapshot.",
"query_editor.message.insert_success": "Code inserted at the current cursor.",
"query_editor.message.ai_model_missing": "The active AI provider has no model selected. Select a model in AI settings first.",
"query_editor.message.ai_provider_missing": "Configure and enable an AI provider in AI settings first.",
"query_editor.message.ai_service_unavailable": "The AI service is not ready. Try again later or check AI settings.",
"query_editor.message.no_executable_sql": "No executable SQL.",
"query_editor.message.no_format_restore_snapshot": "No pre-format SQL snapshot is available to restore.",
"query_editor.message.current_line_no_copyable_content": "No copyable content on the current line.",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "Select a database first.",
"query_editor.message.sql_file_saved": "SQL file saved.",
"query_editor.message.statement_failed_prefix": "Statement {{index}} failed: ",
"query_editor.message.text_to_sql_empty_instruction": "Enter the SQL requirement to generate.",
"query_editor.message.text_to_sql_empty_result": "AI did not return insertable SQL.",
"query_editor.message.text_to_sql_failed": "Text-to-SQL generation failed: {{error}}",
"query_editor.message.text_to_sql_success": "SQL generated and written to the editor.",
"query_editor.message.unsupported_source": "This data source does not support the SQL query editor. Use its dedicated page instead.",
"query_editor.object_info.column": "Column",
"query_editor.object_info.database": "Database",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "Describe the requirement and generate a statement",
"query_editor.slash_command.sql.label": "Generate SQL",
"query_editor.slash_command.sql.prompt": "Generate SQL for this requirement:",
"query_editor.text_to_sql.description": "Describe the data you want to query or change. GoNavi will use the current connection, database, and loaded schema to generate SQL.",
"query_editor.text_to_sql.generate": "Generate SQL",
"query_editor.text_to_sql.mode.insert": "Insert at cursor",
"query_editor.text_to_sql.mode.replace_all": "Replace all",
"query_editor.text_to_sql.mode.replace_selection": "Replace selection",
"query_editor.text_to_sql.placeholder": "Example: summarize daily order amount for the last 30 days and sort by date ascending",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "The SQL references a column that is not in the result set, is spelled differently, or does not exist on the current table.",
"query_editor.sql_error.rule.column_missing.label": "Column does not exist",
"query_editor.sql_error.rule.column_missing.suggestion": "Check column names, aliases, casing, table aliases, and whether the column belongs to the current FROM/JOIN object.",

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "AI で SQL を最適化",
"query_editor.action.ai_optimize_sql_menu": "SQL を最適化",
"query_editor.action.ai_schema_analysis": "スキーマ分析",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "SQL ファイルをエクスポート",
"query_editor.action.format": "整形",
"query_editor.action.find_in_editor": "検索",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "整形に失敗しました: SQL 構文が正しくない可能性があります。",
"query_editor.message.format_restore_success": "整形前の SQL に戻しました。",
"query_editor.message.insert_success": "現在のカーソル位置にコードを挿入しました。",
"query_editor.message.ai_model_missing": "現在の AI Provider でモデルが選択されていません。先に AI 設定でモデルを選択してください。",
"query_editor.message.ai_provider_missing": "先に AI 設定で AI Provider を設定して有効化してください。",
"query_editor.message.ai_service_unavailable": "AI サービスの準備ができていません。後でもう一度試すか、AI 設定を確認してください。",
"query_editor.message.no_executable_sql": "実行できる SQL がありません。",
"query_editor.message.no_format_restore_snapshot": "元に戻せる整形前の SQL はありません。",
"query_editor.message.current_line_no_copyable_content": "現在の行にコピーできる内容がありません。",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "先にデータベースを選択してください。",
"query_editor.message.sql_file_saved": "SQL ファイルを保存しました。",
"query_editor.message.statement_failed_prefix": "{{index}} 番目のステートメントが失敗しました: ",
"query_editor.message.text_to_sql_empty_instruction": "生成する SQL の要件を入力してください。",
"query_editor.message.text_to_sql_empty_result": "AI から挿入可能な SQL が返されませんでした。",
"query_editor.message.text_to_sql_failed": "Text-to-SQL の生成に失敗しました: {{error}}",
"query_editor.message.text_to_sql_success": "SQL を生成してエディターに書き込みました。",
"query_editor.message.unsupported_source": "このデータソースは SQL クエリエディターに対応していません。専用ページを使用してください。",
"query_editor.object_info.column": "カラム",
"query_editor.object_info.database": "データベース",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "要件を説明してステートメントを生成",
"query_editor.slash_command.sql.label": "SQL を生成",
"query_editor.slash_command.sql.prompt": "次の要件に対する SQL を生成してください:",
"query_editor.text_to_sql.description": "クエリまたは処理したいデータを説明してください。GoNavi は現在の接続、データベース、読み込み済みスキーマを使って SQL を生成します。",
"query_editor.text_to_sql.generate": "SQL を生成",
"query_editor.text_to_sql.mode.insert": "カーソル位置に挿入",
"query_editor.text_to_sql.mode.replace_all": "全文を置換",
"query_editor.text_to_sql.mode.replace_selection": "選択範囲を置換",
"query_editor.text_to_sql.placeholder": "例: 直近 30 日間の日別注文金額を集計し、日付の昇順で返す",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "SQL が、結果セットに存在しない、スペルが異なる、または現在の表にない列を参照しています。",
"query_editor.sql_error.rule.column_missing.label": "列が存在しません",
"query_editor.sql_error.rule.column_missing.suggestion": "列名、別名、大文字小文字、表別名、および列が現在の FROM/JOIN オブジェクトに属しているか確認してください。",

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "AI: оптимизировать SQL",
"query_editor.action.ai_optimize_sql_menu": "Оптимизировать SQL",
"query_editor.action.ai_schema_analysis": "Анализ схемы",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "Экспортировать SQL-файл",
"query_editor.action.format": "Форматировать",
"query_editor.action.find_in_editor": "Поиск",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "Ошибка форматирования: возможно, синтаксис SQL неверен.",
"query_editor.message.format_restore_success": "Восстановлено состояние SQL до форматирования.",
"query_editor.message.insert_success": "Код вставлен в текущую позицию курсора.",
"query_editor.message.ai_model_missing": "Для активного AI Provider не выбрана модель. Сначала выберите модель в настройках AI.",
"query_editor.message.ai_provider_missing": "Сначала настройте и включите AI Provider в настройках AI.",
"query_editor.message.ai_service_unavailable": "AI-сервис ещё не готов. Повторите попытку позже или проверьте настройки AI.",
"query_editor.message.no_executable_sql": "Нет SQL для выполнения.",
"query_editor.message.no_format_restore_snapshot": "Нет сохранённого состояния SQL до форматирования для восстановления.",
"query_editor.message.current_line_no_copyable_content": "В текущей строке нет содержимого для копирования.",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "Сначала выберите базу данных.",
"query_editor.message.sql_file_saved": "SQL-файл сохранен.",
"query_editor.message.statement_failed_prefix": "Ошибка в инструкции {{index}}: ",
"query_editor.message.text_to_sql_empty_instruction": "Введите требование для генерации SQL.",
"query_editor.message.text_to_sql_empty_result": "AI не вернул SQL, который можно вставить.",
"query_editor.message.text_to_sql_failed": "Не удалось сгенерировать Text-to-SQL: {{error}}",
"query_editor.message.text_to_sql_success": "SQL сгенерирован и записан в редактор.",
"query_editor.message.unsupported_source": "Этот источник данных не поддерживает редактор SQL-запросов. Используйте соответствующую страницу.",
"query_editor.object_info.column": "Столбец",
"query_editor.object_info.database": "База данных",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "Описать требование и сгенерировать инструкцию",
"query_editor.slash_command.sql.label": "Сгенерировать SQL",
"query_editor.slash_command.sql.prompt": "Сгенерируй SQL для этого требования:",
"query_editor.text_to_sql.description": "Опишите данные, которые нужно запросить или изменить. GoNavi использует текущее подключение, базу данных и загруженную схему для генерации SQL.",
"query_editor.text_to_sql.generate": "Сгенерировать SQL",
"query_editor.text_to_sql.mode.insert": "Вставить в курсор",
"query_editor.text_to_sql.mode.replace_all": "Заменить всё",
"query_editor.text_to_sql.mode.replace_selection": "Заменить выделение",
"query_editor.text_to_sql.placeholder": "Например: посчитать дневную сумму заказов за последние 30 дней и отсортировать по дате по возрастанию",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "SQL ссылается на столбец, которого нет в наборе результатов, имя отличается по написанию или столбца нет в текущей таблице.",
"query_editor.sql_error.rule.column_missing.label": "Столбец не существует",
"query_editor.sql_error.rule.column_missing.suggestion": "Проверьте имена столбцов, алиасы, регистр, алиасы таблиц и принадлежность столбца текущему объекту FROM/JOIN.",

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "AI 优化 SQL",
"query_editor.action.ai_optimize_sql_menu": "优化 SQL",
"query_editor.action.ai_schema_analysis": "Schema 分析",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "导出 SQL 文件",
"query_editor.action.format": "美化",
"query_editor.action.find_in_editor": "搜索",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "格式化失败SQL 语法可能有误。",
"query_editor.message.format_restore_success": "已还原到美化前 SQL",
"query_editor.message.insert_success": "代码已在当前光标处成功插入。",
"query_editor.message.ai_model_missing": "当前 AI Provider 未选择模型,请先在 AI 设置中选择模型。",
"query_editor.message.ai_provider_missing": "请先在 AI 设置中配置并启用 AI Provider。",
"query_editor.message.ai_service_unavailable": "AI 服务尚未就绪,请稍后重试或检查 AI 设置。",
"query_editor.message.no_executable_sql": "没有可执行的 SQL。",
"query_editor.message.no_format_restore_snapshot": "没有可还原的美化前 SQL",
"query_editor.message.current_line_no_copyable_content": "当前行没有可复制内容。",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "请先选择数据库。",
"query_editor.message.sql_file_saved": "SQL 文件已保存。",
"query_editor.message.statement_failed_prefix": "第 {{index}} 条语句执行失败:",
"query_editor.message.text_to_sql_empty_instruction": "请输入要生成的 SQL 需求。",
"query_editor.message.text_to_sql_empty_result": "AI 未返回可插入的 SQL。",
"query_editor.message.text_to_sql_failed": "Text-to-SQL 生成失败:{{error}}",
"query_editor.message.text_to_sql_success": "SQL 已生成并写入编辑器。",
"query_editor.message.unsupported_source": "当前数据源不支持 SQL 查询编辑器,请使用对应专用页面。",
"query_editor.object_info.column": "字段",
"query_editor.object_info.database": "数据库",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "描述需求自动生成语句",
"query_editor.slash_command.sql.label": "生成 SQL",
"query_editor.slash_command.sql.prompt": "请根据以下需求生成 SQL",
"query_editor.text_to_sql.description": "描述你想查询或处理的数据GoNavi 会结合当前连接、库和已加载表结构生成 SQL。",
"query_editor.text_to_sql.generate": "生成 SQL",
"query_editor.text_to_sql.mode.insert": "插入到光标",
"query_editor.text_to_sql.mode.replace_all": "替换全文",
"query_editor.text_to_sql.mode.replace_selection": "替换选区",
"query_editor.text_to_sql.placeholder": "例如:统计最近 30 天每天的订单金额,并按日期升序返回",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "SQL 引用了结果集中不存在、拼写不一致或当前表没有的字段。",
"query_editor.sql_error.rule.column_missing.label": "字段不存在",
"query_editor.sql_error.rule.column_missing.suggestion": "检查字段名、别名、大小写、引用表别名,以及字段是否属于当前 FROM/JOIN 的对象。",

View File

@@ -5954,6 +5954,7 @@
"query_editor.action.ai_optimize_sql": "AI 最佳化 SQL",
"query_editor.action.ai_optimize_sql_menu": "最佳化 SQL",
"query_editor.action.ai_schema_analysis": "結構描述分析",
"query_editor.action.ai_text_to_sql_menu": "Text-to-SQL",
"query_editor.action.export_sql_file": "匯出 SQL 檔案",
"query_editor.action.format": "格式化",
"query_editor.action.find_in_editor": "搜尋",
@@ -6177,6 +6178,9 @@
"query_editor.message.format_failed": "格式化失敗SQL 語法可能無效。",
"query_editor.message.format_restore_success": "已還原到美化前 SQL",
"query_editor.message.insert_success": "程式碼已插入目前游標位置。",
"query_editor.message.ai_model_missing": "目前 AI Provider 尚未選擇模型,請先在 AI 設定中選擇模型。",
"query_editor.message.ai_provider_missing": "請先在 AI 設定中設定並啟用 AI Provider。",
"query_editor.message.ai_service_unavailable": "AI 服務尚未就緒,請稍後重試或檢查 AI 設定。",
"query_editor.message.no_executable_sql": "沒有可執行的 SQL。",
"query_editor.message.no_format_restore_snapshot": "沒有可還原的美化前 SQL",
"query_editor.message.current_line_no_copyable_content": "目前行沒有可複製內容。",
@@ -6199,6 +6203,10 @@
"query_editor.message.select_database_first": "請先選擇資料庫。",
"query_editor.message.sql_file_saved": "SQL 檔案已儲存。",
"query_editor.message.statement_failed_prefix": "第 {{index}} 個陳述式執行失敗:",
"query_editor.message.text_to_sql_empty_instruction": "請輸入要產生的 SQL 需求。",
"query_editor.message.text_to_sql_empty_result": "AI 未傳回可插入的 SQL。",
"query_editor.message.text_to_sql_failed": "Text-to-SQL 產生失敗:{{error}}",
"query_editor.message.text_to_sql_success": "SQL 已產生並寫入編輯器。",
"query_editor.message.unsupported_source": "此資料來源不支援 SQL 查詢編輯器。請改用其專用頁面。",
"query_editor.object_info.column": "欄位",
"query_editor.object_info.database": "資料庫",
@@ -6270,6 +6278,13 @@
"query_editor.slash_command.sql.description": "描述需求並產生陳述式",
"query_editor.slash_command.sql.label": "產生 SQL",
"query_editor.slash_command.sql.prompt": "請根據以下需求產生 SQL",
"query_editor.text_to_sql.description": "描述你想查詢或處理的資料GoNavi 會結合目前連線、資料庫和已載入表結構產生 SQL。",
"query_editor.text_to_sql.generate": "產生 SQL",
"query_editor.text_to_sql.mode.insert": "插入到游標",
"query_editor.text_to_sql.mode.replace_all": "取代全文",
"query_editor.text_to_sql.mode.replace_selection": "取代選取範圍",
"query_editor.text_to_sql.placeholder": "例如:統計最近 30 天每天的訂單金額,並按日期升冪返回",
"query_editor.text_to_sql.title": "Text-to-SQL",
"query_editor.sql_error.rule.column_missing.explanation": "SQL 引用了結果集中不存在、拼寫不一致或目前表沒有的欄位。",
"query_editor.sql_error.rule.column_missing.label": "欄位不存在",
"query_editor.sql_error.rule.column_missing.suggestion": "檢查欄位名、別名、大小寫、引用表別名,以及欄位是否屬於目前 FROM/JOIN 的物件。",