changed query workflow for duckdb

This commit is contained in:
SPRINX0\prochazka
2025-04-24 14:56:25 +02:00
parent c4f17e42e1
commit 55896be694
6 changed files with 141 additions and 123 deletions

View File

@@ -1,52 +0,0 @@
<script lang="ts">
import { createGridCache, createGridConfig, FreeTableGridDisplay } from 'dbgate-datalib';
import DataGridCore from '../datagrid/DataGridCore.svelte';
import RowsArrayGrider from '../datagrid/RowsArrayGrider';
import TabControl from '../elements/TabControl.svelte';
import { TableInfo } from 'dbgate-types';
import { writable } from 'svelte/store';
import DataGrid from '../datagrid/DataGrid.svelte';
import ErrorInfo from '../elements/ErrorInfo.svelte';
let selectedTab = 0;
export let result;
const config = writable(createGridConfig());
const cache = writable(createGridCache());
$: grider = result?.rows && result?.columns ? new RowsArrayGrider(result.rows) : null;
$: display =
result?.rows && result?.columns
? new FreeTableGridDisplay(
{
structure: {
columns: result.columns,
} as TableInfo,
rows: result.rows,
},
$config,
config.update,
$cache,
cache.update
)
: null;
</script>
<TabControl
bind:value={selectedTab}
tabs={[grider && display && { label: 'Data', slot: 1 }, { label: 'Status', slot: 2 }]}
>
<svelte:fragment slot="1">
{#if grider && display}
<DataGrid {grider} {display} gridCoreComponent={DataGridCore} />
{/if}
</svelte:fragment>
<svelte:fragment slot="2">
{#if result?.errorMessage}
<ErrorInfo message={result?.errorMessage} alignTop />
{:else if result?.rows}
<ErrorInfo message={`Returned ${result.rows.length} rows`} icon="img info" alignTop />
{/if}
</svelte:fragment>
</TabControl>

View File

@@ -107,7 +107,7 @@
</script>
<script lang="ts">
import { getContext, onDestroy, onMount } from 'svelte';
import { getContext, onDestroy, onMount, tick } from 'svelte';
import sqlFormatter from 'sql-formatter';
import VerticalSplitter from '../elements/VerticalSplitter.svelte';
@@ -143,7 +143,7 @@
import { isProApp } from '../utility/proTools';
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
import QueryAiAssistant from '../query/QueryAiAssistant.svelte';
import SimpleQueryResultTabs from '../query/SimpleQueryResultTabs.svelte';
import uuidv1 from 'uuid/v1';
export let tabid;
export let conid;
@@ -197,11 +197,9 @@
let isInTransaction = false;
let isAutocommit = false;
let simpleQueryDataResult = null;
onMount(() => {
intervalId = setInterval(() => {
if (sessionId) {
if (!driver?.singleConnectionOnly && sessionId) {
apiCall('sessions/ping', {
sesid: sessionId,
});
@@ -326,16 +324,6 @@
return;
}
if (driver?.singleConnectionOnly) {
simpleQueryDataResult = await apiCall('database-connections/query-data', {
conid,
database,
sql,
});
visibleResultTabs = true;
return;
}
executeStartLine = startLine;
executeNumber++;
visibleResultTabs = true;
@@ -343,23 +331,34 @@
busy = true;
timerLabel.start();
let sesid = sessionId;
if (!sesid) {
const resp = await apiCall('sessions/create', {
if (driver?.singleConnectionOnly) {
sessionId = uuidv1();
await tick();
await apiCall('database-connections/execute-session-query', {
sesid: sessionId,
conid,
database,
sql,
});
} else {
let sesid = sessionId;
if (!sesid) {
const resp = await apiCall('sessions/create', {
conid,
database,
});
sesid = resp.sesid;
sessionId = sesid;
}
if (driver?.implicitTransactions) {
isInTransaction = true;
}
await apiCall('sessions/execute-query', {
sesid,
sql,
autoCommit: driver?.implicitTransactions && isAutocommit,
});
sesid = resp.sesid;
sessionId = sesid;
}
if (driver?.implicitTransactions) {
isInTransaction = true;
}
await apiCall('sessions/execute-query', {
sesid,
sql,
autoCommit: driver?.implicitTransactions && isAutocommit,
});
await apiCall('query-history/write', {
data: {
sql,
@@ -655,23 +654,19 @@
{/if}
</svelte:fragment>
<svelte:fragment slot="2">
{#if driver?.singleConnectionOnly}
<SimpleQueryResultTabs result={simpleQueryDataResult} />
{:else}
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
<svelte:fragment slot="0">
<SocketMessageView
eventName={sessionId ? `session-info-${sessionId}` : null}
onMessageClick={handleMesageClick}
{executeNumber}
startLine={executeStartLine}
showProcedure
showLine
onChangeErrors={handleChangeErrors}
/>
</svelte:fragment>
</ResultTabs>
{/if}
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
<svelte:fragment slot="0">
<SocketMessageView
eventName={sessionId ? `session-info-${sessionId}` : null}
onMessageClick={handleMesageClick}
{executeNumber}
startLine={executeStartLine}
showProcedure
showLine
onChangeErrors={handleChangeErrors}
/>
</svelte:fragment>
</ResultTabs>
</svelte:fragment>
</VerticalSplitter>
</svelte:fragment>