diff --git a/src/lib/olap-engine/queries/clickhouse_get_schema.sql b/src/lib/olap-engine/queries/clickhouse_get_schema.sql index 60d4e6a..1878eb4 100644 --- a/src/lib/olap-engine/queries/clickhouse_get_schema.sql +++ b/src/lib/olap-engine/queries/clickhouse_get_schema.sql @@ -1,11 +1,9 @@ SELECT t.name AS name, - t.engine AS engine, - groupArray(map( - 'name', c.name, - 'type', c.type - )) AS columns + IF(t.as_select LIKE '%s3(%', 'S3', t.engine) AS engine, + groupArray(map('name', c.name, 'type', c.type)) AS columns FROM system.tables AS t -INNER JOIN system.columns AS c ON t.name = c.table +INNER JOIN system.columns AS c + ON t.name = c.table WHERE database = currentDatabase() -GROUP BY t.name, t.engine +GROUP BY name, engine diff --git a/src/lib/styles/main.css b/src/lib/styles/main.css index d0d4eea..f139310 100644 --- a/src/lib/styles/main.css +++ b/src/lib/styles/main.css @@ -19,10 +19,15 @@ box-sizing: border-box; } + html, + body { + height: 100%; + width: 100%; + } + body { background: light-dark(white, black); font-family: Inter, Avenir, Helvetica, Arial, sans-serif; - min-height: 100vh; font-synthesis: none; text-rendering: optimizeLegibility; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5d06228..16402b2 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -37,23 +37,17 @@ const last = await historyRepository.getLast(); if (response && last?.content !== query) await addHistoryEntry(query); + + if (response) responsePanelOpened = true; } let tables = $state.raw([]); let history = $state.raw([]); let queries = $state.raw([]); - $effect(() => { - engine.getSchema().then((t) => { - tables = t; - }); - }); - - $effect(() => { - historyRepository.getAll().then((entries) => { - history = entries; - }); - }); + $effect(() => void engine.getSchema().then((t) => (tables = t))); + $effect(() => void historyRepository.getAll().then((entries) => (history = entries))); + $effect(() => void queryRepository.getAll().then((q) => (queries = q))); async function addHistoryEntry(query: string) { try { @@ -78,10 +72,6 @@ history = history.toSpliced(index, 1); } - $effect(() => { - queryRepository.getAll().then((q) => (queries = q)); - }); - let saveQueryModal = $state>(); async function handleKeyDown(event: KeyboardEvent) { @@ -104,6 +94,10 @@ async function handleDeleteQuery(query: Query) { await queryRepository.delete(query.id); queries = queries.toSpliced(queries.indexOf(query), 1); + + const index = tabs.findIndex((t) => t.query_id === query.id); + if (index !== -1) + tabs[index] = { ...tabs[index], query_id: undefined, name: tabs[index].name + ' (deleted)' }; } function handleQueryOpen(query: Query) { @@ -200,6 +194,8 @@ } $effect(() => void saveTabs($state.snapshot(tabs), selectedTabIndex).catch(console.error)); + + let responsePanelOpened = $state(false); @@ -238,7 +234,14 @@ {/if} {/snippet} {#snippet b()} - + {#snippet a()}