Skip to content

Commit

Permalink
suggest models in the code editor (#3705)
Browse files Browse the repository at this point in the history
* adds autocomplate for models in the code editor

* remove unused type import

* change schema initialization, rename variable in useAllModelColumns
  • Loading branch information
briangregoryholmes authored and mindspank committed Dec 18, 2023
1 parent 6b59e7a commit e8aed0b
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
26 changes: 26 additions & 0 deletions web-common/src/features/models/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ import {
} 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 +37,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)
),
(modelColumnResponses) =>
modelColumnResponses.filter((res) => !!res.data).map((res) => res.data)
).subscribe(set);
});
}

export async function getModelNames(
queryClient: QueryClient,
instanceId: string
Expand Down
14 changes: 12 additions & 2 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 @@ -89,18 +90,27 @@
"select from where group by all having order limit sample unnest with window qualify values filter exclude replace like ilike glob as case when then else end in cast left join on not desc asc sum union",
});
const schema: { [table: string]: string[] } = {};
// Autocomplete: source tables
let schema: { [table: string]: string[] };
$: allSourceColumns = useAllSourceColumns(queryClient, $runtime?.instanceId);
$: if ($allSourceColumns?.length) {
schema = {};
for (const sourceTable of $allSourceColumns) {
const sourceIdentifier = sourceTable?.tableName;
schema[sourceIdentifier] =
sourceTable.profileColumns?.map((c) => c.name) ?? [];
}
}
//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 e8aed0b

Please sign in to comment.