Skip to content

Commit

Permalink
adds autocomplate for models in the code editor
Browse files Browse the repository at this point in the history
  • Loading branch information
briangregoryholmes committed Dec 14, 2023
1 parent 135177d commit 01d00f1
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 2 deletions.
27 changes: 27 additions & 0 deletions web-common/src/features/models/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,16 @@ import {
getRuntimeServiceListFilesQueryKey,
runtimeServiceListFiles,
V1ListFilesResponse,
V1ProfileColumn,

Check failure on line 14 in web-common/src/features/models/selectors.ts

View workflow job for this annotation

GitHub Actions / build

'V1ProfileColumn' is defined but never used
} from "@rilldata/web-common/runtime-client";
import type { QueryClient } from "@tanstack/query-core";
import { TIMESTAMPS } from "../../lib/duckdb-data-types";
import type { Readable } from "svelte/motion";
import { derived } from "svelte/store";
import {
createTableColumnsWithName,
type TableColumnsWithName,
} from "../sources/selectors";

export function useModels(instanceId: string) {
return useFilteredResources(instanceId, ResourceKind.Model);
Expand All @@ -31,6 +38,26 @@ export function useModel(instanceId: string, name: string) {
return useResource(instanceId, name, ResourceKind.Model);
}

export function useAllModelColumns(
queryClient: QueryClient,
instanceId: string
): Readable<Array<TableColumnsWithName>> {
return derived([useModels(instanceId)], ([allModels], set) => {
if (!allModels.data?.length) {
set([]);
return;
}

derived(
allModels.data.map((r) =>
createTableColumnsWithName(queryClient, instanceId, r.meta.name.name)
),
(sourceColumnResponses) =>
sourceColumnResponses.filter((res) => !!res.data).map((res) => res.data)
).subscribe(set);
});
}

export async function getModelNames(
queryClient: QueryClient,
instanceId: string
Expand Down
10 changes: 10 additions & 0 deletions web-common/src/features/models/workspace/Editor.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
import { editorTheme } from "../../../components/editor/theme";
import { runtime } from "../../../runtime-client/runtime-store";
import { useAllSourceColumns } from "../../sources/selectors";
import { useAllModelColumns } from "../selectors";
export let content: string;
export let editorHeight = 0;
Expand Down Expand Up @@ -101,6 +102,15 @@
}
}
//Auto complete: model tables
$: allModelColumns = useAllModelColumns(queryClient, $runtime?.instanceId);
$: if ($allModelColumns?.length) {
for (const modelTable of $allModelColumns) {
const modelIdentifier = modelTable?.tableName;
schema[modelIdentifier] = modelTable.profileColumns?.map((c) => c.name);
}
}
function getTableNameFromFromClause(
sql: string,
schema: { [table: string]: string[] }
Expand Down
4 changes: 2 additions & 2 deletions web-common/src/features/sources/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export function useIsLocalFileConnector(
);
}

type TableColumnsWithName = {
export type TableColumnsWithName = {
tableName: string;
profileColumns: Array<V1ProfileColumn>;
};
Expand Down Expand Up @@ -116,7 +116,7 @@ export function useAllSourceColumns(
/**
* Fetches columns and adds the table name. By using the selector the results will be cached.
*/
function createTableColumnsWithName(
export function createTableColumnsWithName(
queryClient: QueryClient,
instanceId: string,
tableName: string
Expand Down

0 comments on commit 01d00f1

Please sign in to comment.