mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 02:06:01 +00:00
duckDb: singleConnection query
This commit is contained in:
committed by
Nybkox
parent
750265cb79
commit
890461bcf8
1
packages/types/engines.d.ts
vendored
1
packages/types/engines.d.ts
vendored
@@ -310,6 +310,7 @@ export interface EngineDriver<TClient = any> extends FilterBehaviourProvider {
|
|||||||
|
|
||||||
analyserClass?: any;
|
analyserClass?: any;
|
||||||
dumperClass?: any;
|
dumperClass?: any;
|
||||||
|
singleConnectionOnly?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DatabaseModification {
|
export interface DatabaseModification {
|
||||||
|
|||||||
52
packages/web/src/query/SimpleQueryResultTabs.svelte
Normal file
52
packages/web/src/query/SimpleQueryResultTabs.svelte
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<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>
|
||||||
@@ -143,6 +143,7 @@
|
|||||||
import { isProApp } from '../utility/proTools';
|
import { isProApp } from '../utility/proTools';
|
||||||
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
||||||
import QueryAiAssistant from '../query/QueryAiAssistant.svelte';
|
import QueryAiAssistant from '../query/QueryAiAssistant.svelte';
|
||||||
|
import SimpleQueryResultTabs from '../query/SimpleQueryResultTabs.svelte';
|
||||||
|
|
||||||
export let tabid;
|
export let tabid;
|
||||||
export let conid;
|
export let conid;
|
||||||
@@ -196,6 +197,8 @@
|
|||||||
let isInTransaction = false;
|
let isInTransaction = false;
|
||||||
let isAutocommit = false;
|
let isAutocommit = false;
|
||||||
|
|
||||||
|
let simpleQueryDataResult = null;
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
intervalId = setInterval(() => {
|
intervalId = setInterval(() => {
|
||||||
if (sessionId) {
|
if (sessionId) {
|
||||||
@@ -323,6 +326,16 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (driver?.singleConnectionOnly) {
|
||||||
|
simpleQueryDataResult = await apiCall('database-connections/query-data', {
|
||||||
|
conid,
|
||||||
|
database,
|
||||||
|
sql,
|
||||||
|
});
|
||||||
|
visibleResultTabs = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
executeStartLine = startLine;
|
executeStartLine = startLine;
|
||||||
executeNumber++;
|
executeNumber++;
|
||||||
visibleResultTabs = true;
|
visibleResultTabs = true;
|
||||||
@@ -642,19 +655,23 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
<svelte:fragment slot="2">
|
<svelte:fragment slot="2">
|
||||||
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
|
{#if driver?.singleConnectionOnly}
|
||||||
<svelte:fragment slot="0">
|
<SimpleQueryResultTabs result={simpleQueryDataResult} />
|
||||||
<SocketMessageView
|
{:else}
|
||||||
eventName={sessionId ? `session-info-${sessionId}` : null}
|
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
|
||||||
onMessageClick={handleMesageClick}
|
<svelte:fragment slot="0">
|
||||||
{executeNumber}
|
<SocketMessageView
|
||||||
startLine={executeStartLine}
|
eventName={sessionId ? `session-info-${sessionId}` : null}
|
||||||
showProcedure
|
onMessageClick={handleMesageClick}
|
||||||
showLine
|
{executeNumber}
|
||||||
onChangeErrors={handleChangeErrors}
|
startLine={executeStartLine}
|
||||||
/>
|
showProcedure
|
||||||
</svelte:fragment>
|
showLine
|
||||||
</ResultTabs>
|
onChangeErrors={handleChangeErrors}
|
||||||
|
/>
|
||||||
|
</svelte:fragment>
|
||||||
|
</ResultTabs>
|
||||||
|
{/if}
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</VerticalSplitter>
|
</VerticalSplitter>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ const driver = {
|
|||||||
title: 'DuckDB',
|
title: 'DuckDB',
|
||||||
readOnlySessions: true,
|
readOnlySessions: true,
|
||||||
supportsTransactions: true,
|
supportsTransactions: true,
|
||||||
|
singleConnectionOnly: true,
|
||||||
|
|
||||||
getQuerySplitterOptions: (usage) =>
|
getQuerySplitterOptions: (usage) =>
|
||||||
usage == 'editor'
|
usage == 'editor'
|
||||||
|
|||||||
Reference in New Issue
Block a user