diff --git a/packages/frontend/src/stdlib/analyses.tsx b/packages/frontend/src/stdlib/analyses.tsx
index 38b19a6a0..2bb74794c 100644
--- a/packages/frontend/src/stdlib/analyses.tsx
+++ b/packages/frontend/src/stdlib/analyses.tsx
@@ -358,7 +358,7 @@ export function renderSQL(
help,
component: (props) => ,
initialContent: () => ({
- backend: SQLBackend.MySQL,
+ backend: SQLBackend.PostgresSQL,
filename: "schema.sql",
}),
};
diff --git a/packages/frontend/src/stdlib/analyses/sql.tsx b/packages/frontend/src/stdlib/analyses/sql.tsx
index 0ae68af1c..0017765a8 100644
--- a/packages/frontend/src/stdlib/analyses/sql.tsx
+++ b/packages/frontend/src/stdlib/analyses/sql.tsx
@@ -2,10 +2,15 @@ import download from "js-file-download";
import CircleHelp from "lucide-solid/icons/circle-help";
import Copy from "lucide-solid/icons/copy";
import Download from "lucide-solid/icons/download";
-import { For, Match, Show, Switch } from "solid-js";
+import { useContext, For, Match, Show, Switch } from "solid-js";
+import { createMemo, createEffect } from "solid-js";
+import invariant from "tiny-invariant";
import { BlockTitle, ErrorAlert, IconButton } from "catcolab-ui-components";
+import { elaborateModel, DblModelMap } from "catlog-wasm";
import type { ModelAnalysisProps } from "../../analysis";
+import { type ModelLibrary, ModelLibraryContext } from "../../model";
+import { getConfig } from "../../user/documents";
import * as SQL from "./sql_types.ts";
const copyToClipboard = (text: string) => navigator.clipboard.writeText(text);
@@ -67,6 +72,25 @@ export default function SQLSchemaAnalysis(
title: string;
},
) {
+
+ const configDoc = getConfig();
+ const models = useContext(ModelLibraryContext);
+ const otherModel = models?.useElaboratedModel(() => configDoc[0].refId);
+
+ const sqlBackend = createMemo(() => {
+ const entry = otherModel();
+ if (entry?.validatedModel.tag === "Valid") {
+ const gen = entry.validatedModel.model
+ .presentation()
+ .obGenerators.find((ob) => ob.label.includes("SQLBackend"));
+ if (!gen) return undefined;
+ const mor = entry.validatedModel.model
+ .presentation()
+ .morGenerators.find((m) => m.dom.content === gen.id);
+ return mor?.label?.join(".") as SQL.SQLBackend | undefined;
+ }
+ });
+
const sql_script = () => {
const model = props.liveModel.elaboratedModel();
if (model) {
@@ -74,6 +98,15 @@ export default function SQLSchemaAnalysis(
}
};
+ createEffect(() => {
+ const configBackend = sqlBackend();
+ if (configBackend) {
+ props.changeContent((content) => {
+ content.backend = configBackend as SQL.SQLBackend;
+ });
+ }
+ });
+
const BackendConfig = () => (
Backend:
diff --git a/packages/frontend/src/user/documents.tsx b/packages/frontend/src/user/documents.tsx
index f5ce6a569..42fb91145 100644
--- a/packages/frontend/src/user/documents.tsx
+++ b/packages/frontend/src/user/documents.tsx
@@ -109,3 +109,15 @@ function DeleteButton(props: { doc: DocInfo & { refId: string } }) {
);
}
+
+export function getConfig() {
+ const userState = useUserState();
+ const config = createMemo(() =>
+ filterDocuments(userState.documents, {
+ query: "config",
+ deleted: false,
+ }),
+ );
+
+ return config();
+}