diff --git a/messages/ar.json b/messages/ar.json index 62efe68..0ec21ee 100644 --- a/messages/ar.json +++ b/messages/ar.json @@ -235,6 +235,16 @@ "query_copy_cell": "نسخ قيمة الخلية", "query_copy_row": "نسخ الصف كـ JSON", "query_copy_column": "نسخ قيم العمود", + "query_statements_count": "{count} عبارات", + "query_error": "خطأ", + "query_statement_n": "العبارة {n}", + "query_result_rows_time": "({rows} صفوف، {time}مللي ثانية)", + "query_result_affected_time": "({affected} متأثرة، {time}مللي ثانية)", + "query_result_time": "({time}مللي ثانية)", + "query_result_error": "(خطأ)", + "query_statement_failed": "فشلت العبارة {n}", + "query_show_sql": "عرض SQL", + "query_no_executable_statements": "لم يتم العثور على عبارات قابلة للتنفيذ (تعليقات فقط)", "history_title": "الاستعلامات", "history_stats": "{executed} منفذة • {saved} محفوظة", "history_search_placeholder": "البحث في الاستعلامات...", diff --git a/messages/de.json b/messages/de.json index 0398266..8da9dc4 100644 --- a/messages/de.json +++ b/messages/de.json @@ -235,6 +235,16 @@ "query_copy_cell": "Zellwert kopieren", "query_copy_row": "Zeile als JSON kopieren", "query_copy_column": "Spaltenwerte kopieren", + "query_statements_count": "{count} Anweisungen", + "query_error": "Fehler", + "query_statement_n": "Anweisung {n}", + "query_result_rows_time": "({rows} Zeilen, {time}ms)", + "query_result_affected_time": "({affected} betroffen, {time}ms)", + "query_result_time": "({time}ms)", + "query_result_error": "(Fehler)", + "query_statement_failed": "Anweisung {n} fehlgeschlagen", + "query_show_sql": "SQL anzeigen", + "query_no_executable_statements": "Keine ausführbaren Anweisungen gefunden (nur Kommentare)", "history_title": "Abfragen", "history_stats": "{executed} ausgeführt • {saved} gespeichert", "history_search_placeholder": "Abfragen suchen...", diff --git a/messages/en.json b/messages/en.json index 42bf64d..fe0f324 100644 --- a/messages/en.json +++ b/messages/en.json @@ -235,6 +235,16 @@ "query_copy_cell": "Copy Cell Value", "query_copy_row": "Copy Row as JSON", "query_copy_column": "Copy Column Values", + "query_statements_count": "{count} statements", + "query_error": "Error", + "query_statement_n": "Statement {n}", + "query_result_rows_time": "({rows} rows, {time}ms)", + "query_result_affected_time": "({affected} affected, {time}ms)", + "query_result_time": "({time}ms)", + "query_result_error": "(error)", + "query_statement_failed": "Statement {n} failed", + "query_show_sql": "Show SQL", + "query_no_executable_statements": "No executable statements found (only comments)", "history_title": "Queries", "history_stats": "{executed} executed • {saved} saved", "history_search_placeholder": "Search queries...", diff --git a/messages/es.json b/messages/es.json index 7c01bcb..7df06fa 100644 --- a/messages/es.json +++ b/messages/es.json @@ -235,6 +235,16 @@ "query_copy_cell": "Copiar valor de celda", "query_copy_row": "Copiar fila como JSON", "query_copy_column": "Copiar valores de columna", + "query_statements_count": "{count} sentencias", + "query_error": "Error", + "query_statement_n": "Sentencia {n}", + "query_result_rows_time": "({rows} filas, {time}ms)", + "query_result_affected_time": "({affected} afectadas, {time}ms)", + "query_result_time": "({time}ms)", + "query_result_error": "(error)", + "query_statement_failed": "Sentencia {n} falló", + "query_show_sql": "Mostrar SQL", + "query_no_executable_statements": "No se encontraron sentencias ejecutables (solo comentarios)", "history_title": "Consultas", "history_stats": "{executed} ejecutadas • {saved} guardadas", "history_search_placeholder": "Buscar consultas...", diff --git a/messages/fr.json b/messages/fr.json index 7337230..18490e3 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -235,6 +235,16 @@ "query_copy_cell": "Copier la valeur de la cellule", "query_copy_row": "Copier la ligne en JSON", "query_copy_column": "Copier les valeurs de la colonne", + "query_statements_count": "{count} instructions", + "query_error": "Erreur", + "query_statement_n": "Instruction {n}", + "query_result_rows_time": "({rows} lignes, {time}ms)", + "query_result_affected_time": "({affected} affectées, {time}ms)", + "query_result_time": "({time}ms)", + "query_result_error": "(erreur)", + "query_statement_failed": "Instruction {n} échouée", + "query_show_sql": "Afficher SQL", + "query_no_executable_statements": "Aucune instruction exécutable trouvée (seulement des commentaires)", "history_title": "Requêtes", "history_stats": "{executed} exécutées • {saved} enregistrées", "history_search_placeholder": "Rechercher des requêtes...", diff --git a/messages/ko.json b/messages/ko.json index 43d8240..3064389 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -235,6 +235,16 @@ "query_copy_cell": "셀 값 복사", "query_copy_row": "행을 JSON으로 복사", "query_copy_column": "열 값 복사", + "query_statements_count": "{count}개 문장", + "query_error": "오류", + "query_statement_n": "문장 {n}", + "query_result_rows_time": "({rows}행, {time}ms)", + "query_result_affected_time": "({affected}개 영향, {time}ms)", + "query_result_time": "({time}ms)", + "query_result_error": "(오류)", + "query_statement_failed": "문장 {n} 실패", + "query_show_sql": "SQL 보기", + "query_no_executable_statements": "실행 가능한 문장이 없습니다 (주석만 있음)", "history_title": "쿼리", "history_stats": "{executed}개 실행됨 • {saved}개 저장됨", "history_search_placeholder": "쿼리 검색...", diff --git a/src/lib/components/command-palette.svelte b/src/lib/components/command-palette.svelte index 73f6557..e1fde09 100644 --- a/src/lib/components/command-palette.svelte +++ b/src/lib/components/command-palette.svelte @@ -33,7 +33,8 @@ const savedQueries = $derived(db.state.activeConnectionSavedQueries); const recentHistory = $derived(db.state.activeConnectionQueryHistory?.slice(0, 10) || []); const openTabs = $derived(db.tabs.ordered); - const hasResults = $derived((db.state.activeQueryTab?.results?.rows?.length ?? 0) > 0); + const activeResult = $derived(db.state.activeQueryResult); + const hasResults = $derived((activeResult?.rows?.length ?? 0) > 0); const isConnected = $derived(!!db.state.activeConnectionId && !!db.state.activeConnection?.database); const hasActiveQueryTab = $derived(isConnected && !!db.state.activeQueryTab); const hasQueryContent = $derived(hasActiveQueryTab && !!db.state.activeQueryTab?.query?.trim()); @@ -166,19 +167,18 @@ } function exportResults(format: "csv" | "json") { - const results = db.state.activeQueryTab?.results; - if (!results) return; + if (!activeResult) return; let content: string; let filename: string; const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); if (format === "csv") { - const headers = results.columns.join(","); - const rows = results.rows - .map((row) => - results.columns - .map((col) => { + const headers = activeResult.columns.join(","); + const rows = activeResult.rows + .map((row: Record) => + activeResult.columns + .map((col: string) => { const val = row[col]; if (val === null || val === undefined) return ""; const str = String(val); @@ -192,7 +192,7 @@ content = `${headers}\n${rows}`; filename = `query-results-${timestamp}.csv`; } else { - content = JSON.stringify(results.rows, null, 2); + content = JSON.stringify(activeResult.rows, null, 2); filename = `query-results-${timestamp}.json`; } @@ -208,10 +208,9 @@ } function copyResults() { - const results = db.state.activeQueryTab?.results; - if (!results) return; + if (!activeResult) return; - const content = JSON.stringify(results.rows, null, 2); + const content = JSON.stringify(activeResult.rows, null, 2); navigator.clipboard.writeText(content); open = false; } diff --git a/src/lib/components/monaco-editor.svelte b/src/lib/components/monaco-editor.svelte index 61023d7..da15e8b 100644 --- a/src/lib/components/monaco-editor.svelte +++ b/src/lib/components/monaco-editor.svelte @@ -1,3 +1,9 @@ + +