@sqlrooms/cells 0.29.0-rc.8 → 0.29.0-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultCellRegistry.d.ts","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaultCellRegistry.d.ts","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,YAAY,EAQb,MAAM,SAAS,CAAC;AAIjB,wBAAgB,yBAAyB,IAAI,YAAY,CA8PxD"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { makeQualifiedTableName } from '@sqlrooms/duckdb';
|
|
3
2
|
import { convertToValidColumnOrTableName } from '@sqlrooms/utils';
|
|
4
3
|
import { produce } from 'immer';
|
|
5
4
|
import { InputCellContent } from './components/InputCellContent';
|
|
@@ -106,11 +105,13 @@ export function createDefaultCellRegistry() {
|
|
|
106
105
|
? resolveArtifactSchemaName(artifact)
|
|
107
106
|
: 'main';
|
|
108
107
|
const effectiveResultName = getEffectiveResultName(cell.data, convertToValidColumnOrTableName);
|
|
109
|
-
const newTableName =
|
|
108
|
+
const newTableName = state.db
|
|
109
|
+
.qualifyTableName({
|
|
110
110
|
table: effectiveResultName,
|
|
111
111
|
schema: schemaName,
|
|
112
112
|
database: state.db.currentDatabase,
|
|
113
|
-
})
|
|
113
|
+
})
|
|
114
|
+
.toString();
|
|
114
115
|
if (newTableName === oldResultView) {
|
|
115
116
|
return;
|
|
116
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultCellRegistry.js","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"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","sourcesContent":["import {makeQualifiedTableName} from '@sqlrooms/duckdb';\nimport {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {InputCellContent} from './components/InputCellContent';\nimport {SqlCellContent} from './components/SqlCellContent';\nimport {TextCellContent} from './components/TextCellContent';\nimport {VegaCellContent} from './components/VegaCellContent';\nimport {executeSqlCell} from './execution';\nimport {findArtifactIdForCell, resolveArtifactSchemaName} from './helpers';\nimport {dropResultRelation, renameResultRelation} from './resultRelationPolicy';\nimport {\n findSqlDependenciesFromAst,\n qualifyArtifactLocalResultNames,\n renderSqlWithInputs,\n} from './sqlHelpers';\nimport type {\n Cell,\n CellRegistry,\n CellStatus,\n InputCell,\n SqlCell,\n SqlCellData,\n SqlCellStatus,\n TextCell,\n VegaCell,\n} from './types';\nimport {isInputCell, isSqlCell} from './types';\nimport {getEffectiveResultName, isDefined} from './utils';\n\nexport function createDefaultCellRegistry(): CellRegistry {\n return {\n sql: {\n type: 'sql',\n title: 'SQL Query',\n createCell: ({id}): SqlCell => ({\n id,\n type: 'sql',\n data: {title: 'Untitled Query', sql: ''},\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <SqlCellContent\n id={id}\n cell={cell as SqlCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async ({cell, cells, sqlSelectToJson}) => {\n return findSqlDependenciesFromAst({\n sql: (cell as SqlCell).data.sql,\n cells,\n sqlSelectToJson,\n });\n },\n createStatus: (): CellStatus => ({\n type: 'sql',\n status: 'idle',\n referencedTables: [],\n }),\n onRemove: async ({status, get}) => {\n if (status?.type === 'sql' && (status as SqlCellStatus).resultView) {\n try {\n const connector = await get().db.getConnector();\n await dropResultRelation({\n connector,\n relationName: (status as SqlCellStatus).resultView,\n });\n } catch {\n // best-effort\n }\n }\n },\n hasSemanticChange: (oldCell, newCell) => {\n const oldSql = isSqlCell(oldCell) ? oldCell.data.sql : undefined;\n const newSql = isSqlCell(newCell) ? newCell.data.sql : undefined;\n return oldSql !== newSql;\n },\n invalidateStatus: (currentStatus): CellStatus => ({\n type: 'sql',\n status: 'idle',\n referencedTables:\n (currentStatus as SqlCellStatus).referencedTables || [],\n }),\n getRelationsToDrop: (status): string[] => {\n const sqlStatus = status as SqlCellStatus;\n return sqlStatus.resultView ? [sqlStatus.resultView] : [];\n },\n recordError: (currentStatus, message): CellStatus => ({\n ...currentStatus,\n status: 'error',\n lastError: message,\n }),\n getResultRelation: (status): string | undefined => {\n const sqlStatus = status as SqlCellStatus;\n return sqlStatus.resultView;\n },\n runCell: async ({id, opts, get, set}) => {\n const ownerArtifactId = findArtifactIdForCell(get(), id);\n if (ownerArtifactId) {\n await get().cells.updateEdgesFromSql(ownerArtifactId, id);\n }\n\n const controller = new AbortController();\n set((s) =>\n produce(s, (draft) => {\n draft.cells.activeAbortControllers[id] = controller;\n }),\n );\n\n await executeSqlCell(id, get, set, {\n schemaName: opts?.schemaName || 'main',\n cascade: opts?.cascade,\n signal: controller.signal,\n setCellResult: get().cells.setCellResult,\n });\n\n void get().db.refreshTableSchemas();\n },\n renameResult: async ({id, oldResultView, get, set}) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell || cell.type !== 'sql') return;\n const status = state.cells.status[id];\n const previousRelationType =\n (status?.type === 'sql'\n ? (status as SqlCellStatus).resultRelationType\n : undefined) ?? 'view';\n\n const artifactId = findArtifactIdForCell(state, id);\n const artifact = artifactId\n ? state.cells.config.artifacts[artifactId]\n : undefined;\n const schemaName = artifact\n ? resolveArtifactSchemaName(artifact)\n : 'main';\n\n const effectiveResultName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const newTableName = makeQualifiedTableName({\n table: effectiveResultName,\n schema: schemaName,\n database: state.db.currentDatabase,\n }).toString();\n\n if (newTableName === oldResultView) {\n return;\n }\n\n const connector = await state.db.getConnector();\n const sql = (cell.data as SqlCellData).sql;\n const scopedCellIds =\n artifact?.cellIds ?? Object.keys(state.cells.config.data);\n const scopedCells = Object.fromEntries(\n scopedCellIds\n .map((cellId) => state.cells.config.data[cellId])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n\n const inputs = Object.values(scopedCells)\n .filter((c) => isInputCell(c))\n .map((c) => ({\n varName: c.data.input.varName,\n value: c.data.input.value as string | number,\n }));\n const renderedSql = renderSqlWithInputs(sql, inputs);\n const rewrittenSql = qualifyArtifactLocalResultNames({\n sql: renderedSql,\n artifactSchema: schemaName,\n artifactCellIds: scopedCellIds,\n cells: state.cells.config.data,\n getSqlResultName: (cellId) => {\n const c = state.cells.config.data[cellId];\n if (c?.type === 'sql') {\n return getEffectiveResultName(\n c.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n }\n return undefined;\n },\n });\n\n await renameResultRelation({\n connector,\n oldRelationName: oldResultView,\n newRelationName: newTableName,\n relationType: previousRelationType,\n viewSql: rewrittenSql,\n });\n\n set((s) =>\n produce(s, (draft) => {\n const draftStatus = draft.cells.status[id];\n if (draftStatus?.type === 'sql') {\n (draftStatus as SqlCellStatus).resultName = newTableName;\n (draftStatus as SqlCellStatus).resultView = newTableName;\n (draftStatus as SqlCellStatus).resultRelationType =\n previousRelationType;\n }\n }),\n );\n\n void get().db.refreshTableSchemas();\n },\n },\n text: {\n type: 'text',\n title: 'Text / Markdown',\n createCell: ({id}): TextCell => ({\n id,\n type: 'text',\n data: {title: 'Text', text: ''},\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <TextCellContent\n id={id}\n cell={cell as TextCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async () => [],\n },\n vega: {\n type: 'vega',\n title: 'Visualization',\n createCell: ({id}): VegaCell => ({\n id,\n type: 'vega',\n data: {\n title: 'Chart',\n crossFilter: {enabled: true},\n vegaSpec: {\n data: {name: 'queryResult'},\n mark: 'bar',\n padding: 20,\n },\n },\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <VegaCellContent\n id={id}\n cell={cell as VegaCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async ({cell}) => {\n const sqlId = (cell as VegaCell).data.sqlId;\n const tableRef = (cell as VegaCell).data.tableRef;\n return {\n cellIds: sqlId ? [sqlId] : [],\n tableNames: tableRef ? [tableRef] : [],\n };\n },\n },\n input: {\n type: 'input',\n title: 'Input / Parameter',\n createCell: ({id}): InputCell => ({\n id,\n type: 'input',\n data: {\n title: 'Input',\n input: {\n kind: 'text',\n varName: `param_${id.slice(0, 4)}`,\n value: '',\n },\n },\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <InputCellContent\n id={id}\n cell={cell as InputCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async () => [],\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"defaultCellRegistry.js","sourceRoot":"","sources":["../src/defaultCellRegistry.tsx"],"names":[],"mappings":"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","sourcesContent":["import {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {InputCellContent} from './components/InputCellContent';\nimport {SqlCellContent} from './components/SqlCellContent';\nimport {TextCellContent} from './components/TextCellContent';\nimport {VegaCellContent} from './components/VegaCellContent';\nimport {executeSqlCell} from './execution';\nimport {findArtifactIdForCell, resolveArtifactSchemaName} from './helpers';\nimport {dropResultRelation, renameResultRelation} from './resultRelationPolicy';\nimport {\n findSqlDependenciesFromAst,\n qualifyArtifactLocalResultNames,\n renderSqlWithInputs,\n} from './sqlHelpers';\nimport type {\n Cell,\n CellRegistry,\n CellStatus,\n InputCell,\n SqlCell,\n SqlCellData,\n SqlCellStatus,\n TextCell,\n VegaCell,\n} from './types';\nimport {isInputCell, isSqlCell} from './types';\nimport {getEffectiveResultName, isDefined} from './utils';\n\nexport function createDefaultCellRegistry(): CellRegistry {\n return {\n sql: {\n type: 'sql',\n title: 'SQL Query',\n createCell: ({id}): SqlCell => ({\n id,\n type: 'sql',\n data: {title: 'Untitled Query', sql: ''},\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <SqlCellContent\n id={id}\n cell={cell as SqlCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async ({cell, cells, sqlSelectToJson}) => {\n return findSqlDependenciesFromAst({\n sql: (cell as SqlCell).data.sql,\n cells,\n sqlSelectToJson,\n });\n },\n createStatus: (): CellStatus => ({\n type: 'sql',\n status: 'idle',\n referencedTables: [],\n }),\n onRemove: async ({status, get}) => {\n if (status?.type === 'sql' && (status as SqlCellStatus).resultView) {\n try {\n const connector = await get().db.getConnector();\n await dropResultRelation({\n connector,\n relationName: (status as SqlCellStatus).resultView,\n });\n } catch {\n // best-effort\n }\n }\n },\n hasSemanticChange: (oldCell, newCell) => {\n const oldSql = isSqlCell(oldCell) ? oldCell.data.sql : undefined;\n const newSql = isSqlCell(newCell) ? newCell.data.sql : undefined;\n return oldSql !== newSql;\n },\n invalidateStatus: (currentStatus): CellStatus => ({\n type: 'sql',\n status: 'idle',\n referencedTables:\n (currentStatus as SqlCellStatus).referencedTables || [],\n }),\n getRelationsToDrop: (status): string[] => {\n const sqlStatus = status as SqlCellStatus;\n return sqlStatus.resultView ? [sqlStatus.resultView] : [];\n },\n recordError: (currentStatus, message): CellStatus => ({\n ...currentStatus,\n status: 'error',\n lastError: message,\n }),\n getResultRelation: (status): string | undefined => {\n const sqlStatus = status as SqlCellStatus;\n return sqlStatus.resultView;\n },\n runCell: async ({id, opts, get, set}) => {\n const ownerArtifactId = findArtifactIdForCell(get(), id);\n if (ownerArtifactId) {\n await get().cells.updateEdgesFromSql(ownerArtifactId, id);\n }\n\n const controller = new AbortController();\n set((s) =>\n produce(s, (draft) => {\n draft.cells.activeAbortControllers[id] = controller;\n }),\n );\n\n await executeSqlCell(id, get, set, {\n schemaName: opts?.schemaName || 'main',\n cascade: opts?.cascade,\n signal: controller.signal,\n setCellResult: get().cells.setCellResult,\n });\n\n void get().db.refreshTableSchemas();\n },\n renameResult: async ({id, oldResultView, get, set}) => {\n const state = get();\n const cell = state.cells.config.data[id];\n if (!cell || cell.type !== 'sql') return;\n const status = state.cells.status[id];\n const previousRelationType =\n (status?.type === 'sql'\n ? (status as SqlCellStatus).resultRelationType\n : undefined) ?? 'view';\n\n const artifactId = findArtifactIdForCell(state, id);\n const artifact = artifactId\n ? state.cells.config.artifacts[artifactId]\n : undefined;\n const schemaName = artifact\n ? resolveArtifactSchemaName(artifact)\n : 'main';\n\n const effectiveResultName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const newTableName = state.db\n .qualifyTableName({\n table: effectiveResultName,\n schema: schemaName,\n database: state.db.currentDatabase,\n })\n .toString();\n\n if (newTableName === oldResultView) {\n return;\n }\n\n const connector = await state.db.getConnector();\n const sql = (cell.data as SqlCellData).sql;\n const scopedCellIds =\n artifact?.cellIds ?? Object.keys(state.cells.config.data);\n const scopedCells = Object.fromEntries(\n scopedCellIds\n .map((cellId) => state.cells.config.data[cellId])\n .filter(isDefined)\n .map((candidate) => [candidate.id, candidate]),\n ) as Record<string, Cell>;\n\n const inputs = Object.values(scopedCells)\n .filter((c) => isInputCell(c))\n .map((c) => ({\n varName: c.data.input.varName,\n value: c.data.input.value as string | number,\n }));\n const renderedSql = renderSqlWithInputs(sql, inputs);\n const rewrittenSql = qualifyArtifactLocalResultNames({\n sql: renderedSql,\n artifactSchema: schemaName,\n artifactCellIds: scopedCellIds,\n cells: state.cells.config.data,\n getSqlResultName: (cellId) => {\n const c = state.cells.config.data[cellId];\n if (c?.type === 'sql') {\n return getEffectiveResultName(\n c.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n }\n return undefined;\n },\n });\n\n await renameResultRelation({\n connector,\n oldRelationName: oldResultView,\n newRelationName: newTableName,\n relationType: previousRelationType,\n viewSql: rewrittenSql,\n });\n\n set((s) =>\n produce(s, (draft) => {\n const draftStatus = draft.cells.status[id];\n if (draftStatus?.type === 'sql') {\n (draftStatus as SqlCellStatus).resultName = newTableName;\n (draftStatus as SqlCellStatus).resultView = newTableName;\n (draftStatus as SqlCellStatus).resultRelationType =\n previousRelationType;\n }\n }),\n );\n\n void get().db.refreshTableSchemas();\n },\n },\n text: {\n type: 'text',\n title: 'Text / Markdown',\n createCell: ({id}): TextCell => ({\n id,\n type: 'text',\n data: {title: 'Text', text: ''},\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <TextCellContent\n id={id}\n cell={cell as TextCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async () => [],\n },\n vega: {\n type: 'vega',\n title: 'Visualization',\n createCell: ({id}): VegaCell => ({\n id,\n type: 'vega',\n data: {\n title: 'Chart',\n crossFilter: {enabled: true},\n vegaSpec: {\n data: {name: 'queryResult'},\n mark: 'bar',\n padding: 20,\n },\n },\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <VegaCellContent\n id={id}\n cell={cell as VegaCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async ({cell}) => {\n const sqlId = (cell as VegaCell).data.sqlId;\n const tableRef = (cell as VegaCell).data.tableRef;\n return {\n cellIds: sqlId ? [sqlId] : [],\n tableNames: tableRef ? [tableRef] : [],\n };\n },\n },\n input: {\n type: 'input',\n title: 'Input / Parameter',\n createCell: ({id}): InputCell => ({\n id,\n type: 'input',\n data: {\n title: 'Input',\n input: {\n kind: 'text',\n varName: `param_${id.slice(0, 4)}`,\n value: '',\n },\n },\n }),\n renderCell: ({id, cell, renderContainer}) => (\n <InputCellContent\n id={id}\n cell={cell as InputCell}\n renderContainer={renderContainer}\n />\n ),\n findDependencies: async () => [],\n },\n };\n}\n"]}
|
package/dist/execution.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAkBA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,cAAc,EAGpB,MAAM,SAAS,CAAC;AAKjB,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5D,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,cAAc,EAC9B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,KAAK,IAAI,EACjE,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AAkBA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,cAAc,EAGpB,MAAM,SAAS,CAAC;AAKjB,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5D,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,cAAc,EAC9B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,KAAK,IAAI,EACjE,OAAO,EAAE,qBAAqB,iBA4O/B"}
|
package/dist/execution.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { escapeId
|
|
1
|
+
import { escapeId } from '@sqlrooms/duckdb';
|
|
2
2
|
import { convertToValidColumnOrTableName } from '@sqlrooms/utils';
|
|
3
3
|
import { produce } from 'immer';
|
|
4
4
|
import { findArtifactIdForCell, getUnqualifiedSqlIdentifier, resolveArtifactSchemaName, } from './helpers';
|
|
@@ -107,11 +107,13 @@ export async function executeSqlCell(cellId, getState, set, options) {
|
|
|
107
107
|
if (signal?.aborted)
|
|
108
108
|
throw new Error('Query cancelled');
|
|
109
109
|
await connector.query(`CREATE SCHEMA IF NOT EXISTS ${escapeId(finalSchemaName)}`, { signal });
|
|
110
|
-
tableName =
|
|
110
|
+
tableName = db
|
|
111
|
+
.qualifyTableName({
|
|
111
112
|
table: effectiveResultName,
|
|
112
113
|
schema: finalSchemaName,
|
|
113
114
|
database: db.currentDatabase,
|
|
114
|
-
})
|
|
115
|
+
})
|
|
116
|
+
.toString();
|
|
115
117
|
// Adaptive policy:
|
|
116
118
|
// - first run: choose table when there are downstream dependents,
|
|
117
119
|
// otherwise keep a lightweight view.
|
package/dist/execution.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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","sourcesContent":["import {escapeId, makeQualifiedTableName} from '@sqlrooms/duckdb';\nimport {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {\n findArtifactIdForCell,\n getUnqualifiedSqlIdentifier,\n resolveArtifactSchemaName,\n} from './helpers';\nimport {\n findSqlDependencies,\n qualifyArtifactLocalResultNames,\n renderSqlWithInputs,\n} from './sqlHelpers';\nimport {\n chooseAdaptiveRelationType,\n createOrReplaceResultRelation,\n type ResultRelationType,\n} from './resultRelationPolicy';\nimport {\n isInputCell,\n isSqlCell,\n type CellResultData,\n type CellsRootState,\n type SqlCellData,\n type SqlCellStatus,\n} from './types';\nimport {getEffectiveResultName, isDefined} from './utils';\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nexport type ExecuteSqlCellOptions = {\n schemaName: string;\n cascade?: boolean;\n signal?: AbortSignal;\n setCellResult?: (id: string, data: CellResultData) => void;\n};\n\nexport async function executeSqlCell(\n cellId: string,\n getState: () => CellsRootState,\n set: (updater: (state: CellsRootState) => CellsRootState) => void,\n options: ExecuteSqlCellOptions,\n) {\n // Intentionally snapshot state/cell at trigger time so this run is stable.\n // Later store mutations do not alter this execution; re-read with getState()\n // explicitly if you need live data after awaits.\n const state = getState();\n const cell = state.cells.config.data[cellId];\n if (!cell || cell.type !== 'sql') return;\n const previousStatus =\n state.cells.status[cellId]?.type === 'sql'\n ? (state.cells.status[cellId] as SqlCellStatus)\n : undefined;\n\n const {schemaName, cascade = true, signal, setCellResult} = options;\n const sqlRaw = cell.data.sql || '';\n const artifactId = findArtifactIdForCell(state, cellId);\n const artifact = artifactId\n ? state.cells.config.artifacts[artifactId]\n : undefined;\n const finalSchemaName = artifact\n ? resolveArtifactSchemaName(artifact)\n : schemaName;\n const finalDatabaseName =\n state.db.config.coreMaterialization.strategy === 'attached_ephemeral'\n ? state.db.config.coreMaterialization.attachedDatabaseName\n : undefined;\n const artifactCellIds = artifact?.cellIds ?? [];\n\n // 1. Gather inputs for SQL rendering\n const cellsInScope = (\n artifactCellIds.length\n ? artifactCellIds\n : Object.keys(state.cells.config.data)\n )\n .map((id) => state.cells.config.data[id])\n .filter(isDefined);\n const inputs = cellsInScope\n .filter((c) => isInputCell(c))\n .map((c) => ({\n varName: c.data.input.varName,\n value: c.data.input.value,\n }));\n\n const renderedSql = renderSqlWithInputs(sqlRaw, inputs);\n const sql = qualifyArtifactLocalResultNames({\n sql: renderedSql,\n artifactSchema: finalSchemaName,\n artifactDatabase: finalDatabaseName,\n artifactCellIds,\n cells: state.cells.config.data,\n getSqlResultName: (id) => {\n const target = state.cells.config.data[id];\n if (!target || target.type !== 'sql') return undefined;\n return getEffectiveResultName(\n target.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n },\n });\n\n // 2. Update status to running\n set((s) =>\n produce(s, (draft) => {\n const previousStatus = draft.cells.status[cellId] as\n | SqlCellStatus\n | undefined;\n draft.cells.status[cellId] = {\n type: 'sql',\n status: 'running',\n // Keep previous result metadata so the table remains mounted while\n // a fresh query is running.\n resultName: previousStatus?.resultName,\n resultView: previousStatus?.resultView,\n resultRelationType: previousStatus?.resultRelationType,\n lastRunTime: previousStatus?.lastRunTime,\n referencedTables: previousStatus?.referencedTables || [],\n };\n }),\n );\n\n try {\n const db = state.db;\n const dbConnectors = state.db.connectors;\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const effectiveResultName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const selectedConnectorId = (cell.data as SqlCellData).connectorId;\n let tableName = '';\n let relationType: ResultRelationType = 'view';\n const connector = await db.getConnector();\n if (dbConnectors?.runQuery) {\n const routed = await dbConnectors.runQuery({\n connectionId: selectedConnectorId,\n sql,\n queryType: 'arrow',\n materialize: true,\n materializedName: effectiveResultName,\n materializedSchema: finalSchemaName,\n materializedDatabase: finalDatabaseName,\n signal,\n });\n if (!routed.relationName) {\n throw new Error('Query did not return a materialized relation');\n }\n tableName = routed.relationName;\n relationType = 'table';\n } else {\n const parsed = await db.sqlSelectToJson(sql);\n if (parsed.error) {\n throw new Error(parsed.error_message || 'Not a valid SELECT statement');\n }\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${escapeId(finalSchemaName)}`,\n {signal},\n );\n\n tableName = makeQualifiedTableName({\n table: effectiveResultName,\n schema: finalSchemaName,\n database: db.currentDatabase,\n }).toString();\n // Adaptive policy:\n // - first run: choose table when there are downstream dependents,\n // otherwise keep a lightweight view.\n // - subsequent runs: preserve the previously selected relation type.\n const hasDownstream =\n Boolean(artifactId) &&\n getState().cells.getDownstream(artifactId as string, cellId).length > 0;\n relationType = chooseAdaptiveRelationType({\n previousRelationType: previousStatus?.resultRelationType,\n hasDownstream,\n });\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n await createOrReplaceResultRelation({\n connector,\n relationName: tableName,\n relationType,\n sql,\n signal,\n });\n }\n\n // Find dependencies for referenced tables\n const referenced = findSqlDependencies({\n targetCell: cell,\n cells: Object.fromEntries(cellsInScope.map((c) => [c.id, c])),\n getSqlText: (c) => (isSqlCell(c) ? c.data.sql : undefined),\n getInputVarName: (c) =>\n isInputCell(c) ? c.data.input.varName : undefined,\n getSqlResultName: (id) => {\n const s = getState().cells.status[id];\n if (s?.type !== 'sql') return undefined;\n const sqlStatus = s as SqlCellStatus;\n const fromStatus = getUnqualifiedSqlIdentifier(sqlStatus.resultName);\n if (fromStatus) return fromStatus;\n\n const currentCell = getState().cells.config.data[id];\n if (currentCell?.type !== 'sql') return undefined;\n return getEffectiveResultName(\n currentCell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n },\n });\n\n // 3. Update status to success\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[cellId] = {\n type: 'sql',\n status: 'success',\n resultName: tableName,\n resultView: tableName,\n resultRelationType: relationType,\n referencedTables: referenced,\n lastRunTime: Date.now(),\n };\n }),\n );\n\n // 4. Fetch count + first page and store result\n if (setCellResult) {\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const countResult = await connector.query(\n `SELECT COUNT(*)::int AS count FROM ${tableName}`,\n {signal},\n );\n const totalRows = countResult.toArray()[0]?.count ?? 0;\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const pageResult = await connector.query(\n `SELECT * FROM ${tableName} LIMIT ${DEFAULT_PAGE_SIZE}`,\n {signal},\n );\n\n setCellResult(cellId, {arrowTable: pageResult, totalRows});\n }\n\n // 5. Cascade if needed\n if (cascade) {\n const ownerArtifactId = findArtifactIdForCell(getState(), cellId);\n if (ownerArtifactId) {\n await state.cells.runDownstreamCascade(ownerArtifactId, cellId);\n }\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n set((s) =>\n produce(s, (draft) => {\n const status = draft.cells.status[cellId];\n if (status?.type === 'sql') {\n status.status = signal?.aborted ? 'cancel' : 'error';\n status.lastError = message;\n }\n }),\n );\n } finally {\n set((s) =>\n produce(s, (draft) => {\n delete draft.cells.activeAbortControllers[cellId];\n }),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"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","sourcesContent":["import {escapeId} from '@sqlrooms/duckdb';\nimport {convertToValidColumnOrTableName} from '@sqlrooms/utils';\nimport {produce} from 'immer';\nimport {\n findArtifactIdForCell,\n getUnqualifiedSqlIdentifier,\n resolveArtifactSchemaName,\n} from './helpers';\nimport {\n findSqlDependencies,\n qualifyArtifactLocalResultNames,\n renderSqlWithInputs,\n} from './sqlHelpers';\nimport {\n chooseAdaptiveRelationType,\n createOrReplaceResultRelation,\n type ResultRelationType,\n} from './resultRelationPolicy';\nimport {\n isInputCell,\n isSqlCell,\n type CellResultData,\n type CellsRootState,\n type SqlCellData,\n type SqlCellStatus,\n} from './types';\nimport {getEffectiveResultName, isDefined} from './utils';\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nexport type ExecuteSqlCellOptions = {\n schemaName: string;\n cascade?: boolean;\n signal?: AbortSignal;\n setCellResult?: (id: string, data: CellResultData) => void;\n};\n\nexport async function executeSqlCell(\n cellId: string,\n getState: () => CellsRootState,\n set: (updater: (state: CellsRootState) => CellsRootState) => void,\n options: ExecuteSqlCellOptions,\n) {\n // Intentionally snapshot state/cell at trigger time so this run is stable.\n // Later store mutations do not alter this execution; re-read with getState()\n // explicitly if you need live data after awaits.\n const state = getState();\n const cell = state.cells.config.data[cellId];\n if (!cell || cell.type !== 'sql') return;\n const previousStatus =\n state.cells.status[cellId]?.type === 'sql'\n ? (state.cells.status[cellId] as SqlCellStatus)\n : undefined;\n\n const {schemaName, cascade = true, signal, setCellResult} = options;\n const sqlRaw = cell.data.sql || '';\n const artifactId = findArtifactIdForCell(state, cellId);\n const artifact = artifactId\n ? state.cells.config.artifacts[artifactId]\n : undefined;\n const finalSchemaName = artifact\n ? resolveArtifactSchemaName(artifact)\n : schemaName;\n const finalDatabaseName =\n state.db.config.coreMaterialization.strategy === 'attached_ephemeral'\n ? state.db.config.coreMaterialization.attachedDatabaseName\n : undefined;\n const artifactCellIds = artifact?.cellIds ?? [];\n\n // 1. Gather inputs for SQL rendering\n const cellsInScope = (\n artifactCellIds.length\n ? artifactCellIds\n : Object.keys(state.cells.config.data)\n )\n .map((id) => state.cells.config.data[id])\n .filter(isDefined);\n const inputs = cellsInScope\n .filter((c) => isInputCell(c))\n .map((c) => ({\n varName: c.data.input.varName,\n value: c.data.input.value,\n }));\n\n const renderedSql = renderSqlWithInputs(sqlRaw, inputs);\n const sql = qualifyArtifactLocalResultNames({\n sql: renderedSql,\n artifactSchema: finalSchemaName,\n artifactDatabase: finalDatabaseName,\n artifactCellIds,\n cells: state.cells.config.data,\n getSqlResultName: (id) => {\n const target = state.cells.config.data[id];\n if (!target || target.type !== 'sql') return undefined;\n return getEffectiveResultName(\n target.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n },\n });\n\n // 2. Update status to running\n set((s) =>\n produce(s, (draft) => {\n const previousStatus = draft.cells.status[cellId] as\n | SqlCellStatus\n | undefined;\n draft.cells.status[cellId] = {\n type: 'sql',\n status: 'running',\n // Keep previous result metadata so the table remains mounted while\n // a fresh query is running.\n resultName: previousStatus?.resultName,\n resultView: previousStatus?.resultView,\n resultRelationType: previousStatus?.resultRelationType,\n lastRunTime: previousStatus?.lastRunTime,\n referencedTables: previousStatus?.referencedTables || [],\n };\n }),\n );\n\n try {\n const db = state.db;\n const dbConnectors = state.db.connectors;\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const effectiveResultName = getEffectiveResultName(\n cell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n const selectedConnectorId = (cell.data as SqlCellData).connectorId;\n let tableName = '';\n let relationType: ResultRelationType = 'view';\n const connector = await db.getConnector();\n if (dbConnectors?.runQuery) {\n const routed = await dbConnectors.runQuery({\n connectionId: selectedConnectorId,\n sql,\n queryType: 'arrow',\n materialize: true,\n materializedName: effectiveResultName,\n materializedSchema: finalSchemaName,\n materializedDatabase: finalDatabaseName,\n signal,\n });\n if (!routed.relationName) {\n throw new Error('Query did not return a materialized relation');\n }\n tableName = routed.relationName;\n relationType = 'table';\n } else {\n const parsed = await db.sqlSelectToJson(sql);\n if (parsed.error) {\n throw new Error(parsed.error_message || 'Not a valid SELECT statement');\n }\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n await connector.query(\n `CREATE SCHEMA IF NOT EXISTS ${escapeId(finalSchemaName)}`,\n {signal},\n );\n\n tableName = db\n .qualifyTableName({\n table: effectiveResultName,\n schema: finalSchemaName,\n database: db.currentDatabase,\n })\n .toString();\n // Adaptive policy:\n // - first run: choose table when there are downstream dependents,\n // otherwise keep a lightweight view.\n // - subsequent runs: preserve the previously selected relation type.\n const hasDownstream =\n Boolean(artifactId) &&\n getState().cells.getDownstream(artifactId as string, cellId).length > 0;\n relationType = chooseAdaptiveRelationType({\n previousRelationType: previousStatus?.resultRelationType,\n hasDownstream,\n });\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n await createOrReplaceResultRelation({\n connector,\n relationName: tableName,\n relationType,\n sql,\n signal,\n });\n }\n\n // Find dependencies for referenced tables\n const referenced = findSqlDependencies({\n targetCell: cell,\n cells: Object.fromEntries(cellsInScope.map((c) => [c.id, c])),\n getSqlText: (c) => (isSqlCell(c) ? c.data.sql : undefined),\n getInputVarName: (c) =>\n isInputCell(c) ? c.data.input.varName : undefined,\n getSqlResultName: (id) => {\n const s = getState().cells.status[id];\n if (s?.type !== 'sql') return undefined;\n const sqlStatus = s as SqlCellStatus;\n const fromStatus = getUnqualifiedSqlIdentifier(sqlStatus.resultName);\n if (fromStatus) return fromStatus;\n\n const currentCell = getState().cells.config.data[id];\n if (currentCell?.type !== 'sql') return undefined;\n return getEffectiveResultName(\n currentCell.data as SqlCellData,\n convertToValidColumnOrTableName,\n );\n },\n });\n\n // 3. Update status to success\n set((s) =>\n produce(s, (draft) => {\n draft.cells.status[cellId] = {\n type: 'sql',\n status: 'success',\n resultName: tableName,\n resultView: tableName,\n resultRelationType: relationType,\n referencedTables: referenced,\n lastRunTime: Date.now(),\n };\n }),\n );\n\n // 4. Fetch count + first page and store result\n if (setCellResult) {\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const countResult = await connector.query(\n `SELECT COUNT(*)::int AS count FROM ${tableName}`,\n {signal},\n );\n const totalRows = countResult.toArray()[0]?.count ?? 0;\n\n if (signal?.aborted) throw new Error('Query cancelled');\n\n const pageResult = await connector.query(\n `SELECT * FROM ${tableName} LIMIT ${DEFAULT_PAGE_SIZE}`,\n {signal},\n );\n\n setCellResult(cellId, {arrowTable: pageResult, totalRows});\n }\n\n // 5. Cascade if needed\n if (cascade) {\n const ownerArtifactId = findArtifactIdForCell(getState(), cellId);\n if (ownerArtifactId) {\n await state.cells.runDownstreamCascade(ownerArtifactId, cellId);\n }\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n set((s) =>\n produce(s, (draft) => {\n const status = draft.cells.status[cellId];\n if (status?.type === 'sql') {\n status.status = signal?.aborted ? 'cancel' : 'error';\n status.lastError = message;\n }\n }),\n );\n } finally {\n set((s) =>\n produce(s, (draft) => {\n delete draft.cells.activeAbortControllers[cellId];\n }),\n );\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/cells",
|
|
3
|
-
"version": "0.29.0-rc.
|
|
3
|
+
"version": "0.29.0-rc.9",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/sqlrooms/sqlrooms.git"
|
|
@@ -26,14 +26,14 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
29
|
-
"@sqlrooms/data-table": "0.29.0-rc.
|
|
30
|
-
"@sqlrooms/db": "0.29.0-rc.
|
|
31
|
-
"@sqlrooms/duckdb": "0.29.0-rc.
|
|
32
|
-
"@sqlrooms/room-store": "0.29.0-rc.
|
|
33
|
-
"@sqlrooms/sql-editor": "0.29.0-rc.
|
|
34
|
-
"@sqlrooms/ui": "0.29.0-rc.
|
|
35
|
-
"@sqlrooms/utils": "0.29.0-rc.
|
|
36
|
-
"@sqlrooms/vega": "0.29.0-rc.
|
|
29
|
+
"@sqlrooms/data-table": "0.29.0-rc.9",
|
|
30
|
+
"@sqlrooms/db": "0.29.0-rc.9",
|
|
31
|
+
"@sqlrooms/duckdb": "0.29.0-rc.9",
|
|
32
|
+
"@sqlrooms/room-store": "0.29.0-rc.9",
|
|
33
|
+
"@sqlrooms/sql-editor": "0.29.0-rc.9",
|
|
34
|
+
"@sqlrooms/ui": "0.29.0-rc.9",
|
|
35
|
+
"@sqlrooms/utils": "0.29.0-rc.9",
|
|
36
|
+
"@sqlrooms/vega": "0.29.0-rc.9",
|
|
37
37
|
"@tanstack/react-table": "^8.21.3",
|
|
38
38
|
"apache-arrow": "17.0.0",
|
|
39
39
|
"immer": "^11.0.1",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"react": "^18 || ^19",
|
|
53
53
|
"react-dom": "^18 || ^19"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "e9e4ed45ebb0ceb3e1e647674a7039b8d9325583"
|
|
56
56
|
}
|